Skip to content

preview

preview #8

Workflow file for this run

on:
workflow_run:
workflows: [build]
types: [completed]
name: preview
permissions:
actions: read
pull-requests: write
jobs:
deploy-preview:
name: deploy-preview
runs-on: ubuntu-latest
if: >-
github.event.workflow_run.conclusion == 'success' &&
github.event.workflow_run.event == 'pull_request' &&
github.event.workflow_run.head_repository.fork == true
steps:
- name: Get PR number
id: pr
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
PR_NUMBER=$(gh api repos/${{ github.repository }}/pulls \
--jq ".[] | select(.head.sha == \"${{ github.event.workflow_run.head_sha }}\") | .number")
if [ -z "$PR_NUMBER" ]; then
echo "No PR found for SHA ${{ github.event.workflow_run.head_sha }}"
exit 1
fi
echo "number=$PR_NUMBER" >> "$GITHUB_OUTPUT"
- name: Download site artifact
uses: actions/download-artifact@v4
with:
name: site
path: site
run-id: ${{ github.event.workflow_run.id }}
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Deploy to Cloudflare Pages
id: deploy
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
command: pages deploy site --project-name=kopernicus-wiki --branch=pr-${{ steps.pr.outputs.number }}
- name: Comment on PR
uses: actions/github-script@v7
with:
script: |
const prNumber = ${{ steps.pr.outputs.number }};
const url = `https://pr-${prNumber}.kopernicus-wiki.pages.dev`;
const body = `Preview deployment available at: ${url}`;
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
});
const existing = comments.find(c =>
c.user.type === 'Bot' && c.body.includes('Preview deployment available at:')
);
if (existing) {
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: existing.id,
body,
});
} else {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
body,
});
}