Added pnpm bug fix + comments & icons & debugging output. #2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: 🐙 Deploy Next.js 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: | |
name: 🛠️ Build Next.js | |
runs-on: ubuntu-latest | |
steps: | |
# Checkout code | |
- name: 🔍 Checkout repository | |
uses: actions/checkout@v4 | |
# Detect package manager | |
- name: 🔎 Detect package manager | |
id: detect-pm | |
run: | | |
echo "🔍 Scanning for package manager..." | |
if [ -f "pnpm-lock.yaml" ]; then | |
echo "✅ Found pnpm lockfile" | |
echo "manager=pnpm" >> $GITHUB_OUTPUT | |
echo "command=install" >> $GITHUB_OUTPUT | |
echo "runner=pnpm exec" >> $GITHUB_OUTPUT | |
elif [ -f "yarn.lock" ]; then | |
echo "✅ Found yarn lockfile" | |
echo "manager=yarn" >> $GITHUB_OUTPUT | |
echo "command=install" >> $GITHUB_OUTPUT | |
echo "runner=yarn" >> $GITHUB_OUTPUT | |
elif [ -f "package.json" ]; then | |
echo "ℹ️ Using npm as fallback" | |
echo "manager=npm" >> $GITHUB_OUTPUT | |
echo "command=ci" >> $GITHUB_OUTPUT | |
echo "runner=npx --no-install" >> $GITHUB_OUTPUT | |
else | |
echo "❌ No package manager detected!" | |
exit 1 | |
fi | |
# Setup Node.js with automatic package manager installation | |
- name: ⚙️ Setup Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '20' | |
cache: ${{ steps.detect-pm.outputs.manager }} | |
package-manager: ${{ steps.detect-pm.outputs.manager }} | |
# Debugging step to verify installations | |
- name: 📝 Check versions | |
run: | | |
echo "Node.js $(node -v)" | |
echo "npm $(npm -v)" | |
${{ steps.detect-pm.outputs.manager }} --version | |
# Configure GitHub Pages | |
- name: 🌐 Setup Pages | |
uses: actions/configure-pages@v5 | |
with: | |
static_site_generator: next | |
# Cache management | |
- name: 📦 Restore cache | |
uses: actions/cache@v4 | |
with: | |
path: | | |
.next/cache | |
key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/yarn.lock', '**/pnpm-lock.yaml') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }} | |
restore-keys: | | |
${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/yarn.lock', '**/pnpm-lock.yaml') }}- | |
# Install dependencies | |
- name: 📥 Install dependencies | |
run: ${{ steps.detect-pm.outputs.manager }} ${{ steps.detect-pm.outputs.command }} | |
# Build project | |
- name: 👷 Build with Next.js | |
run: ${{ steps.detect-pm.outputs.runner }} next build | |
# Upload artifact | |
- name: 📤 Upload artifact | |
uses: actions/upload-pages-artifact@v3 | |
with: | |
path: ./out | |
deploy: | |
name: 🚀 Deploy to GitHub Pages | |
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@v4 |