Deploy Front #2868
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Deploy Front | |
on: | |
workflow_dispatch: | |
inputs: | |
regions: | |
description: "Regions to deploy to" | |
required: true | |
default: "us-central1" | |
type: choice | |
options: | |
- "us-central1" | |
- "europe-west1" | |
- "all" | |
check_deployment_blocked: | |
description: "Check #deployment locks or force deploy" | |
required: true | |
default: "check" | |
type: choice | |
options: | |
- "check" | |
- "force (dangerous)" | |
concurrency: | |
group: deploy_front | |
cancel-in-progress: false | |
env: | |
GCLOUD_PROJECT_ID: ${{ secrets.GCLOUD_PROJECT_ID }} | |
IMAGE_NAME: front | |
jobs: | |
notify-start: | |
runs-on: ubuntu-latest | |
outputs: | |
thread_ts: ${{ steps.build_message.outputs.thread_ts }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Get short sha | |
id: short_sha | |
run: echo "short_sha=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT | |
- name: Notify Build And Deploy Start | |
id: build_message | |
uses: ./.github/actions/slack-notify | |
with: | |
step: "start" | |
component: "front" | |
image_tag: ${{ steps.short_sha.outputs.short_sha }} | |
channel: ${{ secrets.SLACK_CHANNEL_ID }} | |
slack_token: ${{ secrets.SLACK_BOT_TOKEN }} | |
- name: Slack Check Deployment Blocked | |
if: ${{ github.event.inputs.check_deployment_blocked != 'force (dangerous)' }} | |
id: check_deployment_blocked | |
uses: ./.github/actions/slack-check-deployment-blocked | |
with: | |
component: "front" | |
channel: ${{ secrets.SLACK_CHANNEL_ID }} | |
slack_token: ${{ secrets.SLACK_BOT_TOKEN }} | |
create-matrix: | |
runs-on: ubuntu-latest | |
outputs: | |
matrix: ${{ steps.set-matrix.outputs.matrix }} | |
steps: | |
- id: set-matrix | |
run: | | |
if [ "${{ github.event.inputs.regions }}" = "all" ]; then | |
echo "matrix=[\"us-central1\",\"europe-west1\"]" >> $GITHUB_OUTPUT | |
else | |
echo "matrix=[\"${{ github.event.inputs.regions }}\"]" >> $GITHUB_OUTPUT | |
fi | |
build: | |
needs: [notify-start, create-matrix] | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
region: ${{ fromJson(needs.create-matrix.outputs.matrix) }} | |
fail-fast: true | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Get short sha | |
id: short_sha | |
run: echo "short_sha=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT | |
- name: "Authenticate with Google Cloud" | |
uses: "google-github-actions/auth@v1" | |
with: | |
credentials_json: "${{ secrets.GCLOUD_SA_KEY }}" | |
- name: Build image for ${{ matrix.region }} | |
run: | | |
chmod +x ./k8s/cloud-build.sh | |
./k8s/cloud-build.sh \ | |
--image-name=$IMAGE_NAME \ | |
--dockerfile-path=./front/Dockerfile \ | |
--working-dir=./ \ | |
--region=${{ matrix.region }} | |
deploy: | |
if: github.ref == 'refs/heads/main' | |
needs: [notify-start, build] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Get short sha | |
id: short_sha | |
run: echo "short_sha=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT | |
- name: Generate a token | |
id: generate-token | |
uses: actions/create-github-app-token@v1 | |
with: | |
app-id: ${{ secrets.INFRA_DISPATCH_APP_ID }} | |
private-key: ${{ secrets.INFRA_DISPATCH_APP_PRIVATE_KEY }} | |
owner: ${{ github.repository_owner }} | |
repositories: | | |
dust-infra | |
- name: Trigger dust-infra workflow | |
uses: actions/github-script@v6 | |
with: | |
github-token: ${{ steps.generate-token.outputs.token }} | |
script: | | |
await github.rest.repos.createDispatchEvent({ | |
owner: '${{ github.repository_owner }}', | |
repo: 'dust-infra', | |
event_type: 'trigger-component-deploy', | |
client_payload: { | |
regions: '${{ github.event.inputs.regions }}', | |
component: 'front', | |
image_tag: '${{ steps.short_sha.outputs.short_sha }}', | |
slack_thread_ts: "${{ needs.notify-start.outputs.thread_ts }}", | |
slack_channel: '${{ secrets.SLACK_CHANNEL_ID }}' | |
} | |
}); | |
- name: Notify Failure | |
if: failure() | |
uses: ./.github/actions/slack-notify | |
with: | |
step: "failure" | |
blocked: ${{ steps.check_deployment_blocked.outputs.blocked }} | |
component: "front" | |
image_tag: ${{ steps.short_sha.outputs.short_sha }} | |
channel: ${{ secrets.SLACK_CHANNEL_ID }} | |
slack_token: ${{ secrets.SLACK_BOT_TOKEN }} | |
thread_ts: "${{ needs.notify-start.outputs.thread_ts }}" |