name: Deploy to Cloudflare Pages on: push: branches: - main workflow_dispatch: env: OAUTH_DIR: oauth_new KEEP_DEPLOYMENTS: 5 # 保持するデプロイメント数 jobs: deploy: runs-on: ubuntu-latest permissions: contents: read deployments: write steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' cache-dependency-path: ${{ env.OAUTH_DIR }}/package-lock.json - name: Install dependencies run: | cd ${{ env.OAUTH_DIR }} npm ci - name: Build OAuth app run: | cd ${{ env.OAUTH_DIR }} NODE_ENV=production npm run build env: VITE_ADMIN: ${{ secrets.VITE_ADMIN }} VITE_PDS: ${{ secrets.VITE_PDS }} VITE_HANDLE_LIST: ${{ secrets.VITE_HANDLE_LIST }} VITE_COLLECTION: ${{ secrets.VITE_COLLECTION }} VITE_OAUTH_CLIENT_ID: ${{ secrets.VITE_OAUTH_CLIENT_ID }} VITE_OAUTH_REDIRECT_URI: ${{ secrets.VITE_OAUTH_REDIRECT_URI }} VITE_ENABLE_TEST_UI: 'false' VITE_ENABLE_DEBUG: 'false' - name: Deploy to Cloudflare Pages uses: cloudflare/pages-action@v1 with: apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} projectName: ${{ secrets.CLOUDFLARE_PROJECT_NAME }} directory: ${{ env.OAUTH_DIR }}/dist gitHubToken: ${{ secrets.GITHUB_TOKEN }} deploymentName: Production cleanup: needs: deploy runs-on: ubuntu-latest if: success() steps: - name: Wait for deployment to complete run: sleep 30 - name: Cleanup old deployments run: | # Get all deployments DEPLOYMENTS=$(curl -s -X GET \ "https://api.cloudflare.com/client/v4/accounts/${{ secrets.CLOUDFLARE_ACCOUNT_ID }}/pages/projects/${{ secrets.CLOUDFLARE_PROJECT_NAME }}/deployments" \ -H "Authorization: Bearer ${{ secrets.CLOUDFLARE_API_TOKEN }}" \ -H "Content-Type: application/json") # Extract deployment IDs (skip the latest N deployments) DEPLOYMENT_IDS=$(echo "$DEPLOYMENTS" | jq -r ".result | sort_by(.created_on) | reverse | .[${{ env.KEEP_DEPLOYMENTS }}:] | .[].id // empty") if [ -z "$DEPLOYMENT_IDS" ]; then echo "No old deployments to delete" exit 0 fi # Delete old deployments for ID in $DEPLOYMENT_IDS; do echo "Deleting deployment: $ID" RESPONSE=$(curl -s -X DELETE \ "https://api.cloudflare.com/client/v4/accounts/${{ secrets.CLOUDFLARE_ACCOUNT_ID }}/pages/projects/${{ secrets.CLOUDFLARE_PROJECT_NAME }}/deployments/$ID" \ -H "Authorization: Bearer ${{ secrets.CLOUDFLARE_API_TOKEN }}" \ -H "Content-Type: application/json") SUCCESS=$(echo "$RESPONSE" | jq -r '.success') if [ "$SUCCESS" = "true" ]; then echo "Successfully deleted deployment: $ID" else echo "Failed to delete deployment: $ID" echo "$RESPONSE" | jq . fi sleep 1 # Rate limiting done echo "Cleanup completed!"