Skip to content

Pipeline

Pipeline #1

Workflow file for this run

name: CI PR
on:
pull_request:
branches: [main]
push:
branches: [main]
concurrency:
group: ci-pr-${{ github.ref }}
cancel-in-progress: true
jobs:
quick-gate:
name: Lint + Typecheck (Fail Fast)
runs-on: ubuntu-latest
timeout-minutes: 8
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: 1.1.38
- name: Cache Bun and node_modules
uses: actions/cache@v4
with:
path: |
~/.bun/install/cache
node_modules
key: bun-${{ runner.os }}-${{ hashFiles('bun.lock') }}
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Lint
run: bun run lint
- name: Typecheck
run: bun run typecheck
unit-tests:
name: Unit Tests
needs: quick-gate
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: 1.1.38
- name: Cache Bun and node_modules
uses: actions/cache@v4
with:
path: |
~/.bun/install/cache
node_modules
key: bun-${{ runner.os }}-${{ hashFiles('bun.lock') }}
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Run unit tests
run: bun run test:unit
integration-tests:
name: Integration Tests
needs: quick-gate
runs-on: ubuntu-latest
timeout-minutes: 12
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: 1.1.38
- name: Cache Bun and node_modules
uses: actions/cache@v4
with:
path: |
~/.bun/install/cache
node_modules
key: bun-${{ runner.os }}-${{ hashFiles('bun.lock') }}
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Run integration tests
run: bun run test:integration
coverage-gate:
name: Coverage Gate
needs: [unit-tests, integration-tests]
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: 1.1.38
- name: Cache Bun and node_modules
uses: actions/cache@v4
with:
path: |
~/.bun/install/cache
node_modules
key: bun-${{ runner.os }}-${{ hashFiles('bun.lock') }}
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Run full coverage gate
run: bun run test
- name: Upload coverage report
uses: actions/upload-artifact@v4
if: always()
with:
name: coverage-full
path: coverage