1+ name : ' Deployment step 2: Deploy to Production'
2+
3+ on :
4+ # push:
5+ # branches:
6+ # - main
7+ pull_request :
8+ branches :
9+ - main
10+
11+ env :
12+ ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION : true
13+ PROJECT_ID : policyengine-household-api
14+ REGION : us-central1
15+ SERVICE_NAME : policyengine-household-api
16+ IMAGE_NAME : us-central1-docker.pkg.dev/policyengine-household-api/policyengine-household-api/policyengine-household-api
17+ PYTHON_VERSION : ' 3.12'
18+ IMAGE_VERSION : python312-latest # Cannot use . in Artifact Registry versions
19+
20+ jobs :
21+ lint-and-test :
22+ name : Lint and test
23+ runs-on : ubuntu-latest
24+ # if: |
25+ # (github.repository == 'PolicyEngine/policyengine-household-api')
26+ # && (github.event.head_commit.message == 'Update PolicyEngine Household API')
27+ steps :
28+ - name : Checkout code
29+ uses : actions/checkout@v4
30+
31+ - name : Set up Python
32+ uses : actions/setup-python@v4
33+ with :
34+ python-version : ${{ env.PYTHON_VERSION }}
35+
36+ - name : Set up Cloud SDK
37+ uses : google-github-actions/setup-gcloud@v0
38+ with :
39+ project_id : policyengine-household-api
40+ service_account_key : ${{ secrets.GCP_SA_KEY }}
41+ export_default_credentials : true
42+
43+ - name : Install dependencies
44+ run : make install
45+
46+ - name : Run linter
47+ run : make format
48+
49+ - name : Run tests
50+ run : make test
51+ env :
52+ ANTHROPIC_API_KEY : ${{ secrets.ANTHROPIC_API_KEY }}
53+ AUTH0_ADDRESS_NO_DOMAIN : ${{ secrets.AUTH0_ADDRESS_NO_DOMAIN }}
54+ AUTH0_AUDIENCE_NO_DOMAIN : ${{ secrets.AUTH0_AUDIENCE_NO_DOMAIN }}
55+ AUTH0_TEST_TOKEN_NO_DOMAIN : ${{ secrets.AUTH0_TEST_TOKEN_NO_DOMAIN }}
56+ USER_ANALYTICS_DB_USERNAME : ${{ secrets.USER_ANALYTICS_DB_USERNAME }}
57+ USER_ANALYTICS_DB_PASSWORD : ${{ secrets.USER_ANALYTICS_DB_PASSWORD }}
58+ USER_ANALYTICS_DB_CONNECTION_NAME : ${{ secrets.USER_ANALYTICS_DB_CONNECTION_NAME }}
59+
60+ build-docker :
61+ name : Build Docker image
62+ runs-on : ubuntu-latest
63+ # if: |
64+ # (github.repository == 'PolicyEngine/policyengine-household-api')
65+ # && (github.event.head_commit.message == 'Update PolicyEngine Household API')
66+ # needs: [lint-and-test]
67+ steps :
68+ - name : Checkout code
69+ uses : actions/checkout@v4
70+
71+ - name : Authenticate to Google Cloud
72+ uses : google-github-actions/auth@v2
73+ with :
74+ credentials_json : ${{ secrets.GCP_SA_KEY }}
75+
76+ - name : Set up Cloud SDK
77+ uses : google-github-actions/setup-gcloud@v0
78+ with :
79+ project_id : ${{ env.PROJECT_ID }}
80+ service_account_key : ${{ secrets.GCP_SA_KEY }}
81+ export_default_credentials : true
82+
83+ - name : Log in to Google Artifact Registry
84+ uses : docker/login-action@v2
85+ with :
86+ registry : us-central1-docker.pkg.dev
87+ username : _json_key
88+ password : ${{ secrets.GCP_SA_KEY }}
89+
90+ - name : Set up Docker Buildx
91+ uses : docker/setup-buildx-action@v3
92+
93+ - name : Extract metadata
94+ id : meta
95+ uses : docker/metadata-action@v5
96+ with :
97+ images : ${{ env.IMAGE_NAME }}
98+ tags : |
99+ type=sha,prefix=,suffix=
100+ type=raw,value=latest,enable={{is_default_branch}}
101+ type=raw,value=${{ env.IMAGE_VERSION }},enable={{is_default_branch}}
102+
103+ - name : Build and push Docker image
104+ uses : docker/build-push-action@v5
105+ with :
106+ context : .
107+ file : ./gcp/policyengine_household_api/Dockerfile.production
108+ push : true
109+ tags : ${{ steps.meta.outputs.tags }}
110+ labels : ${{ steps.meta.outputs.labels }}
111+ cache-from : type=gha
112+ cache-to : type=gha,mode=max
113+
114+ - name : Make script executable
115+ run : chmod +x .github/scripts/verify-image-push.sh
116+
117+ - name : Verify image was pushed
118+ env :
119+ GENERATED_TAGS : ${{ steps.meta.outputs.tags }}
120+ run : .github/scripts/verify-image-push.sh
121+
122+ # Deploy to App Engine using pre-built Docker image from Google Artifact Registry
123+ deploy :
124+ name : Deploy to App Engine
125+ runs-on : ubuntu-latest
126+ # if: |
127+ # (github.repository == 'PolicyEngine/policyengine-household-api')
128+ # && (github.event.head_commit.message == 'Update PolicyEngine Household API')
129+ # needs: [lint-and-test, build-docker]
130+ needs : [build-docker]
131+ steps :
132+ - name : Checkout code
133+ uses : actions/checkout@v4
134+
135+ - name : Authenticate to Google Cloud
136+ uses : google-github-actions/auth@v2
137+ with :
138+ credentials_json : ${{ secrets.GCP_SA_KEY }}
139+
140+ - name : Deploy to App Engine
141+ uses : google-github-actions/deploy-appengine@v2
142+ with :
143+ deliverables : " ./gcp/policyengine_household_api/app.yaml"
144+ image_url : ${{ env.IMAGE_NAME }}:${{ env.IMAGE_VERSION }}
145+ version : ${{ env.IMAGE_VERSION }}
146+ promote : false # Equivalent to --no-promote
147+ flags : " --quiet"
148+ env_vars : |
149+ AUTH0_ADDRESS_NO_DOMAIN=${{ secrets.AUTH0_ADDRESS_NO_DOMAIN }}
150+ AUTH0_AUDIENCE_NO_DOMAIN=${{ secrets.AUTH0_AUDIENCE_NO_DOMAIN }}
151+ USER_ANALYTICS_DB_USERNAME=${{ secrets.USER_ANALYTICS_DB_USERNAME }}
152+ USER_ANALYTICS_DB_PASSWORD=${{ secrets.USER_ANALYTICS_DB_PASSWORD }}
153+ USER_ANALYTICS_DB_CONNECTION_NAME=${{ secrets.USER_ANALYTICS_DB_CONNECTION_NAME }}
154+ ANTHROPIC_API_KEY=${{ secrets.ANTHROPIC_API_KEY }}
155+
156+ # - name: Set traffic to new version
157+ # env:
158+ # SERVICE_NAME: ${{ env.SERVICE_NAME }}
159+ # VERSION: ${{ env.IMAGE_VERSION }}
160+ # run: .github/scripts/set-traffic.sh
161+
162+ - name : Verify deployment
163+ env :
164+ SERVICE_NAME : ${{ env.SERVICE_NAME }}
165+ run : .github/scripts/verify-deployment.sh
0 commit comments