Skip to content

fix: close workflow issue audit gaps#814

Merged
intel352 merged 4 commits into
mainfrom
fix/issue-audit-812-809
Jun 1, 2026
Merged

fix: close workflow issue audit gaps#814
intel352 merged 4 commits into
mainfrom
fix/issue-audit-812-809

Conversation

@intel352
Copy link
Copy Markdown
Contributor

@intel352 intel352 commented Jun 1, 2026

Summary

Closes #812.
Closes #809.

  • Bring GitLab CI generation to parity with GHA/Jenkins/CircleCI for protected-resource plan guard.
  • Scope GitLab apply-job variable references from phase.Scoped, so scoped phases do not reference the plan-wide union.
  • Make wfctl validate reject step.conditional.config.routes keys that YAML parses as booleans/numbers/null, with a quote-it hint.

Verification

  • GOWORK=off go test ./cigen -count=1
  • GOWORK=off go test ./cmd/wfctl -count=1

Regression Proof

With the production fixes reverted, leaving the tests in place:

$ GOWORK=off go test ./cigen -run 'TestRenderGitLabCI_(PlanGuardIsRealGate|ScopedPhase)' -count=1 -v
FAIL: expected a plan guard when PlanGuard is set
FAIL: prereq job must reference PREREQ_ONLY
FAIL: deploy job must reference DEPLOY_ONLY
$ GOWORK=off go test ./cmd/wfctl -run TestRunValidateRejectsConditionalRoutesWithNonStringKeys -count=1 -v
FAIL: expected validate to fail on non-string conditional route keys

With the fixes restored:

$ GOWORK=off go test ./cigen -run 'TestRenderGitLabCI_(PlanGuardIsRealGate|ScopedPhase)' -count=1 -v
PASS
$ GOWORK=off go test ./cmd/wfctl -run TestRunValidateRejectsConditionalRoutesWithNonStringKeys -count=1 -v
PASS

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR closes workflow issue audit gaps by aligning GitLab CI generation behavior with other CI renderers and by making wfctl validate catch a common YAML parsing pitfall for step.conditional routes before runtime.

Changes:

  • Add a GitLab apply-job plan guard that fails the job on destructive (replace/destroy) plans when PlanGuard is enabled, and add per-phase secret-variable scoping for phase.Scoped.
  • Add a wfctl validate pre-check that rejects step.conditional.config.routes keys parsed by YAML as non-strings (e.g., true, 1, null) and suggests quoting.
  • Add regression tests covering GitLab plan guard + scoped secrets behavior and the new wfctl validate rejection case.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

File Description
cmd/wfctl/validate.go Adds a YAML-node scan to reject non-string step.conditional.routes keys with a quote-it hint.
cmd/wfctl/main_test.go Adds a regression test asserting wfctl validate fails on boolean-looking conditional route keys.
cigen/render_gitlab.go Adds per-phase variables scoping for secrets and a PlanGuard gate in apply jobs.
cigen/render_gitlab_test.go Adds tests for GitLab plan guard behavior and scoped-phase secret isolation; tightens the “no redundant global vars” assertion to the global block.

Comment thread cmd/wfctl/validate.go
Comment thread cigen/render_gitlab.go Outdated
@codecov
Copy link
Copy Markdown

codecov Bot commented Jun 1, 2026

Codecov Report

❌ Patch coverage is 74.75728% with 26 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
cmd/wfctl/validate.go 69.76% 13 Missing and 13 partials ⚠️

📢 Thoughts on this report? Let us know!

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 1, 2026

⏱ Benchmark Results

No significant performance regressions detected.

benchstat comparison (baseline → PR)
## benchstat: baseline → PR
baseline-bench.txt:309: parsing iteration count: invalid syntax
baseline-bench.txt:263071: parsing iteration count: invalid syntax
baseline-bench.txt:558359: parsing iteration count: invalid syntax
baseline-bench.txt:871845: parsing iteration count: invalid syntax
baseline-bench.txt:1153765: parsing iteration count: invalid syntax
baseline-bench.txt:1430153: parsing iteration count: invalid syntax
benchmark-results.txt:309: parsing iteration count: invalid syntax
benchmark-results.txt:298702: parsing iteration count: invalid syntax
benchmark-results.txt:598172: parsing iteration count: invalid syntax
benchmark-results.txt:928284: parsing iteration count: invalid syntax
benchmark-results.txt:1234186: parsing iteration count: invalid syntax
benchmark-results.txt:1540910: parsing iteration count: invalid syntax
goos: linux
goarch: amd64
pkg: github.com/GoCodeAlone/workflow/dynamic
cpu: AMD EPYC 7763 64-Core Processor                
                            │ benchmark-results.txt │
                            │        sec/op         │
InterpreterCreation-4                  9.093m ± 65%
ComponentLoad-4                        3.606m ±  8%
ComponentExecute-4                     1.942µ ±  3%
PoolContention/workers-1-4             1.120µ ±  1%
PoolContention/workers-2-4             1.087µ ±  2%
PoolContention/workers-4-4             1.085µ ±  2%
PoolContention/workers-8-4             1.092µ ±  3%
PoolContention/workers-16-4            1.093µ ±  2%
ComponentLifecycle-4                   3.615m ±  0%
SourceValidation-4                     2.348µ ±  1%
RegistryConcurrent-4                   820.4n ±  4%
LoaderLoadFromString-4                 3.636m ±  0%
geomean                                19.22µ

                            │ benchmark-results.txt │
                            │         B/op          │
InterpreterCreation-4                  2.027Mi ± 0%
ComponentLoad-4                        2.180Mi ± 0%
ComponentExecute-4                     1.203Ki ± 0%
PoolContention/workers-1-4             1.203Ki ± 0%
PoolContention/workers-2-4             1.203Ki ± 0%
PoolContention/workers-4-4             1.203Ki ± 0%
PoolContention/workers-8-4             1.203Ki ± 0%
PoolContention/workers-16-4            1.203Ki ± 0%
ComponentLifecycle-4                   2.183Mi ± 0%
SourceValidation-4                     1.984Ki ± 0%
RegistryConcurrent-4                   1.133Ki ± 0%
LoaderLoadFromString-4                 2.182Mi ± 0%
geomean                                15.25Ki

                            │ benchmark-results.txt │
                            │       allocs/op       │
InterpreterCreation-4                   15.68k ± 0%
ComponentLoad-4                         18.02k ± 0%
ComponentExecute-4                       25.00 ± 0%
PoolContention/workers-1-4               25.00 ± 0%
PoolContention/workers-2-4               25.00 ± 0%
PoolContention/workers-4-4               25.00 ± 0%
PoolContention/workers-8-4               25.00 ± 0%
PoolContention/workers-16-4              25.00 ± 0%
ComponentLifecycle-4                    18.07k ± 0%
SourceValidation-4                       32.00 ± 0%
RegistryConcurrent-4                     2.000 ± 0%
LoaderLoadFromString-4                  18.06k ± 0%
geomean                                  183.3

cpu: AMD EPYC 9V74 80-Core Processor                
                            │ baseline-bench.txt │
                            │       sec/op       │
InterpreterCreation-4               10.82m ± 54%
ComponentLoad-4                     3.716m ±  4%
ComponentExecute-4                  1.864µ ±  2%
PoolContention/workers-1-4          1.069µ ±  2%
PoolContention/workers-2-4          1.042µ ±  3%
PoolContention/workers-4-4          1.077µ ±  3%
PoolContention/workers-8-4          1.075µ ±  2%
PoolContention/workers-16-4         1.056µ ±  2%
ComponentLifecycle-4                3.924m ±  7%
SourceValidation-4                  2.129µ ±  3%
RegistryConcurrent-4                747.1n ±  6%
LoaderLoadFromString-4              3.807m ±  7%
geomean                             19.14µ

                            │ baseline-bench.txt │
                            │        B/op        │
InterpreterCreation-4               2.027Mi ± 0%
ComponentLoad-4                     2.180Mi ± 0%
ComponentExecute-4                  1.203Ki ± 0%
PoolContention/workers-1-4          1.203Ki ± 0%
PoolContention/workers-2-4          1.203Ki ± 0%
PoolContention/workers-4-4          1.203Ki ± 0%
PoolContention/workers-8-4          1.203Ki ± 0%
PoolContention/workers-16-4         1.203Ki ± 0%
ComponentLifecycle-4                2.183Mi ± 0%
SourceValidation-4                  1.984Ki ± 0%
RegistryConcurrent-4                1.133Ki ± 0%
LoaderLoadFromString-4              2.182Mi ± 0%
geomean                             15.25Ki

                            │ baseline-bench.txt │
                            │     allocs/op      │
InterpreterCreation-4                15.68k ± 0%
ComponentLoad-4                      18.02k ± 0%
ComponentExecute-4                    25.00 ± 0%
PoolContention/workers-1-4            25.00 ± 0%
PoolContention/workers-2-4            25.00 ± 0%
PoolContention/workers-4-4            25.00 ± 0%
PoolContention/workers-8-4            25.00 ± 0%
PoolContention/workers-16-4           25.00 ± 0%
ComponentLifecycle-4                 18.07k ± 0%
SourceValidation-4                    32.00 ± 0%
RegistryConcurrent-4                  2.000 ± 0%
LoaderLoadFromString-4               18.06k ± 0%
geomean                               183.3

pkg: github.com/GoCodeAlone/workflow/middleware
cpu: AMD EPYC 7763 64-Core Processor                
                                  │ benchmark-results.txt │
                                  │        sec/op         │
CircuitBreakerDetection-4                     286.8n ± 1%
CircuitBreakerExecution_Success-4             21.53n ± 0%
CircuitBreakerExecution_Failure-4             66.12n ± 0%
geomean                                       74.18n

                                  │ benchmark-results.txt │
                                  │         B/op          │
CircuitBreakerDetection-4                    144.0 ± 0%
CircuitBreakerExecution_Success-4            0.000 ± 0%
CircuitBreakerExecution_Failure-4            0.000 ± 0%
geomean                                                 ¹
¹ summaries must be >0 to compute geomean

                                  │ benchmark-results.txt │
                                  │       allocs/op       │
CircuitBreakerDetection-4                    1.000 ± 0%
CircuitBreakerExecution_Success-4            0.000 ± 0%
CircuitBreakerExecution_Failure-4            0.000 ± 0%
geomean                                                 ¹
¹ summaries must be >0 to compute geomean

cpu: AMD EPYC 9V74 80-Core Processor                
                                  │ baseline-bench.txt │
                                  │       sec/op       │
CircuitBreakerDetection-4                  303.2n ± 1%
CircuitBreakerExecution_Success-4          22.68n ± 1%
CircuitBreakerExecution_Failure-4          70.89n ± 0%
geomean                                    78.71n

                                  │ baseline-bench.txt │
                                  │        B/op        │
CircuitBreakerDetection-4                 144.0 ± 0%
CircuitBreakerExecution_Success-4         0.000 ± 0%
CircuitBreakerExecution_Failure-4         0.000 ± 0%
geomean                                              ¹
¹ summaries must be >0 to compute geomean

                                  │ baseline-bench.txt │
                                  │     allocs/op      │
CircuitBreakerDetection-4                 1.000 ± 0%
CircuitBreakerExecution_Success-4         0.000 ± 0%
CircuitBreakerExecution_Failure-4         0.000 ± 0%
geomean                                              ¹
¹ summaries must be >0 to compute geomean

pkg: github.com/GoCodeAlone/workflow/module
cpu: AMD EPYC 7763 64-Core Processor                
                                 │ benchmark-results.txt │
                                 │        sec/op         │
IaCStateBackend_InProcess-4                 344.3n ± 16%
IaCStateBackend_GRPC-4                      9.350m ±  3%
JQTransform_Simple-4                        694.4n ± 35%
JQTransform_ObjectConstruction-4            1.525µ ±  2%
JQTransform_ArraySelect-4                   3.376µ ±  3%
JQTransform_Complex-4                       38.37µ ±  0%
JQTransform_Throughput-4                    1.810µ ±  1%
SSEPublishDelivery-4                        64.63n ±  1%
geomean                                     3.883µ

                                 │ benchmark-results.txt │
                                 │         B/op          │
IaCStateBackend_InProcess-4                416.0 ±  0%
IaCStateBackend_GRPC-4                   5.744Mi ± 11%
JQTransform_Simple-4                     1.273Ki ±  0%
JQTransform_ObjectConstruction-4         1.773Ki ±  0%
JQTransform_ArraySelect-4                2.625Ki ±  0%
JQTransform_Complex-4                    16.31Ki ±  0%
JQTransform_Throughput-4                 1.984Ki ±  0%
SSEPublishDelivery-4                       0.000 ±  0%
geomean                                                ¹
¹ summaries must be >0 to compute geomean

                                 │ benchmark-results.txt │
                                 │       allocs/op       │
IaCStateBackend_InProcess-4                 2.000 ± 0%
IaCStateBackend_GRPC-4                     6.840k ± 0%
JQTransform_Simple-4                        10.00 ± 0%
JQTransform_ObjectConstruction-4            15.00 ± 0%
JQTransform_ArraySelect-4                   30.00 ± 0%
JQTransform_Complex-4                       328.0 ± 0%
JQTransform_Throughput-4                    17.00 ± 0%
SSEPublishDelivery-4                        0.000 ± 0%
geomean                                                ¹
¹ summaries must be >0 to compute geomean

cpu: AMD EPYC 9V74 80-Core Processor                
                                 │ baseline-bench.txt │
                                 │       sec/op       │
IaCStateBackend_InProcess-4              349.5n ± 15%
IaCStateBackend_GRPC-4                   10.61m ±  1%
JQTransform_Simple-4                     724.1n ± 32%
JQTransform_ObjectConstruction-4         1.563µ ±  1%
JQTransform_ArraySelect-4                3.806µ ±  3%
JQTransform_Complex-4                    44.15µ ±  1%
JQTransform_Throughput-4                 1.911µ ±  1%
SSEPublishDelivery-4                     63.87n ±  1%
geomean                                  4.139µ

                                 │ baseline-bench.txt │
                                 │        B/op        │
IaCStateBackend_InProcess-4              416.0 ± 0%
IaCStateBackend_GRPC-4                 5.905Mi ± 5%
JQTransform_Simple-4                   1.273Ki ± 0%
JQTransform_ObjectConstruction-4       1.773Ki ± 0%
JQTransform_ArraySelect-4              2.625Ki ± 0%
JQTransform_Complex-4                  16.31Ki ± 0%
JQTransform_Throughput-4               1.984Ki ± 0%
SSEPublishDelivery-4                     0.000 ± 0%
geomean                                             ¹
¹ summaries must be >0 to compute geomean

                                 │ baseline-bench.txt │
                                 │     allocs/op      │
IaCStateBackend_InProcess-4              2.000 ± 0%
IaCStateBackend_GRPC-4                  6.874k ± 0%
JQTransform_Simple-4                     10.00 ± 0%
JQTransform_ObjectConstruction-4         15.00 ± 0%
JQTransform_ArraySelect-4                30.00 ± 0%
JQTransform_Complex-4                    328.0 ± 0%
JQTransform_Throughput-4                 17.00 ± 0%
SSEPublishDelivery-4                     0.000 ± 0%
geomean                                             ¹
¹ summaries must be >0 to compute geomean

pkg: github.com/GoCodeAlone/workflow/schema
cpu: AMD EPYC 7763 64-Core Processor                
                                    │ benchmark-results.txt │
                                    │        sec/op         │
SchemaValidation_Simple-4                      1.097µ ±  3%
SchemaValidation_AllFields-4                   1.659µ ± 23%
SchemaValidation_FormatValidation-4            1.581µ ±  4%
SchemaValidation_ManySchemas-4                 1.810µ ±  2%
geomean                                        1.511µ

                                    │ benchmark-results.txt │
                                    │         B/op          │
SchemaValidation_Simple-4                      0.000 ± 0%
SchemaValidation_AllFields-4                   0.000 ± 0%
SchemaValidation_FormatValidation-4            0.000 ± 0%
SchemaValidation_ManySchemas-4                 0.000 ± 0%
geomean                                                   ¹
¹ summaries must be >0 to compute geomean

                                    │ benchmark-results.txt │
                                    │       allocs/op       │
SchemaValidation_Simple-4                      0.000 ± 0%
SchemaValidation_AllFields-4                   0.000 ± 0%
SchemaValidation_FormatValidation-4            0.000 ± 0%
SchemaValidation_ManySchemas-4                 0.000 ± 0%
geomean                                                   ¹
¹ summaries must be >0 to compute geomean

cpu: AMD EPYC 9V74 80-Core Processor                
                                    │ baseline-bench.txt │
                                    │       sec/op       │
SchemaValidation_Simple-4                   1.069µ ± 14%
SchemaValidation_AllFields-4                1.618µ ±  2%
SchemaValidation_FormatValidation-4         1.569µ ±  2%
SchemaValidation_ManySchemas-4              1.596µ ±  2%
geomean                                     1.442µ

                                    │ baseline-bench.txt │
                                    │        B/op        │
SchemaValidation_Simple-4                   0.000 ± 0%
SchemaValidation_AllFields-4                0.000 ± 0%
SchemaValidation_FormatValidation-4         0.000 ± 0%
SchemaValidation_ManySchemas-4              0.000 ± 0%
geomean                                                ¹
¹ summaries must be >0 to compute geomean

                                    │ baseline-bench.txt │
                                    │     allocs/op      │
SchemaValidation_Simple-4                   0.000 ± 0%
SchemaValidation_AllFields-4                0.000 ± 0%
SchemaValidation_FormatValidation-4         0.000 ± 0%
SchemaValidation_ManySchemas-4              0.000 ± 0%
geomean                                                ¹
¹ summaries must be >0 to compute geomean

pkg: github.com/GoCodeAlone/workflow/store
cpu: AMD EPYC 7763 64-Core Processor                
                                   │ benchmark-results.txt │
                                   │        sec/op         │
EventStoreAppend_InMemory-4                   1.304µ ± 13%
EventStoreAppend_SQLite-4                     1.389m ±  7%
GetTimeline_InMemory/events-10-4              14.81µ ±  3%
GetTimeline_InMemory/events-50-4              82.59µ ±  4%
GetTimeline_InMemory/events-100-4             146.9µ ± 14%
GetTimeline_InMemory/events-500-4             655.9µ ±  1%
GetTimeline_InMemory/events-1000-4            1.357m ±  2%
GetTimeline_SQLite/events-10-4                110.7µ ±  2%
GetTimeline_SQLite/events-50-4                260.1µ ±  0%
GetTimeline_SQLite/events-100-4               440.2µ ±  1%
GetTimeline_SQLite/events-500-4               1.887m ±  1%
GetTimeline_SQLite/events-1000-4              3.643m ±  0%
geomean                                       232.7µ

                                   │ benchmark-results.txt │
                                   │         B/op          │
EventStoreAppend_InMemory-4                     819.5 ± 9%
EventStoreAppend_SQLite-4                     1.984Ki ± 3%
GetTimeline_InMemory/events-10-4              7.953Ki ± 0%
GetTimeline_InMemory/events-50-4              46.62Ki ± 0%
GetTimeline_InMemory/events-100-4             94.48Ki ± 0%
GetTimeline_InMemory/events-500-4             472.8Ki ± 0%
GetTimeline_InMemory/events-1000-4            944.3Ki ± 0%
GetTimeline_SQLite/events-10-4                16.74Ki ± 0%
GetTimeline_SQLite/events-50-4                87.14Ki ± 0%
GetTimeline_SQLite/events-100-4               175.4Ki ± 0%
GetTimeline_SQLite/events-500-4               846.1Ki ± 0%
GetTimeline_SQLite/events-1000-4              1.639Mi ± 0%
geomean                                       67.55Ki

                                   │ benchmark-results.txt │
                                   │       allocs/op       │
EventStoreAppend_InMemory-4                     7.000 ± 0%
EventStoreAppend_SQLite-4                       53.00 ± 0%
GetTimeline_InMemory/events-10-4                125.0 ± 0%
GetTimeline_InMemory/events-50-4                653.0 ± 0%
GetTimeline_InMemory/events-100-4              1.306k ± 0%
GetTimeline_InMemory/events-500-4              6.514k ± 0%
GetTimeline_InMemory/events-1000-4             13.02k ± 0%
GetTimeline_SQLite/events-10-4                  382.0 ± 0%
GetTimeline_SQLite/events-50-4                 1.852k ± 0%
GetTimeline_SQLite/events-100-4                3.681k ± 0%
GetTimeline_SQLite/events-500-4                18.54k ± 0%
GetTimeline_SQLite/events-1000-4               37.29k ± 0%
geomean                                        1.162k

cpu: AMD EPYC 9V74 80-Core Processor                
                                   │ baseline-bench.txt │
                                   │       sec/op       │
EventStoreAppend_InMemory-4                1.050µ ± 17%
EventStoreAppend_SQLite-4                  1.015m ±  2%
GetTimeline_InMemory/events-10-4           13.53µ ±  1%
GetTimeline_InMemory/events-50-4           66.21µ ± 16%
GetTimeline_InMemory/events-100-4          116.4µ ±  1%
GetTimeline_InMemory/events-500-4          596.6µ ±  1%
GetTimeline_InMemory/events-1000-4         1.213m ±  1%
GetTimeline_SQLite/events-10-4             87.86µ ±  2%
GetTimeline_SQLite/events-50-4             231.6µ ±  2%
GetTimeline_SQLite/events-100-4            411.6µ ±  2%
GetTimeline_SQLite/events-500-4            1.788m ±  1%
GetTimeline_SQLite/events-1000-4           3.470m ±  3%
geomean                                    200.3µ

                                   │ baseline-bench.txt │
                                   │        B/op        │
EventStoreAppend_InMemory-4                  808.0 ± 8%
EventStoreAppend_SQLite-4                  1.983Ki ± 1%
GetTimeline_InMemory/events-10-4           7.953Ki ± 0%
GetTimeline_InMemory/events-50-4           46.62Ki ± 0%
GetTimeline_InMemory/events-100-4          94.48Ki ± 0%
GetTimeline_InMemory/events-500-4          472.8Ki ± 0%
GetTimeline_InMemory/events-1000-4         944.3Ki ± 0%
GetTimeline_SQLite/events-10-4             16.74Ki ± 0%
GetTimeline_SQLite/events-50-4             87.14Ki ± 0%
GetTimeline_SQLite/events-100-4            175.4Ki ± 0%
GetTimeline_SQLite/events-500-4            846.1Ki ± 0%
GetTimeline_SQLite/events-1000-4           1.639Mi ± 0%
geomean                                    67.47Ki

                                   │ baseline-bench.txt │
                                   │     allocs/op      │
EventStoreAppend_InMemory-4                  7.000 ± 0%
EventStoreAppend_SQLite-4                    53.00 ± 0%
GetTimeline_InMemory/events-10-4             125.0 ± 0%
GetTimeline_InMemory/events-50-4             653.0 ± 0%
GetTimeline_InMemory/events-100-4           1.306k ± 0%
GetTimeline_InMemory/events-500-4           6.514k ± 0%
GetTimeline_InMemory/events-1000-4          13.02k ± 0%
GetTimeline_SQLite/events-10-4               382.0 ± 0%
GetTimeline_SQLite/events-50-4              1.852k ± 0%
GetTimeline_SQLite/events-100-4             3.681k ± 0%
GetTimeline_SQLite/events-500-4             18.54k ± 0%
GetTimeline_SQLite/events-1000-4            37.29k ± 0%
geomean                                     1.162k

Benchmarks run with go test -bench=. -benchmem -count=6.
Regressions ≥ 20% are flagged. Results compared via benchstat.

Copilot AI review requested due to automatic review settings June 1, 2026 05:48
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment thread cmd/wfctl/validate.go
@intel352 intel352 merged commit c57eb00 into main Jun 1, 2026
22 checks passed
@intel352 intel352 deleted the fix/issue-audit-812-809 branch June 1, 2026 06:20
intel352 added a commit that referenced this pull request Jun 1, 2026
* chore: clean repository layout guidance

* fix: build example runner package only

* fix: close workflow issue audit gaps (#814)

* fix: close workflow issue audit gaps

* fix: return conditional route inspection errors

* fix: address ci review gaps

* fix: inspect aliased conditional routes

* chore: clean repository layout guidance

* fix: build example runner package only

* fix: scan imports without root pipelines
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants