Skip to content

Commit

Permalink
Create a sub-action for duplicated task
Browse files Browse the repository at this point in the history
  • Loading branch information
Tadjaur committed Sep 14, 2024
1 parent 4d49bf5 commit 4bd8d69
Show file tree
Hide file tree
Showing 6 changed files with 234 additions and 154 deletions.
95 changes: 95 additions & 0 deletions .github/actions/deploy-cloudflare-worker/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
name: 'Print Wrangler Logs'
description: 'Prints Wrangler logs files if exist'
inputs:
WORKERS_AI_API_KEY:
description: 'The Workers AI API Key'
required: true
VECTORIZE_API_KEY:
description: 'The Vectorize API Key'
required: true
BUCKET_ACCESS_KEY_ID:
description: 'The Bucket Access Key ID'
required: true
GOOGLE_CLIENT_SECRET:
description: 'The Google client secret'
required: true
JWT_SECRET:
description: 'The JWT secret'
required: true
MAPBOX_ACCESS_TOKEN:
description: 'The Mapbox access token'
required: true
OPENAI_API_KEY:
description: 'The OpenAI API Key'
required: true
OPENWEATHER_KEY:
description: 'The OpenWeather API Key'
required: true
SEND_GRID_API_KEY:
description: 'The sendgrid API Key'
required: true
STMP_PASSWORD:
description: 'The smtp password'
required: true
X_AMZ_SECURITY_TOKEN:
description: 'The X-Amz-Security-Token'
required: true
JWT_VERIFICATION_KEY:
description: 'The JWT verification key'
required: true
CLOUDFLARE_API_TOKEN:
description: 'Cloudflare API Token'
required: true
CLOUDFLARE_ACCOUNT_ID:
description: 'Cloudflare Account ID'
required: true
CLOUDFLARE_ENVIRONMENT:
description: 'Cloudflare Environment'
required: true
type: choice
options:
- preview
- production
runs:
using: 'composite'
steps:
- name: Migrate database
uses: cloudflare/[email protected]
with:
wranglerVersion: '3.75.0'
apiToken: ${{ inputs.CLOUDFLARE_API_TOKEN }}
accountId: ${{ inputs.CLOUDFLARE_ACCOUNT_ID }}
workingDirectory: server
# INFO: We need to upload secret manually because the default secrets input of this action `cloudflare/[email protected]` use the `wrangler secret put` command to upload secrets but this command will do not work non-interactive context.
preCommands: >
echo '---Generate and upload secrets---' &&
echo '>> Generate secrets file' &&
echo '{}' | jq '
.BUCKET_ACCESS_KEY_ID="${{ inputs.BUCKET_ACCESS_KEY_ID }}" |
.GOOGLE_CLIENT_SECRET="${{ inputs.GOOGLE_CLIENT_SECRET }}" |
.JWT_SECRET="${{ inputs.JWT_SECRET }}" |
.JWT_VERIFICATION_KEY="${{ inputs.JWT_VERIFICATION_KEY }}" |
.MAPBOX_ACCESS_TOKEN="${{ inputs.MAPBOX_ACCESS_TOKEN }}" |
.OPENAI_API_KEY="${{ inputs.OPENAI_API_KEY }}" |
.OPENWEATHER_KEY="${{ inputs.OPENWEATHER_KEY }}" |
.SEND_GRID_API_KEY="${{ inputs.SEND_GRID_API_KEY }}" |
.STMP_PASSWORD="${{ inputs.STMP_PASSWORD }}" |
.VECTORIZE_API_KEY="${{ inputs.VECTORIZE_API_KEY }}" |
.WORKERS_AI_API_KEY="${{ inputs.WORKERS_AI_API_KEY }}" |
.X_AMZ_SECURITY_TOKEN="${{ inputs.X_AMZ_SECURITY_TOKEN }}"
' > secrets.json &&
echo '<< Secrets file generated' &&
echo '>> Upload secrets' &&
yarn wrangler secret bulk --env ${{ inputs.CLOUDFLARE_ENVIRONMENT }} secrets.json &&
echo '<< Secrets uploaded'
command: deploy src/index.ts --env ${{ inputs.CLOUDFLARE_ENVIRONMENT }}
packageManager: yarn
env:
CI: true
NO_D1_WARNING: true
WRANGLER_LOG: debug
WRANGLER_LOG_SANITIZE: false

- name: Print wrangler extra logs on failure
if: failure()
uses: ./.github/actions/print-wrangler-logs
40 changes: 40 additions & 0 deletions .github/actions/migrate-d1-database/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: 'Print Wrangler Logs'
description: 'Prints Wrangler logs files if exist'
inputs:
CLOUDFLARE_API_TOKEN:
description: 'Cloudflare API Token'
required: true
CLOUDFLARE_ACCOUNT_ID:
description: 'Cloudflare Account ID'
required: true
CLOUDFLARE_ENVIRONMENT:
description: 'Cloudflare Environment'
required: true
type: choice
options:
- preview
- production
runs:
using: 'composite'
steps:
- name: Migrate database
uses: cloudflare/[email protected]
with:
wranglerVersion: '3.75.0'
apiToken: ${{ inputs.CLOUDFLARE_API_TOKEN }}
accountId: ${{ inputs.CLOUDFLARE_ACCOUNT_ID }}
workingDirectory: server
preCommands: |
nl -w1 -s': ' wrangler.toml
command: |
d1 migrations apply ${{ inputs.CLOUDFLARE_ENVIRONMENT }} --remote --env ${{ inputs.CLOUDFLARE_ENVIRONMENT }}
packageManager: yarn
env:
NO_D1_WARNING: true
CI: true
WRANGLER_LOG: debug
WRANGLER_LOG_SANITIZE: false

- name: Print wrangler extra logs on failure
if: failure()
uses: ./.github/actions/print-wrangler-logs
13 changes: 13 additions & 0 deletions .github/actions/print-wrangler-logs/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
name: 'Print Wrangler Logs'
description: 'Prints Wrangler logs files if exist'
runs:
using: 'composite'
steps:
- name: Print the last wrangler log file
shell: bash
run: |
cat "$(ls -t /home/runner/.config/.wrangler/logs/* 2> /dev/null | head -n 1)" 2> /dev/null || true;
- name: Delete wrangler log files after printing
shell: bash
run: |
rm /home/runner/.config/.wrangler/logs/* || true &&
74 changes: 46 additions & 28 deletions .github/actions/setup-wrangler-toml/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,32 +45,50 @@ runs:
steps:
- name: Generate wrangler.toml
shell: bash
working-directory: ${{ github.workspace }}/server
env:
BUCKET_ACCESS_KEY_ID: ${{ inputs.BUCKET_ACCESS_KEY_ID }}
CLOUDFLARE_API_TOKEN: ${{ inputs.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ inputs.CLOUDFLARE_ACCOUNT_ID}}
CLOUDFLARE_ENVIRONMENT: production
GOOGLE_CLIENT_SECRET: ${{ inputs.GOOGLE_CLIENT_SECRET }}
JWT_SECRET: ${{ inputs.JWT_SECRET }}
JWT_VERIFICATION_KEY: ${{ inputs.JWT_SECRET }}
MAPBOX_ACCESS_TOKEN: ${{ inputs.MAPBOX_ACCESS_TOKEN }}
OPENAI_API_KEY: ${{ inputs.OPENAI_API_KEY }}
OPENWEATHER_KEY: ${{ inputs.OPENWEATHER_KEY }}
SEND_GRID_API_KEY: ${{ inputs.SEND_GRID_API_KEY }}
STMP_PASSWORD: ${{ inputs.STMP_PASSWORD }}
VECTORIZE_API_KEY: ${{ inputs.VECTORIZE_API_KEY }}
WORKERS_AI_API_KEY: ${{ inputs.WORKERS_AI_API_KEY }}
X_AMZ_SECURITY_TOKEN: ${{ inputs.X_AMZ_SECURITY_TOKEN }}
run: |
echo 'name = "packrat-api"' > ${{ github.workspace }}/server/wrangler.toml
echo 'main = "src/index.ts"' >> ${{ github.workspace }}/server/wrangler.toml
echo 'compatibility_date = "2024-03-14"' >> ${{ github.workspace }}/server/wrangler.toml
echo 'node_compat = true' >> ${{ github.workspace }}/server/wrangler.toml
echo '[env.${{ inputs.environment }}]' >> ${{ github.workspace }}/server/wrangler.toml
echo '[[env.${{ inputs.environment }}.d1_databases]]' >> ${{ github.workspace }}/server/wrangler.toml
echo 'binding = "DB"' >> ${{ github.workspace }}/server/wrangler.toml
echo 'database_name = "${{ inputs.environment }}"' >> ${{ github.workspace }}/server/wrangler.toml
echo 'database_id = "${{ inputs.DB_ID }}"' >> ${{ github.workspace }}/server/wrangler.toml
echo '[env.${{ inputs.environment }}.ai]' >> ${{ github.workspace }}/server/wrangler.toml
echo 'binding = "AI"' >> ${{ github.workspace }}/server/wrangler.toml
echo '[[env.${{ inputs.environment }}.vectorize]]' >> ${{ github.workspace }}/server/wrangler.toml
echo 'binding = "VECTOR_INDEX"' >> ${{ github.workspace }}/server/wrangler.toml
echo 'index_name = "${{ inputs.VECTOR_INDEX_NAME }}"' >> ${{ github.workspace }}/server/wrangler.toml
echo '[env.${{ inputs.environment }}.vars]' >> ${{ github.workspace }}/server/wrangler.toml
echo 'APP_URL = "${{ inputs.APP_URL }}"' >> ${{ github.workspace }}/server/wrangler.toml
echo 'AWS_SIGN_ALGORITHM = "${{ inputs.AWS_SIGN_ALGORITHM }}"' >> ${{ github.workspace }}/server/wrangler.toml
echo 'BUCKET_ENDPOINT = "${{ inputs.BUCKET_ENDPOINT }}"' >> ${{ github.workspace }}/server/wrangler.toml
echo 'BUCKET_NAME = "${{ inputs.BUCKET_NAME }}"' >> ${{ github.workspace }}/server/wrangler.toml
echo 'BUCKET_REGION = "${{ inputs.BUCKET_REGION }}"' >> ${{ github.workspace }}/server/wrangler.toml
echo 'BUCKET_SERVICE = "${{ inputs.BUCKET_SERVICE }}"' >> ${{ github.workspace }}/server/wrangler.toml
echo 'BUCKET_SESSION_TOKEN = "${{ inputs.BUCKET_SESSION_TOKEN }}"' >> ${{ github.workspace }}/server/wrangler.toml
echo 'CLOUDFLARE_ACCOUNT_ID = "${{ inputs.CLOUDFLARE_ACCOUNT_ID }}"' >> ${{ github.workspace }}/server/wrangler.toml
echo 'GOOGLE_CLIENT_ID = "${{ inputs.GOOGLE_CLIENT_ID }}"' >> ${{ github.workspace }}/server/wrangler.toml
echo 'NODE_ENV = "${{ inputs.environment }}"' >> ${{ github.workspace }}/server/wrangler.toml
echo 'OSM_URI = "https://overpass-api.de/api/interpreter"' >> ${{ github.workspace }}/server/wrangler.toml
echo 'STMP_EMAIL = "${{ inputs.STMP_EMAIL }}"' >> ${{ github.workspace }}/server/wrangler.toml
echo 'WEATHER_URL = "https://api.openweathermap.org/data/2.5/forecast"' >> ${{ github.workspace }}/server/wrangler.toml
echo BUCKET_ACCESS_KEY_ID:${BUCKET_ACCESS_KEY_ID::-2} _ CLOUDFLARE_API_TOKEN:${CLOUDFLARE_API_TOKEN::-2} _ CLOUDFLARE_ACCOUNT_ID:${CLOUDFLARE_ACCOUNT_ID}} CLOUDFLARE_ENVIRONMENT: production GOOGLE_CLIENT_SECRET:${GOOGLE_CLIENT_SECRET::-2} _ JWT_SECRET:${JWT_SECRET::-2} _ JWT_VERIFICATION_KEY:${JWT_SECRET::-2} _ MAPBOX_ACCESS_TOKEN:${MAPBOX_ACCESS_TOKEN::-2} _ OPENAI_API_KEY:${OPENAI_API_KEY::-2} _ OPENWEATHER_KEY:${OPENWEATHER_KEY::-2} _ SEND_GRID_API_KEY:${SEND_GRID_API_KEY::-2} _ STMP_PASSWORD:${STMP_PASSWORD::-2} _ VECTORIZE_API_KEY:${VECTORIZE_API_KEY::-2} _ WORKERS_AI_API_KEY:${WORKERS_AI_API_KEY::-2} _ X_AMZ_SECURITY_TOKEN:${X_AMZ_SECURITY_TOKEN::-2} _
echo 'name = "packrat-api"' > wrangler.toml
echo 'main = "src/index.ts"' >> wrangler.toml
echo 'compatibility_date = "2024-03-14"' >> wrangler.toml
echo 'node_compat = true' >> wrangler.toml
echo '[env.${{ inputs.environment }}]' >> wrangler.toml
echo '[[env.${{ inputs.environment }}.d1_databases]]' >> wrangler.toml
echo 'binding = "DB"' >> wrangler.toml
echo 'database_name = "${{ inputs.environment }}"' >> wrangler.toml
echo 'database_id = "${{ inputs.DB_ID }}"' >> wrangler.toml
echo '[env.${{ inputs.environment }}.ai]' >> wrangler.toml
echo 'binding = "AI"' >> wrangler.toml
echo '[[env.${{ inputs.environment }}.vectorize]]' >> wrangler.toml
echo 'binding = "VECTOR_INDEX"' >> wrangler.toml
echo 'index_name = "${{ inputs.VECTOR_INDEX_NAME }}"' >> wrangler.toml
echo '[env.${{ inputs.environment }}.vars]' >> wrangler.toml
echo 'APP_URL = "${{ inputs.APP_URL }}"' >> wrangler.toml
echo 'AWS_SIGN_ALGORITHM = "${{ inputs.AWS_SIGN_ALGORITHM }}"' >> wrangler.toml
echo 'BUCKET_ENDPOINT = "${{ inputs.BUCKET_ENDPOINT }}"' >> wrangler.toml
echo 'BUCKET_NAME = "${{ inputs.BUCKET_NAME }}"' >> wrangler.toml
echo 'BUCKET_REGION = "${{ inputs.BUCKET_REGION }}"' >> wrangler.toml
echo 'BUCKET_SERVICE = "${{ inputs.BUCKET_SERVICE }}"' >> wrangler.toml
echo 'BUCKET_SESSION_TOKEN = "${{ inputs.BUCKET_SESSION_TOKEN }}"' >> wrangler.toml
echo 'CLOUDFLARE_ACCOUNT_ID = "${{ inputs.CLOUDFLARE_ACCOUNT_ID }}"' >> wrangler.toml
echo 'GOOGLE_CLIENT_ID = "${{ inputs.GOOGLE_CLIENT_ID }}"' >> wrangler.toml
echo 'NODE_ENV = "${{ inputs.environment }}"' >> wrangler.toml
echo 'OSM_URI = "https://overpass-api.de/api/interpreter"' >> wrangler.toml
echo 'STMP_EMAIL = "${{ inputs.STMP_EMAIL }}"' >> wrangler.toml
echo 'WEATHER_URL = "https://api.openweathermap.org/data/2.5/forecast"' >> wrangler.toml
81 changes: 19 additions & 62 deletions .github/workflows/backend-preview.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,70 +47,27 @@ jobs:
VECTOR_INDEX_NAME: ${{ secrets.PREVIEW_VECTOR_INDEX || 'vector-index-preview' }}

- name: Migrate database
uses: cloudflare/[email protected]
uses: ./.github/actions/migrate-d1-database
with:
wranglerVersion: '3.75.0'
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID}}
workingDirectory: server
preCommands: |
echo '---Clear previous wrangler logs---'
rm /home/runner/.config/.wrangler/logs/* || true
command: d1 migrations apply preview --remote --env preview
packageManager: yarn
env:
NO_D1_WARNING: true
CI: true
WRANGLER_LOG: debug
WRANGLER_LOG_SANITIZE: false

- name: Print wrangler extra logs on failure
if: failure()
run: |
cat "$(ls -t /home/runner/.config/.wrangler/logs/* | head -n 1)" || true;
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
CLOUDFLARE_ENVIRONMENT: preview

- name: Deploy
uses: cloudflare/[email protected]
with:
wranglerVersion: '3.75.0'
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID}}
workingDirectory: server
# INFO: We need to upload secret manually because the default secrets input of this action `cloudflare/[email protected]` use the `wrangler secret put` command to upload secrets but this command will do not work non-interactive context.
preCommands: >
echo '---Clear previous wrangler logs file---' &&
rm /home/runner/.config/.wrangler/logs/* || true &&
echo '---Generate and upload secrets---' &&
echo '>> Generate secrets file' &&
echo '{}' | jq '
.WORKERS_AI_API_KEY="${{ secrets.PREVIEW_WORKERS_AI_API_KEY }}" |
.VECTORIZE_API_KEY="${{ secrets.PREVIEW_VECTORIZE_API_KEY }}" |
.BUCKET_ACCESS_KEY_ID="${{ secrets.PREVIEW_BUCKET_ACCESS_KEY_ID }}" |
.GOOGLE_CLIENT_SECRET="${{ secrets.PREVIEW_GOOGLE_CLIENT_SECRET }}" |
.JWT_SECRET="${{ secrets.PREVIEW_JWT_SECRET }}" |
.MAPBOX_ACCESS_TOKEN="${{ secrets.PREVIEW_MAPBOX_ACCESS_TOKEN }}" |
.OPENAI_API_KEY="${{ secrets.PREVIEW_OPENAI_API_KEY }}" |
.OPENWEATHER_KEY="${{ secrets.PREVIEW_OPENWEATHER_KEY }}" |
.SEND_GRID_API_KEY="${{ secrets.PREVIEW_SEND_GRID_API_KEY }}" |
.STMP_PASSWORD="${{ secrets.PREVIEW_STMP_PASSWORD }}" |
.VECTORIZE_API_KEY="${{ secrets.PREVIEW_VECTORIZE_API_KEY }}" |
.X_AMZ_SECURITY_TOKEN="${{ secrets.PREVIEW_X_AMZ_SECURITY_TOKEN }}" |
.JWT_VERIFICATION_KEY="${{ secrets.PREVIEW_JWT_SECRET }}"
' > secrets.json &&
echo '<< Secrets file generated' &&
echo '>> Upload secrets' &&
yarn wrangler secret bulk --env preview secrets.json &&
echo '<< Secrets uploaded'
command: deploy src/index.ts --env preview
packageManager: yarn
env:
CI: true
NO_D1_WARNING: true
WRANGLER_LOG: debug
WRANGLER_LOG_SANITIZE: false

- name: Print wrangler extra logs on failure
if: failure()
run: |
cat "$(ls -t /home/runner/.config/.wrangler/logs/* | head -n 1)" || true;
BUCKET_ACCESS_KEY_ID: ${{ secrets.PREVIEW_BUCKET_ACCESS_KEY_ID }}
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
CLOUDFLARE_ENVIRONMENT: preview
GOOGLE_CLIENT_SECRET: ${{ secrets.PREVIEW_GOOGLE_CLIENT_SECRET }}
JWT_SECRET: ${{ secrets.PREVIEW_JWT_SECRET }}
JWT_VERIFICATION_KEY: ${{ secrets.PREVIEW_JWT_SECRET }}
MAPBOX_ACCESS_TOKEN: ${{ secrets.PREVIEW_MAPBOX_ACCESS_TOKEN }}
OPENAI_API_KEY: ${{ secrets.PREVIEW_OPENAI_API_KEY }}
OPENWEATHER_KEY: ${{ secrets.PREVIEW_OPENWEATHER_KEY }}
SEND_GRID_API_KEY: ${{ secrets.PREVIEW_SEND_GRID_API_KEY }}
STMP_PASSWORD: ${{ secrets.PREVIEW_STMP_PASSWORD }}
VECTORIZE_API_KEY: ${{ secrets.PREVIEW_VECTORIZE_API_KEY }}
WORKERS_AI_API_KEY: ${{ secrets.PREVIEW_WORKERS_AI_API_KEY }}
X_AMZ_SECURITY_TOKEN: ${{ secrets.PREVIEW_X_AMZ_SECURITY_TOKEN }}
Loading

0 comments on commit 4bd8d69

Please sign in to comment.