123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- # 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 one concurrent deployment
- concurrency:
- group: "pages"
- cancel-in-progress: true
- jobs:
- # Build job
- build:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v3
- - name: Detect package manager
- id: detect-package-manager
- run: |
- if [ -f "${{ github.workspace }}/yarn.lock" ]; then
- echo "manager=yarn" >> $GITHUB_OUTPUT
- echo "command=install --frozen-lockfile" >> $GITHUB_OUTPUT
- echo "runner=yarn" >> $GITHUB_OUTPUT
- exit 0
- elif [ -f "${{ github.workspace }}/package.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 packager manager"
- exit 1
- fi
- - name: Setup Node
- uses: actions/setup-node@v3
- with:
- node-version: "16"
- cache: ${{ steps.detect-package-manager.outputs.manager }}
- - name: Cache node_modules
- uses: actions/cache@v3
- with:
- path: |
- ~/.npm
- ~/.cache/yarn
- key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }}
- restore-keys: ${{ runner.os }}-node-
- - name: Setup Pages
- uses: actions/configure-pages@v3
- with:
- # Automatically inject basePath in your Next.js configuration file and disable
- # server side image optimization (https://nextjs.org/docs/api-reference/next/image#unoptimized).
- #
- # You may remove this line if you want to manage the configuration yourself.
- static_site_generator: next
- - name: Restore cache
- uses: actions/cache@v3
- with:
- path: |
- .next/cache
- # Generate a new cache whenever packages or source files change.
- key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }}
- # If source files changed but packages didn't, rebuild from a prior cache.
- restore-keys: |
- ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }}-
- - name: Install dependencies
- run: ${{ steps.detect-package-manager.outputs.manager }} ${{ steps.detect-package-manager.outputs.command }}
- - name: Build with Next.js
- run: ${{ steps.detect-package-manager.outputs.runner }} next build
- - name: Static HTML export with Next.js
- run: ${{ steps.detect-package-manager.outputs.runner }} next export
- - name: Upload artifact
- uses: actions/upload-pages-artifact@v1
- with:
- path: ./out
- # Deployment job
- deploy:
- environment:
- name: github-pages
- url: ${{ steps.deployment.outputs.page_url }}
- runs-on: ubuntu-latest
- needs: build
- steps:
- - name: Deploy to GitHub Pages
- id: deployment
- uses: actions/deploy-pages@v1
|