1- name : Deploy to GitHub Pages
1+ # Sample workflow for building and deploying a Next.js site to GitHub Pages
2+ #
3+ # To get started with Next.js see: https://nextjs.org/docs/getting-started
4+ #
5+ name : Deploy Next.js site to Pages
26
37on :
8+ # Runs on pushes targeting the default branch
49 push :
5- branches : [ main ]
10+ branches : ["main"]
11+
12+ # Allows you to run this workflow manually from the Actions tab
613 workflow_dispatch :
714
815# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
@@ -11,40 +18,76 @@ permissions:
1118 pages : write
1219 id-token : write
1320
14- # Allow only one concurrent deployment
21+ # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
22+ # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
1523concurrency :
1624 group : " pages"
1725 cancel-in-progress : false
1826
1927jobs :
20- build-and-deploy :
28+ # Build job
29+ build :
2130 runs-on : ubuntu-latest
22-
2331 steps :
24- - name : Checkout
25- uses : actions/checkout@v4
26-
27- - name : Setup Node.js
28- uses : actions/setup-node@v4
29- with :
30- node-version : ' 20'
31- cache : ' npm'
32-
33- - name : Install dependencies
34- run : npm ci
35-
36- - name : Build static site
37- run : npm run build
32+ - name : Checkout
33+ uses : actions/checkout@v4
34+ - name : Detect package manager
35+ id : detect-package-manager
36+ run : |
37+ if [ -f "${{ github.workspace }}/yarn.lock" ]; then
38+ echo "manager=yarn" >> $GITHUB_OUTPUT
39+ echo "command=install" >> $GITHUB_OUTPUT
40+ echo "runner=yarn" >> $GITHUB_OUTPUT
41+ exit 0
42+ elif [ -f "${{ github.workspace }}/package.json" ]; then
43+ echo "manager=npm" >> $GITHUB_OUTPUT
44+ echo "command=ci" >> $GITHUB_OUTPUT
45+ echo "runner=npx --no-install" >> $GITHUB_OUTPUT
46+ exit 0
47+ else
48+ echo "Unable to determine package manager"
49+ exit 1
50+ fi
51+ - name : Setup Node
52+ uses : actions/setup-node@v4
53+ with :
54+ node-version : " 20"
55+ cache : ${{ steps.detect-package-manager.outputs.manager }}
56+ - name : Setup Pages
57+ uses : actions/configure-pages@v5
58+ with :
59+ # Automatically inject basePath in your Next.js configuration file and disable
60+ # server side image optimization (https://nextjs.org/docs/api-reference/next/image#unoptimized).
61+ #
62+ # You may remove this line if you want to manage the configuration yourself.
63+ static_site_generator : next
64+ - name : Restore cache
65+ uses : actions/cache@v4
66+ with :
67+ path : |
68+ .next/cache
69+ # Generate a new cache whenever packages or source files change.
70+ key : ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }}
71+ # If source files changed but packages didn't, rebuild from a prior cache.
72+ restore-keys : |
73+ ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }}-
74+ - name : Install dependencies
75+ run : ${{ steps.detect-package-manager.outputs.manager }} ${{ steps.detect-package-manager.outputs.command }}
76+ - name : Build with Next.js
77+ run : ${{ steps.detect-package-manager.outputs.runner }} next build
78+ - name : Upload artifact
79+ uses : actions/upload-pages-artifact@v3
80+ with :
81+ path : ./out
3882
39- - name : Setup Pages
40- uses : actions/configure-pages@v4
41-
42- - name : Upload artifact
43- uses : actions/upload-pages-artifact@v3
44- with :
45- path : ./out
46-
47-
48- - name : Deploy to GitHub Pages
49- id : deployment
50- uses : actions/deploy-pages@v4
83+ # Deployment job
84+ deploy :
85+ environment :
86+ name : github-pages
87+ url : ${{ steps.deployment.outputs.page_url }}
88+ runs-on : ubuntu-latest
89+ needs : build
90+ steps :
91+ - name : Deploy to GitHub Pages
92+ id : deployment
93+ uses : actions/deploy-pages@v4
0 commit comments