Skip to content

Commit 005b858

Browse files
committed
fix: push image workflow
1 parent 9591ecc commit 005b858

File tree

1 file changed

+96
-29
lines changed

1 file changed

+96
-29
lines changed

.github/workflows/push-image.yml

Lines changed: 96 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ on:
1313

1414
env:
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

@@ -27,6 +27,10 @@ jobs:
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

Comments
 (0)