-
Notifications
You must be signed in to change notification settings - Fork 3
148 lines (120 loc) · 4.86 KB
/
prod-ci.yaml
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
148
name: LCFS 0.2.0 Prod CI
on:
workflow_dispatch:
env:
GIT_URL: https://github.com/bcgov/lcfs.git
TEST_NAMESPACE: ${{ secrets.OPENSHIFT_NAMESPACE_PLATE }}-test
PROD_NAMESPACE: ${{ secrets.OPENSHIFT_NAMESPACE_PLATE }}-prod
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
install-oc:
runs-on: ubuntu-latest
outputs:
cache-hit: ${{ steps.cache.outputs.cache-hit }}
steps:
- name: Check out repository
uses: actions/[email protected]
- name: Set up cache for OpenShift CLI
id: cache
uses: actions/[email protected]
with:
path: /usr/local/bin/oc # Path where the `oc` binary will be installed
key: oc-cli-${{ runner.os }}
- name: Install OpenShift CLI (if not cached)
if: steps.cache.outputs.cache-hit != 'true'
run: |
curl -LO https://mirror.openshift.com/pub/openshift-v4/clients/ocp/stable/openshift-client-linux.tar.gz
tar -xvf openshift-client-linux.tar.gz
sudo mv oc /usr/local/bin/
oc version --client
- name: Confirm OpenShift CLI is Available
run: oc version --client
# Read the image tag from test environment
get-image-tag:
name: Get the image-tag from values-test.yaml
runs-on: ubuntu-latest
needs: [install-oc]
outputs:
IMAGE_TAG: ${{ steps.get-image-tag.outputs.IMAGE_TAG }}
steps:
- name: Checkout Manifest repository
uses: actions/checkout@v3
with:
repository: bcgov-c/tenant-gitops-d2bd59
ref: main
ssh-key: ${{ secrets.MANIFEST_REPO_DEPLOY_KEY }}
# to do: verify the frontend image tag is same as the backend image tag
- name: Get the image tag from values-test.yaml
id: get-image-tag
uses: mikefarah/[email protected]
with:
cmd: |
imagetag=$(yq eval '.image.tag' lcfs/charts/lcfs-frontend/values-test.yaml)
echo "IMAGE_TAG retrieved from Test is $imagetag"
echo "IMAGE_TAG=$imagetag" >> $GITHUB_OUTPUT
get-current-time:
name: Get Current Time
runs-on: ubuntu-latest
needs: get-image-tag
outputs:
CURRENT_TIME: ${{ steps.get-current-time.outputs.CURRENT_TIME }}
steps:
- id: get-current-time
run: |
TZ="America/Vancouver"
echo "CURRENT_TIME=$(date '+%Y-%m-%d %H:%M:%S %Z')" >> $GITHUB_OUTPUT
# Deplog the image which is running on test to prod
deploy-on-prod:
name: Deploy LCFS on Prod
runs-on: ubuntu-latest
needs: [get-image-tag, get-current-time]
timeout-minutes: 60
env:
IMAGE_TAG: ${{ needs.get-image-tag.outputs.IMAGE_TAG }}
CURRENT_TIME: ${{ needs.get-current-time.outputs.CURRENT_TIME }}
steps:
- name: Checkout Manifest repository
uses: actions/checkout@v3
with:
repository: bcgov-c/tenant-gitops-d2bd59
ref: main
ssh-key: ${{ secrets.MANIFEST_REPO_DEPLOY_KEY }}
- name: Ask for approval for LCFS ${{env.IMAGE_TAG }} Prod deployment
uses: trstringer/[email protected]
with:
secret: ${{ github.TOKEN }}
approvers: AlexZorkin,kuanfandevops,hamed-valiollahi,airinggov,areyeslo,dhaselhan,Grulin
minimum-approvals: 2
issue-title: "LCFS ${{env.IMAGE_TAG }} Prod Deployment at ${{ env.CURRENT_TIME }}."
- name: Restore oc command from Cache
uses: actions/[email protected]
with:
path: /usr/local/bin/oc
key: oc-cli-${{ runner.os }}
- name: Log in to Openshift
uses: redhat-actions/[email protected]
with:
openshift_server_url: ${{ secrets.OPENSHIFT_SERVER }}
openshift_token: ${{ secrets.OPENSHIFT_TOKEN }}
insecure_skip_tls_verify: true
namespace: ${{ env.PROD_NAMESPACE }}
- name: Tag LCFS images from Test to Prod
run: |
oc tag ${{ env.TEST_NAMESPACE }}/lcfs-backend:${{env.IMAGE_TAG }} ${{ env.PROD_NAMESPACE }}/lcfs-backend:${{env.IMAGE_TAG }}
oc tag ${{ env.TEST_NAMESPACE }}/lcfs-frontend:${{env.IMAGE_TAG }} ${{ env.PROD_NAMESPACE }}/lcfs-frontend:${{env.IMAGE_TAG }}
- name: Update frontend tag for prod deployment
uses: mikefarah/[email protected]
with:
cmd: |
yq -i '.image.tag = "${{env.IMAGE_TAG }}"' lcfs/charts/lcfs-frontend/values-prod.yaml
yq -i '.image.tag = "${{env.IMAGE_TAG }}"' lcfs/charts/lcfs-backend/values-prod.yaml
- name: GitHub Commit & Push
run: |
git config --global user.email "[email protected]"
git config --global user.name "GitHub Actions"
git add lcfs/charts/lcfs-frontend/values-prod.yaml
git add lcfs/charts/lcfs-backend/values-prod.yaml
git commit -m "Update image tag ${{env.IMAGE_TAG }} for prod"
git push