-
Notifications
You must be signed in to change notification settings - Fork 0
147 lines (131 loc) · 5.21 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
147
name: Build
env:
APP_NAME: CMS-BACKEND-API
PROJECT_NAME: CMS-BACKEND-API
DOCKER_COMPOSE_PATH: /root/app/docker-compose.yml
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
DOCKER_REGISTRY: ghcr.io/Code4GovTech/DMP-CMS-Backend-API
DOT_ENV_FILE_NAME: env.data
on:
workflow_dispatch:
push:
branches:
- devops
- dev
- main
permissions:
contents: 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)] }}
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: Set Docker Tags
uses: actions/setup-node@v2
- name: Read Secrets
run: |
echo "SUPABASE_URL=${SUPABASE_URL}" >> .env
echo "SUPABASE_KEY=${SUPABASE_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 "==============================="
echo "Deploying to Dev environment running on Docker Compose"
echo "==============================="
echo "Docker Compose Path $DOCKER_COMPOSE_PATH"
echo "App Name $APP_NAME"
echo "Docker Registry $DOCKER_REGISTRY"
COMMIT=$(echo $GITHUB_SHA | cut -c1-5)
TAG_ENV_COMMIT="dev-${COMMIT}"
CURRENT_TAG=$(grep "${DOCKER_REGISTRY}:" $DOCKER_COMPOSE_PATH | sed -n 's/.*'"${APP_NAME}"':\([^"]*\).*/\1/p')
echo "Current Tag: $CURRENT_TAG"
echo "Latest Tag: $TAG_ENV_COMMIT"
sudo sed -i 's|'"${DOCKER_REGISTRY}:${CURRENT_TAG}"'|'"${DOCKER_REGISTRY}:${TAG_ENV_COMMIT}"'|g' $DOCKER_COMPOSE_PATH
docker pull $DOCKER_REGISTRY:$TAG_ENV_COMMIT
docker compose -f $DOCKER_COMPOSE_PATH up -d
- name: Deploy to Prod environment
if: github.ref == 'refs/heads/main'
run: echo "Deploying to Kubernetes"