diff --git a/.github/workflows/nextjs.yml b/.github/workflows/nextjs.yml index 7626a8e0c3..df71c33dab 100644 --- a/.github/workflows/nextjs.yml +++ b/.github/workflows/nextjs.yml @@ -1,92 +1,67 @@ -# Sample workflow for building and deploying a Next.js site to GitHub Pages -# -# To get started with Next.js see: https://nextjs.org/docs/getting-started -# name: Deploy Next.js site to Pages on: - # Runs on pushes targeting the default branch push: branches: ["main"] - - # Allows you to run this workflow manually from the Actions tab workflow_dispatch: -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages permissions: contents: read pages: write id-token: write -# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. -# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. concurrency: group: "pages" cancel-in-progress: false jobs: - # Build job build: runs-on: ubuntu-latest steps: + # Checkout repository - name: Checkout uses: actions/checkout@v4 - - name: Setup Node + # Setup Node.js environment + - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: "20" - cache: "npm" - - - name: Detect package manager - id: detect-package-manager - run: | - if [ -f "frontend/yarn.lock" ]; then - echo "manager=yarn" >> $GITHUB_OUTPUT - echo "command=install" >> $GITHUB_OUTPUT - echo "runner=yarn" >> $GITHUB_OUTPUT - exit 0 - elif [ -f "frontend/package-lock.json" ]; then - echo "manager=npm" >> $GITHUB_OUTPUT - echo "command=ci" >> $GITHUB_OUTPUT - echo "runner=npx --no-install" >> $GITHUB_OUTPUT - exit 0 - else - echo "Unable to determine package manager" - exit 1 - fi + # Restore cache based on lock files inside the frontend directory - name: Restore cache uses: actions/cache@v4 with: - path: | - frontend/.next/cache - # Generate a new cache whenever packages or source files change. - key: ${{ runner.os }}-nextjs-${{ hashFiles('frontend/**/package-lock.json', 'frontend/**/yarn.lock') }}-${{ hashFiles('frontend/**/*.[jt]s', 'frontend/**/*.[jt]sx') }} - # If source files changed but packages didn't, rebuild from a prior cache. + path: frontend/node_modules + # Generate a cache key based on the lock file inside frontend directory + key: ${{ runner.os }}-node-${{ hashFiles('frontend/package-lock.json', 'frontend/yarn.lock') }} restore-keys: | - ${{ runner.os }}-nextjs-${{ hashFiles('frontend/**/package-lock.json', 'frontend/**/yarn.lock') }}- + ${{ runner.os }}-node- + # Install dependencies inside the frontend directory - name: Install dependencies - run: ${{ steps.detect-package-manager.outputs.manager }} ${{ steps.detect-package-manager.outputs.command }} - working-directory: frontend + run: | + cd frontend + npm ci # or 'yarn install' if you're using Yarn - - name: Build with Next.js - run: ${{ steps.detect-package-manager.outputs.runner }} next build - working-directory: frontend + # Build the Next.js application + - name: Build the app + run: | + cd frontend + npm run build # or 'yarn build' if you're using Yarn - - name: Upload artifact + # Upload the built artifacts to be deployed to GitHub Pages + - name: Upload build output uses: actions/upload-pages-artifact@v3 with: - path: frontend/out + path: frontend/out # Adjust if your Next.js output path differs - # Deployment job deploy: + needs: build + runs-on: ubuntu-latest environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - needs: build steps: - name: Deploy to GitHub Pages id: deployment