Skip to content

refactor: consolidate tooling, pipeline blueprint, and asset alignment#1

Open
jdsika wants to merge 36 commits intomainfrom
feature/consolidate-tooling
Open

refactor: consolidate tooling, pipeline blueprint, and asset alignment#1
jdsika wants to merge 36 commits intomainfrom
feature/consolidate-tooling

Conversation

@jdsika
Copy link

@jdsika jdsika commented Mar 9, 2026

Summary

Full consolidation of the hd-map-asset-example repository: tooling, pipeline, generated asset structure, and submodule alignment. The sl-5-8-asset-tools pipeline has been overhauled with OMB-backed validation, structured logging, CID-named archives, Gaia-X metadata enrichment, and an opt-in deterministic mode.

Root Repository Changes

Build System & Tooling

  • Add Makefile as central command center (setup, generate, validate, clean, help)
  • Add pre-commit hooks with SHACL/JSON-LD validation (replaces black/isort/flake8)
  • Remove orphan .flake8 and unused pyproject.toml
  • Add .gitattributes enforcing LF line endings + LFS tracking rules
  • Align make help with debug logging and deterministic mode hints

Asset Structure (EVES-003)

  • Remove hand-crafted asset/ directory (replaced by pipeline-generated output)
  • Add generated/input/ with input_manifest.json (JSON-LD), LFS-tracked simulation data, media, docs, LICENSE
  • Pipeline output goes to generated/output/ (gitignored)

Submodules

  • Consolidate into submodules/ (sl-5-8-asset-tools, EVES)
  • Remove stale ontology-management-base root pointer (nested inside sl-5-8)
  • EVES submodule switched to HTTPS

CI/CD

  • Rewrite release.yml: Python/Make-based pipeline replaces Node.js/zip
  • Uses make setup && make generate && make validate, uploads CID-named .zip via softprops/action-gh-release@v2

Documentation

  • Rewrite README.md with setup/usage/structure docs
  • Add .github/copilot-instructions.md

sl-5-8-asset-tools Submodule Changes (30 files, +1515 -285)

Validation Overhaul

  • Replace legacy RDF/SHACL validation with OMB-backed offline loading (utils/rdf.py)
  • Simplify jsonLD_validator to a thin OMB wrapper (from ~200 lines to ~50)
  • Fix recursive SHACL dependency loading in jsonLD_creator (BFS over imports, filtered to ENVITED-X/Gaia-X namespaces)
  • Add split JSON syntax validation stages: extractor output + structure output checked separately
  • Fix make validate to auto-discover and validate generated examples (was running OMB test catalog)

Pipeline Reporting & Logging

  • New utils/pipeline_reporting.py (~530 lines): stage-oriented output with [01/15] START/OK/FAIL formatting, tool-specific summarizers for OMB validation, QC results, GeoJSON conversion
  • New utils/log_config.py: SL58_LOG_MODE=debug for verbose subprocess diagnostics (command lines, stdout/stderr, tracebacks)
  • Refactored utils/subprocess.py: CommandResult/CommandError types, renamed log_output parameter
  • ASCII-only output throughout

CID-Named Archives

  • New utils/cid.py: compute CIDv1 (base32, raw, SHA-256) from file content
  • Archive output renamed from asset.zip to <CID>.zip in the example directory (one level up from the asset folder)
  • .gitignore updated with examples/**/*.zip

Gaia-X Metadata Enrichment

  • New meta_data_extractor/gaiax.py: extracts license, copyright owner, and resource policy from sibling LICENSE files
  • Wired into both XODR and XOSC extractors
  • Generates real manifest UUID (replaces placeholder did:web:registry.gaia-x.eu:Manifest:uuid)

Deterministic Mode (Opt-in)

  • SL58_DETERMINISTIC=1 enables reproducible output: same input → same UUIDs, timestamps, ZIP bytes, CID
  • utils/ids.py: UUID5 seeded by SL58_INPUT_HASH (content hash of all input files) with counter for intra-process uniqueness
  • structure_creator/main.py: SL58_SOURCE_MTIME for generated file timestamps
  • create_zip(): sorted file iteration + fixed ZIP entry timestamps
  • Default mode: random UUID4 + real timestamps (each generation is a unique asset instance)

QC Checker Fixes

Other Fixes

  • Fix GeoJSON output formatting (indent=2, was compact one-liners up to 5MB)
  • Fix platform compatibility: os.sep in display paths, quoted $(MAKE) for Windows
  • Fix non-ASCII characters in log output
  • Harmonize Makefile: remove run alias, align help text
  • Add .gitattributes enforcing LF line endings
  • Update OMB submodule pointer (3 upstream fixes)

Diff Stats (vs main)

Root repository

 .gitattributes              |    7 +
 .github/copilot-instructions.md |   56 +
 .github/workflows/release.yml  |   48 +-
 .gitignore                  |    3 +
 .gitmodules                 |   10 +-
 .pre-commit-config.yaml     |   46 +-
 Makefile                    |  191 +
 README.md                   |  404 +-
 46 files changed, 1248 insertions(+), 11745 deletions(-)

sl-5-8-asset-tools submodule (expanded)

 .gitattributes                   |   2 +
 .gitignore                       |   3 +-
 Makefile                         | 116 +++--
 asset_extraction/main.py        | 165 ++++++-
 configs/process.json             |  11 +-
 jsonLD_creator/main.py           |  65 ++-
 jsonLD_validator/main.py         |  96 ++--
 meta_data_extractor/gaiax.py     | 127 +++++
 qualitychecker_caller/main.py    | 148 ++++--
 structure_creator/main.py        |  43 +-
 utils/cid.py                     |  15 +
 utils/ids.py                     |  20 +-
 utils/log_config.py              | 118 ++++-
 utils/pipeline_reporting.py      | 529 +++++++++++++++++++++
 utils/rdf.py                     | 124 ++++-
 utils/subprocess.py              |  86 +++-
 30 files changed, 1515 insertions(+), 285 deletions(-)

Commits

  • 8d38c32 feat: overhaul asset pipeline — OMB validation, structured logging, deterministic mode
  • 542c469 chore: update sl-5-8-asset-tools submodule pointer
  • 74f6c09 chore: remove orphan .flake8 (no Python files in root repo)
  • f6065b3 fix: EVES submodule to HTTPS, validate all generated assets
  • 0692fbd refactor: simplify Makefile — remove duplicated logic, drop make asset zip
  • 4c74dda refactor: cascade make setup to submodule Makefile
  • 349d85a chore: remove dead code and update stale references
  • a9f143e fix: update filenames to match pipeline output renames
  • 89cb427 chore: update sl-5-8-asset-tools submodule pointer
  • 0931390 docs: fix stale references in copilot-instructions and remove pyproject.toml
  • 09dad83 chore: update sl-5-8-asset-tools submodule pointer
  • 4e3fa1b chore: update submodule pointers
  • d09e413 chore: update sl-5-8-asset-tools submodule, skip validate when no asset
  • 77b3f39 chore: update sl-5-8-asset-tools submodule pointer
  • 808b370 chore: remove hand-crafted asset/, update submodule pointers
  • fe0e4d4 docs: clarify internet only needed for geocoding, not SHACL/ontologies
  • c0a0273 feat: add opendriveconverter as submodule for Python re-implementation
  • 9974692 chore: update sl-5-8-asset-tools submodule (filename + bjson fixes)
  • 5247dc1 feat: track generated/input blueprint with LFS, add 3d_preview assets
  • 0952e3f feat: input_manifest.json pipeline, EVES submodule, cross-platform overhaul
  • 3ad2d8b refactor: consolidate submodules and Makefile as central command center

Known Follow-ups

  • OMB Makefile quoting fixes need a separate upstream PR to ASCS-eV/ontology-management-base
  • QC fork pin should be updated to @main once upstream PR asam-ev/qc-opendrive#139 is merged

@jdsika jdsika force-pushed the feature/consolidate-tooling branch 2 times, most recently from 2e95d43 to 54aee8f Compare March 9, 2026 16:36
- Remove root ontology-management-base submodule (now via recursive init through sl-5-8-asset-tools)
- Add Makefile as central command center (OMB pattern)
  - Space-separated subcommands: make asset zip
  - OS detection for cross-platform support (Windows + Unix)
  - Path aliases hiding deep submodule paths
- Update .pre-commit-config.yaml to use make validate hook
- Update release workflow to use make targets exclusively
- Add .github/copilot-instructions.md
- Update README.md with new setup/validation instructions

Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
@jdsika jdsika force-pushed the feature/consolidate-tooling branch from 54aee8f to 3ad2d8b Compare March 9, 2026 17:11
jdsika and others added 2 commits March 10, 2026 14:22
…erhaul

Major changes:
- Replace uploadedFiles.json with input_manifest.json (envited-x JSON-LD)
- Add make generate: end-to-end asset creation pipeline with staging,
  validation, QC checks, and zip output to generated/
- Add EVES submodule pinned to asset-preparation-input-manifest branch
- Modernize release.yml: softprops/action-gh-release@v2
- Cross-platform Makefile: Python-based zip/clean, OS detection
- Update sl-5-8-asset-tools to include input_manifest support,
  venv PATH fix for QC executables, and [qc-deps] extras
- Add generated/.gitkeep (contents gitignored, folder tracked)
- Complete README rewrite with pipeline documentation

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
- Track generated/input/ as the canonical pipeline blueprint (LFS for
  .png, .pdf, .xodr binaries)
- Add 9 3d_preview JSON files to input manifest for pass-through
- Update .gitignore: only ignore generated/output/, allow input/
- Update Makefile: generate reuses existing blueprint, generate clean
  preserves input/ directory
- Remove obsolete generated/.gitkeep

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
@jdsika jdsika changed the title refactor: consolidate submodules and Makefile feat: consolidate tooling, pipeline blueprint, asset alignment fixes Mar 10, 2026
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
jdsika and others added 2 commits March 10, 2026 20:25
Add virtualcitySYSTEMS/opendriveconverter (Java/Gradle) as a submodule
under submodules/opendriveconverter to serve as reference for the
planned Python re-implementation of the OpenDRIVE to GeoJSON converter.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
Ontology schemas and SHACL shapes are now bundled locally via the
ontology-management-base submodule. Only Nominatim reverse geocoding
still requires an internet connection.

Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
jdsika added 14 commits March 10, 2026 22:41
The asset/ folder is replaced by the pipeline-generated output in
generated/output/. Submodule pointers updated to latest feature
branch commits. Removed opendriveconverter submodule.

Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
- Update submodule pointer to ruff migration commit
- Make validate gracefully skip when asset/ doesn't exist yet

Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
sl-5-8-asset-tools: conditional OMB install for CI
EVES: table alignment fix for eves-007
Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
Includes wizard_caller rewrite, SPDX license fix, and SD Creation
Wizard submodules.

Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
…ct.toml

- copilot-instructions.md: replace deleted asset/ folder references with
  generated/input/ and generated/output/ pipeline workflow
- pyproject.toml: remove (only contained stale black/isort config, no
  Python files in root repo)

Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
- manifest_reference.json → manifest.json in Makefile validate + zip targets
- hdmap_instance.json → hdmap.json in Makefile validate + zip targets
- Update copilot-instructions.md to match new naming

Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
- Remove unused ASSET_DIR variable from Makefile
- Remove dead staging logic from make generate (require pre-populated input/)
- Update README.md: manifest_reference.json -> manifest.json,
  hdmap_instance.json -> hdmap.json throughout
- Update submodule pointer to sl-5-8-asset-tools

Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
Instead of duplicating pip install commands for sl-5-8-asset-tools and
ontology-management-base, delegate to the submodule's own make setup/install
targets. Pass VENV and PYTHON as absolute paths so the submodule uses the
root venv. This removes 3 duplicated install blocks and ensures the
submodule's Makefile is the single source of truth for its own deps.

Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
…t zip

- Remove make asset zip (pipeline already creates asset.zip)
- Deduplicate generate validate → delegates to make validate
- Simplify validate: use file-redirect instead of subprocess.check_call
- Simplify clean: use native shell commands instead of inline Python
- Update release.yml to use make generate + pipeline-generated zip
- Update copilot-instructions.md for new workflow

Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
- Switch EVES submodule URL from SSH to HTTPS for CI compatibility
- Validate target now loops over all asset directories in generated/output/
  instead of only picking dirs[0]

Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
Includes pipeline fixes, pathlib migration, examples modernization,
and external asset reference support.

Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
@jdsika jdsika changed the title feat: consolidate tooling, pipeline blueprint, asset alignment fixes refactor: consolidate tooling, pipeline blueprint, and asset alignment Mar 11, 2026
…eterministic mode

- Update sl-5-8-asset-tools submodule (OMB validation, pipeline reporting,
  CID archives, Gaia-X enrichment, deterministic mode, QC fork pin)
- Add .gitattributes enforcing LF line endings
- Harmonize Makefile with sl-5-8: aligned help, debug/deterministic hints
- Update README for new pipeline stages and CID-named output

Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
@jdsika jdsika force-pushed the feature/consolidate-tooling branch from 8d38c32 to 0bf4a52 Compare March 13, 2026 15:39
Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
@jdsika jdsika force-pushed the feature/consolidate-tooling branch from 0bf4a52 to eb4da46 Compare March 13, 2026 15:52
jdsika added 3 commits March 13, 2026 17:18
Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
- Replace hyphenated targets (wizard-stop, clean-all) with subcommand
  groups (wizard stop, clean all) for consistent CLI
- Add make wizard and make wizard stop to README and help text
- Remove auto-generated 3d_preview files from generated/input/ and
  input_manifest.json (pipeline generates these from the .xodr)
- Update submodule to pick up wizard pre-flight checks and proxy docs

Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
- Simplify root generate target to delegate to sl-5-8-asset-tools via
  INPUT_DIR/OUTPUT_DIR variables (removes duplicated pipeline invocation).
- Add Prerequisites section with install instructions for Windows
  (PowerShell, Git Bash), macOS, and Linux.
- Add direct Python invocation examples for Make-free usage (PowerShell).
- Add debug logging section with Bash and PowerShell syntax.
- Add Podman/Docker Desktop troubleshooting table.
- Update Option B (manual pipeline) to show paths work from any CWD.
- Add custom INPUT_DIR usage to make help output.
- Note make clean all as fix for stale QC checker packages.

Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
@jdsika jdsika force-pushed the feature/consolidate-tooling branch from 7529c32 to d91143b Compare March 16, 2026 08:51
jdsika added 11 commits March 16, 2026 10:02
- Remove phantom 'make setup qc' step (QC is always installed by make setup)
- Fix FAQ: uploadedFiles.json is not auto-created, clarify it is legacy format
- Rename 'Debug logging' FAQ heading to question format for consistency
- Fix double sl-5-8 setup call during initial venv creation
- Update Available Make Targets to match actual Makefile behavior
- Update submodule pointer with sl-5-8 doc fixes

Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
The generate validate subcommand was a thin alias for make validate,
creating two documented ways to do the same thing. Remove the alias
and the ifneq guard it required in the validate target.

One command, one way: make validate.

Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
- Add EVES submodule description to copilot-instructions.md and
  README.md Repository Structure section — it is the spec defining
  Simulation Asset structure for the ENVITED-X Dataspace
- Fix Known Limitations: QC tools are auto-installed by make setup,
  not a separate step
- Update submodule pointer (dead code cleanup)

Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
- Add SHELL := sh on Windows_NT (matches submodule, ensures sh is
  used even when make is invoked from cmd.exe or PowerShell)
- Add install to catch-all filter (prevents 'No rule' error noise)
- Remove redundant make -C clean before make -C clean all
- Add @: fallback in clean guard (suppresses 'nothing to be done'
  when make generate clean is run)
- Document VENV relative-path assumption
- Fix stale comment referencing removed generate validate alias

Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
Picks up corporate mirror support for wizard build (MAVEN_SETTINGS,
NPM_CONFIG env vars) and Angular font inlining crash fix.

Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
Add Input→Output diagram, two-workflow comparison table (automated vs
wizard-assisted), and Metadata & Gaia-X section explaining which GX
properties are auto-generated and the ENVITED-X wrapper architecture.

Update copilot-instructions.md with pipeline stages, Gaia-X integration
summary, and the two creation paths.

Update FAQ to reference the wizard workflow section instead of the
deprecated GaiaX4PLC-AAD provider-tools link.

Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
Picks up CI matrix expansion (ubuntu + windows + macOS).

Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
- Add .markdownlint.yaml config for consistent Markdown style
- Add lint-md / format-md Make targets
- Add lint-md pre-commit hook
- Fix lint issues in README.md (code block languages, line breaks)
- Refine README.md intro for professional tone
- Update sl-5-8-asset-tools submodule (markdownlint)

Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
Signed-off-by: jdsika <carlo.van-driesten@bmw.de>
@jdsika jdsika self-assigned this Mar 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant