Deploy Backend Pusher to Cloud RUN #5
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 Backend Pusher to Cloud RUN | |
on: | |
# push: | |
# branches: [ "main" ] | |
# paths: | |
# - 'backend/**' | |
workflow_dispatch: | |
inputs: | |
environment: | |
description: 'Select the environment to deploy to' | |
required: true | |
default: 'development' | |
branch: | |
description: 'Branch to deploy from' | |
required: true | |
default: 'main' | |
env: | |
SERVICE: pusher | |
REGION: us-central1 | |
jobs: | |
deploy: | |
environment: ${{ github.event.inputs.environment }} | |
permissions: | |
contents: 'read' | |
id-token: 'write' | |
runs-on: ubuntu-latest | |
steps: | |
- name: Validate Environment Input | |
run: | | |
if [[ "${{ github.event.inputs.environment }}" != "development" && "${{ github.event.inputs.environment }}" != "prod" ]]; then | |
echo "Invalid environment: ${{ github.event.inputs.environment }}. Must be 'development' or 'prod'." | |
exit 1 | |
fi | |
# To workaround "no space left on device" issue of GitHub-hosted runner | |
- name: Delete huge unnecessary tools folder | |
run: rm -rf /opt/hostedtoolcache | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Google Auth | |
id: auth | |
uses: 'google-github-actions/auth@v2' | |
with: | |
credentials_json: ${{ secrets.GCP_CREDENTIALS }} | |
- name: Login to GCR | |
run: gcloud auth configure-docker | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Google Service Account | |
run: echo "${{ secrets.GCP_SERVICE_ACCOUNT }}" | base64 -d > ./backend/google-credentials.json | |
- name: Build and Push Docker image | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
file: ./backend/pusher/Dockerfile | |
push: true | |
tags: gcr.io/${{ vars.GCP_PROJECT_ID }}/${{ env.SERVICE }}:latest | |
cache-from: type=registry,ref=gcr.io/${{ vars.GCP_PROJECT_ID }}/${{ env.SERVICE }}:buildcache | |
cache-to: type=registry,ref=gcr.io/${{ vars.GCP_PROJECT_ID }}/${{ env.SERVICE }}:buildcache,mode=max | |
- name: Deploy to Cloud Run | |
id: deploy | |
uses: google-github-actions/deploy-cloudrun@v2 | |
with: | |
service: ${{ env.SERVICE }} | |
region: ${{ env.REGION }} | |
image: gcr.io/${{ vars.GCP_PROJECT_ID }}/${{ env.SERVICE }} | |
# If required, use the Cloud Run url output in later steps | |
- name: Show Output | |
run: echo ${{ steps.deploy.outputs.url }} |