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 fa2248c
Show file tree
Hide file tree
Showing 6 changed files with 191 additions and 128 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 &&
5 changes: 3 additions & 2 deletions .github/actions/setup-wrangler-toml/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ runs:
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 '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
Expand All @@ -73,4 +73,5 @@ runs:
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 'WEATHER_URL = "https://api.openweathermap.org/data/2.5/forecast"' >> ${{ github.workspace }}/server/wrangler.toml # Remove new line at the end to avoid `Unterminated multi-line string` error
echo '' >> ${{ github.workspace }}/server/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 }}
85 changes: 21 additions & 64 deletions .github/workflows/backend.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ on:
branches:
- main
- andrew_testing
- fix/backend-deployment-failure
paths:
- '.github/workflows/backend.yml'
- 'packages/validations/**'
Expand Down Expand Up @@ -49,72 +50,28 @@ jobs:
VECTOR_INDEX_NAME: ${{ secrets.VECTOR_INDEX }}

- 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 production --remote --env production
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: production

- name: Deploy
uses: cloudflare/[email protected]
uses: ./.github/actions/deploy-cloudflare-worker
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.WORKERS_AI_API_KEY }}" |
.VECTORIZE_API_KEY="${{ secrets.VECTORIZE_API_KEY }}" |
.BUCKET_ACCESS_KEY_ID="${{ secrets.BUCKET_ACCESS_KEY_ID }}" |
.GOOGLE_CLIENT_SECRET="${{ secrets.GOOGLE_CLIENT_SECRET }}" |
.JWT_SECRET="${{ secrets.JWT_SECRET }}" |
.MAPBOX_ACCESS_TOKEN="${{ secrets.MAPBOX_ACCESS_TOKEN }}" |
.OPENAI_API_KEY="${{ secrets.OPENAI_API_KEY }}" |
.OPENWEATHER_KEY="${{ secrets.OPENWEATHER_KEY }}" |
.SEND_GRID_API_KEY="${{ secrets.SEND_GRID_API_KEY }}" |
.STMP_PASSWORD="${{ secrets.STMP_PASSWORD }}" |
.VECTORIZE_API_KEY="${{ secrets.VECTORIZE_API_KEY }}" |
.X_AMZ_SECURITY_TOKEN="${{ secrets.X_AMZ_SECURITY_TOKEN }}" |
.JWT_VERIFICATION_KEY="${{ secrets.JWT_SECRET }}"
' > secrets.json &&
echo '<< Secrets file generated' &&
echo '>> Upload secrets' &&
yarn wrangler secret bulk --env production secrets.json &&
echo '<< Secrets uploaded'
command: deploy src/index.ts --env production
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.BUCKET_ACCESS_KEY_ID }}
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID}}
CLOUDFLARE_ENVIRONMENT: production
GOOGLE_CLIENT_SECRET: ${{ secrets.GOOGLE_CLIENT_SECRET }}
JWT_SECRET: ${{ secrets.JWT_SECRET }}
JWT_VERIFICATION_KEY: ${{ secrets.JWT_SECRET }}
MAPBOX_ACCESS_TOKEN: ${{ secrets.MAPBOX_ACCESS_TOKEN }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
OPENWEATHER_KEY: ${{ secrets.OPENWEATHER_KEY }}
SEND_GRID_API_KEY: ${{ secrets.SEND_GRID_API_KEY }}
STMP_PASSWORD: ${{ secrets.STMP_PASSWORD }}
VECTORIZE_API_KEY: ${{ secrets.VECTORIZE_API_KEY }}
WORKERS_AI_API_KEY: ${{ secrets.WORKERS_AI_API_KEY }}
X_AMZ_SECURITY_TOKEN: ${{ secrets.X_AMZ_SECURITY_TOKEN }}

0 comments on commit fa2248c

Please sign in to comment.