name: Publish Hugo Site

on:
  push:
    branches:
      - main

jobs:
  update_hugo_npm_dependencies:
    name: Update Hugo npm Dependencies
    runs-on: ubuntu-latest
    permissions:
      contents: write
    outputs:
      commit_hash: ${{ steps.commit_changes.outputs.commit_hash }}
    steps:
      - name: Checkout Repository
        uses: actions/checkout@v4

      - name: Install Node
        uses: actions/setup-node@v4
        with:
          node-version: "18"

      - name: Install Hugo
        uses: peaceiris/actions-hugo@v2
        with:
          hugo-version: "0.111.3"
          extended: true

      - name: Write composite package.json
        run: hugo mod npm pack

      - name: Install npm Packages
        run: npm install

      - name: Display Changes
        run: git status

      - name: Commit Changes
        id: commit_changes
        uses: stefanzweifel/git-auto-commit-action@v5
        with:
          commit_message: Update Hugo npm Dependencies

  publish:
    name: Publish Hugo Site
    needs: update_hugo_npm_dependencies
    runs-on: ubuntu-latest
    permissions:
      contents: read
      deployments: write
    steps:
      - name: Checkout Repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
          ref: ${{ needs.update_hugo_npm_dependencies.outputs.commit_hash }}

      - name: Install Node
        uses: actions/setup-node@v4
        with:
          node-version: "18"

      - name: Install Hugo
        uses: peaceiris/actions-hugo@v2
        with:
          hugo-version: "0.111.3"
          extended: true

      - name: Install npm Packages
        run: npm ci

      - name: Build Hugo
        run: hugo --minify

      - name: Deploy to Cloudflare Pages
        uses: cloudflare/pages-action@v1
        with:
          apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
          accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
          projectName: hugo-theme-gruvbox
          directory: ./public
          gitHubToken: ${{ secrets.GITHUB_TOKEN }}
