Skip to content

Merge pull request #73 from AnzoBenjamin/feat/task-memory-evidence-pi… #320

Merge pull request #73 from AnzoBenjamin/feat/task-memory-evidence-pi…

Merge pull request #73 from AnzoBenjamin/feat/task-memory-evidence-pi… #320

Workflow file for this run

# 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.