# Based on https://github.com/actions/starter-workflows/blob/main/pages/nextjs.yml name: Frontend CI/CD on: push: branches: ["main"] paths: - frontend/** - json/** pull_request: branches: ["main"] types: [opened, synchronize, reopened, edited] paths: - frontend/** - json/** workflow_dispatch: permissions: contents: read concurrency: group: pages-${{ github.ref }} cancel-in-progress: false jobs: build: runs-on: ubuntu-latest defaults: run: working-directory: frontend # Set default working directory for all run steps steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Node uses: actions/setup-node@v4 with: node-version: "20" cache: npm cache-dependency-path: frontend/package-lock.json - name: Install dependencies run: npm ci --prefer-offline --legacy-peer-deps - name: Run tests run: npm run test - name: Configure Next.js for pages uses: actions/configure-pages@v5 with: static_site_generator: next - name: Build with Next.js run: npm run build - name: Upload artifact if: github.ref == 'refs/heads/main' uses: actions/upload-pages-artifact@v3 with: path: frontend/out deploy: runs-on: ubuntu-latest needs: build if: github.ref == 'refs/heads/main' permissions: pages: write id-token: write environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} steps: - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4