← back to Cli Printing Press
fix(ci): shard test lanes (#362)
95cf6c88e4e29444a2947b31ade29b7c29288be9 · 2026-04-28 01:27:23 -0700 · Trevin Chow
Files touched
M .github/workflows/lint.yml
Diff
commit 95cf6c88e4e29444a2947b31ade29b7c29288be9
Author: Trevin Chow <trevin@trevinchow.com>
Date: Tue Apr 28 01:27:23 2026 -0700
fix(ci): shard test lanes (#362)
---
.github/workflows/lint.yml | 114 ++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 102 insertions(+), 12 deletions(-)
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 34274d1a..1661741e 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -60,9 +60,17 @@ jobs:
with:
version: v2.11.4
- test:
+ test-shard:
+ name: test (${{ matrix.shard }})
runs-on: ubuntu-latest
timeout-minutes: 10
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - shard: generator
+ - shard: pipeline-cli
+ - shard: rest
steps:
- uses: actions/checkout@v6
@@ -77,7 +85,26 @@ jobs:
run: |
set -o pipefail
- go test -short -json -timeout 12m ./... 2>&1 | tee /tmp/go-test.json
+ case "${{ matrix.shard }}" in
+ generator)
+ packages=(./internal/generator)
+ ;;
+ pipeline-cli)
+ packages=(./internal/pipeline ./internal/cli)
+ ;;
+ rest)
+ mapfile -t packages < <(go list ./... | grep -Ev '/internal/(generator|pipeline|cli)$')
+ ;;
+ *)
+ echo "unknown test shard: ${{ matrix.shard }}" >&2
+ exit 1
+ ;;
+ esac
+
+ printf 'Testing packages:\n'
+ printf ' %s\n' "${packages[@]}"
+
+ go test -short -json -timeout 12m "${packages[@]}" 2>&1 | tee /tmp/go-test.json
status=${PIPESTATUS[0]}
python3 - /tmp/go-test.json <<'PY'
@@ -105,9 +132,27 @@ jobs:
exit "$status"
- generated-test:
+ test:
runs-on: ubuntu-latest
- timeout-minutes: 20
+ needs: test-shard
+ if: ${{ always() }}
+ timeout-minutes: 5
+ steps:
+ - name: Check test shards
+ shell: bash
+ run: |
+ if [[ "${{ needs.test-shard.result }}" != "success" ]]; then
+ echo "A test shard failed or was cancelled."
+ exit 1
+ fi
+
+ echo "All test shards passed."
+
+ generated-test-changes:
+ runs-on: ubuntu-latest
+ timeout-minutes: 5
+ outputs:
+ needs_full: ${{ steps.changes.outputs.needs_full }}
steps:
- uses: actions/checkout@v6
with:
@@ -137,27 +182,48 @@ jobs:
echo "needs_full=$needs_full" >> "$GITHUB_OUTPUT"
- - name: Skip generated compile tests
- if: steps.changes.outputs.needs_full != 'true'
- run: |
- echo "Skipping generated compile tests: no generator, parser, pipeline, CLI, module, workflow, catalog, or testdata changes."
+ generated-test-shard:
+ name: generated-test (${{ matrix.shard }})
+ runs-on: ubuntu-latest
+ needs: generated-test-changes
+ if: needs.generated-test-changes.outputs.needs_full == 'true'
+ timeout-minutes: 15
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - shard: h3
+ packages: ./internal/generator
+ pattern: ^(TestGenerateBrowserChromeH3Transport)$
+ - shard: generator
+ packages: ./internal/generator
+ pattern: ^(TestGenerateProjectsCompile|TestGenerateCliutilPackage|TestGenerateFreshnessHelperEmitted|TestGenerateShareEmittedWhenEnabled|TestGenerateAgentContextCommand|TestGenerateHTMLExtractionEndpoint|TestGenerateHTMLExtractionEmbeddedJSONMode|TestGenerateHTMLExtractionPerModeGating|TestGenerateStoreWithBatchResourceDoesNotDuplicateUpsertBatch|TestGenerateStoreUpsertBatchDispatchesToTypedTable|TestGenerateStoreBackfillsIndexedColumnsOnUpgrade|TestGenerateStoreQuotesNumericTableAndDerivedIdentifiers|TestGeneratedOutput_PromotedCommandCompiles|TestGeneratedHelpers_AuthWithKeyURL_Compiles|TestGenerate_CookieAuthUsesBrowserTemplate|TestGenerate_ComposedAuthUsesBrowserTemplate|TestJSONStringParamRejectsInvalidValueBeforeClient|TestGenerateGraphQLBFFUsesSemanticCommandSurface|TestGenerateWhichFallsBackToCommandTree|TestGenerateDependentSyncCompiles|TestGenerateDependentSyncReservedWordCompiles|TestGeneratedSyncTreatsAccessDeniedAsWarning|TestGenerateGraphQLCompiles|TestGenerateMCPCodeOrchestrationEmitsSearchExecute|TestGenerateMCPIntentsEmittedWhenDeclared|TestGenerateMCPEndpointToolsHiddenSuppressesEndpointTools|TestGenerateMCPMainRemoteRuntime|TestGenerateMCPMainRemoteCompiles)$
+ - shard: openapi
+ packages: ./internal/openapi
+ pattern: ^(TestGenerateFromOpenAPICompiles)$
+ steps:
+ - uses: actions/checkout@v6
+ with:
+ fetch-depth: 0
- uses: actions/setup-go@v6
- if: steps.changes.outputs.needs_full == 'true'
with:
go-version-file: go.mod
cache: true
cache-dependency-path: go.sum
- name: Run generated compile tests
- if: steps.changes.outputs.needs_full == 'true'
shell: bash
run: |
set -o pipefail
- generated_compile_tests='^(TestGenerateProjectsCompile|TestGenerateCliutilPackage|TestGenerateFreshnessHelperEmitted|TestGenerateShareEmittedWhenEnabled|TestGenerateAgentContextCommand|TestGenerateBrowserChromeH3Transport|TestGenerateHTMLExtractionEndpoint|TestGenerateHTMLExtractionEmbeddedJSONMode|TestGenerateHTMLExtractionPerModeGating|TestGenerateStoreWithBatchResourceDoesNotDuplicateUpsertBatch|TestGenerateStoreUpsertBatchDispatchesToTypedTable|TestGenerateStoreBackfillsIndexedColumnsOnUpgrade|TestGenerateStoreQuotesNumericTableAndDerivedIdentifiers|TestGeneratedOutput_PromotedCommandCompiles|TestGeneratedHelpers_AuthWithKeyURL_Compiles|TestGenerate_CookieAuthUsesBrowserTemplate|TestGenerate_ComposedAuthUsesBrowserTemplate|TestJSONStringParamRejectsInvalidValueBeforeClient|TestGenerateGraphQLBFFUsesSemanticCommandSurface|TestGenerateWhichFallsBackToCommandTree|TestGenerateDependentSyncCompiles|TestGenerateDependentSyncReservedWordCompiles|TestGeneratedSyncTreatsAccessDeniedAsWarning|TestGenerateGraphQLCompiles|TestGenerateMCPCodeOrchestrationEmitsSearchExecute|TestGenerateMCPIntentsEmittedWhenDeclared|TestGenerateMCPEndpointToolsHiddenSuppressesEndpointTools|TestGenerateMCPMainRemoteRuntime|TestGenerateMCPMainRemoteCompiles|TestGenerateFromOpenAPICompiles)$'
+ read -r -a packages <<< "${{ matrix.packages }}"
+
+ printf 'Testing packages:\n'
+ printf ' %s\n' "${packages[@]}"
+ echo 'Test pattern: ${{ matrix.pattern }}'
- go test -json -timeout 12m -run "$generated_compile_tests" ./internal/generator ./internal/openapi 2>&1 | tee /tmp/go-test-generated.json
+ go test -json -timeout 12m -run '${{ matrix.pattern }}' "${packages[@]}" 2>&1 | tee /tmp/go-test-generated.json
status=${PIPESTATUS[0]}
python3 - /tmp/go-test-generated.json <<'PY'
@@ -184,3 +250,27 @@ jobs:
PY
exit "$status"
+
+ generated-test:
+ runs-on: ubuntu-latest
+ needs:
+ - generated-test-changes
+ - generated-test-shard
+ if: ${{ always() }}
+ timeout-minutes: 5
+ steps:
+ - name: Skip generated compile tests
+ if: needs.generated-test-changes.outputs.needs_full != 'true'
+ run: |
+ echo "Skipping generated compile tests: no generator, parser, pipeline, CLI, module, workflow, catalog, or testdata changes."
+
+ - name: Check generated compile shards
+ if: needs.generated-test-changes.outputs.needs_full == 'true'
+ shell: bash
+ run: |
+ if [[ "${{ needs.generated-test-shard.result }}" != "success" ]]; then
+ echo "A generated compile shard failed or was cancelled."
+ exit 1
+ fi
+
+ echo "All generated compile shards passed."
← a5ba1b4a fix(ci): remove redundant generated compile work (#361)
·
back to Cli Printing Press
·
chore(cli)!: remove megamcp aggregate server and Composio pl 0e1b8508 →