feat(backend): implement outbox pattern for reliable event publishing #917
Workflow file for this run
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: Monorepo CI | |
| on: | |
| pull_request: | |
| push: | |
| branches: [ main ] | |
| jobs: | |
| changes: | |
| name: Detect changed packages | |
| runs-on: ubuntu-latest | |
| outputs: | |
| frontend: ${{ steps.filter.outputs.frontend }} | |
| backend: ${{ steps.filter.outputs.backend }} | |
| contracts: ${{ steps.filter.outputs.contracts }} | |
| shared: ${{ steps.filter.outputs.shared }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Path filter | |
| id: filter | |
| uses: dorny/paths-filter@v3 | |
| with: | |
| filters: | | |
| frontend: | |
| - 'frontend/**' | |
| - 'packages/api-schemas/**' | |
| backend: | |
| - 'backend/**' | |
| contracts: | |
| - 'contracts/**' | |
| - 'Cargo.toml' | |
| - 'Cargo.lock' | |
| shared: | |
| - 'packages/api-schemas/**' | |
| - 'frontend/src/types/**' | |
| - 'backend/openapi.json' | |
| - 'Cargo.toml' | |
| - 'Cargo.lock' | |
| frontend-lint-test: | |
| name: Frontend lint + test | |
| runs-on: ubuntu-latest | |
| needs: changes | |
| if: needs.changes.outputs.frontend == 'true' | |
| defaults: | |
| run: | |
| working-directory: frontend | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20 | |
| cache: npm | |
| cache-dependency-path: frontend/package-lock.json | |
| - name: Build shared API schemas | |
| run: npm ci && npm run build | |
| working-directory: packages/api-schemas | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Lint | |
| run: npm run lint | |
| - name: Unit tests | |
| run: npm run test:run | |
| frontend-env-validation: | |
| name: Frontend env validation script | |
| runs-on: ubuntu-latest | |
| needs: changes | |
| if: needs.changes.outputs.frontend == 'true' || needs.changes.outputs.contracts == 'true' | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20 | |
| - name: Install root dependencies | |
| run: npm ci | |
| - name: Build shared API schemas | |
| run: npm ci && npm run build | |
| working-directory: packages/api-schemas | |
| - name: Install frontend dependencies | |
| run: npm ci | |
| working-directory: frontend | |
| - name: Run frontend env validation unit tests | |
| run: npm run test:validate-frontend-env | |
| frontend-build: | |
| name: Frontend build | |
| runs-on: ubuntu-latest | |
| needs: [changes, frontend-env-validation] | |
| if: needs.changes.outputs.frontend == 'true' | |
| defaults: | |
| run: | |
| working-directory: frontend | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20 | |
| cache: npm | |
| cache-dependency-path: frontend/package-lock.json | |
| - name: Build shared API schemas | |
| run: npm ci && npm run build | |
| working-directory: packages/api-schemas | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Build | |
| run: npm run build | |
| backend-lint-test: | |
| name: Backend lint + test | |
| runs-on: ubuntu-latest | |
| needs: changes | |
| if: needs.changes.outputs.backend == 'true' | |
| defaults: | |
| run: | |
| working-directory: backend | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20 | |
| cache: npm | |
| cache-dependency-path: backend/package-lock.json | |
| - name: Build shared API schemas | |
| run: npm ci && npm run build | |
| working-directory: packages/api-schemas | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Apply database migrations | |
| run: npx prisma migrate deploy | |
| - name: Run npm audit | |
| run: npm audit --audit-level=high | |
| - name: Lint | |
| run: npm run lint | |
| - name: Unit tests | |
| run: npm run test | |
| backend-build: | |
| name: Backend build | |
| runs-on: ubuntu-latest | |
| needs: changes | |
| if: needs.changes.outputs.backend == 'true' | |
| defaults: | |
| run: | |
| working-directory: backend | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20 | |
| cache: npm | |
| cache-dependency-path: backend/package-lock.json | |
| - name: Build shared API schemas | |
| run: npm ci && npm run build | |
| working-directory: packages/api-schemas | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Build | |
| run: npm run build | |
| api-schemas-test: | |
| name: Shared API schemas typecheck + test | |
| runs-on: ubuntu-latest | |
| needs: changes | |
| if: needs.changes.outputs.shared == 'true' | |
| defaults: | |
| run: | |
| working-directory: packages/api-schemas | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20 | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Typecheck | |
| run: npm run typecheck | |
| - name: Unit tests | |
| run: npm run test:run | |
| contracts-ci: | |
| name: Contracts lint + test + build | |
| runs-on: ubuntu-latest | |
| needs: changes | |
| if: needs.changes.outputs.contracts == 'true' | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up Rust toolchain | |
| uses: actions-rs/toolchain@v1 | |
| with: | |
| toolchain: stable | |
| components: clippy | |
| profile: minimal | |
| override: true | |
| - name: Cache Cargo registry | |
| uses: actions/cache@v3 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-cargo- | |
| - name: Run cargo fmt check | |
| run: cargo fmt --all -- --check | |
| - name: Run clippy (share-price math) | |
| run: cargo clippy -p share-price-math --all-targets -- -D warnings | |
| working-directory: contracts | |
| - name: Run share-price math unit tests | |
| run: cargo test -p share-price-math --locked --quiet | |
| working-directory: contracts |