Skip to content

Format, lint on PR, require all changes be committed #3

Format, lint on PR, require all changes be committed

Format, lint on PR, require all changes be committed #3

Workflow file for this run

name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
unit-tests:
name: Unit Tests
runs-on: ubuntu-latest
# unit tests don't need environment variables - they test pure functions
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Parse .tool-versions
uses: wistia/parse-tool-versions@v2.1.1
- name: Setup Bun
uses: oven-sh/setup-bun@v1
with:
bun-version: '${{ env.BUN }}'
- name: Install dependencies
run: bun install
- name: Run unit tests
run: bun test:unit
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Parse .tool-versions
uses: wistia/parse-tool-versions@v2.1.1
- name: Setup Bun
uses: oven-sh/setup-bun@v1
with:
bun-version: '${{ env.BUN }}'
- name: Run linters and formatters
run: |
bun install
bun run format
bun run lint:fix
bun run lint
- name: Fail if source files changed
run: |
# Check for changes excluding bun.lock (platform-specific)
CHANGED_FILES=$(git status --porcelain | grep -v "bun.lock" || true)
if [[ -z "$CHANGED_FILES" ]]; then
echo "✅ No source file changes detected."
exit 0
fi
echo "❌ Code is not properly formatted. Please run 'bun run format && bun run lint:fix' and commit the changes."
echo "$CHANGED_FILES"
exit 1
integration-tests:
name: Integration Tests
runs-on: ubuntu-latest
needs: unit-tests # run after unit tests pass
# these are placeholders which is fine for integration tests
env:
KV_URL: redis://localhost:6379
KV_REST_API_READ_ONLY_TOKEN: test-read-only-token
KV_REST_API_TOKEN: test-api-token
KV_REST_API_URL: https://test-kv-api.example.com
SUPABASE_SERVICE_ROLE_KEY: test-service-role-key
INFRA_API_URL: https://api.e2b-test.dev
BILLING_API_URL: https://billing.e2b-test.dev
NEXT_PUBLIC_E2B_DOMAIN: e2b-test.dev
NEXT_PUBLIC_POSTHOG_KEY: test-posthog-key
NEXT_PUBLIC_SUPABASE_URL: https://test-supabase-url.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY: test-supabase-anon-key
NEXT_PUBLIC_STRIPE_BILLING_URL: https://test-stripe-billing.example.com
NEXT_PUBLIC_SCAN: 0
NEXT_PUBLIC_MOCK_DATA: 1
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Parse .tool-versions
uses: wistia/parse-tool-versions@v2.1.1
- name: Setup Bun
uses: oven-sh/setup-bun@v1
with:
bun-version: '${{ env.BUN }}'
- name: Install dependencies
run: bun install
- name: Run integration tests
run: bun test:integration