1313
1414env :
1515 REGISTRIES_FILEPATH : " registries.json"
16- STACKS_FILEPATH : " stacks/ images.json"
16+ STACKS_FILEPATH : " images.json"
1717 GCR_REGISTRY : " gcr.io"
1818 GCR_USERNAME : " _json_key"
1919
2727 push_to_gcr : ${{ steps.parse_configs.outputs.push_to_gcr }}
2828 push_to_dockerhub : ${{ steps.parse_configs.outputs.push_to_dockerhub }}
2929 tag : ${{ steps.event.outputs.tag }}
30+ os_codename : ${{ steps.repo.outputs.os_codename }}
31+ os_name : ${{ steps.repo.outputs.os_name }}
32+ repo_type : ${{ steps.repo.outputs.repo_type }}
33+ stacks : ${{ steps.get-stacks.outputs.stacks }}
3034 steps :
3135 - name : Checkout
3236 uses : actions/checkout@v4
@@ -47,39 +51,116 @@ jobs:
4751 - name : Set matrix
4852 id : set-matrix
4953 run : |
50- release_version="${{ steps.event.outputs.tag }}"
51- release_info=$(curl -s "https://api.github.com/repos/${{ github.repository }}/releases/tags/v${release_version}")
52- oci_release_assets=$(echo $release_info | jq -c --arg asset_prefix "$asset_prefix" '[ .assets[] | select(.name | endswith(".oci")) | {name: (.name | split(".oci") | .[0]), url}]' | jq -c '.[]')
53-
54- matrix=$(jq -n -c '[]')
54+ stacks=$(jq -c '.images | .[]' ${STACKS_FILEPATH})
55+ version="${{ steps.event.outputs.tag }}"
56+ os_name=$( jq -r '.os_name' ${STACKS_FILEPATH} )
57+ os_codename=$( jq -r '.os_codename' ${STACKS_FILEPATH} )
58+ repo_type=$( jq -r '.repo_type' ${STACKS_FILEPATH} )
59+
60+ # Start with an empty array
61+ asset_names=$(jq -n -c '[]')
62+
63+ for stack in $stacks; do
64+ stack_name=$(echo "$stack" | jq -r '.name')
65+ stack_type=$(echo "$stack" | jq -r '.stack_type // ""')
66+
67+ # .oci artifacts for the run image
68+ run_image=$(echo "$stack" | jq -r '.run_image')
69+ build_image=$(echo "$stack" | jq -r '.build_image')
70+
71+ if [ $pattern_assets_prefix == "os_codename-stack_type-repo_type" ]; then
72+ asset_prefix="${os_codename}-${stack_type}-${repo_type}"
73+ elif [ $pattern_assets_prefix == "os_codename-repo_type" ]; then
74+ asset_prefix="${os_codename}-${repo_type}"
75+ fi
5576
56- if [ -f ${{ env.STACKS_FILEPATH }} ]; then
57- pattern_image_registry_name=$(jq '.pattern_image_registry_name' ${{ env.STACKS_FILEPATH }})
58- os_name=$(jq -r '.os_name' ${{ env.STACKS_FILEPATH }})
59- else
60- pattern_image_registry_name="build_image_run_image-os_codename-stack_type"
61- fi
77+ pattern_assets_prefix=$(echo "$stack" | jq -r '.pattern_assets_prefix // ""')
78+ if [[ "$pattern_assets_prefix" == "os_name-os_codename-build_image_run_image-stack_type-version-arch" ]]; then
79+ run_image_asset_prefix="${os_name}-${os_codename}-${run_image}-${stack_type}-${version}"
80+ build_image_asset_prefix="${os_name}-${os_codename}-${build_image}-${stack_type}-${version}"
81+ elif [[ "$pattern_assets_prefix" == "os_name-os_codename-build_image_run_image-version-arch" ]]; then
82+ run_image_asset_prefix="${os_name}-${os_codename}-${run_image}-${version}"
83+ build_image_asset_prefix="${os_name}-${os_codename}-${build_image}-${version}"
84+ elif [[ "$pattern_assets_prefix" == "os_codename-stack_type-repo_type-version-arch-build_image_run_image" ]]; then
85+ run_image_asset_prefix="${os_codename}-${stack_type}-${repo_type}-${version}-${run_image}"
86+ build_image_asset_prefix="${os_codename}-${stack_type}-${repo_type}-${version}-${build_image}"
87+ fi
6288
63- for oci_asset in $oci_release_assets; do
64- oci_asset_name=$(echo $oci_asset | jq -r '.name')
65- oci_asset_url=$(echo $oci_asset | jq -r '.url')
66- os_codename=$(echo $oci_asset | jq -r '.name' | cut -d '-' -f 1)
67- stack_type=$(echo $oci_asset | jq -r '.name' | cut -d '-' -f 2)
68- build_or_run_image_name=$(echo $oci_asset | jq -r '.name' | cut -d '-' -f 5- | cut -d '.' -f 1)
69-
70- if [ $pattern_image_registry_name == "build_image_run_image-os_codename-stack_type" ]; then
71- image_registry_name="${build_or_run_image_name}-${os_codename}-${stack_type}"
72- else
73- image_registry_name="${os_name}-${os_codename}-${build_or_run_image_name}-${stack_type}"
89+ pattern_image_registry_name=$(echo "$stack" | jq -r '.pattern_image_registry_name // ""')
90+ if [ $pattern_image_registry_name == "os_name-os_codename-build_image_run_image-stack_type" ]; then
91+ build_image_registry_name="${os_name}-${os_codename}-${build_image}-${stack_type}"
92+ run_image_registry_name="${os_name}-${os_codename}-${run_image}-${stack_type}"
93+ elif [ $pattern_image_registry_name == "os_name-os_codename-build_image_run_image" ]; then
94+ build_image_registry_name="${os_name}-${os_codename}-${build_image}"
95+ run_image_registry_name="${os_name}-${os_codename}-${run_image}"
96+ elif [ $pattern_image_registry_name == "build_image_run_image-os_codename-stack_type" ]; then
97+ build_image_registry_name="${build_image}-${os_codename}-${stack_type}"
98+ run_image_registry_name="${run_image}-${os_codename}-${stack_type}"
7499 fi
75100
76- matrix=$(echo $matrix | jq -c --arg os_codename "$os_codename" \
77- --arg oci_asset_name "$oci_asset_name" \
78- --arg registry_name "$image_registry_name" \
79- --arg oci_asset_url "$oci_asset_url" \
80- '. + [{name: $oci_asset_name, registry_name: $registry_name, oci_asset_url: $oci_asset_url}]')
101+ asset_names="$(jq -c \
102+ --arg image_filepath "image-files" \
103+ --arg stack_name "${stack_name}" \
104+ --arg run_image_asset_prefix "${run_image_asset_prefix}" \
105+ --arg run_image_registry_name "${run_image_registry_name}" \
106+ '. += [
107+ {
108+ "name": $run_image_asset_prefix,
109+ "path": ($image_filepath + "/" + "current-run-image-" + $stack_name + "/run" + ".oci"),
110+ "registry_name": $run_image_registry_name
111+ }
112+ ]' <<<"${asset_names}")"
113+
114+ # .oci artifacts for the build image
115+ create_build_image=$(echo "$stack" | jq -r '.create_build_image // false')
116+ if [[ $create_build_image == true ]]; then
117+
118+ asset_names="$(jq -c \
119+ --arg image_filepath "image-files" \
120+ --arg stack_name "${stack_name}" \
121+ --arg build_image_asset_prefix "${build_image_asset_prefix}" \
122+ --arg build_image_registry_name "${build_image_registry_name}" \
123+ '. += [
124+ {
125+ "name": $build_image_asset_prefix,
126+ "path": ($image_filepath + "/" + "current-build-image-" + $stack_name + "/build" + ".oci"),
127+ "registry_name": $build_image_registry_name
128+
129+ }
130+ ]' <<<"${asset_names}")"
131+ fi
81132 done
82133
134+ release_version="${{ steps.event.outputs.tag }}"
135+ release_info=$(curl -s "https://api.github.com/repos/${{ github.repository }}/releases/tags/v${release_version}")
136+ oci_release_assets=$(echo "$release_info" | jq -c \
137+ '[ .assets[]
138+ | select(.name | endswith(".oci"))
139+ | {name: (.name | split(".oci") | .[0]), oci_asset_url: .url}
140+ ]')
141+
142+ oci_release_assets_length=$(echo "$oci_release_assets" | jq 'length')
143+ asset_names_length=$(echo "$asset_names" | jq 'length')
144+
145+ if [ "$oci_release_assets_length" != "$asset_names_length" ]; then
146+ echo "Produced assets do not match the release assets."
147+ exit 1
148+ fi
149+
150+ matrix=$(jq -n -c --argjson a "$oci_release_assets" --argjson b "$asset_names" '
151+ $a | map(
152+ . as $oci_item
153+ | ($b[] | select(.name == $oci_item.name)) as $asset_item
154+ | $oci_item + $asset_item
155+ )
156+ ')
157+
158+ matrix_length=$(echo "$matrix" | jq 'length')
159+ if [ "$matrix_length" != "$asset_names_length" ]; then
160+ echo "Produced assets do not match the release assets."
161+ exit 1
162+ fi
163+
83164 echo "matrix=${matrix}"
84165 echo "matrix=${matrix}" >> "$GITHUB_OUTPUT"
85166
0 commit comments