1
- name : Test and deploy
1
+ name : Build
2
+
3
+ env :
4
+ APP_NAME : CMS-FE
5
+ PROJECT_NAME : CMS-FE
6
+ DOCKER_COMPOSE_PATH : /root/app/docker-compose.yml
7
+ REGISTRY : ghcr.io
8
+ DOCKER_REGISTRY : ghcr.io/code4govtech/dmp-cms-fe
9
+ DOT_ENV_FILE_NAME : env.dmp-cms-fe
2
10
3
11
on :
12
+ workflow_dispatch :
4
13
push :
5
- branches : [ main ]
6
- pull_request :
7
- branches : [ main ]
14
+ branches :
15
+ - dev
16
+ - main
17
+
18
+ permissions :
19
+ contents : write
20
+ packages : write
21
+
8
22
9
23
jobs :
10
- build :
24
+ set_vars :
25
+ name : Set Environment Variables
26
+ runs-on : ubuntu-latest
27
+ outputs :
28
+ TAG_LATEST : ${{ steps.tag_values.outputs.TAG_LATEST }}
29
+ TAG_ENV_COMMIT : ${{ steps.tag_values.outputs.TAG_ENV_COMMIT }}
30
+ APP_ENV : ${{ steps.tag_values.outputs.APP_ENV }}
31
+ steps :
32
+ - name : Set Docker Image Tags
33
+ id : tag_values
34
+ run : |
35
+ case "${{ github.ref }}" in
36
+ 'refs/heads/main')
37
+ echo "TAG_LATEST=prod-latest" >> $GITHUB_OUTPUT
38
+ echo "TAG_ENV_COMMIT=prod-${GITHUB_SHA:0:5}" >> $GITHUB_OUTPUT
39
+ echo "APP_ENV=PROD" >> $GITHUB_OUTPUT
40
+ ;;
41
+ 'refs/heads/devops')
42
+ echo "TAG_LATEST=dev-latest" >> $GITHUB_OUTPUT
43
+ echo "TAG_ENV_COMMIT=dev-${GITHUB_SHA:0:5}" >> $GITHUB_OUTPUT
44
+ echo "APP_ENV=DEV" >> $GITHUB_OUTPUT
45
+ ;;
46
+ 'refs/heads/dev')
47
+ echo "TAG_LATEST=dev-latest" >> $GITHUB_OUTPUT
48
+ echo "TAG_ENV_COMMIT=dev-${GITHUB_SHA:0:5}" >> $GITHUB_OUTPUT
49
+ echo "APP_ENV=DEV" >> $GITHUB_OUTPUT
50
+ ;;
51
+ esac
11
52
53
+ build :
54
+ name : Build
12
55
runs-on : ubuntu-latest
56
+ needs : [set_vars]
57
+ permissions :
58
+ contents : read
59
+ packages : write
60
+ env :
61
+ TAG_LATEST : ${{ needs.set_vars.outputs.TAG_LATEST }}
62
+ TAG_ENV_COMMIT : ${{ needs.set_vars.outputs.TAG_ENV_COMMIT }}
63
+ API_BASE_URL : ${{ vars[format('APP_{0}_API_BASE_URL', needs.set_vars.outputs.APP_ENV)] }}
64
+ API_AUTH_KEY : ${{ secrets[format('APP_{0}_API_AUTH_KEY', needs.set_vars.outputs.APP_ENV)] }}
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 }}
21
78
22
- - name : Set up Node.js ${{ matrix.node-version }}
23
- uses : actions/setup-node@v1
24
- with :
25
- node-version : ${{ matrix.node-version }}
79
+ - name : Set Docker Tags
80
+ uses : actions/setup-node@v2
26
81
27
- - name : Install dependencies
28
- run : yarn install --frozen-lockfile
82
+ - name : Read Secrets
83
+ run : |
84
+ echo "API_BASE_URL=${API_BASE_URL}" >> .env
85
+ echo "API_AUTH_KEY=${API_AUTH_KEY}" >> .env
86
+ cp .env ${{ env.DOT_ENV_FILE_NAME }}
87
+
88
+ - name : Copy env file to DEV Server
89
+
90
+ if : needs.set_vars.outputs.APP_ENV == 'DEV'
91
+ with :
92
+ host : ${{ vars.DEV_SERVER_HOST }}
93
+ username : ${{ vars.DEV_SERVER_USERNAME }}
94
+ key : ${{ secrets.DEV_SSH_PRIVATE_KEY }}
95
+ port : ${{ vars.DEV_SERVER_PORT }}
96
+ source : " ${{ env.DOT_ENV_FILE_NAME }}"
97
+ target : /root/app/
98
+
99
+ - name : Build ${{ env.APP_NAME }} Docker image
100
+ run : |
101
+ docker build --build-arg API_BASE_URL=$API_BASE_URL --build-arg API_AUTH_KEY=$API_AUTH_KEY -t ${{ env.DOCKER_REGISTRY }}:${{ env.TAG_LATEST }} .
102
+
103
+ - name : Add tag to Docker image
104
+ run : |
105
+ echo ${{ github.sha }}
106
+ docker tag ${{ env.DOCKER_REGISTRY }}:${{ env.TAG_LATEST }} ${{ env.DOCKER_REGISTRY }}:${{ env.TAG_ENV_COMMIT }}
107
+
108
+ - name : Push Docker image to GitHub Packages
109
+ run : |
110
+ docker push ${{ env.DOCKER_REGISTRY }}:${{ env.TAG_LATEST }}
111
+ docker push ${{ env.DOCKER_REGISTRY }}:${{ env.TAG_ENV_COMMIT }}
112
+
113
+ deploy :
114
+ name : Deployment
115
+ runs-on : ubuntu-latest
116
+ needs : build
117
+ if : github.event_name == 'push' && github.ref_type == 'branch'
118
+
119
+ steps :
120
+ - name : Deploy to DevOps/Dev Environment
121
+ if : github.ref == 'refs/heads/devops' || github.ref == 'refs/heads/dev'
122
+
123
+ env :
124
+ DOCKER_COMPOSE_PATH : ${{ env.DOCKER_COMPOSE_PATH }}
125
+ APP_NAME : ${{ env.APP_NAME }}
126
+ DOCKER_REGISTRY : ${{ env.DOCKER_REGISTRY }}
127
+ with :
128
+ host : ${{ vars.DEV_SERVER_HOST }}
129
+ username : ${{ vars.DEV_SERVER_USERNAME }}
130
+ key : ${{ secrets.DEV_SSH_PRIVATE_KEY }}
131
+ port : ${{ vars.DEV_SERVER_PORT }}
132
+ allenvs : true
133
+ script_stop : true
134
+ envs : DOCKER_COMPOSE_PATH,APP_NAME,DOCKER_REGISTRY
135
+ script : |
136
+ echo "Docker Compose Path $DOCKER_COMPOSE_PATH"
137
+ docker compose -f $DOCKER_COMPOSE_PATH pull
138
+ docker compose -f $DOCKER_COMPOSE_PATH up -d
29
139
30
- - name : Build
31
- run : yarn build
140
+ - name : Deploy to Prod environment
141
+ if : github.ref == 'refs/heads/main'
142
+ run : echo "Deploying to Kubernetes"
0 commit comments