Skip to content

ci(vcpkg): add ecosystem end-to-end integration test across 8 ports#608

Merged
kcenon merged 3 commits into
mainfrom
ci/issue-604-verification-ecosystem-end-to-end-vcpkg-install-in
Apr 7, 2026
Merged

ci(vcpkg): add ecosystem end-to-end integration test across 8 ports#608
kcenon merged 3 commits into
mainfrom
ci/issue-604-verification-ecosystem-end-to-end-vcpkg-install-in

Conversation

@kcenon

@kcenon kcenon commented Apr 7, 2026

Copy link
Copy Markdown
Owner

Summary

Add a dedicated CI workflow (ecosystem-vcpkg-integration.yml) and minimal consumer projects that validate the full kcenon ecosystem dependency graph — from common_system (Layer 0) through pacs_system (Layer 7) — via vcpkg registry consumption.

  • New workflow: 8 layer-ordered jobs with needs: chains that model the actual dependency DAG
  • Consumer projects: 8 minimal C++ consumers under tests/ecosystem-consumer/, one per port
  • Shared config: Single vcpkg-configuration.json pointing to kcenon/vcpkg-registry
  • Error reporting: ::error:: annotations and failure artifact upload for fast debugging

Dependency Graph (Job DAG)

Layer 0: common_system
  ├─ Layer 1: thread_system
  │    ├─ Layer 2: logger_system ──┐
  │    └─ Layer 4: network_system ─┤
  ├─ Layer 3: container_system ────┤
  └─ Layer 5: database_system ─────┤
                                   ├─ Layer 6: monitoring_system
                                   └─ Layer 7: pacs_system

Layers 2/3/4/5 run concurrently where dependencies allow. Total sequential depth is ~4 layers, not 8.

Design Decisions

Registry consumption vs overlay-ports: The issue (#604) references overlay-ports, but this implementation uses vcpkg manifest mode with vcpkg-configuration.json pointing to kcenon/vcpkg-registry. This is intentional — the registry path is what real downstream consumers use, so it validates the actual consumption experience including version resolution and baseline constraints. All 8 ports are registered in the ecosystem's vcpkg-registry.

fail-fast strategy: fail-fast: false within each job's OS matrix (so both ubuntu and macOS complete independently), with layer-level gating via needs: chains (if Layer 0 fails on both runners, Layer 1+ won't start).

Review Summary

Two review rounds completed. All findings resolved:

Finding Severity Resolution
Registry vs overlay-ports deviation Critical Documented above; registry approach preferred
fail-fast: true cancelled sibling OS runners Critical Changed to fail-fast: false in all 8 jobs
No ::error:: annotations on failure Major Added to configure/build/run steps in all jobs
No artifact upload on failure Major Added if: failure() upload step per job
Registry baseline duplicated across 8 files Major Consolidated to single shared vcpkg-configuration.json
Unnecessary find_package(OpenSSL QUIET) Minor Removed from network-system consumer

Deferred Items

  • Consumer projects currently validate find_package + link + run, but only common-system tests actual library functionality (creates a Result<int>). Other consumers include a header and link but don't instantiate types. Can be strengthened in a follow-up.
  • Layer numbering is 0-indexed in implementation vs 1-8 in the issue text. Job names are descriptive regardless.

Files Changed

  • .github/workflows/ecosystem-vcpkg-integration.yml — 8-job workflow (609 lines)
  • tests/ecosystem-consumer/vcpkg-configuration.json — shared registry config
  • tests/ecosystem-consumer/<port>/CMakeLists.txt — per-port CMake (8 files)
  • tests/ecosystem-consumer/<port>/main.cpp — per-port consumer (8 files)
  • tests/ecosystem-consumer/<port>/vcpkg.json — per-port manifest (8 files)

Test plan

  • Workflow YAML passes GitHub Actions syntax validation
  • workflow_dispatch trigger allows manual test run
  • Layer 0 (common_system) installs and consumer builds on ubuntu-24.04 and macos-14
  • Layer dependency chain gates correctly (Layer 1+ waits for Layer 0)
  • Failure in any layer produces ::error:: annotation in GitHub Actions UI
  • Failure artifacts are uploaded with vcpkg install logs
  • Nightly schedule triggers at 03:00 UTC on main branch

Closes #604

kcenon added 3 commits April 7, 2026 18:15
Add badge and description for the new end-to-end ecosystem vcpkg
integration workflow that validates all 8 ports in dependency order.
Update CHANGELOG with entry for #604.
Add workflow and minimal consumer projects that validate the full
kcenon ecosystem dependency graph via vcpkg registry consumption.

- 8 layer-ordered jobs with needs: chains modeling the DAG
- Per-layer consumer projects under tests/ecosystem-consumer/
- Shared vcpkg-configuration.json (single registry baseline)
- fail-fast: false per OS matrix, layer-level gating via needs:
- Error annotations and failure artifact upload for debugging
- Triggers: pull_request (path-filtered), nightly schedule, manual
The exported CMake target is kcenon::common_system, not
common_system::common_system. Fixes Layer 0 configure failure
in ecosystem-vcpkg-integration workflow.
@kcenon kcenon merged commit 0c64fbe into main Apr 7, 2026
35 of 41 checks passed
@kcenon kcenon deleted the ci/issue-604-verification-ecosystem-end-to-end-vcpkg-install-in branch April 7, 2026 09:31
kcenon added a commit that referenced this pull request Apr 13, 2026
…608)

* docs(ci): document ecosystem vcpkg integration test workflow

Add badge and description for the new end-to-end ecosystem vcpkg
integration workflow that validates all 8 ports in dependency order.
Update CHANGELOG with entry for #604.

* ci(vcpkg): add ecosystem end-to-end integration test for 8 ports

Add workflow and minimal consumer projects that validate the full
kcenon ecosystem dependency graph via vcpkg registry consumption.

- 8 layer-ordered jobs with needs: chains modeling the DAG
- Per-layer consumer projects under tests/ecosystem-consumer/
- Shared vcpkg-configuration.json (single registry baseline)
- fail-fast: false per OS matrix, layer-level gating via needs:
- Error annotations and failure artifact upload for debugging
- Triggers: pull_request (path-filtered), nightly schedule, manual

* fix(ci): correct common_system vcpkg target name in ecosystem consumer

The exported CMake target is kcenon::common_system, not
common_system::common_system. Fixes Layer 0 configure failure
in ecosystem-vcpkg-integration workflow.
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.

[Verification][Ecosystem] End-to-end vcpkg install integration test across 8 systems

1 participant