fix: use sudo with 'yum install' and create the keyring dir if needed #71
Workflow file for this run
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: PR Preview | |
| on: | |
| pull_request: | |
| types: [opened, reopened, synchronize, closed] | |
| paths: | |
| - 'content/**' | |
| - 'layouts/**' | |
| - 'assets/**' | |
| - 'data/**' | |
| - 'api-docs/**' | |
| - 'openapi/**' | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| concurrency: | |
| group: pr-preview-${{ github.event.number }} | |
| cancel-in-progress: true | |
| jobs: | |
| # Skip draft PRs entirely | |
| check-draft: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| should-run: ${{ steps.check.outputs.should-run }} | |
| steps: | |
| - id: check | |
| run: | | |
| if [[ "${{ github.event.pull_request.draft }}" == "true" ]]; then | |
| echo "should-run=false" >> $GITHUB_OUTPUT | |
| echo "Skipping draft PR" | |
| else | |
| echo "should-run=true" >> $GITHUB_OUTPUT | |
| fi | |
| # Notify fork PRs that preview is not available | |
| fork-notice: | |
| needs: check-draft | |
| if: | | |
| needs.check-draft.outputs.should-run == 'true' && | |
| github.event.action != 'closed' && | |
| github.event.pull_request.head.repo.full_name != github.repository | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Post fork notice comment | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const { data: comments } = await github.rest.issues.listComments({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: context.issue.number | |
| }); | |
| const marker = '<!-- pr-preview-fork-notice -->'; | |
| const existing = comments.find(c => c.body.includes(marker)); | |
| if (!existing) { | |
| await github.rest.issues.createComment({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: context.issue.number, | |
| body: `${marker}\n## 📝 PR Preview Not Available\n\nPR previews are not available for pull requests from forks due to GitHub Actions security restrictions.\n\nTo preview your changes locally, run:\n\`\`\`bash\nnpx hugo server\n\`\`\`\n\nOnce merged, your changes will be visible on the production site.` | |
| }); | |
| } | |
| # Build and deploy preview | |
| preview: | |
| needs: check-draft | |
| # Skip fork PRs - GITHUB_TOKEN doesn't have write access to push to gh-pages | |
| if: | | |
| needs.check-draft.outputs.should-run == 'true' && | |
| github.event.action != 'closed' && | |
| github.event.pull_request.head.repo.full_name == github.repository | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| cache: 'yarn' | |
| - name: Install dependencies | |
| run: yarn install --frozen-lockfile | |
| - name: Detect preview pages | |
| id: detect | |
| env: | |
| PR_BODY: ${{ github.event.pull_request.body }} | |
| BASE_REF: origin/${{ github.base_ref }} | |
| run: node .github/scripts/detect-preview-pages.js | |
| - name: Post pending comment (needs input) | |
| if: steps.detect.outputs.needs-author-input == 'true' | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const { upsertPreviewComment } = await import('${{ github.workspace }}/.github/scripts/preview-comment.js'); | |
| await upsertPreviewComment(github, context, { | |
| status: 'pending', | |
| needsInput: true, | |
| prNumber: context.issue.number | |
| }); | |
| - name: Skip if no pages to deploy | |
| if: steps.detect.outputs.pages-to-deploy == '[]' | |
| run: | | |
| echo "No pages to deploy - skipping preview" | |
| echo "Reason: ${{ steps.detect.outputs.skip-reason || steps.detect.outputs.change-summary }}" | |
| - name: Build Hugo site | |
| if: steps.detect.outputs.pages-to-deploy != '[]' | |
| id: build | |
| env: | |
| # Set baseURL for GitHub Pages preview subdirectory | |
| PREVIEW_BASE_URL: https://influxdata.github.io/docs-v2/pr-preview/pr-${{ github.event.number }}/ | |
| run: | | |
| START_TIME=$(date +%s) | |
| # Use pr-preview environment for path offset config | |
| npx hugo --minify --baseURL "$PREVIEW_BASE_URL" -e pr-preview | |
| END_TIME=$(date +%s) | |
| DURATION=$((END_TIME - START_TIME)) | |
| echo "build-time=${DURATION}s" >> $GITHUB_OUTPUT | |
| - name: Prepare preview files | |
| if: steps.detect.outputs.pages-to-deploy != '[]' | |
| run: | | |
| node .github/scripts/prepare-preview-files.js \ | |
| '${{ steps.detect.outputs.pages-to-deploy }}' \ | |
| public \ | |
| preview-staging | |
| - name: Deploy preview | |
| if: steps.detect.outputs.pages-to-deploy != '[]' | |
| uses: rossjrw/pr-preview-action@v1.4.8 | |
| with: | |
| source-dir: ./preview-staging | |
| preview-branch: gh-pages | |
| umbrella-dir: pr-preview | |
| action: deploy | |
| - name: Post success comment | |
| if: steps.detect.outputs.pages-to-deploy != '[]' | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const { upsertPreviewComment } = await import('${{ github.workspace }}/.github/scripts/preview-comment.js'); | |
| const pages = JSON.parse('${{ steps.detect.outputs.pages-to-deploy }}'); | |
| const previewUrl = `https://influxdata.github.io/docs-v2/pr-preview/pr-${{ github.event.number }}/`; | |
| await upsertPreviewComment(github, context, { | |
| status: 'success', | |
| previewUrl, | |
| pages, | |
| buildTime: '${{ steps.build.outputs.build-time }}', | |
| prNumber: context.issue.number | |
| }); | |
| - name: Post skipped comment | |
| if: steps.detect.outputs.pages-to-deploy == '[]' && steps.detect.outputs.needs-author-input != 'true' | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const { upsertPreviewComment } = await import('${{ github.workspace }}/.github/scripts/preview-comment.js'); | |
| await upsertPreviewComment(github, context, { | |
| status: 'skipped', | |
| skipReason: '${{ steps.detect.outputs.change-summary }}', | |
| prNumber: context.issue.number | |
| }); | |
| # Cleanup on PR close | |
| cleanup: | |
| if: github.event.action == 'closed' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout gh-pages | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: gh-pages | |
| - name: Remove preview directory | |
| run: | | |
| PREVIEW_DIR="pr-preview/pr-${{ github.event.number }}" | |
| if [ -d "$PREVIEW_DIR" ]; then | |
| rm -rf "$PREVIEW_DIR" | |
| git config user.name "github-actions[bot]" | |
| git config user.email "github-actions[bot]@users.noreply.github.com" | |
| git add -A | |
| git commit -m "Clean up preview for PR #${{ github.event.number }}" || echo "Nothing to commit" | |
| git push | |
| echo "Cleaned up $PREVIEW_DIR" | |
| else | |
| echo "No preview directory found for PR #${{ github.event.number }}" | |
| fi | |
| - name: Checkout scripts for comment deletion | |
| uses: actions/checkout@v4 | |
| with: | |
| path: scripts-checkout | |
| - name: Delete preview comment | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const { deletePreviewComment } = await import('${{ github.workspace }}/scripts-checkout/.github/scripts/preview-comment.js'); | |
| await deletePreviewComment(github, context); |