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