From 14ef7d89913eb544ccb467f622392aabd56837c1 Mon Sep 17 00:00:00 2001 From: lyc8503 Date: Fri, 17 Nov 2023 14:27:23 +0800 Subject: [PATCH] update --- .github/workflows/deploy.yml | 126 +++++++++++++++++++---------------- 1 file changed, 67 insertions(+), 59 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 770c2af..62fd96b 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,59 +1,67 @@ -terraform { - required_providers { - cloudflare = { - source = "cloudflare/cloudflare" - version = "~> 4" - } - } -} - -provider "cloudflare" { - # read token from $CLOUDFLARE_API_TOKEN -} - -variable "CLOUDFLARE_ACCOUNT_ID" { - # read account id from $TF_VAR_CLOUDFLARE_ACCOUNT_ID - type = string -} - -resource "cloudflare_workers_kv_namespace" "uptimeflare_kv" { - account_id = var.CLOUDFLARE_ACCOUNT_ID - title = "uptimeflare_kv" -} - -resource "cloudflare_worker_script" "uptimeflare" { - account_id = var.CLOUDFLARE_ACCOUNT_ID - name = "uptimeflare_worker" - content = file("worker/dist/index.js") - module = true - compatibility_date = "2023-11-08" - - kv_namespace_binding { - name = "UPTIMEFLARE_STATE" - namespace_id = cloudflare_workers_kv_namespace.uptimeflare_kv.id - } -} - -resource "cloudflare_worker_cron_trigger" "uptimeflare_worker_cron" { - account_id = var.CLOUDFLARE_ACCOUNT_ID - script_name = cloudflare_worker_script.uptimeflare.name - schedules = [ - "*/2 * * * *", # every 2 minutes - ] -} - -resource "cloudflare_pages_project" "uptimeflare" { - account_id = var.CLOUDFLARE_ACCOUNT_ID - name = "uptimeflare" - production_branch = "main" - - deployment_configs { - production { - kv_namespaces = { - UPTIMEFLARE_STATE = cloudflare_workers_kv_namespace.uptimeflare_kv.id - } - compatibility_date = "2023-11-08" - compatibility_flags = ["nodejs_compat"] - } - } -} +name: Deploy to Cloudflare + +on: + push: + branches: ['main'] + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Setup Terraform + uses: hashicorp/setup-terraform@v2.0.3 + with: + terraform_version: 1.6.4 + + - name: Use Node.js 18.x + uses: actions/setup-node@v3 + with: + node-version: 18.x + cache: 'npm' + + # Automatically get an account id via the API Token + - name: Fetch Account ID + id: fetch_account_id + run: | + ACCOUNT_ID=$(curl -X GET "https://api.cloudflare.com/client/v4/accounts" -H "Authorization: Bearer "$CLOUDFLARE_API_TOKEN -H "Content-Type:application/json" | jq ".result[0].id" -r) + if [[ "$ACCOUNT_ID" == "null" ]]; then + echo "Failed to get an account id, please make sure you have set up CLOUDFLARE_API_TOKEN correctly!" + exit 1 + else + echo 'account_id='$ACCOUNT_ID >> $GITHUB_OUTPUT + fi + + env: + CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} + + - name: Install packages + run: | + npm install + cd worker + npm install + + - name: Build worker + run: | + cd worker + npx wrangler deploy src/index.ts --outdir dist --dry-run + + - name: Build page + run: | + npx @cloudflare/next-on-pages + + - name: Deploy using Terraform + run: | + terraform init + terraform apply -auto-approve -input=false + env: + CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} + TF_VAR_CLOUDFLARE_ACCOUNT_ID: ${{ steps.fetch_account_id.outputs.account_id }} + + # Currently Terraform Cloudflare provider doesn't support direct upload, use wrangler to upload instead. + - name: Upload pages + run: | + npx wrangler pages deploy .vercel/output/static --project-name uptimeflare + env: + CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}