Deploy #2
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: Deploy | |
| on: | |
| workflow_run: | |
| workflows: [CI] | |
| types: [completed] | |
| branches: [main] | |
| # Allow manual trigger for debugging | |
| workflow_dispatch: | |
| inputs: | |
| branch: | |
| description: 'Branch to deploy' | |
| required: true | |
| default: 'main' | |
| concurrency: | |
| group: deploy-${{ github.event.workflow_run.head_branch || github.event.inputs.branch || github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| deploy: | |
| name: Build & Deploy | |
| runs-on: ubuntu-latest | |
| # Only run if CI succeeded (or manual trigger) | |
| if: > | |
| github.event_name == 'workflow_dispatch' || | |
| github.event.workflow_run.conclusion == 'success' | |
| permissions: | |
| contents: read | |
| deployments: write | |
| pull-requests: write | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ github.event.workflow_run.head_sha || github.event.inputs.branch || github.ref }} | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version-file: '.nvmrc' | |
| cache: 'pnpm' | |
| - name: Setup environment | |
| run: pnpm dev:setup --force --yes | |
| - name: Start Pocketbase | |
| run: | | |
| cd .pocketbase && ./pocketbase serve & | |
| echo "Waiting for Pocketbase..." | |
| for i in {1..30}; do | |
| if curl -s http://localhost:8090/api/health > /dev/null 2>&1; then | |
| echo "Pocketbase ready" | |
| break | |
| fi | |
| sleep 1 | |
| done | |
| - name: Build | |
| run: pnpm build | |
| - name: Deploy to Cloudflare Pages | |
| uses: cloudflare/wrangler-action@v3 | |
| id: deploy | |
| with: | |
| apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} | |
| accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} | |
| command: pages deploy docs/.vitepress/dist --project-name=saf-site --branch=${{ github.event.workflow_run.head_branch || github.event.inputs.branch || 'main' }} | |
| - name: Find PR number | |
| if: github.event.workflow_run.event == 'pull_request' | |
| id: find-pr | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const response = await github.rest.repos.listPullRequestsAssociatedWithCommit({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| commit_sha: '${{ github.event.workflow_run.head_sha }}', | |
| }); | |
| const pr = response.data[0]; | |
| if (pr) { | |
| core.setOutput('number', pr.number); | |
| } | |
| - name: Comment on PR | |
| if: steps.find-pr.outputs.number | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const prNumber = ${{ steps.find-pr.outputs.number }}; | |
| const deploymentUrl = '${{ steps.deploy.outputs.deployment-url }}'; | |
| const aliasUrl = '${{ steps.deploy.outputs.pages-deployment-alias-url }}'; | |
| const body = `## Cloudflare Pages Preview | |
| | | URL | | |
| |---|---| | |
| | **Preview** | ${aliasUrl || deploymentUrl} | | |
| | **Direct** | ${deploymentUrl} | | |
| Deployed from commit ${{ github.event.workflow_run.head_sha }}`; | |
| const { data: comments } = await github.rest.issues.listComments({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: prNumber, | |
| }); | |
| const botComment = comments.find(c => | |
| c.user.type === 'Bot' && | |
| c.body.includes('Cloudflare Pages Preview') | |
| ); | |
| if (botComment) { | |
| await github.rest.issues.updateComment({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| comment_id: botComment.id, | |
| body: body, | |
| }); | |
| } else { | |
| await github.rest.issues.createComment({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: prNumber, | |
| body: body, | |
| }); | |
| } | |
| - name: Output deployment URL | |
| run: | | |
| echo "## Deployment Complete" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "**URL:** ${{ steps.deploy.outputs.deployment-url }}" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "**Alias:** ${{ steps.deploy.outputs.pages-deployment-alias-url }}" >> $GITHUB_STEP_SUMMARY |