1
- name : Test and deploy
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
+
2
11
3
12
on :
13
+ workflow_dispatch :
4
14
push :
5
- branches : [ main ]
6
- pull_request :
7
- branches : [ main ]
15
+ branches :
16
+ - devops
17
+ - dev
18
+ - main
19
+
20
+ permissions :
21
+ contents : write
22
+ packages : write
23
+
8
24
9
25
jobs :
10
- build :
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
11
54
55
+ build :
56
+ name : Build
12
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
+ steps :
66
+ - name : Checkout code
67
+ uses : actions/checkout@v2
13
68
14
- strategy :
15
- matrix :
16
- node-version : [16.x]
69
+ # - name: Login to GitHub Packages
70
+ # run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login docker.pkg.github.com -u ${{ github.actor }} --password-stdin
17
71
18
- steps :
19
- - name : Checkout repository
20
- uses : actions/checkout@v2
72
+ - name : Log in to the Container registry
73
+ uses : docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
74
+ with :
75
+ registry : ${{ env.REGISTRY }}
76
+ username : ${{ github.actor }}
77
+ password : ${{ secrets.GITHUB_TOKEN }}
78
+
79
+ - name : Set Docker Tags
80
+ uses : actions/setup-node@v2
81
+
82
+ - name : Read Secrets
83
+ run : |
84
+ touch .env
85
+ mv .env ${{ env.DOT_ENV_FILE_NAME }}
86
+
87
+ - name : Copy env file to DEV Server
88
+
89
+ if : needs.set_vars.outputs.APP_ENV == 'DEV'
90
+ with :
91
+ host : ${{ vars.DEV_SERVER_HOST }}
92
+ username : ${{ vars.DEV_SERVER_USERNAME }}
93
+ key : ${{ secrets.DEV_SSH_PRIVATE_KEY }}
94
+ port : ${{ vars.DEV_SERVER_PORT }}
95
+ source : " ${{ env.DOT_ENV_FILE_NAME }}"
96
+ target : /root/app/
97
+
98
+ - name : Build ${{ env.APP_NAME }} Docker image
99
+ run : |
100
+ docker build -t ${{ env.DOCKER_REGISTRY }}:${{ env.TAG_LATEST }} .
21
101
22
- - name : Set up Node.js ${{ matrix.node-version }}
23
- uses : actions/setup-node@v1
24
- with :
25
- node-version : ${{ matrix.node-version }}
102
+ - name : Add tag to Docker image
103
+ run : |
104
+ echo ${{ github.sha }}
105
+ docker tag ${{ env.DOCKER_REGISTRY }}:${{ env.TAG_LATEST }} ${{ env.DOCKER_REGISTRY }}:${{ env.TAG_ENV_COMMIT }}
26
106
27
- - name : Install dependencies
28
- run : yarn install --frozen-lockfile
107
+ - name : Push Docker image to GitHub Packages
108
+ run : |
109
+ docker push ${{ env.DOCKER_REGISTRY }}:${{ env.TAG_LATEST }}
110
+ docker push ${{ env.DOCKER_REGISTRY }}:${{ env.TAG_ENV_COMMIT }}
111
+
112
+ deploy :
113
+ name : Deployment
114
+ runs-on : ubuntu-latest
115
+ needs : build
116
+ if : github.event_name == 'push' && github.ref_type == 'branch'
117
+
118
+ steps :
119
+ - name : Deploy to DevOps/Dev Environment
120
+ if : github.ref == 'refs/heads/devops' || github.ref == 'refs/heads/dev'
121
+
122
+ env :
123
+ DOCKER_COMPOSE_PATH : ${{ env.DOCKER_COMPOSE_PATH }}
124
+ APP_NAME : ${{ env.APP_NAME }}
125
+ DOCKER_REGISTRY : ${{ env.DOCKER_REGISTRY }}
126
+ with :
127
+ host : ${{ vars.DEV_SERVER_HOST }}
128
+ username : ${{ vars.DEV_SERVER_USERNAME }}
129
+ key : ${{ secrets.DEV_SSH_PRIVATE_KEY }}
130
+ port : ${{ vars.DEV_SERVER_PORT }}
131
+ allenvs : true
132
+ script_stop : true
133
+ envs : DOCKER_COMPOSE_PATH,APP_NAME,DOCKER_REGISTRY
134
+ script : |
135
+ echo "Docker Compose Path $DOCKER_COMPOSE_PATH"
136
+ docker compose -f $DOCKER_COMPOSE_PATH pull
137
+ docker compose -f $DOCKER_COMPOSE_PATH up -d
29
138
30
- - name : Build
31
- run : yarn build
139
+ - name : Deploy to Prod environment
140
+ if : github.ref == 'refs/heads/main'
141
+ run : echo "Deploying to Kubernetes"
0 commit comments