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
- #
1
+ # Workflow for building and deploying a Next.js site to GitHub Pages
5
2
name : Deploy Next.js site to Pages
6
3
7
4
on :
8
- # Runs on pushes targeting the default branch
5
+ # Trigger on pushes to the default branch
9
6
push :
10
7
branches : ["main"]
11
8
12
- # Allows you to run this workflow manually from the Actions tab
9
+ # Allow manual triggering from the Actions tab
13
10
workflow_dispatch :
14
11
15
- # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
12
+ # Set permissions for deployment
16
13
permissions :
17
14
contents : read
18
15
pages : write
19
16
id-token : write
20
17
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.
18
+ # Allow only one deployment at a time
23
19
concurrency :
24
20
group : " pages"
25
21
cancel-in-progress : false
@@ -31,54 +27,28 @@ jobs:
31
27
steps :
32
28
- name : Checkout
33
29
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
30
+
31
+ - name : Setup Node.js
52
32
uses : actions/setup-node@v4
53
33
with :
54
34
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') }}-
35
+ cache : " yarn"
36
+
74
37
- 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
38
+ run : yarn install
39
+
40
+ - name : Configure Next.js for GitHub Pages
41
+ run : |
42
+ echo 'module.exports = { output: "export", basePath: "/<REPOSITORY-NAME>", trailingSlash: true }' > next.config.js
43
+ cat next.config.js
44
+
45
+ - name : Build Next.js site
46
+ run : yarn next build && yarn next export
47
+
78
48
- name : Upload artifact
79
49
uses : actions/upload-pages-artifact@v3
80
50
with :
81
- path : ./ out
51
+ path : out
82
52
83
53
# Deployment job
84
54
deploy :
0 commit comments