Skip to content

feat(wfctl): validate rendered CI provider artifacts#866

Merged
intel352 merged 1 commit into
mainfrom
feat/issue-863-ci-validation
Jun 6, 2026
Merged

feat(wfctl): validate rendered CI provider artifacts#866
intel352 merged 1 commit into
mainfrom
feat/issue-863-ci-validation

Conversation

@intel352
Copy link
Copy Markdown
Contributor

@intel352 intel352 commented Jun 6, 2026

Summary

  • Add cigen.ValidateRenderedFiles for rendered GitHub Actions, GitLab CI, Jenkins, and CircleCI artifacts.
  • Wire wfctl ci generate to validate rendered files before writing and add wfctl ci validate --platform for provider artifacts.
  • Use the embedded Go github.com/rhysd/actionlint dependency for GitHub Actions validation; external shellcheck/pyflakes integrations are disabled.
  • Refresh active actions/checkout references emitted by generators/templates/workflows to the current @v6 major tag.

Version checks

  • Verified github.com/rhysd/actionlint latest release is v1.7.12; added that Go dependency directly.
  • Verified actions/checkout latest release is v6.0.2; generated references use the stable @v6 tag.

Verification

  • GOWORK=off go test ./cigen -run 'TestValidateRenderedFiles|TestRenderGitHubActions' -count=1
  • GOWORK=off go test ./cmd/wfctl -run 'TestRunCIValidate|TestCIGenerate|TestGenerateGitHubActions|TestGenerateGitLabCI|TestWriteCIWorkflow' -count=1
  • GOWORK=off go test ./cigen ./cmd/wfctl ./mcp ./plugin/sdk -count=1
  • git diff --check

Fixes #863

Copilot AI review requested due to automatic review settings June 6, 2026 08:01
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 strengthens wfctl’s CI generation/validation workflow by adding offline validation of rendered CI provider artifacts (GitHub Actions, GitLab CI, Jenkins, CircleCI), and standardizes generated/scaffolded GitHub Actions workflows on actions/checkout@v6.

Changes:

  • Added cigen.ValidateRenderedFiles with GitHub Actions validation backed by embedded github.com/rhysd/actionlint (no external shellcheck/pyflakes).
  • Wired wfctl ci generate to validate rendered provider artifacts before writing, and added wfctl ci validate --platform for validating existing rendered artifacts.
  • Updated templates/docs/workflows to emit/use actions/checkout@v6 and refreshed related tests.

Reviewed changes

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

Show a summary per file
File Description
plugin/sdk/generator.go Update generated plugin CI/release workflows to actions/checkout@v6.
mcp/wfctl_tools.go Update scaffolded CD workflow snippets to actions/checkout@v6.
mcp/scaffold_tools.go Update GitHub Actions bootstrap scaffold to actions/checkout@v6.
mcp/scaffold_tools_test.go Adjust scaffold test expectations for actions/checkout@v6.
go.mod Add direct dependency on github.com/rhysd/actionlint v1.7.12.
go.sum Record checksums for actionlint and new indirect dependencies.
docs/WFCTL.md Document generated-artifact validation and new wfctl ci validate --platform usage; bump checkout references.
docs/tutorials/deploy-pipeline.md Bump tutorial workflow examples to actions/checkout@v6.
docs/PLUGIN_RELEASE_GATES.md Bump example workflow to actions/checkout@v6.
docs/manual/build-deploy/03-ci-deploy-environments.md Bump documented workflow snippets to actions/checkout@v6.
data/registry/.github/workflows/validate.yml Bump checkout in registry validation workflows to actions/checkout@v6.
cmd/wfctl/templates/ui-plugin/.github/workflows/release.yml.tmpl Bump template checkout to actions/checkout@v6.
cmd/wfctl/templates/plugin/.github/workflows/release.yml.tmpl Bump template checkout to actions/checkout@v6.
cmd/wfctl/templates/full-stack/.github/workflows/ci.yml.tmpl Bump template checkout to actions/checkout@v6.
cmd/wfctl/templates/event-processor/.github/workflows/ci.yml.tmpl Bump template checkout to actions/checkout@v6.
cmd/wfctl/templates/api-service/.github/workflows/ci.yml.tmpl Bump template checkout to actions/checkout@v6.
cmd/wfctl/generate.go Bump generated workflow snippets to actions/checkout@v6.
cmd/wfctl/generate_test.go Update generator tests to expect actions/checkout@v6.
cmd/wfctl/ci.go Validate rendered CI artifacts during wfctl ci generate before writing.
cmd/wfctl/ci_validate.go Add --platform mode to validate rendered provider artifacts using cigen.ValidateRenderedFiles.
cmd/wfctl/ci_validate_artifacts_test.go Add test ensuring invalid GitHub Actions artifacts fail in --platform mode.
cmd/wfctl/ci_test.go Update CI generation tests to expect actions/checkout@v6.
cmd/wfctl/ci_init.go Bump bootstrap workflow generation to actions/checkout@v6.
cigen/validate.go New rendered-artifact validation (actionlint for GHA; offline structural checks for others).
cigen/validate_test.go New tests for rendered-artifact validation across platforms and actionlint usage.
cigen/testdata/multisite/generated-infra.yml Update testdata to actions/checkout@v6.
cigen/render_gha.go Bump rendered GHA checkout step to actions/checkout@v6.
.github/workflows/release.yml Bump repo release workflow checkout to actions/checkout@v6.
.github/workflows/pre-release.yml Bump repo pre-release workflow checkout to actions/checkout@v6.
.github/workflows/helm-lint.yml Bump checkout to actions/checkout@v6.
.github/workflows/dependency-update.yml Bump checkout to actions/checkout@v6.
.github/workflows/cross-plugin-build-test.yml Bump checkout steps to actions/checkout@v6.
.github/workflows/create-release.yml Bump checkout to actions/checkout@v6.
.github/workflows/copilot-setup-steps.yml Bump checkout to actions/checkout@v6.
.github/workflows/conformance-smoke.yml Bump checkout to actions/checkout@v6.
.github/workflows/conformance-leak-scrubber.yml Bump checkout to actions/checkout@v6.
.github/workflows/conformance-budget-check.yml Bump checkout to actions/checkout@v6.
.github/workflows/codeql.yml Bump checkout to actions/checkout@v6.
.github/workflows/ci.yml Bump checkout across CI jobs to actions/checkout@v6.
.github/workflows/ci-wfctl.yml.example Bump example workflow checkout references to actions/checkout@v6.
.github/workflows/benchmark.yml Bump checkout to actions/checkout@v6.

Comment thread cmd/wfctl/ci_validate.go
Comment on lines +131 to +149
rendered := make(map[string]string, len(files))
for _, file := range files {
data, err := os.ReadFile(file)
if err != nil {
rendered[file] = ""
continue
}
rendered[file] = string(data)
}
findings := cigen.ValidateRenderedFiles(platform, rendered)
for _, file := range files {
if _, err := os.Stat(file); err != nil {
findings = append(findings, cigen.ValidationFinding{
Path: file,
Code: "read_ci_artifact",
Message: fmt.Sprintf("read CI artifact: %v", err),
})
}
}
Comment thread cmd/wfctl/ci_validate.go
Comment on lines +166 to +168
if !passed {
return fmt.Errorf("%d file(s) failed ci validate", len(files))
}
@codecov
Copy link
Copy Markdown

codecov Bot commented Jun 6, 2026

Codecov Report

❌ Patch coverage is 65.16854% with 62 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
cigen/validate.go 65.32% 25 Missing and 18 partials ⚠️
cmd/wfctl/ci_validate.go 58.33% 13 Missing and 2 partials ⚠️
cmd/wfctl/ci.go 0.00% 2 Missing and 1 partial ⚠️
mcp/wfctl_tools.go 50.00% 1 Missing ⚠️

📢 Thoughts on this report? Let us know!

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 6, 2026

⏱ Benchmark Results

No significant performance regressions detected.

benchstat comparison (baseline → PR)
## benchstat: baseline → PR
baseline-bench.txt:304: parsing iteration count: invalid syntax
baseline-bench.txt:295589: parsing iteration count: invalid syntax
baseline-bench.txt:632829: parsing iteration count: invalid syntax
baseline-bench.txt:963295: parsing iteration count: invalid syntax
baseline-bench.txt:1272194: parsing iteration count: invalid syntax
baseline-bench.txt:1559220: parsing iteration count: invalid syntax
benchmark-results.txt:304: parsing iteration count: invalid syntax
benchmark-results.txt:350285: parsing iteration count: invalid syntax
benchmark-results.txt:647985: parsing iteration count: invalid syntax
benchmark-results.txt:997489: parsing iteration count: invalid syntax
benchmark-results.txt:1342172: parsing iteration count: invalid syntax
benchmark-results.txt:1666785: 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                  7.701m ± 60%
ComponentLoad-4                        3.620m ±  9%
ComponentExecute-4                     1.925µ ±  1%
PoolContention/workers-1-4             1.081µ ±  0%
PoolContention/workers-2-4             1.095µ ±  3%
PoolContention/workers-4-4             1.087µ ±  4%
PoolContention/workers-8-4             1.085µ ±  1%
PoolContention/workers-16-4            1.089µ ±  1%
ComponentLifecycle-4                   3.601m ±  1%
SourceValidation-4                     2.333µ ±  2%
RegistryConcurrent-4                   812.1n ±  5%
LoaderLoadFromString-4                 3.613m ±  2%
geomean                                18.85µ

                            │ 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               8.930m ± 65%
ComponentLoad-4                     3.680m ± 10%
ComponentExecute-4                  1.833µ ±  1%
PoolContention/workers-1-4          1.009µ ±  3%
PoolContention/workers-2-4          1.015µ ±  3%
PoolContention/workers-4-4          1.037µ ±  1%
PoolContention/workers-8-4          1.023µ ±  2%
PoolContention/workers-16-4         1.010µ ±  1%
ComponentLifecycle-4                3.503m ±  2%
SourceValidation-4                  2.087µ ±  1%
RegistryConcurrent-4                738.6n ±  4%
LoaderLoadFromString-4              3.637m ±  3%
geomean                             18.17µ

                            │ 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.2n ± 4%
CircuitBreakerExecution_Success-4             21.46n ± 1%
CircuitBreakerExecution_Failure-4             65.46n ± 0%
geomean                                       73.81n

                                  │ 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                  297.2n ± 4%
CircuitBreakerExecution_Success-4          22.65n ± 0%
CircuitBreakerExecution_Failure-4          70.95n ± 0%
geomean                                    78.17n

                                  │ 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                 307.8n ±  8%
IaCStateBackend_GRPC-4                      9.443m ± 10%
JQTransform_Simple-4                        671.8n ± 34%
JQTransform_ObjectConstruction-4            1.515µ ±  1%
JQTransform_ArraySelect-4                   3.446µ ±  1%
JQTransform_Complex-4                       39.51µ ±  1%
JQTransform_Throughput-4                    1.854µ ±  1%
SSEPublishDelivery-4                        67.11n ±  2%
geomean                                     3.868µ

                                 │ benchmark-results.txt │
                                 │         B/op          │
IaCStateBackend_InProcess-4                 416.0 ± 0%
IaCStateBackend_GRPC-4                    5.879Mi ± 8%
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.841k ± 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              296.6n ± 35%
IaCStateBackend_GRPC-4                   10.27m ±  8%
JQTransform_Simple-4                     668.0n ± 30%
JQTransform_ObjectConstruction-4         1.474µ ±  2%
JQTransform_ArraySelect-4                3.440µ ±  0%
JQTransform_Complex-4                    41.68µ ±  0%
JQTransform_Throughput-4                 1.782µ ±  2%
SSEPublishDelivery-4                     65.74n ±  3%
geomean                                  3.871µ

                                 │ baseline-bench.txt │
                                 │        B/op        │
IaCStateBackend_InProcess-4             416.0 ±  0%
IaCStateBackend_GRPC-4                5.806Mi ± 15%
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.862k ± 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.110µ ± 22%
SchemaValidation_AllFields-4                   1.658µ ±  3%
SchemaValidation_FormatValidation-4            1.603µ ±  2%
SchemaValidation_ManySchemas-4                 1.774µ ±  3%
geomean                                        1.512µ

                                    │ 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.125µ ± 14%
SchemaValidation_AllFields-4                1.636µ ±  6%
SchemaValidation_FormatValidation-4         1.644µ ±  4%
SchemaValidation_ManySchemas-4              1.597µ ±  2%
geomean                                     1.482µ

                                    │ 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.169µ ± 18%
EventStoreAppend_SQLite-4                     1.324m ± 10%
GetTimeline_InMemory/events-10-4              14.32µ ±  3%
GetTimeline_InMemory/events-50-4              80.31µ ±  1%
GetTimeline_InMemory/events-100-4             157.0µ ±  5%
GetTimeline_InMemory/events-500-4             631.7µ ±  1%
GetTimeline_InMemory/events-1000-4            1.290m ±  1%
GetTimeline_SQLite/events-10-4                71.10µ ±  1%
GetTimeline_SQLite/events-50-4                212.8µ ±  1%
GetTimeline_SQLite/events-100-4               387.2µ ±  1%
GetTimeline_SQLite/events-500-4               1.758m ±  1%
GetTimeline_SQLite/events-1000-4              3.459m ±  1%
geomean                                       211.7µ

                                   │ benchmark-results.txt │
                                   │         B/op          │
EventStoreAppend_InMemory-4                     801.5 ± 5%
EventStoreAppend_SQLite-4                     1.982Ki ± 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.42Ki

                                   │ 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.076µ ± 26%
EventStoreAppend_SQLite-4                  1.076m ±  6%
GetTimeline_InMemory/events-10-4           13.31µ ±  3%
GetTimeline_InMemory/events-50-4           72.56µ ± 25%
GetTimeline_InMemory/events-100-4          109.1µ ±  1%
GetTimeline_InMemory/events-500-4          557.6µ ±  1%
GetTimeline_InMemory/events-1000-4         1.142m ±  1%
GetTimeline_SQLite/events-10-4             57.64µ ±  0%
GetTimeline_SQLite/events-50-4             190.5µ ±  0%
GetTimeline_SQLite/events-100-4            351.3µ ±  1%
GetTimeline_SQLite/events-500-4            1.630m ±  1%
GetTimeline_SQLite/events-1000-4           3.218m ±  1%
geomean                                    184.7µ

                                   │ baseline-bench.txt │
                                   │        B/op        │
EventStoreAppend_InMemory-4                  807.0 ± 8%
EventStoreAppend_SQLite-4                  1.985Ki ± 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.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.

@intel352 intel352 merged commit f64bf20 into main Jun 6, 2026
31 checks passed
@intel352 intel352 deleted the feat/issue-863-ci-validation branch June 6, 2026 08:13
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.

wfctl should validate configs for github, gitlab, etc

2 participants