chore: migrate bootstrap and package management to pnpm #2063
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: 🚀 Deploy | |
| on: | |
| push: | |
| branches: | |
| - main | |
| - dev | |
| pull_request: {} | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| permissions: | |
| actions: write | |
| contents: read | |
| jobs: | |
| lint: | |
| name: ⬣ ESLint | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - name: ⬇️ Checkout repo | |
| uses: actions/checkout@v4 | |
| - name: ⎔ Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| with: | |
| version: 11.1.2 | |
| - name: ⎔ Setup node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: pnpm | |
| - name: 📥 Install deps | |
| run: pnpm install --frozen-lockfile | |
| - name: 🏄 Copy test env vars | |
| run: cp .env.example .env | |
| - name: 🛠 Setup Database | |
| run: pnpm exec prisma migrate deploy && pnpm exec prisma generate --sql | |
| - name: 🔬 Lint | |
| run: pnpm run lint | |
| typecheck: | |
| name: ʦ TypeScript | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - name: ⬇️ Checkout repo | |
| uses: actions/checkout@v4 | |
| - name: ⎔ Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| with: | |
| version: 11.1.2 | |
| - name: ⎔ Setup node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: pnpm | |
| - name: 📥 Install deps | |
| run: pnpm install --frozen-lockfile | |
| - name: 🏄 Copy test env vars | |
| run: cp .env.example .env | |
| - name: 🛠 Setup Database | |
| run: pnpm exec prisma migrate deploy && pnpm exec prisma generate --sql | |
| - name: 🏗 Build | |
| run: pnpm run build | |
| - name: 🔎 Type check | |
| run: pnpm run typecheck --if-present | |
| vitest: | |
| name: ⚡ Vitest | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - name: ⬇️ Checkout repo | |
| uses: actions/checkout@v4 | |
| - name: ⎔ Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| with: | |
| version: 11.1.2 | |
| - name: ⎔ Setup node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: pnpm | |
| - name: 📥 Install deps | |
| run: pnpm install --frozen-lockfile | |
| - name: 🏄 Copy test env vars | |
| run: cp .env.example .env | |
| - name: 🛠 Setup Database | |
| run: pnpm exec prisma migrate deploy && pnpm exec prisma generate --sql | |
| - name: ⚡ Run vitest | |
| run: pnpm run test -- --coverage | |
| playwright: | |
| name: 🎭 Playwright | |
| runs-on: ubuntu-22.04 | |
| timeout-minutes: 60 | |
| steps: | |
| - name: ⬇️ Checkout repo | |
| uses: actions/checkout@v4 | |
| - name: 🏄 Copy test env vars | |
| run: cp .env.example .env | |
| - name: ⎔ Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| with: | |
| version: 11.1.2 | |
| - name: ⎔ Setup node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: pnpm | |
| - name: 📥 Install deps | |
| run: pnpm install --frozen-lockfile | |
| - name: 📥 Install Playwright Browsers | |
| run: pnpm run test:e2e:install | |
| - name: 🛠 Setup Database | |
| run: pnpm exec prisma migrate deploy && pnpm exec prisma generate --sql | |
| - name: 🏦 Cache Database | |
| id: db-cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: prisma/data.db | |
| key: | |
| db-cache-schema_${{ hashFiles('./prisma/schema.prisma') | |
| }}-migrations_${{ hashFiles('./prisma/migrations/*/migration.sql') | |
| }}-seed_${{ hashFiles('./prisma/seed.ts', './prisma.config.ts') | |
| }} | |
| - name: 🌱 Seed Database | |
| if: steps.db-cache.outputs.cache-hit != 'true' | |
| run: pnpm exec prisma migrate reset --force | |
| - name: 🏗 Build | |
| run: pnpm run build | |
| - name: 🎭 Playwright tests | |
| run: pnpm exec playwright test | |
| - name: 📊 Upload report | |
| uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: playwright-report | |
| path: playwright-report/ | |
| retention-days: 30 | |
| container: | |
| name: 📦 Prepare Container | |
| runs-on: ubuntu-24.04 | |
| # only prepare container on pushes | |
| if: ${{ github.event_name == 'push' }} | |
| steps: | |
| - name: ⬇️ Checkout repo | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 50 | |
| - name: 👀 Read app name | |
| uses: SebRollen/toml-action@v1.2.0 | |
| id: app_name | |
| with: | |
| file: 'fly.toml' | |
| field: 'app' | |
| - name: 🎈 Setup Fly | |
| uses: superfly/flyctl-actions/setup-flyctl@1.5 | |
| - name: 📦 Build Staging Container | |
| if: ${{ github.ref == 'refs/heads/dev' }} | |
| run: | | |
| flyctl deploy \ | |
| --build-only \ | |
| --push \ | |
| --image-label ${{ github.sha }} \ | |
| --build-arg COMMIT_SHA=${{ github.sha }} \ | |
| --app ${{ steps.app_name.outputs.value }}-staging | |
| env: | |
| FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }} | |
| - name: 📦 Build Production Container | |
| if: ${{ github.ref == 'refs/heads/main' }} | |
| run: | | |
| flyctl deploy \ | |
| --build-only \ | |
| --push \ | |
| --image-label ${{ github.sha }} \ | |
| --build-arg COMMIT_SHA=${{ github.sha }} \ | |
| --build-secret SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }} \ | |
| --app ${{ steps.app_name.outputs.value }} | |
| env: | |
| FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }} | |
| deploy: | |
| name: 🚀 Deploy | |
| runs-on: ubuntu-24.04 | |
| needs: [lint, typecheck, vitest, playwright, container] | |
| # only deploy on pushes | |
| if: ${{ github.event_name == 'push' }} | |
| steps: | |
| - name: ⬇️ Checkout repo | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: '50' | |
| - name: 👀 Read app name | |
| uses: SebRollen/toml-action@v1.2.0 | |
| id: app_name | |
| with: | |
| file: 'fly.toml' | |
| field: 'app' | |
| - name: 🎈 Setup Fly | |
| uses: superfly/flyctl-actions/setup-flyctl@1.5 | |
| - name: 🚀 Deploy Staging | |
| if: ${{ github.ref == 'refs/heads/dev' }} | |
| run: | | |
| flyctl deploy \ | |
| --image "registry.fly.io/${{ steps.app_name.outputs.value }}-staging:${{ github.sha }}" \ | |
| --app ${{ steps.app_name.outputs.value }}-staging | |
| env: | |
| FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }} | |
| - name: 🚀 Deploy Production | |
| if: ${{ github.ref == 'refs/heads/main' }} | |
| run: | | |
| flyctl deploy \ | |
| --image "registry.fly.io/${{ steps.app_name.outputs.value }}:${{ github.sha }}" | |
| env: | |
| FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }} |