name: Deploy to Cloudflare Pages on: workflow_run: workflows: [CI] types: [completed] workflow_dispatch: {} jobs: deploy: if: ${{ github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success' }} runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Node uses: actions/setup-node@v4 with: node-version: 22 - name: Install dependencies run: cd frontend && npm ci - name: Build run: cd frontend && npm run build - name: Generate deployment manifest run: | cd frontend/dist form_args="-F manifest={" for file in $(find . -type f ! -name manifest.json | sed 's|^\./||'); do hash=$(sha256sum "$file" | awk '{print $1}') form_args="$form_args\"$file\":\"$hash\"," done form_args="${form_args%,}}" # remove trailing comma and close JSON echo "Form arguments: $form_args" echo "FORM_ARGS=$form_args" >> $GITHUB_ENV - name: Deploy to Cloudflare Pages env: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} run: | cd frontend/dist form_args="$FORM_ARGS" # use form arguments generated in previous step # Get short commit hash for deployment metadata COMMIT_HASH=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown") COMMIT_MSG=$(git log -1 --pretty=%B 2>/dev/null | head -1 || echo "Gitea Actions deploy") curl -sS -X POST \ "https://api.cloudflare.com/client/v4/accounts/${CLOUDFLARE_ACCOUNT_ID}/pages/projects/linearvoid/deployments" \ -H "Authorization: Bearer ${CLOUDFLARE_API_TOKEN}" \ -F "commit_hash=${COMMIT_HASH}" \ -F "commit_message=${COMMIT_MSG}" \ -F "commit_dirty=false" \ $form_args