# Copyright 2026 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: "CF: Build Docs Preview" on: pull_request: types: [opened, synchronize, reopened, labeled] paths: - 'docs/**' - '.github/workflows/docs*_cf.yaml' - '.hugo/**' permissions: contents: read jobs: build-preview: if: "contains(github.event.pull_request.labels.*.name, 'docs: deploy-preview')" runs-on: ubuntu-24.04 env: PR_NUMBER: ${{ github.event.number }} HEAD_SHA: ${{ github.event.pull_request.head.sha }} concurrency: group: "cf-preview-${{ github.event.number }}" cancel-in-progress: true defaults: run: working-directory: .hugo steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 with: ref: ${{ env.HEAD_SHA }} fetch-depth: 0 persist-credentials: false - name: Setup Hugo uses: peaceiris/actions-hugo@2752ce1d29631191ea3f27c23495fa06139a5b78 # v3 with: hugo-version: "0.163.3" extended: true - name: Setup Node uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 with: node-version: "22" cache: 'npm' cache-dependency-path: '.hugo/package-lock.json' - run: npm ci --ignore-scripts - run: hugo --minify --config hugo.cloudflare.toml env: HUGO_BASEURL: "/" HUGO_ENVIRONMENT: preview HUGO_RELATIVEURLS: false - name: Build Pagefind Search Index run: npx pagefind --site public - name: Prepare Artifact Payload run: | mkdir -p ../artifact-payload cp -r public ../artifact-payload/public echo ${PR_NUMBER} > ../artifact-payload/pr_number.txt - name: Upload Artifact uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: cf-preview-data path: artifact-payload/ retention-days: 1 - name: Deployment Link run: | DEPLOY_URL="https://github.com/${{ github.repository_owner }}/${GITHUB_EVENT_REPOSITORY_NAME}/actions/workflows/docs_deploy_cf.yaml" echo "### Build Complete" >> $GITHUB_STEP_SUMMARY echo "The build for PR #${PR_NUMBER} succeeded." >> $GITHUB_STEP_SUMMARY echo "The Cloudflare deployment workflow is now starting." >> $GITHUB_STEP_SUMMARY echo "---" >> $GITHUB_STEP_SUMMARY echo "#### [Track Deployment Progress]($DEPLOY_URL)" >> $GITHUB_STEP_SUMMARY env: GITHUB_EVENT_REPOSITORY_NAME: ${{ github.event.repository.name }} remove-label: needs: build-preview if: "always() && contains(github.event.pull_request.labels.*.name, 'docs: deploy-preview')" runs-on: ubuntu-24.04 permissions: pull-requests: write steps: - name: Remove deploy-preview label uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9 with: script: | try { await github.rest.issues.removeLabel({ owner: context.repo.owner, repo: context.repo.repo, issue_number: context.issue.number, name: 'docs: deploy-preview' }); console.log("Label 'docs: deploy-preview' removed successfully."); } catch (error) { console.log(`Error removing label: ${error}`); }