diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml new file mode 100644 index 0000000..81bd0e4 --- /dev/null +++ b/.github/workflows/deploy-preview.yml @@ -0,0 +1,93 @@ +# Workflow for building and deploying Hugo PR previews to GitHub Pages +name: preview-deploy + +on: + pull_request_target: + branches: [ "master" ] + types: [opened, synchronize, reopened] + + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages and comments +permissions: + contents: write + pages: write + pull-requests: write + +concurrency: + group: "pages-${{ github.event.pull_request.number || github.run_id }}" + cancel-in-progress: true + +# Default to bash +defaults: + run: + shell: bash + +jobs: + # Build and Deploy job + build-and-deploy: + runs-on: ubuntu-latest + env: + HUGO_VERSION: 0.147.9 + steps: + - name: Install Hugo CLI + run: | + wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \ + && sudo dpkg -i ${{ runner.temp }}/hugo.deb + - name: Install Dart Sass + run: sudo snap install dart-sass + + - name: Checkout + uses: actions/checkout@v6 + with: + ref: ${{ github.event.pull_request.head.sha }} + submodules: recursive + fetch-depth: 0 + + - name: Install Node.js dependencies + run: "[[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci || true" + + - name: Build with Hugo + env: + # For maximum backward compatibility with Hugo modules + HUGO_ENVIRONMENT: production + HUGO_ENV: production + run: | + # Dynamically set BaseURL for PR preview + # Format: https://.github.io//pr-preview/pr-/ + # We use github context to make it generic + REPO_NAME=$(echo "${{ github.repository }}" | cut -d'/' -f2) + ORG_NAME=$(echo "${{ github.repository }}" | cut -d'/' -f1) + + PR_BASE_URL="https://${ORG_NAME}.github.io/${REPO_NAME}/pr-preview/pr-${{ github.event.pull_request.number }}/" + + echo "Building for BaseURL: ${PR_BASE_URL}" + + hugo \ + --gc \ + --minify \ + --buildDrafts \ + --buildFuture \ + --baseURL "${PR_BASE_URL}" + + - name: Deploy PR Preview + id: deploy-preview + uses: rossjrw/pr-preview-action@v1.6.3 + with: + source-dir: ./public + preview-branch: gh-pages + umbrella-dir: pr-preview + action: auto + comment: false + + - name: Comment PR with Preview URL + uses: marocchino/sticky-pull-request-comment@v2 + if: github.event_name == 'pull_request_target' + with: + header: pr-preview + message: | + 🚀 **Preview deployment for PR #${{ github.event.pull_request.number }}** + + 🌐 **Preview URL**: ${{ steps.deploy-preview.outputs.preview-url }} + + _This preview will be updated automatically when you push new commits to this PR._