Skip to content

fix(wfctl): register cmd-build pipeline in wfctl.yaml#415

Merged
intel352 merged 1 commit into
mainfrom
fix/wfctl-missing-cmd-build-pipeline
Apr 19, 2026
Merged

fix(wfctl): register cmd-build pipeline in wfctl.yaml#415
intel352 merged 1 commit into
mainfrom
fix/wfctl-missing-cmd-build-pipeline

Conversation

@intel352

Copy link
Copy Markdown
Contributor

Summary

  • Fixes wfctl build and all its subcommands (image, push, go, ui, custom, audit) which all failed with error: cli trigger: no pipeline registered for command "build"
  • Root cause: the build command was registered in the Go commands map (main.go:95) but no cmd-build: pipeline was declared in the embedded wfctl.yaml
  • Fix: adds the 11-line cmd-build pipeline entry, consistent with all other command pipelines

Reproduction

wfctl build image --config any.yaml
# error: cli trigger: no pipeline registered for command "build"

Test plan

  • wfctl build --help no longer errors
  • WFCTL_BUILD_DRY_RUN=1 wfctl build image --config testdata/ci-build.yaml prints dry-run output
  • Existing build_image_test.go and build_orchestrate_test.go tests pass

Discovered during workflow-dnd v0.14.1 migration smoke test (dry-run step failed, surfaced this missing registration).

🤖 Generated with Claude Code

The build command was registered in the Go commands map (main.go line 95)
but had no corresponding cmd-build: pipeline entry in the embedded wfctl.yaml
config. This caused wfctl build (and all subcommands: image, push, go, ui,
custom, audit) to fail with:

  error: cli trigger: no pipeline registered for command "build"

Adds the missing cmd-build pipeline entry adjacent to cmd-build-ui.

Discovered during workflow-dnd v0.14.1 migration smoke test.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings April 19, 2026 09:08

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Fixes wfctl build CLI routing by registering the missing cmd-build pipeline in the embedded wfctl.yaml, aligning it with how other wfctl commands are wired through the cli trigger + step.cli_invoke.

Changes:

  • Added cmd-build pipeline triggered by CLI command build
  • Wired the pipeline to invoke the registered Go command runner via step.cli_invoke

Comment thread cmd/wfctl/wfctl.yaml
Comment on lines +210 to +220
cmd-build:
trigger:
type: cli
config:
command: build
steps:
- name: run
type: step.cli_invoke
config:
command: build

Copilot AI Apr 19, 2026

Copy link

Choose a reason for hiding this comment

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

Consider adding a small regression test that loads cmd/wfctl/wfctl.yaml, builds an engine with the CLI trigger + step.cli_invoke registered, and asserts the CLITrigger has a mapping for "build" (and ideally all commands in cmd/wfctl/main.go's commands map). This would prevent future command additions from being missed in the embedded YAML again.

Copilot generated this review using guidance from organization custom instructions.
@github-actions

Copy link
Copy Markdown

⏱ Benchmark Results

No significant performance regressions detected.

benchstat comparison (baseline → PR)
## benchstat: baseline → PR
baseline-bench.txt:245: parsing iteration count: invalid syntax
baseline-bench.txt:322482: parsing iteration count: invalid syntax
baseline-bench.txt:639367: parsing iteration count: invalid syntax
baseline-bench.txt:934004: parsing iteration count: invalid syntax
baseline-bench.txt:1254549: parsing iteration count: invalid syntax
baseline-bench.txt:1566886: parsing iteration count: invalid syntax
benchmark-results.txt:245: parsing iteration count: invalid syntax
benchmark-results.txt:315408: parsing iteration count: invalid syntax
benchmark-results.txt:646378: parsing iteration count: invalid syntax
benchmark-results.txt:980564: parsing iteration count: invalid syntax
benchmark-results.txt:1308018: parsing iteration count: invalid syntax
benchmark-results.txt:1605538: parsing iteration count: invalid syntax
goos: linux
goarch: amd64
pkg: github.com/GoCodeAlone/workflow/dynamic
cpu: AMD EPYC 7763 64-Core Processor                
                            │ baseline-bench.txt │        benchmark-results.txt        │
                            │       sec/op       │    sec/op      vs base              │
InterpreterCreation-4              3.102m ± 219%   3.425m ± 185%       ~ (p=0.240 n=6)
ComponentLoad-4                    3.607m ±   9%   3.607m ±   1%       ~ (p=1.000 n=6)
ComponentExecute-4                 1.932µ ±   1%   1.966µ ±   2%  +1.76% (p=0.002 n=6)
PoolContention/workers-1-4         1.081µ ±   1%   1.091µ ±   3%       ~ (p=0.058 n=6)
PoolContention/workers-2-4         1.074µ ±   6%   1.107µ ±   4%       ~ (p=0.143 n=6)
PoolContention/workers-4-4         1.130µ ±   4%   1.098µ ±   1%       ~ (p=0.065 n=6)
PoolContention/workers-8-4         1.079µ ±   1%   1.104µ ±   1%  +2.32% (p=0.002 n=6)
PoolContention/workers-16-4        1.082µ ±   1%   1.101µ ±   1%  +1.71% (p=0.002 n=6)
ComponentLifecycle-4               3.566m ±   1%   3.631m ±   0%  +1.83% (p=0.002 n=6)
SourceValidation-4                 2.220µ ±   1%   2.273µ ±   1%  +2.39% (p=0.002 n=6)
RegistryConcurrent-4               790.5n ±   5%   806.3n ±   4%  +2.00% (p=0.041 n=6)
LoaderLoadFromString-4             3.570m ±   1%   3.645m ±   0%  +2.10% (p=0.002 n=6)
geomean                            17.34µ          17.70µ         +2.09%

                            │ baseline-bench.txt │        benchmark-results.txt         │
                            │        B/op        │     B/op      vs base                │
InterpreterCreation-4               2.027Mi ± 0%   2.027Mi ± 0%       ~ (p=0.608 n=6)
ComponentLoad-4                     2.180Mi ± 0%   2.180Mi ± 0%       ~ (p=0.394 n=6)
ComponentExecute-4                  1.203Ki ± 0%   1.203Ki ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-1-4          1.203Ki ± 0%   1.203Ki ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-2-4          1.203Ki ± 0%   1.203Ki ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-4-4          1.203Ki ± 0%   1.203Ki ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-8-4          1.203Ki ± 0%   1.203Ki ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-16-4         1.203Ki ± 0%   1.203Ki ± 0%       ~ (p=1.000 n=6) ¹
ComponentLifecycle-4                2.183Mi ± 0%   2.183Mi ± 0%       ~ (p=0.905 n=6)
SourceValidation-4                  1.984Ki ± 0%   1.984Ki ± 0%       ~ (p=1.000 n=6) ¹
RegistryConcurrent-4                1.133Ki ± 0%   1.133Ki ± 0%       ~ (p=1.000 n=6) ¹
LoaderLoadFromString-4              2.182Mi ± 0%   2.182Mi ± 0%       ~ (p=0.413 n=6)
geomean                             15.25Ki        15.25Ki       +0.00%
¹ all samples are equal

                            │ baseline-bench.txt │        benchmark-results.txt        │
                            │     allocs/op      │  allocs/op   vs base                │
InterpreterCreation-4                15.68k ± 0%   15.68k ± 0%       ~ (p=1.000 n=6)
ComponentLoad-4                      18.02k ± 0%   18.02k ± 0%       ~ (p=1.000 n=6)
ComponentExecute-4                    25.00 ± 0%    25.00 ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-1-4            25.00 ± 0%    25.00 ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-2-4            25.00 ± 0%    25.00 ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-4-4            25.00 ± 0%    25.00 ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-8-4            25.00 ± 0%    25.00 ± 0%       ~ (p=1.000 n=6) ¹
PoolContention/workers-16-4           25.00 ± 0%    25.00 ± 0%       ~ (p=1.000 n=6) ¹
ComponentLifecycle-4                 18.07k ± 0%   18.07k ± 0%       ~ (p=1.000 n=6) ¹
SourceValidation-4                    32.00 ± 0%    32.00 ± 0%       ~ (p=1.000 n=6) ¹
RegistryConcurrent-4                  2.000 ± 0%    2.000 ± 0%       ~ (p=1.000 n=6) ¹
LoaderLoadFromString-4               18.06k ± 0%   18.06k ± 0%       ~ (p=1.000 n=6) ¹
geomean                               183.3         183.3       +0.00%
¹ all samples are equal

pkg: github.com/GoCodeAlone/workflow/middleware
                                  │ baseline-bench.txt │       benchmark-results.txt       │
                                  │       sec/op       │   sec/op     vs base              │
CircuitBreakerDetection-4                  287.6n ± 7%   284.9n ± 0%       ~ (p=1.000 n=6)
CircuitBreakerExecution_Success-4          21.48n ± 0%   21.55n ± 2%  +0.35% (p=0.004 n=6)
CircuitBreakerExecution_Failure-4          66.29n ± 0%   65.88n ± 0%  -0.62% (p=0.002 n=6)
geomean                                    74.26n        73.96n       -0.42%

                                  │ baseline-bench.txt │       benchmark-results.txt        │
                                  │        B/op        │    B/op     vs base                │
CircuitBreakerDetection-4                 144.0 ± 0%     144.0 ± 0%       ~ (p=1.000 n=6) ¹
CircuitBreakerExecution_Success-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
CircuitBreakerExecution_Failure-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                              ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                  │ baseline-bench.txt │       benchmark-results.txt        │
                                  │     allocs/op      │ allocs/op   vs base                │
CircuitBreakerDetection-4                 1.000 ± 0%     1.000 ± 0%       ~ (p=1.000 n=6) ¹
CircuitBreakerExecution_Success-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
CircuitBreakerExecution_Failure-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                              ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

pkg: github.com/GoCodeAlone/workflow/module
                                 │ baseline-bench.txt │       benchmark-results.txt        │
                                 │       sec/op       │    sec/op     vs base              │
JQTransform_Simple-4                     866.7n ± 29%   946.2n ± 22%       ~ (p=0.132 n=6)
JQTransform_ObjectConstruction-4         1.446µ ±  0%   1.449µ ±  0%       ~ (p=0.069 n=6)
JQTransform_ArraySelect-4                3.300µ ±  1%   3.302µ ±  2%       ~ (p=0.485 n=6)
JQTransform_Complex-4                    37.85µ ±  1%   37.54µ ±  1%       ~ (p=0.180 n=6)
JQTransform_Throughput-4                 1.777µ ±  1%   1.783µ ±  1%       ~ (p=0.193 n=6)
SSEPublishDelivery-4                     74.03n ±  1%   72.36n ±  0%  -2.27% (p=0.002 n=6)
geomean                                  1.655µ         1.673µ        +1.05%

                                 │ baseline-bench.txt │        benchmark-results.txt         │
                                 │        B/op        │     B/op      vs base                │
JQTransform_Simple-4                   1.273Ki ± 0%     1.273Ki ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_ObjectConstruction-4       1.773Ki ± 0%     1.773Ki ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_ArraySelect-4              2.625Ki ± 0%     2.625Ki ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_Complex-4                  16.22Ki ± 0%     16.22Ki ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_Throughput-4               1.984Ki ± 0%     1.984Ki ± 0%       ~ (p=1.000 n=6) ¹
SSEPublishDelivery-4                     0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                             ²                 +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                 │ baseline-bench.txt │       benchmark-results.txt        │
                                 │     allocs/op      │ allocs/op   vs base                │
JQTransform_Simple-4                     10.00 ± 0%     10.00 ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_ObjectConstruction-4         15.00 ± 0%     15.00 ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_ArraySelect-4                30.00 ± 0%     30.00 ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_Complex-4                    324.0 ± 0%     324.0 ± 0%       ~ (p=1.000 n=6) ¹
JQTransform_Throughput-4                 17.00 ± 0%     17.00 ± 0%       ~ (p=1.000 n=6) ¹
SSEPublishDelivery-4                     0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                             ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

pkg: github.com/GoCodeAlone/workflow/schema
                                    │ baseline-bench.txt │       benchmark-results.txt       │
                                    │       sec/op       │   sec/op     vs base              │
SchemaValidation_Simple-4                    1.101µ ± 2%   1.112µ ± 3%       ~ (p=0.485 n=6)
SchemaValidation_AllFields-4                 1.665µ ± 8%   1.680µ ± 4%       ~ (p=0.905 n=6)
SchemaValidation_FormatValidation-4          1.584µ ± 4%   1.597µ ± 4%       ~ (p=0.180 n=6)
SchemaValidation_ManySchemas-4               1.806µ ± 2%   1.809µ ± 3%       ~ (p=0.699 n=6)
geomean                                      1.513µ        1.524µ       +0.71%

                                    │ baseline-bench.txt │       benchmark-results.txt        │
                                    │        B/op        │    B/op     vs base                │
SchemaValidation_Simple-4                   0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
SchemaValidation_AllFields-4                0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
SchemaValidation_FormatValidation-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
SchemaValidation_ManySchemas-4              0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                                ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                    │ baseline-bench.txt │       benchmark-results.txt        │
                                    │     allocs/op      │ allocs/op   vs base                │
SchemaValidation_Simple-4                   0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
SchemaValidation_AllFields-4                0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
SchemaValidation_FormatValidation-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
SchemaValidation_ManySchemas-4              0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                                ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

pkg: github.com/GoCodeAlone/workflow/store
                                   │ baseline-bench.txt │        benchmark-results.txt        │
                                   │       sec/op       │    sec/op     vs base               │
EventStoreAppend_InMemory-4                1.211µ ± 22%   1.160µ ± 17%        ~ (p=0.818 n=6)
EventStoreAppend_SQLite-4                  1.671m ±  8%   1.456m ±  6%  -12.85% (p=0.002 n=6)
GetTimeline_InMemory/events-10-4           13.40µ ±  2%   13.69µ ±  3%   +2.12% (p=0.009 n=6)
GetTimeline_InMemory/events-50-4           75.00µ ± 21%   75.10µ ± 14%        ~ (p=1.000 n=6)
GetTimeline_InMemory/events-100-4          118.8µ ±  1%   124.0µ ±  1%   +4.35% (p=0.002 n=6)
GetTimeline_InMemory/events-500-4          613.6µ ±  0%   641.6µ ±  5%   +4.56% (p=0.002 n=6)
GetTimeline_InMemory/events-1000-4         1.255m ±  1%   1.320m ±  1%   +5.22% (p=0.002 n=6)
GetTimeline_SQLite/events-10-4             106.7µ ±  1%   107.1µ ±  1%        ~ (p=0.240 n=6)
GetTimeline_SQLite/events-50-4             244.2µ ±  1%   249.4µ ±  1%   +2.13% (p=0.002 n=6)
GetTimeline_SQLite/events-100-4            412.7µ ±  4%   423.4µ ±  1%        ~ (p=0.065 n=6)
GetTimeline_SQLite/events-500-4            1.748m ±  0%   1.819m ±  1%   +4.09% (p=0.002 n=6)
GetTimeline_SQLite/events-1000-4           3.409m ±  5%   3.525m ±  1%        ~ (p=0.065 n=6)
geomean                                    218.6µ         220.5µ         +0.87%

                                   │ baseline-bench.txt │        benchmark-results.txt         │
                                   │        B/op        │     B/op      vs base                │
EventStoreAppend_InMemory-4                 780.5 ± 10%     839.0 ± 6%       ~ (p=0.169 n=6)
EventStoreAppend_SQLite-4                 1.985Ki ±  2%   1.983Ki ± 2%       ~ (p=0.418 n=6)
GetTimeline_InMemory/events-10-4          7.953Ki ±  0%   7.953Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-50-4          46.62Ki ±  0%   46.62Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-100-4         94.48Ki ±  0%   94.48Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-500-4         472.8Ki ±  0%   472.8Ki ± 0%       ~ (p=0.567 n=6)
GetTimeline_InMemory/events-1000-4        944.3Ki ±  0%   944.3Ki ± 0%  -0.00% (p=0.045 n=6)
GetTimeline_SQLite/events-10-4            16.74Ki ±  0%   16.74Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-50-4            87.14Ki ±  0%   87.14Ki ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-100-4           175.4Ki ±  0%   175.4Ki ± 0%       ~ (p=1.000 n=6)
GetTimeline_SQLite/events-500-4           846.1Ki ±  0%   846.1Ki ± 0%  +0.00% (p=0.035 n=6)
GetTimeline_SQLite/events-1000-4          1.639Mi ±  0%   1.639Mi ± 0%  -0.00% (p=0.022 n=6)
geomean                                   67.28Ki         67.68Ki       +0.59%
¹ all samples are equal

                                   │ baseline-bench.txt │        benchmark-results.txt        │
                                   │     allocs/op      │  allocs/op   vs base                │
EventStoreAppend_InMemory-4                  7.000 ± 0%    7.000 ± 0%       ~ (p=1.000 n=6) ¹
EventStoreAppend_SQLite-4                    53.00 ± 0%    53.00 ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-10-4             125.0 ± 0%    125.0 ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-50-4             653.0 ± 0%    653.0 ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-100-4           1.306k ± 0%   1.306k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-500-4           6.514k ± 0%   6.514k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_InMemory/events-1000-4          13.02k ± 0%   13.02k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-10-4               382.0 ± 0%    382.0 ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-50-4              1.852k ± 0%   1.852k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-100-4             3.681k ± 0%   3.681k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-500-4             18.54k ± 0%   18.54k ± 0%       ~ (p=1.000 n=6) ¹
GetTimeline_SQLite/events-1000-4            37.29k ± 0%   37.29k ± 0%       ~ (p=1.000 n=6) ¹
geomean                                     1.162k        1.162k       +0.00%
¹ all samples are equal

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

@intel352 intel352 merged commit 608bd25 into main Apr 19, 2026
22 checks passed
@intel352 intel352 deleted the fix/wfctl-missing-cmd-build-pipeline branch April 19, 2026 09:21
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.

2 participants