diff --git a/.github/workflows/deploy-core.yml b/.github/workflows/deploy-core.yml index e3eeb1da5ae3..005875c87676 100644 --- a/.github/workflows/deploy-core.yml +++ b/.github/workflows/deploy-core.yml @@ -3,6 +3,15 @@ name: Deploy Core 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 @@ -18,17 +27,15 @@ concurrency: env: GCLOUD_PROJECT_ID: ${{ secrets.GCLOUD_PROJECT_ID }} + IMAGE_NAME: core jobs: - build-and-deploy: + notify-start: runs-on: ubuntu-latest - - if: github.ref == 'refs/heads/main' - + outputs: + thread_ts: ${{ steps.build_message.outputs.thread_ts }} steps: - - name: Checkout code - uses: actions/checkout@v3 - + - uses: actions/checkout@v3 - name: Get short sha id: short_sha run: echo "short_sha=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT @@ -52,23 +59,54 @@ jobs: 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: "Set up Cloud SDK" - uses: "google-github-actions/setup-gcloud@v1" - - - name: Build the image on Cloud Build + - name: Build image for ${{ matrix.region }} run: | chmod +x ./k8s/cloud-build.sh ./k8s/cloud-build.sh \ - --image-name=core \ - --dockerfile-path=./Dockerfile \ - --working-dir=./core/ \ - --region=us-central1 + --image-name=$IMAGE_NAME \ + --dockerfile-path=./core/Dockerfile \ + --working-dir=./ \ + --region=${{ matrix.region }} + deploy: + 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 @@ -89,10 +127,10 @@ jobs: repo: 'dust-infra', event_type: 'trigger-component-deploy', client_payload: { - regions: 'us-central1', + regions: '${{ github.event.inputs.regions }}', component: 'core', image_tag: '${{ steps.short_sha.outputs.short_sha }}', - slack_thread_ts: "${{ steps.build_message.outputs.thread_ts }}", + slack_thread_ts: "${{ needs.notify-start.outputs.thread_ts }}", slack_channel: '${{ secrets.SLACK_CHANNEL_ID }}' } }); @@ -107,4 +145,4 @@ jobs: image_tag: ${{ steps.short_sha.outputs.short_sha }} channel: ${{ secrets.SLACK_CHANNEL_ID }} slack_token: ${{ secrets.SLACK_BOT_TOKEN }} - thread_ts: "${{ steps.build_message.outputs.thread_ts }}" + thread_ts: "${{ needs.notify-start.outputs.thread_ts }}"