@@ -2,9 +2,14 @@ name: CI & Docker
22
33on :
44 push :
5- branches : [main]
5+ branches :
6+ - main
7+ - lorenc-ci
8+ - paython-mcp
9+ - feature/configure-chat-ui
610 pull_request :
7- branches : [main]
11+ branches :
12+ - main
813
914jobs :
1015 build-test :
@@ -29,10 +34,10 @@ jobs:
2934 run : |
3035 cd server
3136 npm test --if-present
32-
37+ # backend image
3338 docker-image :
3439 needs : build-test
35- runs-on : unbuntu -latest
40+ runs-on : ubuntu -latest
3641
3742 permissions :
3843 contents : read
@@ -66,3 +71,143 @@ jobs:
6671 run : |
6772 docker push $IMAGE_ID:$VERSION
6873 docker push $IMAGE_ID:latest
74+
75+ # frontend image
76+ frontend-docker-image :
77+ needs : build-test
78+ runs-on : ubuntu-latest
79+
80+ permissions :
81+ contents : read
82+ packages : write
83+
84+ env :
85+ IMAGE_NAME : mcp-frontend
86+
87+ steps :
88+ - name : Checkout repository
89+ uses : actions/checkout@v4
90+
91+ - name : Login to GitHub Container Registry
92+ uses : docker/login-action@v3
93+ with :
94+ registry : ghcr.io
95+ username : ${{ github.actor }}
96+ password : ${{ secrets.GITHUB_TOKEN }}
97+
98+ - name : Build frontend Docker image
99+ run : |
100+ IMAGE_ID=ghcr.io/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}
101+ VERSION=${{ github.sha }}
102+
103+ echo "FRONTEND_IMAGE_ID=$IMAGE_ID" >> $GITHUB_ENV
104+ echo "FRONTEND_VERSION=$VERSION" >> $GITHUB_ENV
105+
106+ docker build -f Dockerfile.frontend -t $IMAGE_ID:$VERSION -t $IMAGE_ID:latest .
107+
108+ - name : Push frontend Docker image
109+ run : |
110+ docker push $FRONTEND_IMAGE_ID:$FRONTEND_VERSION
111+ docker push $FRONTEND_IMAGE_ID:latest
112+
113+ # backend cloud deployment
114+ deploy-gcp :
115+ needs : docker-image
116+ runs-on : ubuntu-latest
117+ permissions :
118+ contents : read
119+ packages : read
120+
121+ steps :
122+ - name : Checkout repository
123+ uses : actions/checkout@v4
124+
125+ - name : Authenticate to Google Cloud
126+ uses : google-github-actions/auth@v2
127+ with :
128+ credentials_json : ${{ secrets.GCP_SERVICE_ACCOUNT_KEY }}
129+
130+ - name : Set up gcloud
131+ uses : google-github-actions/setup-gcloud@v2
132+ with :
133+ project_id : ${{ secrets.GCP_PROJECT_ID }}
134+
135+ - name : Configure Docker for Artifact Registry
136+ run : |
137+ gcloud auth configure-docker us-east1-docker.pkg.dev --quiet
138+
139+ - name : Pull image from GHCR
140+ run : |
141+ IMAGE_ID=ghcr.io/${{ github.repository_owner }}/mcp-backend
142+ VERSION=${{ github.sha }}
143+ echo "IMAGE_ID=$IMAGE_ID" >> $GITHUB_ENV
144+ echo "VERSION=$VERSION" >> $GITHUB_ENV
145+ echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u "$GITHUB_ACTOR" --password-stdin
146+ docker pull $IMAGE_ID:$VERSION
147+
148+ - name : Tag and push image to Artifact Registry
149+ run : |
150+ AR_IMAGE=us-east1-docker.pkg.dev/${{ secrets.GCP_PROJECT_ID }}/mcp-backend/mcp-backend
151+ docker tag ghcr.io/${{ github.repository_owner }}/mcp-backend:${{ github.sha }} $AR_IMAGE:${{ github.sha }}
152+ docker push $AR_IMAGE:${{ github.sha }}
153+ echo "AR_IMAGE=$AR_IMAGE" >> $GITHUB_ENV
154+
155+ - name : Deploy to Cloud Run
156+ run : |
157+ gcloud run deploy mcp-backend \
158+ --image $AR_IMAGE:${{ github.sha }} \
159+ --region ${{ secrets.GCP_REGION }} \
160+ --platform managed \
161+ --allow-unauthenticated \
162+ --port 3000
163+
164+ # frontend cloud deployment
165+ deploy-gcp-frontend :
166+ needs : frontend-docker-image
167+ runs-on : ubuntu-latest
168+ permissions :
169+ contents : read
170+ packages : read
171+
172+ steps :
173+ - name : Checkout repository
174+ uses : actions/checkout@v4
175+
176+ - name : Authenticate to Google Cloud
177+ uses : google-github-actions/auth@v2
178+ with :
179+ credentials_json : ${{ secrets.GCP_SERVICE_ACCOUNT_KEY }}
180+
181+ - name : Set up gcloud
182+ uses : google-github-actions/setup-gcloud@v2
183+ with :
184+ project_id : ${{ secrets.GCP_PROJECT_ID }}
185+
186+ - name : Configure Docker for Artifact Registry
187+ run : |
188+ gcloud auth configure-docker us-east1-docker.pkg.dev --quiet
189+
190+ - name : Pull frontend image from GHCR
191+ run : |
192+ IMAGE_ID=ghcr.io/${{ github.repository_owner }}/mcp-frontend
193+ VERSION=${{ github.sha }}
194+ echo "FRONTEND_IMAGE_ID=$IMAGE_ID" >> $GITHUB_ENV
195+ echo "FRONTEND_VERSION=$VERSION" >> $GITHUB_ENV
196+ echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u "$GITHUB_ACTOR" --password-stdin
197+ docker pull $IMAGE_ID:$VERSION
198+
199+ - name : Tag & push frontend image to Artifact Registry
200+ run : |
201+ AR_FRONTEND_IMAGE=us-east1-docker.pkg.dev/${{ secrets.GCP_PROJECT_ID }}/mcp-frontend/mcp-frontend
202+ docker tag ghcr.io/${{ github.repository_owner }}/mcp-frontend:${{ github.sha }} $AR_FRONTEND_IMAGE:${{ github.sha }}
203+ docker push $AR_FRONTEND_IMAGE:${{ github.sha }}
204+ echo "AR_FRONTEND_IMAGE=$AR_FRONTEND_IMAGE" >> $GITHUB_ENV
205+
206+ - name : Deploy frontend to Cloud Run
207+ run : |
208+ gcloud run deploy mcp-frontend \
209+ --image $AR_FRONTEND_IMAGE:${{ github.sha }} \
210+ --region ${{ secrets.GCP_REGION }} \
211+ --platform managed \
212+ --allow-unauthenticated \
213+ --port 80
0 commit comments