# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: "docs"

permissions:
  contents: write
  pull-requests: write
  
# This Workflow depends on 'github.event.number',
# not compatible with branch or manual triggers.
on:
  pull_request:
    # Sync with github_actions_preview_fallback.yml on.pull_request.paths-ignore
    paths:
      - 'docs/**'
      - 'github/workflows/docs**'
      - '.hugo/**'
  pull_request_target:
    types: [labeled]
    paths:
      - 'docs/**'
      - 'github/workflows/docs**'
      - '.hugo/**'

jobs:
  preview:
    # run job on proper workflow event triggers (skip job for pull_request event
    # from forks and only run pull_request_target for "docs: deploy-preview"
    # label)
    if: "${{ (github.event.action != 'labeled' && github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name) || github.event.label.name == 'docs: deploy-preview' }}"
    runs-on: ubuntu-24.04
    defaults:
      run:
        working-directory: .hugo
    concurrency:
      # Shared concurrency group wih preview cleanup.
      group: "preview-${{ github.event.number }}"
      cancel-in-progress: true
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
        with:
          # Checkout the PR's HEAD commit (supports forks).
          ref: ${{ github.event.pull_request.head.sha }}
          fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod

      - name: Setup Hugo
        uses: peaceiris/actions-hugo@75d2e84710de30f6ff7268e08f310b60ef14033f # v3
        with:
          hugo-version: "0.145.0"
          extended: true

      - name: Setup Node
        uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
        with:
          node-version: "22"

      - name: Cache dependencies
        uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4
        with:
          path: ~/.npm
          key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-node-

      - run: npm ci
      - run: hugo --minify
        env:
          HUGO_BASEURL: https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }}/previews/PR-${{ github.event.number }}/
          HUGO_ENVIRONMENT: preview
          HUGO_RELATIVEURLS: false

      - name: Deploy
        uses: peaceiris/actions-gh-pages@4f9cc6602d3f66b9c108549d475ec49e8ef4d45e # v4
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: .hugo/public
          destination_dir: ./previews/PR-${{ github.event.number }}
          commit_message: "stage: PR-${{ github.event.number }}: ${{ github.event.head_commit.message }}"

      - name: Comment
        uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7
        with:
          script: |
            github.rest.issues.createComment({
              issue_number: context.payload.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: "🔎 Preview at https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }}/previews/PR-${{ github.event.number }}/"
            })
