Format, lint on PR, require all changes be committed #3
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
| 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 |