[object Object]

← back to Cli Printing Press

fix(ci): shard test lanes (#362)

95cf6c88e4e29444a2947b31ade29b7c29288be9 · 2026-04-28 01:27:23 -0700 · Trevin Chow

Files touched

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 →