-
Notifications
You must be signed in to change notification settings - Fork 2
136 lines (119 loc) · 5.46 KB
/
Copy pathdeploy.yml
File metadata and controls
136 lines (119 loc) · 5.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
name: Deploy to GitHub Pages
on:
push:
branches: [main]
workflow_dispatch:
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: 'pages'
cancel-in-progress: false
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Setup pnpm
uses: pnpm/action-setup@v6
with:
version: 10.16.1
- name: Setup Node.js
uses: actions/setup-node@v5
with:
node-version: '22'
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Verify PageSpeed API Key
run: |
if [ -z "${{ secrets.NEXT_PUBLIC_PAGESPEED_API_KEY }}" ]; then
echo "::error::NEXT_PUBLIC_PAGESPEED_API_KEY secret is empty or not set"
exit 1
fi
echo "::notice::PageSpeed API key is set (length: ${#NEXT_PUBLIC_PAGESPEED_API_KEY})"
env:
NEXT_PUBLIC_PAGESPEED_API_KEY: ${{ secrets.NEXT_PUBLIC_PAGESPEED_API_KEY }}
- name: Build Next.js app
run: pnpm run build
env:
NEXT_PUBLIC_AUTHOR_AVATAR: ${{ vars.NEXT_PUBLIC_AUTHOR_AVATAR }}
NEXT_PUBLIC_AUTHOR_BIO: ${{ vars.NEXT_PUBLIC_AUTHOR_BIO }}
NEXT_PUBLIC_AUTHOR_BLUESKY: ${{ vars.NEXT_PUBLIC_AUTHOR_BLUESKY }}
NEXT_PUBLIC_AUTHOR_EMAIL: ${{ vars.NEXT_PUBLIC_AUTHOR_EMAIL }}
NEXT_PUBLIC_AUTHOR_GITHUB: ${{ vars.NEXT_PUBLIC_AUTHOR_GITHUB }}
NEXT_PUBLIC_AUTHOR_LINKEDIN: ${{ vars.NEXT_PUBLIC_AUTHOR_LINKEDIN }}
NEXT_PUBLIC_AUTHOR_MASTODON: ${{ vars.NEXT_PUBLIC_AUTHOR_MASTODON }}
NEXT_PUBLIC_AUTHOR_NAME: ${{ vars.NEXT_PUBLIC_AUTHOR_NAME }}
NEXT_PUBLIC_AUTHOR_ROLE: ${{ vars.NEXT_PUBLIC_AUTHOR_ROLE }}
NEXT_PUBLIC_AUTHOR_TWITCH: ${{ vars.NEXT_PUBLIC_AUTHOR_TWITCH }}
NEXT_PUBLIC_AUTHOR_TWITTER: ${{ vars.NEXT_PUBLIC_AUTHOR_TWITTER }}
NEXT_PUBLIC_AUTHOR_WEBSITE: ${{ vars.NEXT_PUBLIC_AUTHOR_WEBSITE }}
# NEXT_PUBLIC_BASE_PATH intentionally omitted - auto-detected from GITHUB_REPOSITORY
NEXT_PUBLIC_BASE_URL: ${{ vars.NEXT_PUBLIC_BASE_URL }}
NEXT_PUBLIC_CALENDAR_PROVIDER: ${{ vars.NEXT_PUBLIC_CALENDAR_PROVIDER }}
NEXT_PUBLIC_CALENDAR_URL: ${{ vars.NEXT_PUBLIC_CALENDAR_URL }}
NEXT_PUBLIC_DISQUS_SHORTNAME: ${{ vars.NEXT_PUBLIC_DISQUS_SHORTNAME }}
NEXT_PUBLIC_EMAILJS_PUBLIC_KEY: ${{ secrets.NEXT_PUBLIC_EMAILJS_PUBLIC_KEY }}
NEXT_PUBLIC_EMAILJS_SERVICE_ID: ${{ vars.NEXT_PUBLIC_EMAILJS_SERVICE_ID }}
NEXT_PUBLIC_EMAILJS_TEMPLATE_ID: ${{ vars.NEXT_PUBLIC_EMAILJS_TEMPLATE_ID }}
NEXT_PUBLIC_GA_MEASUREMENT_ID: ${{ vars.NEXT_PUBLIC_GA_MEASUREMENT_ID }}
NEXT_PUBLIC_PAGESPEED_API_KEY: ${{ secrets.NEXT_PUBLIC_PAGESPEED_API_KEY }}
NEXT_PUBLIC_PROJECT_NAME: ${{ vars.NEXT_PUBLIC_PROJECT_NAME }}
NEXT_PUBLIC_PROJECT_OWNER: ${{ vars.NEXT_PUBLIC_PROJECT_OWNER }}
NEXT_PUBLIC_SENTRY_DSN: ${{ secrets.NEXT_PUBLIC_SENTRY_DSN }}
NEXT_PUBLIC_SITE_URL: ${{ vars.NEXT_PUBLIC_SITE_URL }}
NEXT_PUBLIC_SOCIAL_PLATFORMS: ${{ vars.NEXT_PUBLIC_SOCIAL_PLATFORMS }}
NEXT_PUBLIC_WEB3FORMS_ACCESS_KEY: ${{ secrets.NEXT_PUBLIC_WEB3FORMS_ACCESS_KEY }}
NEXT_PUBLIC_DEPLOY_URL: ${{ vars.NEXT_PUBLIC_DEPLOY_URL }}
NEXT_PUBLIC_SUPABASE_URL: ${{ vars.NEXT_PUBLIC_SUPABASE_URL }}
NEXT_PUBLIC_SUPABASE_ANON_KEY: ${{ vars.NEXT_PUBLIC_SUPABASE_ANON_KEY }}
- name: Build Storybook
run: pnpm run build-storybook
- name: Add cache busting and merge outputs
run: |
# Create merged output directory
mkdir -p merged-output
# Check if Next.js build output exists and copy it
if [ -d "out" ]; then
echo "Copying Next.js build from 'out' directory..."
cp -r out/* merged-output/
else
echo "Warning: 'out' directory not found. The Next.js build may have failed."
# Create a minimal index.html to prevent complete failure
echo "<html><body><h1>Build Error</h1><p>The Next.js build did not complete successfully.</p></body></html>" > merged-output/index.html
fi
# Check if Storybook build exists and copy it
if [ -d "storybook-static" ]; then
echo "Copying Storybook build..."
cp -r storybook-static merged-output/storybook
# Add build timestamp to force cache refresh
echo "Build: $(date -u +'%Y-%m-%d %H:%M:%S UTC')" > merged-output/storybook/BUILD_TIME.txt
else
echo "Warning: 'storybook-static' directory not found. Storybook build may have failed."
fi
# Create _headers file for cache control (GitHub Pages doesn't use it but good practice)
cat > merged-output/_headers << EOF
/storybook/*
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0
/storybook/static/*
Cache-Control: public, max-age=31536000, immutable
EOF
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: ./merged-output
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build-and-deploy
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v5