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,102 @@ 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 '[]')
55-
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
54+ stacks=$(jq -c '.images | .[]' ${STACKS_FILEPATH})
55+ tag="${{ 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+ run_image=$(echo "$stack" | jq -r '.run_image')
66+ build_image=$(echo "$stack" | jq -r '.build_image')
67+ create_build_image=$(echo "$stack" | jq -r '.create_build_image // false')
68+ stack_type=$(echo "$stack" | jq -r '.stack_type // ""')
69+ pattern_assets_prefix=$(echo "$stack" | jq -r '.pattern_assets_prefix // ""')
70+ pattern_image_registry_name=$(echo "$stack" | jq -r '.pattern_image_registry_name // ""')
71+
72+ if [ $pattern_assets_prefix == "os_codename-stack_type-repo_type" ]; then
73+ asset_prefix="${os_codename}-${stack_type}-${repo_type}"
74+ elif [ $pattern_assets_prefix == "os_codename-repo_type" ]; then
75+ asset_prefix="${os_codename}-${repo_type}"
76+ fi
6277
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}"
78+ if [ $pattern_image_registry_name == "os-os_codename-build_image_run_image-stack_type" ]; then
79+ build_image_registry_name="${os_name}-${os_codename}-${build_image}-${stack_type}"
80+ run_image_registry_name="${os_name}-${os_codename}-${run_image}-${stack_type}"
81+ elif [ $pattern_image_registry_name == "os-os_codename-build_image_run_image" ]; then
82+ build_image_registry_name="${os_name}-${os_codename}-${build_image}"
83+ run_image_registry_name="${os_name}-${os_codename}-${run_image}"
84+ elif [ $pattern_image_registry_name == "build_image_run_image-os_codename-stack_type" ]; then
85+ build_image_registry_name="${build_image}-${os_codename}-${stack_type}"
86+ run_image_registry_name="${run_image}-${os_codename}-${stack_type}"
7487 fi
7588
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}]')
89+ asset_names="$(jq -c \
90+ --arg image_filepath "image-files" \
91+ --arg stack_name "${stack_name}" \
92+ --arg run_image "${run_image}" \
93+ --arg tag "${tag}" \
94+ --arg asset_prefix "$asset_prefix" \
95+ --arg run_image_registry_name "${run_image_registry_name}" \
96+ '. += [
97+ {
98+ "name": ($asset_prefix + "-" + $tag + "-" + $run_image),
99+ "registry_name": $run_image_registry_name
100+ }
101+ ]' <<<"${asset_names}")"
102+
103+ if [ "$create_build_image" = "true" ]; then
104+ asset_names="$(jq -c \
105+ --arg image_filepath "image-files" \
106+ --arg stack_name "${stack_name}" \
107+ --arg build_image "${build_image}" \
108+ --arg tag "${tag}" \
109+ --arg asset_prefix "$asset_prefix" \
110+ --arg build_image_registry_name "${build_image_registry_name}" \
111+ '. += [
112+ {
113+ "name": ($asset_prefix + "-" + $tag + "-" + $build_image),
114+ "registry_name": $build_image_registry_name
115+ }
116+ ]' <<<"${asset_names}")"
117+ fi
81118 done
82119
120+ release_version="${{ steps.event.outputs.tag }}"
121+ release_info=$(curl -s "https://api.github.com/repos/${{ github.repository }}/releases/tags/v${release_version}")
122+ oci_release_assets=$(echo "$release_info" | jq -c \
123+ '[ .assets[]
124+ | select(.name | endswith(".oci"))
125+ | {name: (.name | split(".oci") | .[0]), oci_asset_url: .url}
126+ ]')
127+
128+ oci_release_assets_length=$(echo "$oci_release_assets" | jq 'length')
129+ asset_names_length=$(echo "$asset_names" | jq 'length')
130+
131+ if [ "$oci_release_assets_length" != "$asset_names_length" ]; then
132+ echo "Produced assets do not match the release assets."
133+ exit 1
134+ fi
135+
136+ matrix=$(jq -n -c --argjson a "$oci_release_assets" --argjson b "$asset_names" '
137+ $a | map(
138+ . as $oci_item
139+ | ($b[] | select(.name == $oci_item.name)) as $asset_item
140+ | $oci_item + $asset_item
141+ )
142+ ')
143+
144+ matrix_length=$(echo "$matrix" | jq 'length')
145+ if [ "$matrix_length" != "$asset_names_length" ]; then
146+ echo "Produced assets do not match the release assets."
147+ exit 1
148+ fi
149+
83150 echo "matrix=${matrix}"
84151 echo "matrix=${matrix}" >> "$GITHUB_OUTPUT"
85152
0 commit comments