Skip to content

Commit 8068282

Browse files
authored
Create ci-cd.yml
1 parent d4f3729 commit 8068282

1 file changed

Lines changed: 155 additions & 0 deletions

File tree

‎.github/workflows/ci-cd.yml‎

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
name: Modtale CI/CD
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
- develop
8+
- '*'
9+
10+
env:
11+
PROJECT_ID: gen-lang-client-0244308719
12+
REGION: us-central1
13+
14+
jobs:
15+
deploy:
16+
runs-on: ubuntu-latest
17+
permissions:
18+
contents: 'read'
19+
id-token: 'write'
20+
21+
steps:
22+
- uses: actions/checkout@v4
23+
24+
- name: Configure Environment
25+
id: config
26+
run: |
27+
BRANCH_NAME=${GITHUB_REF#refs/heads/}
28+
echo "Detected branch: $BRANCH_NAME"
29+
30+
if [ "$BRANCH_NAME" = "main" ]; then
31+
echo "ENV_TYPE=prod" >> $GITHUB_ENV
32+
echo "BACKEND_SERVICE=modtale-backend" >> $GITHUB_ENV
33+
echo "FRONTEND_SERVICE=modtale-frontend" >> $GITHUB_ENV
34+
echo "DB_NAME=modtale" >> $GITHUB_ENV
35+
echo "SEEDING_ENABLED=false" >> $GITHUB_ENV
36+
# Production uses the fixed custom domain for API
37+
echo "FIXED_BACKEND_URL=https://api.modtale.net" >> $GITHUB_ENV
38+
echo "FRONTEND_DOMAIN=https://modtale.net" >> $GITHUB_ENV
39+
echo "TAG=latest" >> $GITHUB_ENV
40+
41+
elif [ "$BRANCH_NAME" = "develop" ]; then
42+
echo "ENV_TYPE=dev" >> $GITHUB_ENV
43+
echo "BACKEND_SERVICE=modtale-backend-dev" >> $GITHUB_ENV
44+
echo "FRONTEND_SERVICE=modtale-frontend-dev" >> $GITHUB_ENV
45+
echo "DB_NAME=modtale-dev" >> $GITHUB_ENV
46+
echo "SEEDING_ENABLED=true" >> $GITHUB_ENV
47+
# Dev uses the Cloud Run URL for API (simplifies certs), maps Frontend to custom domain
48+
echo "FRONTEND_DOMAIN=https://dev.modtale.net" >> $GITHUB_ENV
49+
echo "TAG=dev" >> $GITHUB_ENV
50+
51+
else
52+
# Feature Branch Logic
53+
SLUG=$(echo $BRANCH_NAME | sed 's/[^a-zA-Z0-9-]/-/g' | tr '[:upper:]' '[:lower:]' | cut -c 1-20 | sed 's/-$//')
54+
echo "ENV_TYPE=preview" >> $GITHUB_ENV
55+
echo "BACKEND_SERVICE=modtale-backend-$SLUG" >> $GITHUB_ENV
56+
echo "FRONTEND_SERVICE=modtale-frontend-$SLUG" >> $GITHUB_ENV
57+
echo "DB_NAME=modtale-$SLUG" >> $GITHUB_ENV
58+
echo "SEEDING_ENABLED=true" >> $GITHUB_ENV
59+
echo "TAG=$SLUG" >> $GITHUB_ENV
60+
fi
61+
62+
- id: 'auth'
63+
uses: 'google-github-actions/auth@v2'
64+
with:
65+
credentials_json: '${{ secrets.GCP_CREDENTIALS }}'
66+
67+
- name: 'Set up Cloud SDK'
68+
uses: 'google-github-actions/setup-gcloud@v2'
69+
70+
# --- 2. DEPLOY BACKEND ---
71+
- name: Build and Deploy Backend
72+
run: |
73+
cd backend
74+
gcloud builds submit --tag gcr.io/$PROJECT_ID/modtale-backend:${{ env.TAG }} .
75+
76+
# We deploy to Cloud Run.
77+
# Note: We capture the URL output to use for the frontend build.
78+
gcloud run deploy ${{ env.BACKEND_SERVICE }} \
79+
--image gcr.io/$PROJECT_ID/modtale-backend:${{ env.TAG }} \
80+
--region $REGION \
81+
--allow-unauthenticated \
82+
--update-env-vars MONGODB_DATABASE_NAME=${{ env.DB_NAME }} \
83+
--update-env-vars APP_SEEDING_ENABLED=${{ env.SEEDING_ENABLED }} \
84+
--update-env-vars APP_SEEDING_SOURCE_DB=modtale \
85+
--update-env-vars APP_WARDEN_URL="${{ secrets.WARDEN_URL }}" \
86+
--update-env-vars MONGODB_URI="${{ secrets.MONGODB_URI }}" \
87+
--update-env-vars FRONTEND_URL="placeholder" \
88+
--update-env-vars R2_ACCESS_KEY="${{ secrets.R2_ACCESS_KEY }}" \
89+
--update-env-vars R2_SECRET_KEY="${{ secrets.R2_SECRET_KEY }}" \
90+
--update-env-vars R2_ENDPOINT="${{ secrets.R2_ENDPOINT }}" \
91+
--update-env-vars SMTP_HOST="${{ secrets.SMTP_HOST }}" \
92+
--update-env-vars SMTP_USERNAME="${{ secrets.SMTP_USERNAME }}" \
93+
--update-env-vars SMTP_PASSWORD="${{ secrets.SMTP_PASSWORD }}" \
94+
--update-env-vars GITHUB_CLIENT_ID="${{ secrets.GITHUB_CLIENT_ID }}" \
95+
--update-env-vars GITHUB_CLIENT_SECRET="${{ secrets.GITHUB_CLIENT_SECRET }}" \
96+
--update-env-vars GOOGLE_CLIENT_ID="${{ secrets.GOOGLE_CLIENT_ID }}" \
97+
--update-env-vars GOOGLE_CLIENT_SECRET="${{ secrets.GOOGLE_CLIENT_SECRET }}" \
98+
--format="value(status.url)" > backend_url.txt
99+
100+
- name: Determine API URL
101+
run: |
102+
# If main, use the fixed production API URL. Otherwise, use the Cloud Run URL.
103+
if [ "${{ env.ENV_TYPE }}" = "prod" ]; then
104+
echo "API_URL=${{ env.FIXED_BACKEND_URL }}" >> $GITHUB_ENV
105+
else
106+
echo "API_URL=$(cat backend/backend_url.txt)" >> $GITHUB_ENV
107+
fi
108+
109+
- name: Build and Deploy Frontend
110+
run: |
111+
cd frontend
112+
gcloud builds submit \
113+
--config=cloudbuild.yml \
114+
--substitutions=_PUBLIC_API_URL=${{ env.API_URL }},_TAG=${{ env.TAG }} .
115+
116+
gcloud run deploy ${{ env.FRONTEND_SERVICE }} \
117+
--image gcr.io/$PROJECT_ID/modtale-frontend:${{ env.TAG }} \
118+
--region $REGION \
119+
--allow-unauthenticated \
120+
--set-env-vars PUBLIC_API_URL=${{ env.API_URL }} \
121+
--format="value(status.url)" > frontend_url.txt
122+
123+
- name: Determine Frontend URL
124+
run: |
125+
# If prod or dev, we use the custom domains. For previews, we use the Cloud Run URL.
126+
if [ "${{ env.ENV_TYPE }}" = "preview" ]; then
127+
echo "FINAL_FRONTEND_URL=$(cat frontend/frontend_url.txt)" >> $GITHUB_ENV
128+
else
129+
echo "FINAL_FRONTEND_URL=${{ env.FRONTEND_DOMAIN }}" >> $GITHUB_ENV
130+
fi
131+
132+
- name: Update Backend CORS
133+
run: |
134+
gcloud run services update ${{ env.BACKEND_SERVICE }} \
135+
--region $REGION \
136+
--update-env-vars FRONTEND_URL=${{ env.FINAL_FRONTEND_URL }}
137+
138+
- name: Map Dev Domain
139+
if: env.ENV_TYPE == 'dev'
140+
continue-on-error: true
141+
run: |
142+
echo "Ensuring dev.modtale.net is mapped..."
143+
gcloud beta run domain-mappings create \
144+
--service ${{ env.FRONTEND_SERVICE }} \
145+
--domain dev.modtale.net \
146+
--region $REGION || echo "Mapping likely exists."
147+
148+
- name: Deployment Summary
149+
run: |
150+
echo "### 🚀 Deployment Complete (${{ env.ENV_TYPE }})" >> $GITHUB_STEP_SUMMARY
151+
echo "| Service | URL |" >> $GITHUB_STEP_SUMMARY
152+
echo "| :--- | :--- |" >> $GITHUB_STEP_SUMMARY
153+
echo "| **Frontend** | [${{ env.FINAL_FRONTEND_URL }}](${{ env.FINAL_FRONTEND_URL }}) |" >> $GITHUB_STEP_SUMMARY
154+
echo "| **Backend API** | ${{ env.API_URL }} |" >> $GITHUB_STEP_SUMMARY
155+
echo "| **Database** | \`${{ env.DB_NAME }}\` |" >> $GITHUB_STEP_SUMMARY

0 commit comments

Comments
 (0)