Skip to content

Commit db100eb

Browse files
committed
Add support for commit and help flags in generate-supported-tags.sh
Closes #2.
1 parent 7383d93 commit db100eb

File tree

1 file changed

+151
-60
lines changed

1 file changed

+151
-60
lines changed

bin/generate-supported-tags.sh

+151-60
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
#!/usr/bin/env bash
22

3+
# define constants
34
BASE_DIR="$(cd "$(dirname "$0")" && pwd)"
45
COMMIT_ID="$(git rev-parse --verify HEAD)"
6+
COMMIT_MESSAGE='Change tags in DOCKERHUB.md and README.md'
57
DISTS=('alpine' 'debian')
8+
HEADING_FOR_OVERVIEW='## Overview'
9+
HEADING_FOR_TAGS="## Supported tags and respective \`Dockerfile\` links"
610
JSON="$(cat ./versions.json)"
711
LATEST_VERSIONS_KEYS=()
812
OFFICIAL_VERSIONS_KEYS=()
13+
PROGRAM="$(basename "$0")"
914
REPOSITORY='https://github.com/dstmodders/docker-ktools'
1015

1116
extract_and_sort_keys() {
@@ -18,12 +23,32 @@ mapfile -t OFFICIAL_VERSIONS_KEYS < <(extract_and_sort_keys '.official')
1823

1924
readonly BASE_DIR
2025
readonly COMMIT_ID
26+
readonly COMMIT_MESSAGE
2127
readonly DISTS
28+
readonly HEADING_FOR_OVERVIEW
29+
readonly HEADING_FOR_TAGS
2230
readonly JSON
2331
readonly LATEST_VERSIONS_KEYS
2432
readonly OFFICIAL_VERSIONS_KEYS
33+
readonly PROGRAM
2534
readonly REPOSITORY
2635

36+
# define flags
37+
FLAG_COMMIT=0
38+
39+
usage() {
40+
cat <<EOF
41+
Generate supported tags.
42+
43+
Usage:
44+
$PROGRAM [flags]
45+
46+
Flags:
47+
-c, --commit commit changes
48+
-h, --help help for $PROGRAM
49+
EOF
50+
}
51+
2752
print_url() {
2853
local tags="$1"
2954
local commit="$2"
@@ -32,77 +57,143 @@ print_url() {
3257
echo "- $url"
3358
}
3459

35-
cd "$BASE_DIR" || exit 1
36-
37-
printf "## Supported tags and respective \`Dockerfile\` links\n\n"
38-
3960
# reference:
4061
# 4.5.1-imagemagick-7.1.1-39-alpine, 4.5.1-alpine, 4.5.1, alpine, latest
4162
# 4.5.1-imagemagick-7.1.1-39-debian, 4.5.1-debian, debian
4263
# 4.5.0-imagemagick-7.1.1-39-alpine, 4.5.0-alpine, 4.5.0
4364
# 4.5.0-imagemagick-7.1.1-39-debian, 4.5.0-debian
44-
for key in "${LATEST_VERSIONS_KEYS[@]}"; do
45-
for dist in "${DISTS[@]}"; do
46-
imagemagick_version="$(jq -r ".latest | .[$key] | .imagemagick_version" <<< "$JSON")"
47-
latest="$(jq -r ".latest | .[$key] | .latest" <<< "$JSON")"
48-
version="$(jq -r ".latest | .[$key] | .version" <<< "$JSON")"
49-
50-
tag_version_imagemagick_version_dist="$version-imagemagick-$imagemagick_version-$dist"
51-
tag_version_dist="$version-$dist"
52-
tag_version="$version"
53-
tag_dist="$dist"
54-
55-
tags="\`$tag_version_imagemagick_version_dist\`, \`$tag_version_dist\`"
56-
case "$dist" in
57-
alpine)
58-
tags="$tags, \`$tag_version\`"
59-
if [ "$latest" == 'true' ]; then
60-
tags="$tags, \`$tag_dist\`, \`latest\`"
61-
fi
62-
;;
63-
debian)
64-
if [ "$latest" == 'true' ]; then
65-
tags="$tags, \`$tag_dist\`"
66-
fi
67-
;;
68-
esac
69-
70-
print_url "$tags" "$COMMIT_ID" "latest/$dist"
65+
print_latest_tags() {
66+
for key in "${LATEST_VERSIONS_KEYS[@]}"; do
67+
for dist in "${DISTS[@]}"; do
68+
imagemagick_version="$(jq -r ".latest | .[$key] | .imagemagick_version" <<< "$JSON")"
69+
latest="$(jq -r ".latest | .[$key] | .latest" <<< "$JSON")"
70+
version="$(jq -r ".latest | .[$key] | .version" <<< "$JSON")"
71+
72+
tag_version_imagemagick_version_dist="$version-imagemagick-$imagemagick_version-$dist"
73+
tag_version_dist="$version-$dist"
74+
tag_version="$version"
75+
tag_dist="$dist"
76+
77+
tags="\`$tag_version_imagemagick_version_dist\`, \`$tag_version_dist\`"
78+
case "$dist" in
79+
alpine)
80+
tags="$tags, \`$tag_version\`"
81+
if [ "$latest" == 'true' ]; then
82+
tags="$tags, \`$tag_dist\`, \`latest\`"
83+
fi
84+
;;
85+
debian)
86+
if [ "$latest" == 'true' ]; then
87+
tags="$tags, \`$tag_dist\`"
88+
fi
89+
;;
90+
esac
91+
92+
print_url "$tags" "$COMMIT_ID" "latest/$dist"
93+
done
7194
done
72-
done
95+
}
7396

7497
# reference:
7598
# official-4.4.0-imagemagick-6.9.13-17-alpine, official-4.4.0-alpine, official-4.4.0, official-alpine, official-latest, official
7699
# official-4.4.0-imagemagick-6.9.13-17-debian, official-4.4.0-debian, official-debian
77100
# official-4.3.1-imagemagick-6.9.13-17-alpine, official-4.3.1-alpine, official-4.3.1
78101
# official-4.3.1-imagemagick-6.9.13-17-debian, official-4.3.1-debian
79-
for key in "${OFFICIAL_VERSIONS_KEYS[@]}"; do
80-
for dist in "${DISTS[@]}"; do
81-
prefix='official-'
82-
imagemagick_version="$(jq -r ".official | .[$key] | .imagemagick_version" <<< "$JSON")"
83-
latest="$(jq -r ".official | .[$key] | .latest" <<< "$JSON")"
84-
version="$(jq -r ".official | .[$key] | .version" <<< "$JSON")"
85-
86-
tag_version_imagemagick_version_dist="$prefix$version-imagemagick-$imagemagick_version-$dist"
87-
tag_version_dist="$prefix$version-$dist"
88-
tag_version="$prefix$version"
89-
tag_dist="$prefix$dist"
90-
91-
tags="\`$tag_version_imagemagick_version_dist\`, \`$tag_version_dist\`"
92-
case "$dist" in
93-
alpine)
94-
tags="$tags, \`$tag_version\`"
95-
if [ "$latest" == 'true' ]; then
96-
tags="$tags, \`$tag_dist\`, \`$(printf '%slatest' "$prefix")\`, \`official\`"
97-
fi
98-
;;
99-
debian)
100-
if [ "$latest" == 'true' ]; then
101-
tags="$tags, \`$tag_dist\`"
102-
fi
103-
;;
104-
esac
105-
106-
print_url "$tags" "$COMMIT_ID" "official/$dist"
102+
print_official_tags() {
103+
for key in "${OFFICIAL_VERSIONS_KEYS[@]}"; do
104+
for dist in "${DISTS[@]}"; do
105+
prefix='official-'
106+
imagemagick_version="$(jq -r ".official | .[$key] | .imagemagick_version" <<< "$JSON")"
107+
latest="$(jq -r ".official | .[$key] | .latest" <<< "$JSON")"
108+
version="$(jq -r ".official | .[$key] | .version" <<< "$JSON")"
109+
110+
tag_version_imagemagick_version_dist="$prefix$version-imagemagick-$imagemagick_version-$dist"
111+
tag_version_dist="$prefix$version-$dist"
112+
tag_version="$prefix$version"
113+
tag_dist="$prefix$dist"
114+
115+
tags="\`$tag_version_imagemagick_version_dist\`, \`$tag_version_dist\`"
116+
case "$dist" in
117+
alpine)
118+
tags="$tags, \`$tag_version\`"
119+
if [ "$latest" == 'true' ]; then
120+
tags="$tags, \`$tag_dist\`, \`$(printf '%slatest' "$prefix")\`, \`official\`"
121+
fi
122+
;;
123+
debian)
124+
if [ "$latest" == 'true' ]; then
125+
tags="$tags, \`$tag_dist\`"
126+
fi
127+
;;
128+
esac
129+
130+
print_url "$tags" "$COMMIT_ID" "official/$dist"
131+
done
132+
done
133+
}
134+
135+
replace() {
136+
local content="$1"
137+
for file in ./DOCKERHUB.md ./README.md; do
138+
sed -i "/$HEADING_FOR_TAGS/,/$HEADING_FOR_OVERVIEW/ {
139+
/$HEADING_FOR_TAGS/!{
140+
/$HEADING_FOR_OVERVIEW/!d
141+
}
142+
/$HEADING_FOR_TAGS/!b
143+
r /dev/stdin
144+
d
145+
}" "$file" <<< "$content"
107146
done
147+
}
148+
149+
cd "$BASE_DIR/.." || exit 1
150+
151+
while [ $# -gt 0 ]; do
152+
key="$1"
153+
case "$key" in
154+
-c|--commit)
155+
FLAG_COMMIT=1
156+
;;
157+
-h|--help)
158+
usage
159+
exit 0
160+
;;
161+
-*)
162+
print_error 'unrecognized flag'
163+
exit 1
164+
;;
165+
*)
166+
;;
167+
esac
168+
shift 1
108169
done
170+
171+
# define extra constants
172+
readonly FLAG_COMMIT
173+
174+
printf "%s\n\n" "$HEADING_FOR_TAGS"
175+
176+
if [ "$FLAG_COMMIT" -eq 1 ]; then
177+
latest_tags="$(print_latest_tags)"
178+
official_tags="$(print_official_tags)"
179+
echo "$latest_tags"
180+
echo "$official_tags"
181+
echo '---'
182+
if [ "$FLAG_COMMIT" -eq 1 ]; then
183+
replace "$HEADING_FOR_TAGS"$'\n'$'\n'"$latest_tags"$'\n'"$official_tags"$'\n'
184+
printf 'Committing...'
185+
git add \
186+
DOCKERHUB.md \
187+
README.md
188+
if [ -n "$(git diff --cached --name-only)" ]; then
189+
printf '\n'
190+
echo '---'
191+
git commit -m "$COMMIT_MESSAGE"
192+
else
193+
printf ' Skipped\n'
194+
fi
195+
fi
196+
else
197+
print_latest_tags
198+
print_official_tags
199+
fi

0 commit comments

Comments
 (0)