Skip to content

Commit 386da68

Browse files
authored
fix: Add more visibility to github workflows (#111)
* fix: Add more visibility to github workflows * fix: Add more logs while helm install/upgrade
1 parent 37b4053 commit 386da68

File tree

3 files changed

+102
-112
lines changed

3 files changed

+102
-112
lines changed

.github/workflows/k8s-deploy.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@ jobs:
7474
--namespace "opencrvs-${ENV}" \
7575
-f k8s-env/mosip-api/values.yaml \
7676
--set hostname=$ENV.e2e-k8s.opencrvs.dev \
77-
--atomic
77+
--atomic \
78+
--debug | sed '/USER-SUPPLIED VALUES:/,$d'
7879
- name: Add updated_at timestamp label to namespace
7980
run: kubectl label namespace --overwrite opencrvs-${ENV} updated_at=$(date +%s)
8081
- name: Copy secrets from dependencies into application namespace
@@ -103,10 +104,11 @@ jobs:
103104
--namespace "opencrvs-${ENV}" \
104105
-f k8s-env/opencrvs/values.yaml \
105106
--atomic \
107+
--debug \
106108
--set image.tag="$CORE_IMAGE_TAG" \
107109
--set countryconfig.image.tag="$COUNTRYCONFIG_IMAGE_TAG" \
108110
--set hostname=$ENV.e2e-k8s.opencrvs.dev \
109-
--set environment="$ENV"
111+
--set environment="$ENV" | sed '/USER-SUPPLIED VALUES:/,$d'
110112
- name: Add keep namespace label opencrvs-${ENV}
111113
if: inputs.keep-e2e
112114
run: kubectl label namespace opencrvs-${ENV} keep_namespace='true' --overwrite
@@ -123,6 +125,5 @@ jobs:
123125
needs: deploy
124126
uses: ./.github/workflows/k8s-reset-data.yml
125127
with:
126-
namespace: 'opencrvs-${{ inputs.environment }}'
127128
environment: ${{ inputs.environment }}
128129
secrets: inherit
Lines changed: 73 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -1,115 +1,95 @@
11
name: Reset environment
2-
run-name: "Reset ${{ inputs.environment }} environment (namespace: ${{ inputs.namespace }})"
3-
# FIXME:
4-
# - replace sleep 30 with kubectl wait for job completion
5-
# - only environment variable is required, namespace could be build as "opencrvs-<environment>"
6-
# but namespace is more natural way for kubernetes
2+
run-name: "Reset ${{ inputs.environment }} environment"
73
on:
84
workflow_dispatch:
95
inputs:
10-
namespace:
11-
description: "Target namespace"
12-
required: true
13-
type: string
146
environment:
157
description: "Target environment"
168
required: true
179
type: string
1810
workflow_call:
1911
inputs:
20-
namespace:
21-
type: string
2212
environment:
2313
type: string
2414
jobs:
15+
prepare:
16+
outputs:
17+
values-file: ${{ steps.get-values.outputs.values-file }}
18+
env:
19+
namespace: opencrvs-${{ inputs.environment }}
20+
runs-on: [self-hosted, k8s, e2e]
21+
steps:
22+
- name: Get helm release values and Quote specific fields that are commonly numeric
23+
id: get-values
24+
run: |
25+
helm get values opencrvs -n ${namespace} -ojson | \
26+
jq '
27+
# Quote image tags
28+
if has("image") and (.image | has("tag")) and (.image.tag | type == "number") then
29+
.image.tag = (.image.tag | tostring)
30+
else . end |
31+
32+
# Quote version numbers
33+
if has("version") and (.version | type == "number") then
34+
.version = (.version | tostring)
35+
else . end |
36+
37+
# Quote port numbers if needed (optional)
38+
if has("service") and (.service | has("port")) and (.service.port | type == "number") then
39+
.service.port = (.service.port | tostring)
40+
else . end
41+
' > /tmp/${namespace}.json
42+
echo "values-file=/tmp/${namespace}.json" >> $GITHUB_OUTPUT
43+
- name: Upload helm release values file /tmp/opencrvs-${{ inputs.environment }}.json
44+
uses: actions/upload-artifact@v4
45+
with:
46+
name: opencrvs-${{ inputs.environment }}-values-file
47+
path: /tmp/opencrvs-${{ inputs.environment }}.json
48+
retention-days: 1
2549
reset:
26-
environment: ${{ inputs.environment }}
50+
name: ${{ matrix.job-name }}
51+
needs: prepare
2752
env:
28-
namespace: ${{ inputs.namespace }}
53+
namespace: opencrvs-${{ inputs.environment }}
2954
runs-on: [self-hosted, k8s, e2e]
55+
strategy:
56+
max-parallel: 1 # Ensure jobs run one by one
57+
fail-fast: true # Stop on first failure
58+
matrix:
59+
job-name:
60+
- data-cleanup
61+
- postgres-on-update-core
62+
- postgres-data-migration
63+
- postgres-on-update-analytics
64+
- data-migration
65+
- data-seed
66+
- elasticsearch-reindex
3067
steps:
31-
- name: Get helm release values and Quote specific fields that are commonly numeric
32-
run: |
33-
helm get values opencrvs -n ${namespace} -ojson | \
34-
jq '
35-
# Quote image tags
36-
if has("image") and (.image | has("tag")) and (.image.tag | type == "number") then
37-
.image.tag = (.image.tag | tostring)
38-
else . end |
39-
40-
# Quote version numbers
41-
if has("version") and (.version | type == "number") then
42-
.version = (.version | tostring)
43-
else . end |
44-
45-
# Quote port numbers if needed (optional)
46-
if has("service") and (.service | has("port")) and (.service.port | type == "number") then
47-
.service.port = (.service.port | tostring)
48-
else . end
49-
' > ${namespace}.json
50-
- name: Cleanup environment
68+
- name: Download helm release values file into /tmp/opencrvs-${{ inputs.environment }}.json
69+
uses: actions/download-artifact@v4
70+
with:
71+
name: opencrvs-${{ inputs.environment }}-values-file
72+
path: /tmp
73+
- name: Create job ${{ matrix.job-name }} from helm template and apply it
5174
run: |
52-
kubectl delete job -n ${namespace} --ignore-not-found=true data-cleanup
53-
helm template -f ${namespace}.json \
75+
kubectl delete job -n ${namespace} --ignore-not-found=true ${{ matrix.job-name }}
76+
helm template -f ${{ needs.prepare.outputs.values-file }} \
5477
--set data_cleanup.enabled=true \
78+
--set data_seed.enabled=true \
5579
--namespace ${namespace} \
56-
-s templates/data-cleanup-job.yaml \
57-
oci://ghcr.io/opencrvs/opencrvs-services | kubectl apply -n ${namespace} --wait=true -f -
58-
sleep 10;
59-
kubectl wait --for=condition=complete job/data-cleanup -n ${namespace} --timeout=600s;
60-
kubectl logs job/data-cleanup -f --all-containers=true -n ${namespace} || true
61-
- name: Re-run postgres on-update-core
62-
run: |
63-
kubectl delete job -n ${namespace} --ignore-not-found=true postgres-on-update-core;
64-
helm template -f ${namespace}.json \
65-
--namespace ${namespace} \
66-
-s templates/postgres-on-update-core-job.yaml \
67-
oci://ghcr.io/opencrvs/opencrvs-services | kubectl apply -n ${namespace} --wait=true -f -;
68-
sleep 30;
69-
kubectl logs job/postgres-on-update-core -f --all-containers=true -n ${namespace};
70-
kubectl wait --for=condition=complete job/postgres-on-update-core -n ${namespace} --timeout=600s;
71-
- name: Re-run postgres-data-migration
72-
run: |
73-
kubectl delete job -n ${namespace} --ignore-not-found=true postgres-data-migration;
74-
helm template -f ${namespace}.json \
75-
--namespace ${namespace} \
76-
-s templates/postgres-data-migration-job.yaml \
77-
oci://ghcr.io/opencrvs/opencrvs-services | kubectl apply -n ${namespace} --wait=true -f -;
78-
sleep 30;
79-
kubectl logs job/postgres-data-migration -f --all-containers=true -n ${namespace};
80-
kubectl wait --for=condition=complete job/postgres-data-migration -n ${namespace} --timeout=600s;
81-
- name: Re-run postgres on-update-analytics
82-
run: |
83-
kubectl delete job -n ${namespace} --ignore-not-found=true postgres-on-update-analytics;
84-
helm template -f ${namespace}.json \
85-
-s templates/postgres-on-update-analytics-job.yaml \
86-
--namespace ${namespace} \
87-
oci://ghcr.io/opencrvs/opencrvs-services | kubectl apply -n ${namespace} --wait=true -f -;
88-
sleep 30;
89-
kubectl logs job/postgres-on-update-analytics -f --all-containers=true -n ${namespace};
90-
kubectl wait --for=condition=complete job/postgres-on-update-analytics -n ${namespace} --timeout=600s;
91-
- name: Migration
92-
run: |
93-
kubectl delete job -n ${namespace} --ignore-not-found=true data-migration-on-reset
94-
helm template -f ${namespace}.json \
95-
--set data_migration.job_name=data-migration-on-reset \
96-
-s templates/data-migration-job.yaml \
97-
--namespace ${namespace} \
80+
-s templates/${{ matrix.job-name }}-job.yaml \
9881
oci://ghcr.io/opencrvs/opencrvs-services | kubectl apply -n ${namespace} --wait=true -f -
99-
sleep 10;
100-
kubectl logs job/data-migration-on-reset -f -n ${namespace} || true
101-
kubectl wait --for=condition=complete job/data-migration-on-reset -n ${namespace} --timeout=600s;
102-
- name: Seeding data
82+
- name: Checking ${{ matrix.job-name }} job status
10383
run: |
104-
kubectl delete job -n ${namespace} --ignore-not-found=true data-seed
105-
kubectl delete pod -n ${namespace} -lapp=events;
106-
kubectl wait --for=condition=ready pod -n ${namespace} -lapp=events --timeout=600s;
107-
helm template -f ${namespace}.json \
108-
--set data_seed.enabled=true \
109-
--namespace ${namespace} \
110-
-s templates/data-seed-job.yaml \
111-
oci://ghcr.io/opencrvs/opencrvs-services | kubectl apply -n ${namespace} --wait -f -
112-
sleep 10;
113-
kubectl wait --for=condition=complete job/data-seed -n ${namespace} --timeout=600s;
114-
kubectl logs job/data-seed -f -n ${namespace} || true
115-
kubectl delete pod -n ${namespace} -lapp=events;
84+
while true; do
85+
kubectl wait --for=condition=ready pod -ljob-name=${{ matrix.job-name }} --timeout=300s -n ${namespace} && \
86+
kubectl logs job/${{ matrix.job-name }} --all-containers -f -n ${namespace} && \
87+
touch /tmp/logs_stramed-${namespace}-${{ matrix.job-name }}.txt || break;
88+
sleep 1; done &
89+
echo "---------------------- Waiting for job completion ----------------------"
90+
kubectl wait --for=condition=complete job/${{ matrix.job-name }} -n ${namespace} --timeout=600s; status=$? || true
91+
[ $status -ne 0 ] && kubectl get pods -n ${namespace} --show-labels && kubectl describe pod -ljob-name=${job_name} -n ${namespace};
92+
[ ! -f /tmp/logs_stramed-${namespace}-${{ matrix.job-name }}.txt ] && kubectl logs job/${{ matrix.job-name }} --all-containers -n ${namespace} || \
93+
rm -vf /tmp/logs_stramed-${namespace}-${{ matrix.job-name }}.txt
94+
kill %1 2>/dev/null && echo "Stopped log streaming" || true
95+
exit $status
Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
name: Seed data (k8s)
2-
run-name: Seed data to ${{ inputs.environment }}
2+
run-name: "Seed data to ${{ inputs.environment }} environment"
33
on:
44
workflow_dispatch:
55
inputs:
66
environment:
77
description: "Target environment"
88
required: true
9-
default: "demo"
9+
default: "e2e"
1010
type: string
1111
workflow_call:
1212
inputs:
@@ -17,8 +17,11 @@ on:
1717
jobs:
1818
seed:
1919
env:
20-
ENV: ${{ inputs.environment }}
21-
runs-on: [self-hosted, k8s, e2e]
20+
namespace: opencrvs-${{ inputs.environment }}
21+
runs-on:
22+
- self-hosted
23+
- k8s
24+
- e2e
2225
steps:
2326
- name: Get helm release values and Quote specific fields that are commonly numeric
2427
run: |
@@ -28,29 +31,35 @@ jobs:
2831
if has("image") and (.image | has("tag")) and (.image.tag | type == "number") then
2932
.image.tag = (.image.tag | tostring)
3033
else . end |
31-
3234
# Quote version numbers
3335
if has("version") and (.version | type == "number") then
3436
.version = (.version | tostring)
3537
else . end |
36-
3738
# Quote port numbers if needed (optional)
3839
if has("service") and (.service | has("port")) and (.service.port | type == "number") then
3940
.service.port = (.service.port | tostring)
4041
else . end
4142
' > ${namespace}.json
4243
- name: Seeding data
4344
run: |
44-
kubectl delete job -n opencrvs-${ENV} data-seed || true
45-
kubectl delete pod -n opencrvs-${ENV} -lapp=events;
46-
sleep 30;
47-
kubectl wait --for=condition=ready pod -n opencrvs-${ENV} -lapp=events;
45+
kubectl delete job -n ${namespace} --ignore-not-found=true data-seed
4846
helm template -f ${namespace}.json \
4947
--set data_seed.enabled=true \
50-
--namespace opencrvs-${ENV} \
48+
--namespace ${namespace} \
5149
-s templates/data-seed-job.yaml \
52-
oci://ghcr.io/opencrvs/opencrvs-services | kubectl apply -n opencrvs-${ENV} -f -
53-
sleep 30;
54-
kubectl logs job/data-seed -f -n opencrvs-${ENV} || true
55-
kubectl wait --for=condition=complete job/data-seed -n opencrvs-${ENV} --timeout=600s;
56-
kubectl delete pod -n opencrvs-${ENV} -lapp=events;
50+
oci://ghcr.io/opencrvs/opencrvs-services | kubectl apply --wait -n ${namespace} -f -
51+
52+
- name: Checking data-seed job status
53+
run: |
54+
while true; do
55+
kubectl wait --for=condition=ready pod -ljob-name=data-seed --timeout=300s -n ${namespace} && \
56+
kubectl logs job/data-seed --all-containers -f -n ${namespace} && \
57+
touch /tmp/logs_stramed-${namespace}-data-seed.txt || break;
58+
sleep 10; done &
59+
echo "---------------------- Waiting for job completion ----------------------"
60+
kubectl wait --for=condition=complete job/data-seed -n ${namespace} --timeout=600s; status=$? || true
61+
[ $status -ne 0 ] && kubectl get pods -n ${namespace} --show-labels && kubectl describe pod -ljob-name=${job_name} -n ${namespace};
62+
[ ! -f /tmp/logs_stramed-${namespace}-data-seed.txt ] && kubectl logs job/data-seed --all-containers -n ${namespace} || \
63+
rm -vf /tmp/logs_stramed-${namespace}-data-seed.txt
64+
kill %1 2>/dev/null && echo "Stopped log streaming" || true
65+
exit $status

0 commit comments

Comments
 (0)