Skip to content

fix(cli): fix paste handling in ask_user custom input with prop-drive… #5512

fix(cli): fix paste handling in ask_user custom input with prop-drive…

fix(cli): fix paste handling in ask_user custom input with prop-drive… #5512

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@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:
fail-fast: false
matrix:
package:
[
.agents,
cli,
common,
packages/agent-runtime,
packages/billing,
packages/internal,
sdk,
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: 3
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 (packages that don't need a database)
test-integration:
needs: [build-and-check]
strategy:
fail-fast: false
matrix:
package:
[
cli,
common,
packages/agent-runtime,
packages/internal,
sdk,
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 }}
TEST_FILES=$(find src -name '*.integration.test.ts' 2>/dev/null | sort)
if [ -n "$TEST_FILES" ]; then
echo "$TEST_FILES" | xargs -I {} bun test --timeout=60000 {}
else
echo "No integration tests found in ${{ matrix.package }}"
fi
# Billing integration tests (requires PostgreSQL)
# DATABASE_URL is set at job level to override any secrets injection
test-billing-integration:
needs: [build-and-check]
name: test-integration-packages/billing
runs-on: ubuntu-latest
env:
DATABASE_URL: postgresql://postgres:postgres@127.0.0.1:5432/testdb
services:
postgres:
image: postgres:16-alpine
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: testdb
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
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
# Override any DATABASE_URL injected from secrets with our test container URL
- name: Override DATABASE_URL for test container
run: echo "DATABASE_URL=postgresql://postgres:postgres@127.0.0.1:5432/testdb" >> $GITHUB_ENV
- name: Setup database schema
uses: nick-fields/retry@v3
env:
DATABASE_URL: postgresql://postgres:postgres@127.0.0.1:5432/testdb
with:
timeout_minutes: 2
max_attempts: 3
command: cd packages/internal && bun run db:migrate
- name: Run billing integration tests
uses: nick-fields/retry@v3
with:
timeout_minutes: 15
max_attempts: 3
command: |
cd packages/billing
TEST_FILES=$(find src -name '*.integration.test.ts' 2>/dev/null | sort)
if [ -n "$TEST_FILES" ]; then
echo "$TEST_FILES" | xargs -I {} bun test --timeout=60000 {}
else
echo "No integration tests found in packages/billing"
fi
# E2E tests for web intentionally omitted for now.