Skip to content

Commit d99bd44

Browse files
committed
Use jq-template.awk
1 parent ba69817 commit d99bd44

13 files changed

+170
-51
lines changed

.gitattributes

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
**/Dockerfile linguist-generated
2+
**/start-qemu linguist-generated
3+
Dockerfile.template linguist-language=Dockerfile
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
name: Verify Templating
2+
3+
on:
4+
pull_request:
5+
push:
6+
7+
defaults:
8+
run:
9+
shell: 'bash -Eeuo pipefail -x {0}'
10+
11+
jobs:
12+
apply-templates:
13+
name: Check For Uncomitted Changes
14+
runs-on: ubuntu-latest
15+
steps:
16+
- uses: actions/checkout@v2
17+
- name: Apply Templates
18+
run: ./apply-templates.sh
19+
- name: Generate .travis.yml
20+
run: ./travis.sh
21+
- name: Check Git Status
22+
run: |
23+
status="$(git status --short)"
24+
[ -z "$status" ]

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.jq-template.awk

4.1/Dockerfile

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

4.2/Dockerfile

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

5.0/Dockerfile

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

5.1/Dockerfile

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Dockerfile.template

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ ENV QEMU_KEYS \
1414

1515
# https://www.qemu.org/download/#source
1616
# https://download.qemu.org/?C=M;O=D
17-
ENV QEMU_VERSION %%QEMU_VERSION%%
18-
ENV QEMU_URL %%QEMU_URL%%
17+
ENV QEMU_VERSION {{ .version }}
18+
ENV QEMU_URL {{ .url }}
1919

2020
RUN set -eux; \
2121
\

apply-templates.sh

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#!/usr/bin/env bash
2+
set -Eeuo pipefail
3+
4+
[ -f versions.json ] # run "versions.sh" first
5+
6+
jqt='.jq-template.awk'
7+
if [ -n "${BASHBREW_SCRIPTS:-}" ]; then
8+
jqt="$BASHBREW_SCRIPTS/jq-template.awk"
9+
elif [ "$BASH_SOURCE" -nt "$jqt" ]; then
10+
wget -qO "$jqt" 'https://github.com/docker-library/bashbrew/raw/5f0c26381fb7cc78b2d217d58007800bdcfbcfa1/scripts/jq-template.awk'
11+
fi
12+
13+
if [ "$#" -eq 0 ]; then
14+
versions="$(jq -r 'keys | map(@sh) | join(" ")' versions.json)"
15+
eval "set -- $versions"
16+
fi
17+
18+
generated_warning() {
19+
cat <<-EOH
20+
#
21+
# NOTE: THIS DOCKERFILE IS GENERATED VIA "apply-templates.sh"
22+
#
23+
# PLEASE DO NOT EDIT IT DIRECTLY.
24+
#
25+
26+
EOH
27+
}
28+
29+
for version; do
30+
export version
31+
32+
echo "processing $version ..."
33+
34+
{
35+
generated_warning
36+
gawk -f "$jqt" Dockerfile.template
37+
} > "$version/Dockerfile"
38+
39+
cp -a start-qemu "$version/"
40+
done

generate-stackbrew-library.sh

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@ declare -A aliases=(
1010
self="$(basename "$BASH_SOURCE")"
1111
cd "$(dirname "$(readlink -f "$BASH_SOURCE")")"
1212

13-
versions=( */ )
14-
versions=( "${versions[@]%/}" )
13+
if [ "$#" -eq 0 ]; then
14+
versions="$(jq -r 'keys | map(@sh) | join(" ")' versions.json)"
15+
eval "set -- $versions"
16+
fi
1517

1618
# sort version numbers with highest first
1719
IFS=$'\n'; versions=( $(echo "${versions[*]}" | sort -rV) ); unset IFS
@@ -52,10 +54,8 @@ join() {
5254
echo "${out#$sep}"
5355
}
5456

55-
for version in "${versions[@]}"; do
56-
commit="$(dirCommit "$version")"
57-
58-
fullVersion="$(git show "$commit":"$version/Dockerfile" | awk '$1 == "ENV" && $2 == "QEMU_VERSION" { print $3; exit }')"
57+
for version; do
58+
fullVersion="$(jq -r --arg version "$version" '.[$version].version' versions.json)"
5959

6060
rcVersion="${version%-rc}"
6161

@@ -69,6 +69,8 @@ for version in "${versions[@]}"; do
6969
${aliases[$version]:-}
7070
)
7171

72+
commit="$(dirCommit "$version")"
73+
7274
echo
7375
cat <<-EOE
7476
Tags: $(join ', ' "${versionAliases[@]}")

update.sh

Lines changed: 2 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -3,46 +3,5 @@ set -Eeuo pipefail
33

44
cd "$(dirname "$(readlink -f "$BASH_SOURCE")")"
55

6-
versions=( */ )
7-
versions=( "${versions[@]%/}" )
8-
9-
# https://download.qemu.org/?C=M;O=D
10-
urls="$(
11-
wget -qO- 'https://www.qemu.org/download/' \
12-
| grep -oE 'https://download[.]qemu[.]org/qemu-([^"]+)[.]tar[.]xz' \
13-
| sort -ruV
14-
)"
15-
16-
for version in "${versions[@]}"; do
17-
rcGrepV='-v'
18-
rcVersion="${version%-rc}"
19-
if [ "$rcVersion" != "$version" ]; then
20-
rcGrepV=
21-
fi
22-
23-
url="$(
24-
grep -E "qemu-$rcVersion([.-])" <<<"$urls" \
25-
| grep $rcGrepV -E -- '-rc' \
26-
| head -1
27-
)"
28-
fullVersion="${url##*/qemu-}"
29-
fullVersion="${fullVersion%%.tar.*}"
30-
31-
echo "$version: $fullVersion"
32-
33-
sed -r \
34-
-e 's/%%QEMU_VERSION%%/'"$fullVersion"'/g' \
35-
-e 's!%%QEMU_URL%%!'"$url"'!g' \
36-
Dockerfile.template > "$version/Dockerfile"
37-
cp -a start-qemu "$version/"
38-
39-
case "$rcVersion" in
40-
# https://github.com/qemu/qemu/commit/b10d49d7619e4957b4b971f816661b57e5061d71
41-
3.0 | 3.1 | 4.0)
42-
sed -ri \
43-
-e 's/libssh-dev/libssh2-1-dev/g' \
44-
-e 's/--enable-libssh/--enable-libssh2/g' \
45-
"$version/Dockerfile"
46-
;;
47-
esac
48-
done
6+
./versions.sh "$@"
7+
./apply-templates.sh "$@"

versions.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"4.1": {
3+
"url": "https://download.qemu.org/qemu-4.1.1.tar.xz",
4+
"version": "4.1.1"
5+
},
6+
"4.2": {
7+
"url": "https://download.qemu.org/qemu-4.2.1.tar.xz",
8+
"version": "4.2.1"
9+
},
10+
"5.0": {
11+
"url": "https://download.qemu.org/qemu-5.0.0.tar.xz",
12+
"version": "5.0.0"
13+
},
14+
"5.1": {
15+
"url": "https://download.qemu.org/qemu-5.1.0.tar.xz",
16+
"version": "5.1.0"
17+
}
18+
}

versions.sh

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#!/usr/bin/env bash
2+
set -Eeuo pipefail
3+
4+
cd "$(dirname "$(readlink -f "$BASH_SOURCE")")"
5+
6+
versions=( "$@" )
7+
if [ ${#versions[@]} -eq 0 ]; then
8+
versions=( */ )
9+
json='{}'
10+
else
11+
json="$(< versions.json)"
12+
fi
13+
versions=( "${versions[@]%/}" )
14+
15+
# https://download.qemu.org/?C=M;O=D
16+
urls="$(
17+
wget -qO- 'https://www.qemu.org/download/' \
18+
| grep -oE 'https://download[.]qemu[.]org/qemu-([^"]+)[.]tar[.]xz' \
19+
| sort -ruV
20+
)"
21+
22+
for version in "${versions[@]}"; do
23+
rcGrepV='-v'
24+
rcVersion="${version%-rc}"
25+
if [ "$rcVersion" != "$version" ]; then
26+
rcGrepV=
27+
fi
28+
29+
url="$(
30+
grep -E "qemu-$rcVersion([.-])" <<<"$urls" \
31+
| grep $rcGrepV -E -- '-rc' \
32+
| head -1
33+
)"
34+
fullVersion="${url##*/qemu-}"
35+
fullVersion="${fullVersion%%.tar.*}"
36+
37+
echo "$version: $fullVersion"
38+
39+
export version fullVersion url
40+
json="$(jq <<<"$json" '
41+
.[env.version] = {
42+
version: env.fullVersion,
43+
url: env.url,
44+
}
45+
')"
46+
done
47+
48+
jq <<<"$json" -S . > versions.json

0 commit comments

Comments
 (0)