1+ # This workflow uses devbox for dependency management and builds/deploys the builder API
2+ # to Cloud Run when a commit is pushed to the "main" branch.
3+
4+ name : ' Build and Deploy Builder API to Cloud Run'
5+
6+ on :
7+ push :
8+ branches :
9+ # - 157-offline-dev
10+ - main
11+ paths :
12+ - ' builder-api/**'
13+ - ' devbox.json'
14+ - ' devbox.lock'
15+
16+ env :
17+ PROJECT_ID : ' benefit-decision-toolkit-play'
18+ REGION : ' us-central1'
19+ SERVICE : ' benefit-decision-toolkit-play'
20+ API_NAME : ' builder-api'
21+ WORKLOAD_IDENTITY_PROVIDER : ' projects/1034049717668/locations/global/workloadIdentityPools/github-actions-google-cloud/providers/github'
22+
23+ jobs :
24+ deploy :
25+ runs-on : ' ubuntu-latest'
26+
27+ permissions :
28+ contents : ' read'
29+ id-token : ' write'
30+
31+ steps :
32+ - name : ' Checkout'
33+ uses : ' actions/checkout@v4'
34+
35+ # Setup devbox which includes all our dependencies: Maven, JDK 21, Quarkus, etc.
36+ - name : ' Install devbox'
37+ uses :
' jetify-com/[email protected] ' 38+ with :
39+ enable-cache : true
40+
41+ # Configure Workload Identity Federation and generate an access token
42+ - id : ' auth'
43+ name : ' Authenticate to Google Cloud'
44+ uses : ' google-github-actions/auth@v2'
45+ with :
46+ workload_identity_provider : ' ${{ env.WORKLOAD_IDENTITY_PROVIDER }}'
47+ service_account : cicd-build-deploy-api@benefit-decision-toolkit-play.iam.gserviceaccount.com
48+ project_id : ${{ env.PROJECT_ID }}
49+
50+ - name : ' Set up Cloud SDK'
51+ uses : ' google-github-actions/setup-gcloud@v2'
52+
53+ # Configure Docker to use gcloud as a credential helper
54+ - name : ' Configure Docker'
55+ run : |
56+ gcloud auth configure-docker ${{ env.REGION }}-docker.pkg.dev
57+
58+ # Build the Quarkus app with Maven using devbox environment
59+ - name : ' Build Quarkus App'
60+ working-directory : builder-api
61+ run : |
62+ devbox run -- ./mvnw package -DskipTests
63+
64+ - name : ' Build and Push Container'
65+ working-directory : builder-api
66+ run : |-
67+ DOCKER_TAG="${{ env.REGION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.SERVICE }}/${{ env.API_NAME }}:latest"
68+ docker build -f src/main/docker/Dockerfile.jvm --tag "${DOCKER_TAG}" .
69+ docker push "${DOCKER_TAG}"
70+
71+ - name : ' Deploy to Cloud Run'
72+ uses : ' google-github-actions/deploy-cloudrun@v2'
73+ with :
74+ service : ' ${{ env.API_NAME }}'
75+ region : ' ${{ env.REGION }}'
76+ image : ' ${{ env.REGION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.SERVICE }}/${{ env.API_NAME }}:latest'
77+ service_account : ' builder-api-service-account@${{ env.PROJECT_ID }}.iam.gserviceaccount.com'
78+ flags : ' --allow-unauthenticated --max-instances=2'
79+ env_vars : |
80+ QUARKUS_GOOGLE_CLOUD_PROJECT_ID=${{ env.PROJECT_ID }}
81+ GCS_BUCKET_NAME=${{ env.PROJECT_ID }}.appspot.com
82+
83+ # If required, use the Cloud Run URL output in later steps
84+ - name : ' Show output'
85+ run : |
86+ echo ${{ steps.deploy.outputs.url }}
0 commit comments