Merge pull request #73 from AnzoBenjamin/feat/task-memory-evidence-pi… #320
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@v6 | |
| - name: Set up Bun | |
| uses: oven-sh/setup-bun@v2 | |
| with: | |
| bun-version: '1.3.5' | |
| - name: Cache dependencies | |
| uses: actions/cache@v5 | |
| 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.OPENBUFF_GITHUB_TOKEN }}" >> $GITHUB_ENV | |
| - name: Check generated tool definitions are current | |
| run: | | |
| bun run generate-tool-definitions | |
| git diff --exit-code -- agents/types/tools.ts common/src/templates/initial-agents-dir/types/tools.ts cli/src/data/initial-agent-type-sources.generated.ts | |
| - name: Memory drift + config sync | |
| run: | | |
| # Both guards are blocking gates (must pass clean). | |
| bun --cwd=scripts run guard:memory-drift | |
| bun --cwd=scripts run guard:sync-agent-config | |
| - name: Typecheck | |
| run: bun run typecheck | |
| # - 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: | |
| fail-fast: false | |
| matrix: | |
| package: | |
| [ | |
| .agents, | |
| agents, | |
| cli, | |
| common, | |
| packages/agent-runtime, | |
| packages/indexer, | |
| packages/internal, | |
| sdk, | |
| ] | |
| name: test-${{ matrix.package }} | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| - name: Set up Bun | |
| uses: oven-sh/setup-bun@v2 | |
| with: | |
| bun-version: '1.3.5' | |
| - name: Cache dependencies | |
| uses: actions/cache@v5 | |
| 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.OPENBUFF_GITHUB_TOKEN }}" >> $GITHUB_ENV | |
| - name: Build SDK before tests | |
| run: cd sdk && bun run build | |
| - name: Prebuild CLI agents | |
| if: matrix.package == 'cli' | |
| run: cd cli && bun run prebuild:agents | |
| - name: Run ${{ matrix.package }} tests | |
| uses: nick-fields/retry@v3 | |
| with: | |
| timeout_minutes: 10 | |
| max_attempts: 3 | |
| command: | | |
| cd ${{ matrix.package }} | |
| if [ "${{ matrix.package }}" = ".agents" ] || [ "${{ matrix.package }}" = "agents" ]; then | |
| bun run test | |
| else | |
| # Run all non-integration tests in a single bun test invocation | |
| # This avoids xargs exit code issues with orphaned child processes | |
| TEST_FILES=$(find src -name '*.test.ts' ! -name '*.integration.test.ts' 2>/dev/null | sort | tr '\n' ' ') | |
| if [ -n "$TEST_FILES" ]; then | |
| bun test $TEST_FILES | |
| else | |
| echo "No tests found in ${{ matrix.package }}" | |
| fi | |
| fi | |
| # - name: Open interactive debug shell | |
| # if: ${{ failure() }} | |
| # uses: mxschmitt/action-tmate@v3 | |
| # timeout-minutes: 15 # optional guard | |
| # Integration tests job (packages that don't need a database) | |
| test-integration: | |
| needs: [build-and-check] | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| package: [cli, common, packages/agent-runtime, sdk] | |
| name: test-integration-${{ matrix.package }} | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| - name: Set up Bun | |
| uses: oven-sh/setup-bun@v2 | |
| with: | |
| bun-version: '1.3.5' | |
| - name: Cache dependencies | |
| uses: actions/cache@v5 | |
| 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.OPENBUFF_GITHUB_TOKEN }}" >> $GITHUB_ENV | |
| - name: Build SDK before integration tests | |
| run: cd sdk && bun run build | |
| - name: Prebuild CLI agents | |
| if: matrix.package == 'cli' | |
| run: cd cli && bun run prebuild:agents | |
| - name: Run ${{ matrix.package }} integration tests | |
| uses: nick-fields/retry@v3 | |
| with: | |
| timeout_minutes: 15 | |
| max_attempts: 3 | |
| command: | | |
| cd ${{ matrix.package }} | |
| TEST_FILES=$(find src -name '*.integration.test.ts' 2>/dev/null | sort | tr '\n' ' ') | |
| if [ -n "$TEST_FILES" ]; then | |
| bun test --timeout=60000 $TEST_FILES | |
| else | |
| echo "No integration tests found in ${{ matrix.package }}" | |
| fi | |
| # E2E tests for web intentionally omitted for now. |