66 - " *"
77
88jobs :
9- prepare :
9+ deploy :
1010 runs-on : ubuntu-latest
11- outputs :
12- secrets : ${{ steps.extract-secrets.outputs.secrets }}
13- env_flag : ${{ steps.check-env.outputs.env_flag }}
11+ name : Deploy
1412 steps :
1513 - uses : actions/checkout@v4
1614
17- - name : Extract secrets
18- id : extract-secrets
19- run : |
20- SECRETS_LIST=$(echo '${{ toJSON(secrets) }}' | jq -r 'to_entries | map(select(.key | startswith("github_") | not) | select(.key != "CLOUDFLARE_API_TOKEN") | .key) | tostring')
21- echo "secrets=$SECRETS_LIST" >> $GITHUB_OUTPUT
15+ - name : Setup Node.js
16+ uses : actions/setup-node@v4
17+ with :
18+ node-version : " 20"
19+
20+ - name : Install Dependencies
21+ run : npm install
2222
2323 - name : Check wrangler.toml for environments
2424 id : check-env
@@ -34,49 +34,42 @@ jobs:
3434 echo "env_flag=" >> $GITHUB_OUTPUT
3535 fi
3636
37- set-secrets :
38- needs : prepare
39- runs-on : ubuntu-latest
40- strategy :
41- matrix :
42- secret : ${{ fromJson(needs.prepare.outputs.secrets) }}
43- # Allow all parallel jobs to run even if one fails
44- fail-fast : false
45- # Run up to 10 parallel jobs
46- max-parallel : 10
47- steps :
4837 - name : Install wrangler
4938 run : npm install -g wrangler
5039
51- - name : Set secret
40+ - name : Install parallel
41+ run : sudo apt-get update && sudo apt-get install -y parallel
42+
43+ - name : Sync All Secrets to Cloudflare
5244 env :
45+ SECRETS_CONTEXT : ${{ toJSON(secrets) }}
5346 CLOUDFLARE_API_TOKEN : ${{ secrets.CLOUDFLARE_API_TOKEN }}
54- SECRET_VALUE : ${{ secrets[matrix.secret] }}
5547 run : |
56- if [ -n "${{ needs.prepare.outputs.env_flag }}" ]; then
57- echo "Setting ${{ matrix.secret }} for environment ${{ needs.prepare.outputs.env_flag }}"
58- echo "$SECRET_VALUE" | wrangler secret put "${{ matrix.secret }}" ${{ needs.prepare.outputs.env_flag }}
59- else
60- echo "Setting ${{ matrix.secret }} for default environment"
61- echo "$SECRET_VALUE" | wrangler secret put "${{ matrix.secret }}"
62- fi
48+ # Create a temporary file with secret names and values
49+ echo "$SECRETS_CONTEXT" | jq -r 'to_entries | .[] | select(.key | startswith("github_") | not) | select(.key != "CLOUDFLARE_API_TOKEN") | [.key, .value] | @tsv' > secrets.txt
6350
64- deploy :
65- needs : [prepare, set-secrets]
66- runs-on : ubuntu-latest
67- steps :
68- - uses : actions/checkout@v4
51+ # Function to set a secret
52+ set_secret() {
53+ secret_name="$1"
54+ secret_value="$2"
55+ if [ -n "${{ steps.check-env.outputs.env_flag }}" ]; then
56+ echo "Setting $secret_name for environment ${{ steps.check-env.outputs.env_flag }}"
57+ echo "$secret_value" | wrangler secret put "$secret_name" ${{ steps.check-env.outputs.env_flag }}
58+ else
59+ echo "Setting $secret_name for default environment"
60+ echo "$secret_value" | wrangler secret put "$secret_name"
61+ fi
62+ }
63+ export -f set_secret
6964
70- - name : Setup Node.js
71- uses : actions/setup-node@v4
72- with :
73- node-version : " 20"
65+ # Use parallel to set secrets (2 arguments per job)
66+ parallel --colsep '\t' set_secret {1} {2} :::: secrets.txt
7467
75- - name : Install Dependencies
76- run : npm install
68+ # Clean up
69+ rm secrets.txt
7770
7871 - name : Deploy
7972 uses : cloudflare/wrangler-action@v3
8073 with :
8174 apiToken : ${{ secrets.CLOUDFLARE_API_TOKEN }}
82- command : deploy ${{ needs.prepare .outputs.env_flag }}
75+ command : deploy ${{ steps.check-env .outputs.env_flag }}
0 commit comments