Skip to content

Commit c3b42ef

Browse files
authored
Merge pull request #27 from Code4GovTech/dev
Dev
2 parents 1c19262 + e1253d6 commit c3b42ef

File tree

12 files changed

+876
-67
lines changed

12 files changed

+876
-67
lines changed

.dockerignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.env

.github/workflows/ci.yml

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
name: Build
2+
3+
env:
4+
APP_NAME: CMS-BACKEND-API
5+
PROJECT_NAME: CMS-BACKEND-API
6+
DOCKER_COMPOSE_PATH: /root/app/docker-compose.yml
7+
REGISTRY: ghcr.io
8+
DOCKER_REGISTRY: ghcr.io/code4govtech/dmp-cms-backend-api
9+
DOT_ENV_FILE_NAME: env.dmp-cms-backend-api
10+
11+
12+
on:
13+
workflow_dispatch:
14+
push:
15+
branches:
16+
- devops
17+
- dev
18+
- main
19+
20+
permissions:
21+
contents: write
22+
packages: write
23+
24+
25+
jobs:
26+
set_vars:
27+
name: Set Environment Variables
28+
runs-on: ubuntu-latest
29+
outputs:
30+
TAG_LATEST: ${{ steps.tag_values.outputs.TAG_LATEST }}
31+
TAG_ENV_COMMIT: ${{ steps.tag_values.outputs.TAG_ENV_COMMIT }}
32+
APP_ENV: ${{ steps.tag_values.outputs.APP_ENV }}
33+
steps:
34+
- name: Set Docker Image Tags
35+
id: tag_values
36+
run: |
37+
case "${{ github.ref }}" in
38+
'refs/heads/main')
39+
echo "TAG_LATEST=prod-latest" >> $GITHUB_OUTPUT
40+
echo "TAG_ENV_COMMIT=prod-${GITHUB_SHA:0:5}" >> $GITHUB_OUTPUT
41+
echo "APP_ENV=PROD" >> $GITHUB_OUTPUT
42+
;;
43+
'refs/heads/devops')
44+
echo "TAG_LATEST=dev-latest" >> $GITHUB_OUTPUT
45+
echo "TAG_ENV_COMMIT=dev-${GITHUB_SHA:0:5}" >> $GITHUB_OUTPUT
46+
echo "APP_ENV=DEV" >> $GITHUB_OUTPUT
47+
;;
48+
'refs/heads/dev')
49+
echo "TAG_LATEST=dev-latest" >> $GITHUB_OUTPUT
50+
echo "TAG_ENV_COMMIT=dev-${GITHUB_SHA:0:5}" >> $GITHUB_OUTPUT
51+
echo "APP_ENV=DEV" >> $GITHUB_OUTPUT
52+
;;
53+
esac
54+
55+
build:
56+
name: Build
57+
runs-on: ubuntu-latest
58+
needs: [set_vars]
59+
permissions:
60+
contents: read
61+
packages: write
62+
env:
63+
TAG_LATEST: ${{ needs.set_vars.outputs.TAG_LATEST }}
64+
TAG_ENV_COMMIT: ${{ needs.set_vars.outputs.TAG_ENV_COMMIT }}
65+
SUPABASE_URL: ${{ vars[format('APP_{0}_SUPABASE_URL', needs.set_vars.outputs.APP_ENV)] }}
66+
SUPABASE_KEY: ${{ secrets[format('APP_{0}_SUPABASE_KEY', needs.set_vars.outputs.APP_ENV)] }}
67+
SECRET_KEY: ${{ secrets[format('APP_{0}_SECRET_KEY', needs.set_vars.outputs.APP_ENV)] }}
68+
steps:
69+
- name: Checkout code
70+
uses: actions/checkout@v2
71+
72+
# - name: Login to GitHub Packages
73+
# run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login docker.pkg.github.com -u ${{ github.actor }} --password-stdin
74+
75+
- name: Log in to the Container registry
76+
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
77+
with:
78+
registry: ${{ env.REGISTRY }}
79+
username: ${{ github.actor }}
80+
password: ${{ secrets.GITHUB_TOKEN }}
81+
82+
- name: Set Docker Tags
83+
uses: actions/setup-node@v2
84+
85+
- name: Read Secrets
86+
run: |
87+
echo "SUPABASE_URL=${SUPABASE_URL}" >> .env
88+
echo "SUPABASE_KEY=${SUPABASE_KEY}" >> .env
89+
echo "SECRET_KEY=${SECRET_KEY}" >> .env
90+
mv .env ${{ env.DOT_ENV_FILE_NAME }}
91+
92+
- name: Copy env file to DEV Server
93+
uses: appleboy/[email protected]
94+
if: needs.set_vars.outputs.APP_ENV == 'DEV'
95+
with:
96+
host: ${{ vars.DEV_SERVER_HOST }}
97+
username: ${{ vars.DEV_SERVER_USERNAME }}
98+
key: ${{ secrets.DEV_SSH_PRIVATE_KEY }}
99+
port: ${{ vars.DEV_SERVER_PORT }}
100+
source: "${{ env.DOT_ENV_FILE_NAME }}"
101+
target: /root/app/
102+
103+
- name: Build ${{ env.APP_NAME }} Docker image
104+
run: |
105+
docker build -t ${{ env.DOCKER_REGISTRY }}:${{ env.TAG_LATEST }} .
106+
107+
- name: Add tag to Docker image
108+
run: |
109+
echo ${{ github.sha }}
110+
docker tag ${{ env.DOCKER_REGISTRY }}:${{ env.TAG_LATEST }} ${{ env.DOCKER_REGISTRY }}:${{ env.TAG_ENV_COMMIT }}
111+
112+
- name: Push Docker image to GitHub Packages
113+
run: |
114+
docker push ${{ env.DOCKER_REGISTRY }}:${{ env.TAG_LATEST }}
115+
docker push ${{ env.DOCKER_REGISTRY }}:${{ env.TAG_ENV_COMMIT }}
116+
117+
deploy:
118+
name: Deployment
119+
runs-on: ubuntu-latest
120+
needs: build
121+
if: github.event_name == 'push' && github.ref_type == 'branch'
122+
123+
steps:
124+
- name: Deploy to DevOps/Dev Environment
125+
if: github.ref == 'refs/heads/devops' || github.ref == 'refs/heads/dev'
126+
uses: appleboy/[email protected]
127+
env:
128+
DOCKER_COMPOSE_PATH: ${{ env.DOCKER_COMPOSE_PATH }}
129+
APP_NAME: ${{ env.APP_NAME }}
130+
DOCKER_REGISTRY: ${{ env.DOCKER_REGISTRY }}
131+
with:
132+
host: ${{ vars.DEV_SERVER_HOST }}
133+
username: ${{ vars.DEV_SERVER_USERNAME }}
134+
key: ${{ secrets.DEV_SSH_PRIVATE_KEY }}
135+
port: ${{ vars.DEV_SERVER_PORT }}
136+
allenvs: true
137+
script_stop: true
138+
envs: DOCKER_COMPOSE_PATH,APP_NAME,DOCKER_REGISTRY
139+
script: |
140+
echo "Docker Compose Path $DOCKER_COMPOSE_PATH"
141+
docker compose -f $DOCKER_COMPOSE_PATH pull
142+
docker compose -f $DOCKER_COMPOSE_PATH up -d
143+
144+
- name: Deploy to Prod environment
145+
if: github.ref == 'refs/heads/main'
146+
run: echo "Deploying to Kubernetes"

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
dmp_2/__pycache__/*
22
.env
33
env/*
4-
4+
venv
55
__pycache__/*

Dockerfile

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Use an official Python runtime as a parent image
2+
FROM python:3.12-slim
3+
4+
# Set the working directory in the container
5+
WORKDIR /app
6+
7+
# Copy the current directory contents into the container at /app
8+
COPY . /app
9+
10+
# Install any needed packages specified in requirements.txt
11+
RUN pip install --no-cache-dir -r requirements.txt
12+
13+
# Make port 5000 available to the world outside this container
14+
EXPOSE 5000
15+
16+
# Define environment variable
17+
ENV FLASK_APP=wsgi.py
18+
ENV FLASK_RUN_HOST=0.0.0.0
19+
20+
# Run the application
21+
CMD ["flask", "run"]
22+

0 commit comments

Comments
 (0)