Skip to content

Fix snapshot releases to include wfctl binaries; add setup-wfctl composite action#685

Merged
intel352 merged 3 commits into
mainfrom
copilot/release-wfctl-config-validate
May 15, 2026
Merged

Fix snapshot releases to include wfctl binaries; add setup-wfctl composite action#685
intel352 merged 3 commits into
mainfrom
copilot/release-wfctl-config-validate

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented May 15, 2026

Snapshot releases (triggered on every main merge) only published workflow-* server binaries — wfctl-* assets were absent, blocking consumers from testing wfctl config validate without waiting for a semver release.

Changes

  • .github/workflows/pre-release.yml — Added cross-platform wfctl builds to the snapshot job alongside the existing server builds. Snapshots now publish wfctl-{linux,darwin}-{amd64,arm64} and wfctl-windows-amd64.exe, making wfctl config validate available immediately after any main merge.

  • .github/actions/setup-wfctl/action.yml — Added the missing composite action already referenced in docs/WFCTL.md as GoCodeAlone/workflow/.github/actions/setup-wfctl@main. Resolves latest via the GitHub API (using jq), maps runner OS/arch to Go naming, downloads the binary, adds the install dir to GITHUB_PATH, and verifies with wfctl --version. Exposes a version output with the resolved tag.

- uses: GoCodeAlone/workflow/.github/actions/setup-wfctl@main
  with:
    version: v0.52.0   # or omit for latest

Note: semver release.yml already had wfctl in its build matrix — no changes needed there.

Copilot AI review requested due to automatic review settings May 15, 2026 13:06
Copilot AI review requested due to automatic review settings May 15, 2026 13:06
Copilot AI linked an issue May 15, 2026 that may be closed by this pull request
Copilot AI requested review from Copilot and removed request for Copilot May 15, 2026 13:15
Copilot AI changed the title [WIP] Release wfctl config validate in semver wfctl assets Fix snapshot releases to include wfctl binaries; add setup-wfctl composite action May 15, 2026
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 15, 2026

⏱ Benchmark Results

No significant performance regressions detected.

benchstat comparison (baseline → PR)
## benchstat: baseline → PR
baseline-bench.txt:276: parsing iteration count: invalid syntax
baseline-bench.txt:275506: parsing iteration count: invalid syntax
baseline-bench.txt:589334: parsing iteration count: invalid syntax
baseline-bench.txt:876663: parsing iteration count: invalid syntax
baseline-bench.txt:1157152: parsing iteration count: invalid syntax
baseline-bench.txt:1488854: parsing iteration count: invalid syntax
benchmark-results.txt:276: parsing iteration count: invalid syntax
benchmark-results.txt:318511: parsing iteration count: invalid syntax
benchmark-results.txt:640415: parsing iteration count: invalid syntax
benchmark-results.txt:922911: parsing iteration count: invalid syntax
benchmark-results.txt:1257355: parsing iteration count: invalid syntax
benchmark-results.txt:1521086: 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 │
                            │       sec/op       │
InterpreterCreation-4               6.285m ± 62%
ComponentLoad-4                     3.600m ±  6%
ComponentExecute-4                  1.924µ ±  1%
PoolContention/workers-1-4          1.074µ ±  1%
PoolContention/workers-2-4          1.075µ ±  1%
PoolContention/workers-4-4          1.075µ ±  3%
PoolContention/workers-8-4          1.078µ ±  2%
PoolContention/workers-16-4         1.093µ ±  3%
ComponentLifecycle-4                3.677m ±  1%
SourceValidation-4                  2.386µ ±  1%
RegistryConcurrent-4                849.0n ±  3%
LoaderLoadFromString-4              3.701m ±  1%
geomean                             18.63µ

                            │ 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

cpu: AMD EPYC 9V74 80-Core Processor                
                            │ benchmark-results.txt │
                            │        sec/op         │
InterpreterCreation-4                  5.026m ± 89%
ComponentLoad-4                        3.564m ± 10%
ComponentExecute-4                     1.838µ ±  0%
PoolContention/workers-1-4             1.033µ ± 13%
PoolContention/workers-2-4             1.021µ ±  1%
PoolContention/workers-4-4             1.025µ ±  1%
PoolContention/workers-8-4             1.031µ ±  1%
PoolContention/workers-16-4            1.028µ ±  7%
ComponentLifecycle-4                   3.569m ±  1%
SourceValidation-4                     2.104µ ±  0%
RegistryConcurrent-4                   758.8n ±  3%
LoaderLoadFromString-4                 3.557m ±  1%
geomean                                17.39µ

                            │ 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

pkg: github.com/GoCodeAlone/workflow/middleware
cpu: AMD EPYC 7763 64-Core Processor                
                                  │ baseline-bench.txt │
                                  │       sec/op       │
CircuitBreakerDetection-4                  288.1n ± 3%
CircuitBreakerExecution_Success-4          21.42n ± 0%
CircuitBreakerExecution_Failure-4          66.19n ± 0%
geomean                                    74.19n

                                  │ 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

cpu: AMD EPYC 9V74 80-Core Processor                
                                  │ benchmark-results.txt │
                                  │        sec/op         │
CircuitBreakerDetection-4                     297.6n ± 5%
CircuitBreakerExecution_Success-4             22.68n ± 1%
CircuitBreakerExecution_Failure-4             70.94n ± 0%
geomean                                       78.24n

                                  │ 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

pkg: github.com/GoCodeAlone/workflow/module
cpu: AMD EPYC 7763 64-Core Processor                
                                 │ baseline-bench.txt │
                                 │       sec/op       │
IaCStateBackend_InProcess-4              300.2n ± 27%
IaCStateBackend_GRPC-4                   10.04m ±  2%
JQTransform_Simple-4                     654.3n ± 31%
JQTransform_ObjectConstruction-4         1.444µ ±  1%
JQTransform_ArraySelect-4                3.307µ ±  1%
JQTransform_Complex-4                    38.08µ ±  3%
JQTransform_Throughput-4                 1.757µ ±  0%
SSEPublishDelivery-4                     66.45n ±  0%
geomean                                  3.782µ

                                 │ baseline-bench.txt │
                                 │        B/op        │
IaCStateBackend_InProcess-4              416.0 ± 0%
IaCStateBackend_GRPC-4                 5.945Mi ± 7%
JQTransform_Simple-4                   1.273Ki ± 0%
JQTransform_ObjectConstruction-4       1.773Ki ± 0%
JQTransform_ArraySelect-4              2.625Ki ± 0%
JQTransform_Complex-4                  16.22Ki ± 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.828k ± 0%
JQTransform_Simple-4                     10.00 ± 0%
JQTransform_ObjectConstruction-4         15.00 ± 0%
JQTransform_ArraySelect-4                30.00 ± 0%
JQTransform_Complex-4                    324.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                
                                 │ benchmark-results.txt │
                                 │        sec/op         │
IaCStateBackend_InProcess-4                 286.7n ± 32%
IaCStateBackend_GRPC-4                      9.756m ±  6%
JQTransform_Simple-4                        658.0n ± 28%
JQTransform_ObjectConstruction-4            1.431µ ±  1%
JQTransform_ArraySelect-4                   3.423µ ±  2%
JQTransform_Complex-4                       41.46µ ±  1%
JQTransform_Throughput-4                    1.752µ ±  1%
SSEPublishDelivery-4                        64.73n ±  1%
geomean                                     3.788µ

                                 │ benchmark-results.txt │
                                 │         B/op          │
IaCStateBackend_InProcess-4                 416.0 ± 0%
IaCStateBackend_GRPC-4                    5.649Mi ± 8%
JQTransform_Simple-4                      1.273Ki ± 0%
JQTransform_ObjectConstruction-4          1.773Ki ± 0%
JQTransform_ArraySelect-4                 2.625Ki ± 0%
JQTransform_Complex-4                     16.22Ki ± 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.859k ± 0%
JQTransform_Simple-4                        10.00 ± 0%
JQTransform_ObjectConstruction-4            15.00 ± 0%
JQTransform_ArraySelect-4                   30.00 ± 0%
JQTransform_Complex-4                       324.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                
                                    │ baseline-bench.txt │
                                    │       sec/op       │
SchemaValidation_Simple-4                   1.123µ ± 16%
SchemaValidation_AllFields-4                1.671µ ±  3%
SchemaValidation_FormatValidation-4         1.593µ ±  2%
SchemaValidation_ManySchemas-4              1.821µ ±  4%
geomean                                     1.527µ

                                    │ 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

cpu: AMD EPYC 9V74 80-Core Processor                
                                    │ benchmark-results.txt │
                                    │        sec/op         │
SchemaValidation_Simple-4                      1.086µ ± 11%
SchemaValidation_AllFields-4                   1.641µ ±  5%
SchemaValidation_FormatValidation-4            1.580µ ±  2%
SchemaValidation_ManySchemas-4                 1.593µ ±  2%
geomean                                        1.455µ

                                    │ 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

pkg: github.com/GoCodeAlone/workflow/store
cpu: AMD EPYC 7763 64-Core Processor                
                                   │ baseline-bench.txt │
                                   │       sec/op       │
EventStoreAppend_InMemory-4                1.118µ ±  7%
EventStoreAppend_SQLite-4                  1.342m ±  8%
GetTimeline_InMemory/events-10-4           13.50µ ±  4%
GetTimeline_InMemory/events-50-4           60.34µ ± 19%
GetTimeline_InMemory/events-100-4          120.7µ ±  0%
GetTimeline_InMemory/events-500-4          621.8µ ±  1%
GetTimeline_InMemory/events-1000-4         1.270m ±  0%
GetTimeline_SQLite/events-10-4             105.5µ ±  0%
GetTimeline_SQLite/events-50-4             245.4µ ±  1%
GetTimeline_SQLite/events-100-4            415.0µ ±  1%
GetTimeline_SQLite/events-500-4            1.769m ±  0%
GetTimeline_SQLite/events-1000-4           3.471m ±  0%
geomean                                    210.8µ

                                   │ baseline-bench.txt │
                                   │        B/op        │
EventStoreAppend_InMemory-4                  771.5 ± 4%
EventStoreAppend_SQLite-4                  1.984Ki ± 2%
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.21Ki

                                   │ 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

cpu: AMD EPYC 9V74 80-Core Processor                
                                   │ benchmark-results.txt │
                                   │        sec/op         │
EventStoreAppend_InMemory-4                   1.031µ ± 26%
EventStoreAppend_SQLite-4                     1.027m ±  8%
GetTimeline_InMemory/events-10-4              12.60µ ±  3%
GetTimeline_InMemory/events-50-4              71.78µ ±  3%
GetTimeline_InMemory/events-100-4             110.7µ ±  1%
GetTimeline_InMemory/events-500-4             568.8µ ±  1%
GetTimeline_InMemory/events-1000-4            1.164m ±  1%
GetTimeline_SQLite/events-10-4                84.08µ ±  1%
GetTimeline_SQLite/events-50-4                221.6µ ±  0%
GetTimeline_SQLite/events-100-4               386.5µ ±  0%
GetTimeline_SQLite/events-500-4               1.695m ±  1%
GetTimeline_SQLite/events-1000-4              3.301m ±  3%
geomean                                       193.9µ

                                   │ benchmark-results.txt │
                                   │         B/op          │
EventStoreAppend_InMemory-4                    764.0 ± 12%
EventStoreAppend_SQLite-4                    1.984Ki ±  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.16Ki

                                   │ 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

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

Copilot AI requested a review from intel352 May 15, 2026 13:18
@intel352 intel352 marked this pull request as ready for review May 15, 2026 13:21
Copilot AI review requested due to automatic review settings May 15, 2026 13:21
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 expands snapshot release assets so wfctl is available from pre-releases and adds a reusable composite action for installing wfctl in GitHub Actions workflows.

Changes:

  • Adds cross-platform wfctl binary builds to the pre-release snapshot workflow.
  • Adds .github/actions/setup-wfctl to resolve, download, install, and verify a released wfctl binary.

Reviewed changes

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

File Description
.github/workflows/pre-release.yml Publishes wfctl binaries alongside existing snapshot server binaries.
.github/actions/setup-wfctl/action.yml Adds a composite action for installing wfctl from GitHub Releases.

Comment thread .github/actions/setup-wfctl/action.yml
@codecov
Copy link
Copy Markdown

codecov Bot commented May 15, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@intel352 intel352 merged commit b4391aa into main May 15, 2026
22 checks passed
@intel352 intel352 deleted the copilot/release-wfctl-config-validate branch May 15, 2026 13:55
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.

Release wfctl config validate in semver wfctl assets

3 participants