Skip to content

Commit 67a485b

Browse files
committed
Remove bash stackbrew implementation
1 parent 8a2aeb0 commit 67a485b

File tree

2 files changed

+0
-522
lines changed

2 files changed

+0
-522
lines changed

.github/actions/common/func.sh

Lines changed: 0 additions & 288 deletions
Original file line numberDiff line numberDiff line change
@@ -26,171 +26,6 @@ source_helper_file() {
2626
fi
2727
}
2828

29-
# Lists remote release branches for a specific major version (e.g., release/8.*)
30-
git_ls_remote_major_release_version_branches() {
31-
local remote="$1"
32-
local major_version="$2"
33-
execute_command --no-std -- git ls-remote --heads "$remote" "release/$major_version.*"
34-
if [ -z "$last_cmd_stdout" ]; then
35-
console_output 0 red "Error: No release branches found for major_version=$major_version"
36-
return 1
37-
fi
38-
echo "$last_cmd_stdout"
39-
}
40-
41-
# Lists remote tags for a specific major version (e.g., v8.*)
42-
git_ls_remote_tags() {
43-
local remote="$1"
44-
local major_version="$2"
45-
execute_command --no-std -- git ls-remote --refs --tags "$remote" "refs/tags/v$major_version.*"
46-
if [ -z "$last_cmd_stdout" ]; then
47-
console_output 0 red "Error: No tags found for major_version=$major_version"
48-
return 1
49-
fi
50-
echo "$last_cmd_stdout"
51-
}
52-
53-
# Filters and sorts release branches by major version in reverse version order
54-
filter_major_release_version_branches() {
55-
local major_version="$1"
56-
while read -r line; do
57-
local ref="$(echo "$line" | awk '{print $2}')"
58-
local commit="$(echo "$line" | awk '{print $1}')"
59-
if echo "$ref" | grep -q "release/$major_version\.[0-9][0-9]*$"; then
60-
echo "$ref $commit"
61-
fi
62-
done | sort -Vr
63-
}
64-
65-
# Sorts version tags in reverse version order for a specific major version
66-
# stdin: commit ref (git ls-remote)
67-
# stdout: version commit (vX.X.X sha1) - sorted by version
68-
sort_version_tags() {
69-
local major_version="$1"
70-
local version_tag commit ref
71-
while read -r commit ref; do
72-
version_tag="$(echo "$ref" | grep -o "v$major_version\.[0-9][0-9]*\.[0-9][0-9]*.*" || :)"
73-
if [ -z "$version_tag" ]; then
74-
console_output 2 red "Incorrect reference format: $ref"
75-
return 1
76-
fi
77-
printf "%s %s\n" "$version_tag" "$commit"
78-
done | sort -Vr
79-
}
80-
81-
# Filters out end-of-life (EOL) versions by skipping entire minor version series marked with -eol suffix
82-
# stdin: version commit (vX.X.X sha1) - must be sorted by version
83-
# stdout: version commit (vX.X.X sha1)
84-
filter_out_eol_versions() {
85-
local major_version="$1"
86-
local version_tag commit
87-
local last_minor="" skip_minor="" minors=""
88-
local major minor patch suffix
89-
local versions
90-
91-
mapfile -t versions
92-
for line in "${versions[@]}"; do
93-
read -r version_tag commit < <(echo "$line")
94-
IFS=: read -r major minor patch suffix < <(redis_version_split "$version_tag")
95-
96-
if [ "$minor" != "$last_minor" ] && [ -n "$last_minor" ]; then
97-
if [ -z "$skip_minor" ]; then
98-
printf "%s" "$minors"
99-
else
100-
console_output 2 gray "Skipping minor version $major_version.$last_minor.* due to EOL"
101-
fi
102-
minors=""
103-
skip_minor=""
104-
fi
105-
last_minor="$minor"
106-
107-
printf -v minors "%s%s\n" "$minors" "$version_tag $commit"
108-
109-
if echo "$suffix" | grep -qi "-eol$"; then
110-
skip_minor="$minor"
111-
fi
112-
done
113-
if [ -z "$skip_minor" ]; then
114-
printf "%s" "$minors"
115-
else
116-
console_output 2 gray "Skipping minor version $major_version.$last_minor.* due to EOL"
117-
fi
118-
}
119-
120-
# Filters Redis versions to keep only the latest patch version (and optionally the latest milestone) for each minor version
121-
# stdin: version commit (vX.X.X sha1) - must be sorted by version
122-
# stdout: version commit (vX.X.X sha1)
123-
filter_actual_major_redis_versions() {
124-
local major_version="$1"
125-
local last_minor="" last_is_milestone=""
126-
local ref commit version_tag
127-
console_output 2 gray "filter_actual_major_redis_versions"
128-
while read -r version_tag commit; do
129-
local major minor patch suffix is_milestone
130-
IFS=: read -r major minor patch suffix < <(redis_version_split "$version_tag")
131-
132-
if [ -n "$suffix" ]; then
133-
is_milestone=1
134-
else
135-
is_milestone=""
136-
fi
137-
138-
if [ "$last_minor" = "$minor" ] && [ "$last_is_milestone" = "$is_milestone" ]; then
139-
console_output 2 gray "Skipping $version_tag, already have minor=$last_minor is_milestone=$last_is_milestone"
140-
continue
141-
fi
142-
last_minor="$minor"
143-
last_is_milestone="$is_milestone"
144-
145-
console_output 2 gray "$version_tag $commit"
146-
echo "$version_tag $commit"
147-
done
148-
}
149-
150-
# Gets and filters actual Redis versions (tags) from a remote repository for a major version
151-
get_actual_major_redis_versions() {
152-
local remote="$1"
153-
local major_version="$2"
154-
execute_command git_ls_remote_tags "$remote" "$major_version" \
155-
| execute_command sort_version_tags "$major_version" \
156-
| execute_command filter_out_eol_versions "$major_version" \
157-
| execute_command filter_actual_major_redis_versions "$major_version"
158-
}
159-
160-
# Fetches unshallow refs from a remote repository for the provided list of references
161-
git_fetch_unshallow_refs() {
162-
local remote="$1"
163-
local refs_to_fetch=""
164-
while read -r line; do
165-
local ref="$(echo "$line" | awk '{print $1}')"
166-
refs_to_fetch="$refs_to_fetch $ref"
167-
done
168-
# shellcheck disable=SC2086
169-
execute_command --no-std -- git_fetch_unshallow "$remote" $refs_to_fetch
170-
}
171-
172-
# Extracts the distribution name from a Dockerfile's FROM statement (supports Alpine and Debian)
173-
extract_distro_name_from_dockerfile() {
174-
local base_img
175-
base_img="$(grep -m1 -i '^from' | awk '{print $2}')"
176-
177-
increase_indent_level
178-
console_output 2 gray "Extracting distro from dockerfile"
179-
180-
if echo "$base_img" | grep -q 'alpine:'; then
181-
distro="$(echo "$base_img" | tr -d ':')"
182-
elif echo "$base_img" | grep -q 'debian:'; then
183-
distro="$(echo "${base_img//-slim/}" | awk -F: '{print $2}')"
184-
else
185-
console_output 0 red "Error: Unknown base image $base_img"
186-
decrease_indent_level
187-
return 1
188-
fi
189-
console_output 2 gray "distro=$distro"
190-
decrease_indent_level
191-
echo "$distro"
192-
}
193-
19429
# Splits a Redis version string into major:minor:patch:suffix components
19530
redis_version_split() {
19631
local version
@@ -209,129 +44,6 @@ redis_version_split() {
20944
printf "%s:%s:%s:%s\n" "$major" "$minor" "$patch" "$suffix"
21045
}
21146

212-
# Shows a file from a specific git reference (commit/branch/tag)
213-
git_show_file_from_ref() {
214-
local ref=$1
215-
local file=$2
216-
execute_command git show "$ref:$file"
217-
}
218-
219-
# Generates a comma-separated list of Docker tags for a Redis version and distribution
220-
# args: redis_version distro_names is_latest is_default
221-
# is_latest empty for non-latest, otherwise latest
222-
# is_default 1 for default distro, otherwise not default
223-
generate_tags_list() {
224-
local redis_version=$1
225-
local distro_names=$2
226-
local is_latest=$3
227-
local is_default=$4
228-
229-
local tags versions
230-
231-
local major minor patch suffix
232-
IFS=: read -r major minor patch suffix < <(redis_version_split "$redis_version")
233-
234-
local mainline_version
235-
mainline_version="$major.$minor"
236-
237-
versions=("$redis_version")
238-
# generate mainline version tag only for GA releases, e.g 8.2 and 8.2-distro
239-
# tags will be generated only for 8.2.1 but not for 8.2.1-m01
240-
if [ -z "$suffix" ]; then
241-
versions+=("$mainline_version")
242-
fi
243-
if [ "$is_latest" != "" ]; then
244-
versions+=("$major")
245-
fi
246-
247-
if [ "$is_default" = 1 ]; then
248-
tags=("${versions[@]}")
249-
fi
250-
251-
for distro_name in $distro_names; do
252-
for v in "${versions[@]}"; do
253-
tags+=("$v-$distro_name")
254-
done
255-
done
256-
257-
if [ "$is_latest" != "" ]; then
258-
if [ "$is_default" = 1 ]; then
259-
tags+=("latest")
260-
fi
261-
# shellcheck disable=SC2206
262-
tags+=($distro_names)
263-
fi
264-
# shellcheck disable=SC2001
265-
echo "$(IFS=, ; echo "${tags[*]}" | sed 's/,/, /g')"
266-
}
267-
268-
# Generates stackbrew library content (for specific major version)
269-
# stdin: commit redis_version distro distro_version (sha1 vX.X.X alpine alpine3.21)
270-
generate_stackbrew_library() {
271-
local commit redis_version distro distro_version
272-
local is_latest="" is_latest_unset=1 is_default
273-
274-
local stackbrew_content=""
275-
276-
mapfile -t releases
277-
for line in "${releases[@]}"; do
278-
read -r commit redis_version distro distro_version < <(echo "$line")
279-
280-
local major minor patch suffix
281-
IFS=: read -r major minor patch suffix < <(redis_version_split "$redis_version")
282-
283-
# assigning latest to the first non milestone (empty suffix) version from top
284-
if [ "$is_latest_unset" = 1 ]; then
285-
if [ -z "$suffix" ]; then
286-
is_latest="$minor"
287-
is_latest_unset=""
288-
fi
289-
elif [ "$is_latest" != "$minor" ]; then
290-
is_latest=""
291-
fi
292-
293-
if echo "$distro" | grep -q 'alpine'; then
294-
is_default=""
295-
distro_names="$distro $distro_version"
296-
else
297-
is_default=1
298-
distro_names="$distro_version"
299-
fi
300-
301-
local tags
302-
tags=$(generate_tags_list "$redis_version" "$distro_names" "$is_latest" "$is_default")
303-
printf -v stackbrew_content "%s%s\n" "$stackbrew_content" "$tags"
304-
done
305-
printf %s "$stackbrew_content"
306-
console_output 2 gray "$stackbrew_content"
307-
}
308-
309-
# Prepares a list of releases with commit, Redis version, distro, and distro version information
310-
# stdin: redis_version commit
311-
prepare_releases_list() {
312-
local redis_version commit
313-
local debug_output="" version_line
314-
while read -r redis_version commit; do
315-
for distro in debian alpine; do
316-
local dockerfile distro_version redis_version
317-
dockerfile=$(git_show_file_from_ref "$commit" "$distro/Dockerfile")
318-
console_output 3 gray "$dockerfile"
319-
320-
distro_version=$(echo "$dockerfile" | extract_distro_name_from_dockerfile)
321-
# validate version
322-
redis_version_split "$redis_version" >/dev/null
323-
324-
printf -v version_line "%s %s %s %s\n" "$commit" "$redis_version" "$distro" "$distro_version"
325-
printf "%s" "$version_line"
326-
printf -v debug_output "%s%s" "$debug_output" "$version_line"
327-
done
328-
done
329-
console_output 2 gray "Final Releases list:"
330-
increase_indent_level
331-
console_output 2 gray "$debug_output"
332-
decrease_indent_level
333-
}
334-
33547
slack_format_docker_image_urls_message() {
33648
# Parse the image URLs from JSON array
33749
jq --arg release_tag "$1" --arg footer "$2" '

0 commit comments

Comments
 (0)