name: 🚀 Deploy on: push: branches: - main - dev pull_request: - main concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true permissions: actions: write contents: read jobs: lint: name: ⬣ ESLint runs-on: ubuntu-latest steps: - name: ⬇️ Checkout repo uses: actions/checkout@v3 - name: ⎔ Setup node uses: actions/setup-node@v3 with: cache: npm cache-dependency-path: ./package.json node-version: 18 - name: 📥 Install deps run: npm install - name: 🔬 Lint run: npm run lint typecheck: name: ʦ TypeScript runs-on: ubuntu-latest steps: - name: ⬇️ Checkout repo uses: actions/checkout@v3 - name: ⎔ Setup node uses: actions/setup-node@v3 with: cache: npm cache-dependency-path: ./package.json node-version: 18 - name: 📥 Install deps run: npm install - name: 🔎 Type check run: npm run typecheck --if-present vitest: name: ⚡ Vitest runs-on: ubuntu-latest steps: - name: ⬇️ Checkout repo uses: actions/checkout@v3 - name: ⎔ Setup node uses: actions/setup-node@v3 with: cache: npm cache-dependency-path: ./package.json node-version: 18 - name: 📥 Install deps run: npm install - name: ⚡ Run vitest run: npm run test -- --coverage cypress: name: ⚫️ Cypress runs-on: ubuntu-latest steps: - name: ⬇️ Checkout repo uses: actions/checkout@v3 - name: 🏄 Copy test env vars run: cp .env.example .env - name: ⎔ Setup node uses: actions/setup-node@v3 with: cache: npm cache-dependency-path: ./package.json node-version: 18 - name: 📥 Install deps run: npm install - name: 🛠 Setup Database run: npx prisma migrate reset --force - name: ⚙️ Build run: npm run build - name: 🌳 Cypress run uses: cypress-io/github-action@v5 with: start: npm run start:mocks wait-on: http://localhost:8811 env: PORT: 8811 deploy: name: 🚀 Deploy runs-on: ubuntu-latest needs: [lint, typecheck, vitest, cypress] # only build/deploy main branch on pushes if: ${{ (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') && github.event_name == 'push' }} steps: - name: ⬇️ Checkout repo uses: actions/checkout@v3 - name: 👀 Read app name uses: SebRollen/toml-action@v1.0.2 id: app_name with: file: fly.toml field: app - name: 🚀 Deploy Staging if: ${{ github.ref == 'refs/heads/dev' }} uses: superfly/flyctl-actions@1.3 with: args: deploy --remote-only --build-arg COMMIT_SHA=${{ 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' }} uses: superfly/flyctl-actions@1.3 with: args: deploy --remote-only --build-arg COMMIT_SHA=${{ github.sha }} --app ${{ steps.app_name.outputs.value }} env: FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}