2323 description : ' Determines whether this workflow can deploy (login and push).'
2424 required : true
2525 type : boolean
26- is_scheduled :
27- description : " Usage for a scheduled job? Only then we will evaluate git refs and add them to build matrix."
28- required : true
29- type : boolean
26+ fields_build :
27+ description : ' The JSON string for build fields to extract'
28+ required : false
29+ type : string
30+ default : ' [{"VERSION":"VERSION"}, {"FLAVOUR":"FLAVOUR"}, {"ARCH":"ARCH"}]'
31+ fields_deploy :
32+ description : ' The JSON string for deploy fields to extract'
33+ required : false
34+ type : string
35+ default : ' [{"VERSION":"VERSION"}, {"FLAVOUR":"FLAVOUR"}, {"HELM":"EXTRA"}]'
3036
3137 # ##
3238 # ## Input Secrets
5763 can_push :
5864 description : " (boolean) Can we push to Dockerhub?"
5965 value : ${{ jobs.configure.outputs.can_push }}
66+ # Determined settings (values)
6067 has_refs :
61- description : " (boolean) Do we have refs? (used for nightly builds) "
68+ description : " (string) 'true' or 'false' Do we have refs to build? "
6269 value : ${{ jobs.configure.outputs.has_refs }}
63- # Determined settings (values)
6470 matrix_build :
6571 description : " (string) The determined JSON string build matrix."
6672 value : ${{ jobs.configure.outputs.matrix_build }}
9197 # Flags
9298 can_login : ${{ steps.set-login.outputs.can_login }}
9399 can_push : ${{ steps.set-push.outputs.can_push }}
100+ # Settings
94101 has_refs : ${{ steps.set-refs.outputs.has_refs }}
95- # Values
96102 artifact_prefix : ${{ steps.set-artifact-prefix.outputs.prefix }}
103+ # Values
97104 matrix_build : ${{ steps.set-matrix.outputs.matrix_build }}
98105 matrix_deploy : ${{ steps.set-matrix.outputs.matrix_deploy }}
99106
@@ -135,6 +142,10 @@ jobs:
135142 echo "can_push=false" >> $GITHUB_OUTPUT
136143 fi
137144
145+ # ------------------------------------------------------------
146+ # Set values
147+ # ------------------------------------------------------------
148+
138149 # ##
139150 # ## Do we have refs to build against?
140151 # ##
@@ -154,20 +165,18 @@ jobs:
154165 echo "BRANCHES=${BRANCHES}"
155166 echo "NUM_LATEST_TAGS=${NUM_LATEST_TAGS}"
156167
157- - name : " [Set-Output] has_refs and matrix (ref-matrix) (branches and latest tags)"
168+ # ##
169+ # ## Set Refs
170+ # ##
171+ - name : " [Set-Output] has_refs and ref-matrix"
158172 id : set-refs
159- uses :
cytopia/[email protected] .12 173+ uses :
cytopia/[email protected] .13 160174 with :
161175 repository_default_branch : ${{ steps.eval-refs.outputs.default_branch }}
162176 branches : ${{ steps.eval-refs.outputs.branches }}
163177 num_latest_tags : ${{ steps.eval-refs.outputs.num_latest_tags }}
164178 # Only use refs if the job is a schedule or if the job is schedule and was triggered manually
165- disable_refs : ${{ !(inputs.is_scheduled && (github.event_name == 'schedule' || github.event_name == 'workflow_dispatch')) }}
166-
167-
168- # ------------------------------------------------------------
169- # Set values
170- # ------------------------------------------------------------
179+ disable_refs : ${{ !(github.event_name == 'schedule' || github.event_name == 'workflow_dispatch') }}
171180
172181 # ##
173182 # ## Unique Artifact prefix
@@ -176,9 +185,9 @@ jobs:
176185 id : set-artifact-prefix
177186 shell : bash
178187 run : |
179- PRE_DATE ="$( date +"%s" )"
180- PRE_RAND ="$( echo $RANDOM | md5sum | head -c 10 )"
181- echo "prefix=${PRE_DATE }-${PRE_RAND }" >> $GITHUB_OUTPUT
188+ PRE_RUN ="$( echo '${{ github.run_id }}' )"
189+ PRE_SHA ="$( echo '${{ github.sha }}' | md5sum | head -c 10 )"
190+ echo "prefix=${PRE_RUN }-${PRE_SHA }" >> $GITHUB_OUTPUT
182191
183192 # ##
184193 # ## Set Build and Deploy Matrix
@@ -187,32 +196,52 @@ jobs:
187196 id : set-matrix
188197 shell : bash
189198 run : |
199+ FIELDS_BUILD="$( echo '${{ inputs.fields_build }}' | jq -M -c )"
200+ FIELDS_DEPLOY="$( echo '${{ inputs.fields_deploy }}' | jq -M -c )"
201+ VERSIONS="$( echo '${{ inputs.versions }}' | jq -M -c )"
202+
190203 if [ "${{ steps.set-refs.outputs.has_refs }}" = "true" ]; then
191- MATRIX_BUILD="$( \
192- jq -M -c \
193- --argjson refs '${{ steps.set-refs.outputs.matrix }}' \
194- 'map({name:.NAME, version:.VERSION[], flavour:.FLAVOUR[], arch:.ARCH[], refs:$refs[]})' <<<'${{ inputs.versions }}' \
195- )"
196- MATRIX_DEPLOY="$( \
197- jq -M -c \
198- --argjson refs '${{ steps.set-refs.outputs.matrix }}' \
199- 'map({name:.NAME, version:.VERSION[], flavour:.FLAVOUR[], refs:$refs[]})' <<<'${{ inputs.versions }}' \
200- )"
201- echo "matrix_build=${MATRIX_BUILD}" >> $GITHUB_OUTPUT
202- echo "matrix_deploy=${MATRIX_DEPLOY}" >> $GITHUB_OUTPUT
203- echo "has_refs=true" >> $GITHUB_OUTPUT
204+ REFS="$( echo '${{ steps.set-refs.outputs.matrix }}' | jq -M -c )"
205+
206+ # map({NAME: .NAME, VERSION: .VERSION[], FLAVOUR: .FLAVOUR[], ARCH:. ARCH[], ...})
207+ INNER_STRING="$( echo "${FIELDS_BUILD}" \
208+ | jq -r '.[] | to_entries[] | "\(.value): .\(.key)[]"' \
209+ | jq --raw-input --slurp 'split("\n") | map(select(. != ""))' \
210+ | jq -r '. | join(", ")' )"
211+ OUTER_STRING="$( echo "'map({NAME: .NAME, ${INNER_STRING}, REFS: ${REFS}[]})'" )"
212+ MATRIX_BUILD="$( eval jq -M -c "${OUTER_STRING}" <<<"${VERSIONS}" )"
213+
214+ # map({NAME: .NAME, VERSION: .VERSION[], FLAVOUR: .FLAVOUR[], ....})
215+ INNER_STRING="$( echo "${FIELDS_DEPLOY}" \
216+ | jq -r '.[] | to_entries[] | "\(.value): .\(.key)[]"' \
217+ | jq --raw-input --slurp 'split("\n") | map(select(. != ""))' \
218+ | jq -r '. | join(", ")' )"
219+ OUTER_STRING="$( echo "'map({NAME: .NAME, ${INNER_STRING}, REFS: ${REFS}[]})'" )"
220+ MATRIX_DEPLOY="$( eval jq -M -c "${OUTER_STRING}" <<<"${VERSIONS}" )"
221+
222+ echo "matrix_build=${MATRIX_BUILD}" >> $GITHUB_OUTPUT
223+ echo "matrix_deploy=${MATRIX_DEPLOY}" >> $GITHUB_OUTPUT
224+
204225 else
205- MATRIX_BUILD="$( \
206- jq -M -c \
207- 'map({name:.NAME, version:.VERSION[], flavour:.FLAVOUR[], arch:.ARCH[]})' <<<'${{ inputs.versions }}' \
208- )"
209- MATRIX_DEPLOY="$( \
210- jq -M -c \
211- 'map({name:.NAME, version:.VERSION[], flavour:.FLAVOUR[]})' <<<'${{ inputs.versions }}' \
212- )"
213- echo "matrix_build=${MATRIX_BUILD}" >> $GITHUB_OUTPUT
214- echo "matrix_deploy=${MATRIX_DEPLOY}" >> $GITHUB_OUTPUT
215- echo "has_refs=false" >> $GITHUB_OUTPUT
226+
227+ # map({NAME: .NAME, VERSION: .VERSION[], FLAVOUR: .FLAVOUR[], ARCH:. ARCH[], ...})
228+ INNER_STRING="$( echo "${FIELDS_BUILD}" \
229+ | jq -r '.[] | to_entries[] | "\(.value): .\(.key)[]"' \
230+ | jq --raw-input --slurp 'split("\n") | map(select(. != ""))' \
231+ | jq -r '. | join(", ")' )"
232+ OUTER_STRING="$( echo "'map({NAME: .NAME, ${INNER_STRING}})'" )"
233+ MATRIX_BUILD="$( eval jq -M -c "${OUTER_STRING}" <<<"${VERSIONS}" )"
234+
235+ # map({NAME: .NAME, VERSION: .VERSION[], FLAVOUR: .FLAVOUR[], ....})
236+ INNER_STRING="$( echo "${FIELDS_DEPLOY}" \
237+ | jq -r '.[] | to_entries[] | "\(.value): .\(.key)[]"' \
238+ | jq --raw-input --slurp 'split("\n") | map(select(. != ""))' \
239+ | jq -r '. | join(", ")' )"
240+ OUTER_STRING="$( echo "'map({NAME: .NAME, ${INNER_STRING}})'" )"
241+ MATRIX_DEPLOY="$( eval jq -M -c "${OUTER_STRING}" <<<"${VERSIONS}" )"
242+
243+ echo "matrix_build=${MATRIX_BUILD}" >> $GITHUB_OUTPUT
244+ echo "matrix_deploy=${MATRIX_DEPLOY}" >> $GITHUB_OUTPUT
216245 fi
217246
218247 # ------------------------------------------------------------
@@ -232,6 +261,8 @@ jobs:
232261 echo '-------------------------------------|-----------------------------------'
233262 echo 'github.event_name | ${{ github.event_name }}'
234263 echo '-------------------------------------|-----------------------------------'
264+ echo 'github.ref | ${{ github.ref }}'
265+ echo '-------------------------------------|-----------------------------------'
235266 echo 'github.ref_name | ${{ github.ref_name }}'
236267 echo '-------------------------------------|-----------------------------------'
237268 echo 'github.head_ref | ${{ github.head_ref }}'
@@ -241,14 +272,20 @@ jobs:
241272 echo 'github.ref_type | ${{ github.ref_type }}'
242273 echo '-------------------------------------|-----------------------------------'
243274 echo 'github.repository | ${{ github.repository }}'
275+ echo '-------------------------------------|-----------------------------------'
276+ echo 'github.action | ${{ github.action }}'
277+ echo '-------------------------------------|-----------------------------------'
278+ echo 'github.action_ref | ${{ github.action_ref }}'
279+ echo '-------------------------------------|-----------------------------------'
280+ echo 'github.run_id | ${{ github.run_id }}'
281+ echo '-------------------------------------|-----------------------------------'
282+ echo 'github.sha | ${{ github.sha }}'
244283
245284 - name : " [DEBUG] Show Workflow Inputs"
246285 shell : bash
247286 run : |
248287 echo 'enabled: ${{ inputs.enabled }}'
249288 echo 'can_deploy: ${{ inputs.can_deploy }}'
250- echo 'is_scheduled: ${{ inputs.is_scheduled }}'
251- echo 'can_deploy: ${{ inputs.can_deploy }}'
252289 echo 'versions: ${{ inputs.versions }}'
253290 echo 'refs: ${{ inputs.refs }}'
254291
@@ -261,6 +298,7 @@ jobs:
261298 # Flags
262299 echo 'can_login: ${{ steps.set-login.outputs.can_login }}'
263300 echo 'can_push: ${{ steps.set-push.outputs.can_push }}'
301+ # Settins
264302 echo 'has_refs: ${{ steps.set-refs.outputs.has_refs }}'
265303 # Values
266304 echo 'artifact_prefix: ${{ steps.set-artifact-prefix.outputs.prefix }}'
0 commit comments