name: Build and Deploy to Cloudflare Pages on: pull_request: {} push: branches: ["main"] jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Node uses: actions/setup-node@v4 with: node-version: 20 - name: Setup pnpm uses: pnpm/action-setup@v4 with: version: 9 run_install: false - name: Install deps run: pnpm install --frozen-lockfile - name: Build Astro run: pnpm build - name: Zip dist run: | cd dist zip -r ../dist.zip . - name: Deploy to Cloudflare Pages via API id: deploy env: CF_API_TOKEN: ${{ secrets.CF_API_TOKEN }} CF_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }} CF_PROJECT_NAME: ${{ secrets.CF_PROJECT_NAME }} run: | RESPONSE=$(curl -s -X POST \ "https://api.cloudflare.com/client/v4/accounts/${CF_ACCOUNT_ID}/pages/projects/${CF_PROJECT_NAME}/deployments" \ -H "Authorization: Bearer ${CF_API_TOKEN}" \ -F "artifact=@dist.zip" \ -F "branch=${GITHUB_REF_NAME}") echo "$RESPONSE" > cf_response.json DEPLOY_ID=$(jq -r '.result.id' cf_response.json) echo "deploy_id=$DEPLOY_ID" >> $GITHUB_OUTPUT PREVIEW_URL=$(jq -r '.result.url' cf_response.json) echo "preview_url=$PREVIEW_URL" >> $GITHUB_OUTPUT - name: Comment to PR (only on PR) if: ${{ github.event_name == 'pull_request' }} env: GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} GITEA_SERVER_URL: ${{ secrets.GITEA_SERVER_URL }} run: | PR_NUMBER="${{ github.event.pull_request.number }}" REPO="${{ github.repository }}" URL="${{ steps.deploy.outputs.preview_url }}" DEPLOY_ID="${{ steps.deploy.outputs.deploy_id }}" COMMENT="🚀 **Cloudflare Pages Preview** URL: ${URL} Deployment ID: \`${DEPLOY_ID}\`" curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: token ${GITEA_TOKEN}" \ -d "{\"body\": \"${COMMENT}\"}" \ "${GITEA_SERVER_URL}/api/v1/repos/${REPO}/issues/${PR_NUMBER}/comments"