cli: Use build sdk command from sdk directly #5269
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # This workflow runs CI checks including building, typechecking, and testing the codebase | |
| # Tests are parallelized to run faster by splitting them into separate jobs that run concurrently | |
| # | |
| # See the workflow visualization in knowledge file | |
| name: CI | |
| on: | |
| push: | |
| branches: ['main'] | |
| pull_request: | |
| branches: ['main'] | |
| # Define reusable job template | |
| jobs: | |
| # Build and check | |
| build-and-check: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Set up Bun | |
| uses: oven-sh/setup-bun@v2 | |
| with: | |
| bun-version: '1.3.5' | |
| - name: Cache dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| node_modules | |
| */node_modules | |
| packages/*/node_modules | |
| key: ${{ runner.os }}-deps-${{ hashFiles('**/bun.lock*') }} | |
| restore-keys: | | |
| ${{ runner.os }}-deps- | |
| - name: Install dependencies | |
| run: bun install --frozen-lockfile | |
| - name: Set environment variables | |
| env: | |
| SECRETS_CONTEXT: ${{ toJSON(secrets) }} | |
| run: | | |
| VAR_NAMES=$(bun scripts/generate-ci-env.ts) | |
| echo "$SECRETS_CONTEXT" | jq -r --argjson vars "$VAR_NAMES" ' | |
| to_entries | .[] | select(.key as $k | $vars | index($k)) | .key + "=" + .value | |
| ' >> $GITHUB_ENV | |
| echo "CODEBUFF_GITHUB_ACTIONS=true" >> $GITHUB_ENV | |
| echo "NEXT_PUBLIC_CB_ENVIRONMENT=test" >> $GITHUB_ENV | |
| echo "CODEBUFF_GITHUB_TOKEN=${{ secrets.CODEBUFF_GITHUB_TOKEN }}" >> $GITHUB_ENV | |
| - name: Typecheck and Build web in parallel | |
| run: | | |
| bun -e " | |
| const { spawn } = require('child_process'); | |
| function runCommand(command, args, options = {}) { | |
| return new Promise((resolve, reject) => { | |
| const child = spawn(command, args, { stdio: 'inherit', ...options }); | |
| child.on('close', (code) => code === 0 ? resolve() : reject(new Error('Command failed with exit code ' + code))); | |
| child.on('error', reject); | |
| }); | |
| } | |
| Promise.all([ | |
| runCommand('bun', ['run', 'typecheck']), | |
| runCommand('bun', ['run', 'build'], { cwd: 'web' }) | |
| ]).then(() => console.log('✅ Both typecheck and web build completed successfully!')) | |
| .catch(error => { console.error('❌ One or more commands failed:', error.message); process.exit(1); }); | |
| " | |
| # - name: Build npm-app | |
| # run: cd npm-app && bun run build | |
| # - name: Open interactive debug shell | |
| # if: ${{ failure() }} | |
| # uses: mxschmitt/action-tmate@v3 | |
| # timeout-minutes: 15 # optional guard | |
| # Template for test jobs | |
| test: | |
| needs: [build-and-check] | |
| strategy: | |
| matrix: | |
| package: | |
| [ | |
| .agents, | |
| cli, | |
| common, | |
| packages/agent-runtime, | |
| packages/billing, | |
| packages/internal, | |
| sdk, | |
| web, | |
| ] | |
| include: | |
| - package: .agents | |
| - package: cli | |
| - package: common | |
| - package: packages/agent-runtime | |
| - package: packages/billing | |
| - package: packages/internal | |
| - package: sdk | |
| - package: web | |
| name: test-${{ matrix.package }} | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Set up Bun | |
| uses: oven-sh/setup-bun@v2 | |
| with: | |
| bun-version: '1.3.5' | |
| - name: Cache dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| node_modules | |
| */node_modules | |
| packages/*/node_modules | |
| key: ${{ runner.os }}-deps-${{ hashFiles('**/bun.lock*') }} | |
| restore-keys: | | |
| ${{ runner.os }}-deps- | |
| - name: Install dependencies | |
| run: bun install --frozen-lockfile | |
| - name: Set environment variables | |
| env: | |
| SECRETS_CONTEXT: ${{ toJSON(secrets) }} | |
| run: | | |
| VAR_NAMES=$(bun scripts/generate-ci-env.ts) | |
| echo "$SECRETS_CONTEXT" | jq -r --argjson vars "$VAR_NAMES" ' | |
| to_entries | .[] | select(.key as $k | $vars | index($k)) | .key + "=" + .value | |
| ' >> $GITHUB_ENV | |
| echo "CODEBUFF_GITHUB_ACTIONS=true" >> $GITHUB_ENV | |
| echo "NEXT_PUBLIC_CB_ENVIRONMENT=test" >> $GITHUB_ENV | |
| echo "NEXT_PUBLIC_INFISICAL_UP=true" >> $GITHUB_ENV | |
| echo "CODEBUFF_GITHUB_TOKEN=${{ secrets.CODEBUFF_GITHUB_TOKEN }}" >> $GITHUB_ENV | |
| - name: Build SDK before tests | |
| run: cd sdk && bun run build | |
| - name: Run ${{ matrix.package }} tests | |
| uses: nick-fields/retry@v3 | |
| with: | |
| timeout_minutes: 10 | |
| max_attempts: 5 | |
| command: | | |
| cd ${{ matrix.package }} | |
| if [ "${{ matrix.package }}" = ".agents" ]; then | |
| TEST_FILES=$(find __tests__ -name '*.test.ts' ! -name '*.integration.test.ts' 2>/dev/null | sort) | |
| if [ -n "$TEST_FILES" ]; then | |
| echo "$TEST_FILES" | xargs -I {} bun test {} | |
| else | |
| echo "No regular tests found in .agents" | |
| fi | |
| elif [ "${{ matrix.package }}" = "web" ]; then | |
| bun run test --runInBand | |
| else | |
| find src -name '*.test.ts' ! -name '*.integration.test.ts' | sort | xargs -I {} bun test {} | |
| fi | |
| # - name: Open interactive debug shell | |
| # if: ${{ failure() }} | |
| # uses: mxschmitt/action-tmate@v3 | |
| # timeout-minutes: 15 # optional guard | |
| # Integration tests job | |
| test-integration: | |
| needs: [build-and-check] | |
| strategy: | |
| matrix: | |
| package: | |
| [ | |
| .agents, | |
| cli, | |
| common, | |
| packages/agent-runtime, | |
| packages/billing, | |
| packages/internal, | |
| sdk, | |
| web, | |
| ] | |
| include: | |
| - package: .agents | |
| - package: cli | |
| - package: common | |
| - package: packages/agent-runtime | |
| - package: packages/billing | |
| - package: packages/internal | |
| - package: sdk | |
| - package: web | |
| name: test-integration-${{ matrix.package }} | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Set up Bun | |
| uses: oven-sh/setup-bun@v2 | |
| with: | |
| bun-version: '1.3.5' | |
| - name: Cache dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| node_modules | |
| */node_modules | |
| packages/*/node_modules | |
| key: ${{ runner.os }}-deps-${{ hashFiles('**/bun.lock*') }} | |
| restore-keys: | | |
| ${{ runner.os }}-deps- | |
| - name: Install dependencies | |
| run: bun install --frozen-lockfile | |
| - name: Set environment variables | |
| env: | |
| SECRETS_CONTEXT: ${{ toJSON(secrets) }} | |
| run: | | |
| VAR_NAMES=$(bun scripts/generate-ci-env.ts) | |
| echo "$SECRETS_CONTEXT" | jq -r --argjson vars "$VAR_NAMES" ' | |
| to_entries | .[] | select(.key as $k | $vars | index($k)) | .key + "=" + .value | |
| ' >> $GITHUB_ENV | |
| echo "CODEBUFF_GITHUB_ACTIONS=true" >> $GITHUB_ENV | |
| echo "NEXT_PUBLIC_CB_ENVIRONMENT=test" >> $GITHUB_ENV | |
| echo "NEXT_PUBLIC_INFISICAL_UP=true" >> $GITHUB_ENV | |
| echo "CODEBUFF_GITHUB_TOKEN=${{ secrets.CODEBUFF_GITHUB_TOKEN }}" >> $GITHUB_ENV | |
| - name: Build SDK before integration tests | |
| run: cd sdk && bun run build | |
| - name: Run ${{ matrix.package }} integration tests | |
| uses: nick-fields/retry@v3 | |
| with: | |
| timeout_minutes: 15 | |
| max_attempts: 3 | |
| command: | | |
| cd ${{ matrix.package }} | |
| if [ "${{ matrix.package }}" = ".agents" ]; then | |
| # .agents e2e tests are in e2e/ directory and require real services | |
| # They are skipped in CI - run locally with: bun run test:e2e | |
| echo "Skipping .agents e2e tests in CI (require real services)" | |
| else | |
| find src -name '*.integration.test.ts' | sort | xargs -I {} bun test --timeout=60000 {} | |
| fi | |
| # E2E tests for web intentionally omitted for now. |