Skip to content

feat(docker): Add self-hosted local Supabase via Docker Compose profiles #155

feat(docker): Add self-hosted local Supabase via Docker Compose profiles

feat(docker): Add self-hosted local Supabase via Docker Compose profiles #155

Workflow file for this run

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@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10.16.1
- name: Setup Node.js
uses: actions/setup-node@v4
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: ${{ secrets.NEXT_PUBLIC_AUTHOR_AVATAR }}
NEXT_PUBLIC_AUTHOR_BIO: ${{ secrets.NEXT_PUBLIC_AUTHOR_BIO }}
NEXT_PUBLIC_AUTHOR_BLUESKY: ${{ secrets.NEXT_PUBLIC_AUTHOR_BLUESKY }}
NEXT_PUBLIC_AUTHOR_EMAIL: ${{ secrets.NEXT_PUBLIC_AUTHOR_EMAIL }}
NEXT_PUBLIC_AUTHOR_GITHUB: ${{ secrets.NEXT_PUBLIC_AUTHOR_GITHUB }}
NEXT_PUBLIC_AUTHOR_LINKEDIN: ${{ secrets.NEXT_PUBLIC_AUTHOR_LINKEDIN }}
NEXT_PUBLIC_AUTHOR_MASTODON: ${{ secrets.NEXT_PUBLIC_AUTHOR_MASTODON }}
NEXT_PUBLIC_AUTHOR_NAME: ${{ secrets.NEXT_PUBLIC_AUTHOR_NAME }}
NEXT_PUBLIC_AUTHOR_ROLE: ${{ secrets.NEXT_PUBLIC_AUTHOR_ROLE }}
NEXT_PUBLIC_AUTHOR_TWITCH: ${{ secrets.NEXT_PUBLIC_AUTHOR_TWITCH }}
NEXT_PUBLIC_AUTHOR_TWITTER: ${{ secrets.NEXT_PUBLIC_AUTHOR_TWITTER }}
NEXT_PUBLIC_AUTHOR_WEBSITE: ${{ secrets.NEXT_PUBLIC_AUTHOR_WEBSITE }}
# NEXT_PUBLIC_BASE_PATH removed - let auto-detection set it from GITHUB_ACTIONS
NEXT_PUBLIC_BASE_URL: ${{ secrets.NEXT_PUBLIC_BASE_URL }}
NEXT_PUBLIC_CALENDAR_PROVIDER: ${{ secrets.NEXT_PUBLIC_CALENDAR_PROVIDER }}
NEXT_PUBLIC_CALENDAR_URL: ${{ secrets.NEXT_PUBLIC_CALENDAR_URL }}
NEXT_PUBLIC_DISQUS_SHORTNAME: ${{ secrets.NEXT_PUBLIC_DISQUS_SHORTNAME }}
NEXT_PUBLIC_EMAILJS_PUBLIC_KEY: ${{ secrets.NEXT_PUBLIC_EMAILJS_PUBLIC_KEY }}
NEXT_PUBLIC_EMAILJS_SERVICE_ID: ${{ secrets.NEXT_PUBLIC_EMAILJS_SERVICE_ID }}
NEXT_PUBLIC_EMAILJS_TEMPLATE_ID: ${{ secrets.NEXT_PUBLIC_EMAILJS_TEMPLATE_ID }}
NEXT_PUBLIC_GA_MEASUREMENT_ID: ${{ secrets.NEXT_PUBLIC_GA_MEASUREMENT_ID }}
NEXT_PUBLIC_GOOGLE_SITE_VERIFICATION: ${{ secrets.NEXT_PUBLIC_GOOGLE_SITE_VERIFICATION }}
NEXT_PUBLIC_ORS_API_KEY: ${{ secrets.NEXT_PUBLIC_ORS_API_KEY }}
NEXT_PUBLIC_PAGESPEED_API_KEY: ${{ secrets.NEXT_PUBLIC_PAGESPEED_API_KEY }}
NEXT_PUBLIC_PROJECT_NAME: ${{ secrets.NEXT_PUBLIC_PROJECT_NAME }}
NEXT_PUBLIC_PROJECT_OWNER: ${{ secrets.NEXT_PUBLIC_PROJECT_OWNER }}
NEXT_PUBLIC_SITE_URL: ${{ secrets.NEXT_PUBLIC_SITE_URL }}
NEXT_PUBLIC_SOCIAL_PLATFORMS: ${{ secrets.NEXT_PUBLIC_SOCIAL_PLATFORMS }}
NEXT_PUBLIC_WEB3FORMS_ACCESS_KEY: ${{ secrets.NEXT_PUBLIC_WEB3FORMS_ACCESS_KEY }}
NEXT_PUBLIC_DEPLOY_URL: ${{ secrets.NEXT_PUBLIC_DEPLOY_URL }}
NEXT_PUBLIC_SUPABASE_URL: ${{ secrets.NEXT_PUBLIC_SUPABASE_URL }}
NEXT_PUBLIC_SUPABASE_ANON_KEY: ${{ secrets.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@v4