name: Deploy Frontend to Cloud Run
on:
push:
branches:
- main
paths:
- 'packages/frontend/**'
- 'packages/design-system/**'
- '.github/workflows/deploy-frontend.yml'
env:
PROJECT_ID: canada-gpt-ca
REGION: us-central1
SERVICE_NAME: canadagpt-frontend
REGISTRY: us-central1-docker.pkg.dev
REPOSITORY: canadagpt
jobs:
deploy:
name: Build and Deploy to Cloud Run
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Authenticate to Google Cloud
uses: google-github-actions/auth@v2
with:
credentials_json: ${{ secrets.GCP_SA_KEY }}
- name: Set up Cloud SDK
uses: google-github-actions/setup-gcloud@v2
- name: Configure Docker for Artifact Registry
run: |
gcloud auth configure-docker ${{ env.REGISTRY }}
- name: Build Docker image
run: |
docker build \
--build-arg NEXT_PUBLIC_GRAPHQL_URL=${{ secrets.NEXT_PUBLIC_GRAPHQL_URL }} \
--build-arg NEXT_PUBLIC_SUPABASE_URL=${{ secrets.NEXT_PUBLIC_SUPABASE_URL }} \
--build-arg NEXT_PUBLIC_SUPABASE_ANON_KEY=${{ secrets.NEXT_PUBLIC_SUPABASE_ANON_KEY }} \
--build-arg NEXT_PUBLIC_BASE_URL=https://canadagpt.ca \
-t ${{ env.REGISTRY }}/${{ env.PROJECT_ID }}/${{ env.REPOSITORY }}/frontend:${{ github.sha }} \
-t ${{ env.REGISTRY }}/${{ env.PROJECT_ID }}/${{ env.REPOSITORY }}/frontend:latest \
-f packages/frontend/Dockerfile \
.
- name: Push Docker image
run: |
docker push ${{ env.REGISTRY }}/${{ env.PROJECT_ID }}/${{ env.REPOSITORY }}/frontend:${{ github.sha }}
docker push ${{ env.REGISTRY }}/${{ env.PROJECT_ID }}/${{ env.REPOSITORY }}/frontend:latest
- name: Deploy to Cloud Run
run: |
gcloud run deploy ${{ env.SERVICE_NAME }} \
--image ${{ env.REGISTRY }}/${{ env.PROJECT_ID }}/${{ env.REPOSITORY }}/frontend:${{ github.sha }} \
--platform managed \
--region ${{ env.REGION }} \
--project ${{ env.PROJECT_ID }} \
--allow-unauthenticated \
--set-env-vars="NEXT_PUBLIC_GRAPHQL_URL=${{ secrets.NEXT_PUBLIC_GRAPHQL_URL }},NEXT_PUBLIC_SUPABASE_URL=${{ secrets.NEXT_PUBLIC_SUPABASE_URL }},NEXT_PUBLIC_SUPABASE_ANON_KEY=${{ secrets.NEXT_PUBLIC_SUPABASE_ANON_KEY }},SUPABASE_SERVICE_ROLE_KEY=${{ secrets.SUPABASE_SERVICE_ROLE_KEY }},NEXT_PUBLIC_BASE_URL=https://canadagpt.ca" \
--min-instances=0 \
--max-instances=10 \
--memory=512Mi
- name: Deployment Summary
run: |
echo "🚀 Deployment completed successfully!"
echo "Service URL: https://canadagpt.ca"
echo "Cloud Run URL: $(gcloud run services describe ${{ env.SERVICE_NAME }} --region ${{ env.REGION }} --format 'value(status.url)')"