Skip to content

Redeploy

Redeploy #3

Workflow file for this run

name: Build and Deploy to Cloud Run
on:
push:
branches:
- main
env:
PROJECT_ID: project-8183d858-7861-4159-b3b
REGION: asia-southeast1
REPO_NAME: guardm-app
IMAGE_NAME: guardm-api
SERVICE_NAME: guardm-api
WORKLOAD_IDENTITY_PROVIDER: 'projects/992006419462/locations/global/workloadIdentityPools/github-pool/providers/github-provider'
SERVICE_ACCOUNT: 'github-actions-sa@project-8183d858-7861-4159-b3b.iam.gserviceaccount.com'
jobs:
deploy:
runs-on: ubuntu-latest
permissions:
contents: 'read'
id-token: 'write'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Authenticate to Google Cloud
id: auth
uses: google-github-actions/auth@v2
with:
token_format: 'access_token'
workload_identity_provider: ${{ env.WORKLOAD_IDENTITY_PROVIDER }}
service_account: ${{ env.SERVICE_ACCOUNT }}
- name: Login to Artifact Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGION }}-docker.pkg.dev
username: 'oauth2accesstoken'
password: ${{ steps.auth.outputs.access_token }}
- name: Build and Push Docker Image
run: |
IMAGE=${{ env.REGION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.REPO_NAME }}/${{ env.IMAGE_NAME }}
docker build \
-t $IMAGE:${{ github.sha }} \
-t $IMAGE:latest \
.
docker push $IMAGE:${{ github.sha }}
docker push $IMAGE:latest
- name: Deploy to Cloud Run
run: |
IMAGE=${{ env.REGION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.REPO_NAME }}/${{ env.IMAGE_NAME }}
gcloud run deploy ${{ env.SERVICE_NAME }} \
--image $IMAGE:${{ github.sha }} \
--region ${{ env.REGION }} \
--platform managed \
--allow-unauthenticated \
--port 3000 \
--add-cloudsql-instances=project-8183d858-7861-4159-b3b:us-central1:guardm-db \
--set-env-vars="NODE_ENV=production" \
--set-env-vars="DB_HOST=/cloudsql/project-8183d858-7861-4159-b3b:us-central1:guardm-db" \
--set-env-vars="DB_PORT=5432" \
--set-env-vars="DB_USER=postgres" \
--set-env-vars="DB_PASSWORD=${{ secrets.DB_PASSWORD }}" \
--set-env-vars="DB_NAME=crime_alert" \
--set-env-vars="JWT_SECRET=${{ secrets.JWT_SECRET }}" \
--set-env-vars="JWT_EXPIRES_IN=${{ secrets.JWT_EXPIRES_IN }}" \
--set-env-vars="CLOUDINARY_NAME=${{ secrets.CLOUDINARY_NAME }}" \
--set-env-vars="CLOUDINARY_API_KEY=${{ secrets.CLOUDINARY_API_KEY }}" \
--set-env-vars="CLOUDINARY_API_SECRET=${{ secrets.CLOUDINARY_API_SECRET }}"