1- name : Seed data
2- run-name : " Seed data to ${{ inputs.environment }} environment "
1+ name : Seed environment
2+ run-name : " Seed ${{ inputs.environment }} by ${{ github.actor }} "
33on :
44 workflow_dispatch :
55 inputs :
3232 Please approve or deny ${{ inputs.environment }} environment seeding
3333 initiated from GitHub Actions by @${{ github.actor }}.
3434 exclude-workflow-initiator-as-approver : false
35-
36- seed :
35+ prepare :
3736 needs : approve
37+ outputs :
38+ values-file : ${{ steps.get-values.outputs.values-file }}
3839 env :
3940 namespace : opencrvs-${{ inputs.environment }}
4041 runs-on :
@@ -43,41 +44,70 @@ jobs:
4344 - ${{ inputs.environment }}
4445 steps :
4546 - name : Get helm release values and Quote specific fields that are commonly numeric
47+ id : get-values
4648 run : |
4749 helm get values opencrvs -n ${namespace} -ojson | \
4850 jq '
49- # Quote image tags
5051 if has("image") and (.image | has("tag")) and (.image.tag | type == "number") then
5152 .image.tag = (.image.tag | tostring)
5253 else . end |
53- # Quote version numbers
5454 if has("version") and (.version | type == "number") then
5555 .version = (.version | tostring)
5656 else . end |
57- # Quote port numbers if needed (optional)
5857 if has("service") and (.service | has("port")) and (.service.port | type == "number") then
5958 .service.port = (.service.port | tostring)
6059 else . end
61- ' > ${namespace}.json
62- - name : Seeding data
63- run : |
64- kubectl delete job -n ${namespace} --ignore-not-found=true data-seed
65- helm template -f ${namespace}.json \
66- --set data_seed.enabled=true \
67- --namespace ${namespace} \
68- -s templates/data-seed-job.yaml \
69- oci://ghcr.io/opencrvs/opencrvs-services | kubectl apply --wait -n ${namespace} -f -
70- - name : Checking data-seed job status
71- run : |
72- while true; do
73- kubectl wait --for=condition=ready pod -ljob-name=data-seed --timeout=300s -n ${namespace} && \
74- kubectl logs job/data-seed --all-containers -f -n ${namespace} && \
75- touch /tmp/logs_stramed-${namespace}-data-seed.txt || break;
76- sleep 10; done &
77- echo "---------------------- Waiting for job completion ----------------------"
78- kubectl wait --for=condition=complete job/data-seed -n ${namespace} --timeout=600s; status=$? || true
79- [ $status -ne 0 ] && kubectl get pods -n ${namespace} --show-labels && kubectl describe pod -ljob-name=${job_name} -n ${namespace};
80- [ ! -f /tmp/logs_stramed-${namespace}-data-seed.txt ] && kubectl logs job/data-seed --all-containers -n ${namespace} || \
81- rm -vf /tmp/logs_stramed-${namespace}-data-seed.txt
82- kill %1 2>/dev/null && echo "Stopped log streaming" || true
83- exit $status
60+ ' > /tmp/${namespace}.json
61+ echo "values-file=/tmp/${namespace}.json" >> $GITHUB_OUTPUT
62+
63+ - name : Upload helm release values file /tmp/opencrvs-${{ inputs.environment }}.json
64+ uses : actions/upload-artifact@v4
65+ with :
66+ name : opencrvs-${{ inputs.environment }}-values-file
67+ path : /tmp/opencrvs-${{ inputs.environment }}.json
68+ retention-days : 1
69+ seed :
70+ name : ${{ matrix.job-name }}
71+ needs : prepare
72+ env :
73+ namespace : opencrvs-${{ inputs.environment }}
74+ runs-on :
75+ - self-hosted
76+ - k8s
77+ - ${{ inputs.environment }}
78+ strategy :
79+ max-parallel : 1 # Ensure jobs run one by one
80+ fail-fast : true # Stop on first failure
81+ matrix :
82+ job-name :
83+ - data-seed
84+ - elasticsearch-reindex
85+ steps :
86+ - name : Download helm release values file into /tmp/opencrvs-${{ inputs.environment }}.json
87+ uses : actions/download-artifact@v5
88+ with :
89+ name : opencrvs-${{ inputs.environment }}-values-file
90+ path : /tmp
91+ - name : Create job ${{ matrix.job-name }} from helm template and apply it
92+ run : |
93+ kubectl delete job -n ${namespace} --ignore-not-found=true ${{ matrix.job-name }}
94+ helm template -f ${{ needs.prepare.outputs.values-file }} \
95+ --set data_cleanup.enabled=true \
96+ --set data_seed.enabled=true \
97+ --namespace ${namespace} \
98+ -s templates/${{ matrix.job-name }}-job.yaml \
99+ oci://ghcr.io/opencrvs/opencrvs-services | kubectl apply -n ${namespace} --wait=true -f -
100+ - name : Checking ${{ matrix.job-name }} job status
101+ run : |
102+ while true; do
103+ kubectl wait --for=condition=ready pod -ljob-name=${{ matrix.job-name }} --timeout=300s -n ${namespace} && \
104+ kubectl logs job/${{ matrix.job-name }} --all-containers -f -n ${namespace} && \
105+ touch /tmp/logs_stramed-${namespace}-${{ matrix.job-name }}.txt || break;
106+ sleep 1; done &
107+ echo "---------------------- Waiting for job completion ----------------------"
108+ kubectl wait --for=condition=complete job/${{ matrix.job-name }} -n ${namespace} --timeout=600s; status=$? || true
109+ [ $status -ne 0 ] && kubectl get pods -n ${namespace} --show-labels && kubectl describe pod -ljob-name=${job_name} -n ${namespace};
110+ [ ! -f /tmp/logs_stramed-${namespace}-${{ matrix.job-name }}.txt ] && kubectl logs job/${{ matrix.job-name }} --all-containers -n ${namespace} || \
111+ rm -vf /tmp/logs_stramed-${namespace}-${{ matrix.job-name }}.txt
112+ kill %1 2>/dev/null && echo "Stopped log streaming" || true
113+ exit $status
0 commit comments