Skip to content

Nurse assistant (DO NOT MERGE) #10

Nurse assistant (DO NOT MERGE)

Nurse assistant (DO NOT MERGE) #10

name: Cloudflare Pages PR Preview
on:
pull_request_target:
types: [opened, synchronize, reopened]
concurrency:
group: cloudflare-preview-${{ github.event.pull_request.number }}
cancel-in-progress: true
jobs:
deploy-preview:
# Only run for PRs from forks (let Cloudflare handle same-repo PRs natively)
if: github.event.pull_request.head.repo.full_name != github.repository
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
deployments: write
steps:
- name: Checkout PR code
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22.x"
cache: "npm"
- name: Install dependencies
run: npm ci
- name: Build application
run: npm run build
env:
CI: ""
NODE_OPTIONS: "--max_old_space_size=4096"
- 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 build --project-name=${{ secrets.CLOUDFLARE_PROJECT_NAME }} --branch=pr-${{ github.event.pull_request.number }} --commit-hash=${{ github.event.pull_request.head.sha }}
- name: Comment PR with preview URL
uses: actions/github-script@v7
if: steps.deploy.outputs.pages-deployment-alias-url
with:
script: |
const deploymentUrl = '${{ steps.deploy.outputs.pages-deployment-alias-url }}';
const prNumber = context.payload.pull_request.number;
// Generate QR code URL for easy mobile access
const qrCodeUrl = `https://api.qrserver.com/v1/create-qr-code/?size=300x300&margin=10&data=${encodeURIComponent(deploymentUrl)}`;
const commentBody = `### 🚀 Preview Deployment Ready!
**🔗 Preview URL:** ${deploymentUrl}
**📱 Mobile Access:**
Scan the QR code below to open the preview on your mobile device.
![QR Code](${qrCodeUrl})
---
*This preview will be automatically updated when you push new commits to this PR.*`;
// Find existing comment
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
});
const botComment = comments.find(comment =>
comment.user.type === 'Bot' &&
comment.body.includes('Preview Deployment Ready')
);
if (botComment) {
// Update existing comment
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: botComment.id,
body: commentBody
});
} else {
// Create new comment
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
body: commentBody
});
}