Use jq-template.awk
This commit is contained in:
parent
ba69817cd8
commit
3d69162f4e
3
.gitattributes
vendored
Normal file
3
.gitattributes
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
**/Dockerfile linguist-generated
|
||||||
|
**/start-qemu linguist-generated
|
||||||
|
Dockerfile.template linguist-language=Dockerfile
|
22
.github/workflows/verify-templating.yml
vendored
Normal file
22
.github/workflows/verify-templating.yml
vendored
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
name: Verify Templating
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
push:
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: 'bash -Eeuo pipefail -x {0}'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
apply-templates:
|
||||||
|
name: Check For Uncomitted Changes
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Apply Templates
|
||||||
|
run: ./apply-templates.sh
|
||||||
|
- name: Check Git Status
|
||||||
|
run: |
|
||||||
|
status="$(git status --short)"
|
||||||
|
[ -z "$status" ]
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
.jq-template.awk
|
6
4.1/Dockerfile
generated
6
4.1/Dockerfile
generated
|
@ -1,3 +1,9 @@
|
||||||
|
#
|
||||||
|
# NOTE: THIS DOCKERFILE IS GENERATED VIA "apply-templates.sh"
|
||||||
|
#
|
||||||
|
# PLEASE DO NOT EDIT IT DIRECTLY.
|
||||||
|
#
|
||||||
|
|
||||||
FROM debian:buster-slim
|
FROM debian:buster-slim
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
|
|
6
4.2/Dockerfile
generated
6
4.2/Dockerfile
generated
|
@ -1,3 +1,9 @@
|
||||||
|
#
|
||||||
|
# NOTE: THIS DOCKERFILE IS GENERATED VIA "apply-templates.sh"
|
||||||
|
#
|
||||||
|
# PLEASE DO NOT EDIT IT DIRECTLY.
|
||||||
|
#
|
||||||
|
|
||||||
FROM debian:buster-slim
|
FROM debian:buster-slim
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
|
|
6
5.0/Dockerfile
generated
6
5.0/Dockerfile
generated
|
@ -1,3 +1,9 @@
|
||||||
|
#
|
||||||
|
# NOTE: THIS DOCKERFILE IS GENERATED VIA "apply-templates.sh"
|
||||||
|
#
|
||||||
|
# PLEASE DO NOT EDIT IT DIRECTLY.
|
||||||
|
#
|
||||||
|
|
||||||
FROM debian:buster-slim
|
FROM debian:buster-slim
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
|
|
6
5.1/Dockerfile
generated
6
5.1/Dockerfile
generated
|
@ -1,3 +1,9 @@
|
||||||
|
#
|
||||||
|
# NOTE: THIS DOCKERFILE IS GENERATED VIA "apply-templates.sh"
|
||||||
|
#
|
||||||
|
# PLEASE DO NOT EDIT IT DIRECTLY.
|
||||||
|
#
|
||||||
|
|
||||||
FROM debian:buster-slim
|
FROM debian:buster-slim
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
|
|
|
@ -14,8 +14,8 @@ ENV QEMU_KEYS \
|
||||||
|
|
||||||
# https://www.qemu.org/download/#source
|
# https://www.qemu.org/download/#source
|
||||||
# https://download.qemu.org/?C=M;O=D
|
# https://download.qemu.org/?C=M;O=D
|
||||||
ENV QEMU_VERSION %%QEMU_VERSION%%
|
ENV QEMU_VERSION {{ .version }}
|
||||||
ENV QEMU_URL %%QEMU_URL%%
|
ENV QEMU_URL {{ .url }}
|
||||||
|
|
||||||
RUN set -eux; \
|
RUN set -eux; \
|
||||||
\
|
\
|
||||||
|
|
40
apply-templates.sh
Executable file
40
apply-templates.sh
Executable file
|
@ -0,0 +1,40 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -Eeuo pipefail
|
||||||
|
|
||||||
|
[ -f versions.json ] # run "versions.sh" first
|
||||||
|
|
||||||
|
jqt='.jq-template.awk'
|
||||||
|
if [ -n "${BASHBREW_SCRIPTS:-}" ]; then
|
||||||
|
jqt="$BASHBREW_SCRIPTS/jq-template.awk"
|
||||||
|
elif [ "$BASH_SOURCE" -nt "$jqt" ]; then
|
||||||
|
wget -qO "$jqt" 'https://github.com/docker-library/bashbrew/raw/5f0c26381fb7cc78b2d217d58007800bdcfbcfa1/scripts/jq-template.awk'
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$#" -eq 0 ]; then
|
||||||
|
versions="$(jq -r 'keys | map(@sh) | join(" ")' versions.json)"
|
||||||
|
eval "set -- $versions"
|
||||||
|
fi
|
||||||
|
|
||||||
|
generated_warning() {
|
||||||
|
cat <<-EOH
|
||||||
|
#
|
||||||
|
# NOTE: THIS DOCKERFILE IS GENERATED VIA "apply-templates.sh"
|
||||||
|
#
|
||||||
|
# PLEASE DO NOT EDIT IT DIRECTLY.
|
||||||
|
#
|
||||||
|
|
||||||
|
EOH
|
||||||
|
}
|
||||||
|
|
||||||
|
for version; do
|
||||||
|
export version
|
||||||
|
|
||||||
|
echo "processing $version ..."
|
||||||
|
|
||||||
|
{
|
||||||
|
generated_warning
|
||||||
|
gawk -f "$jqt" Dockerfile.template
|
||||||
|
} > "$version/Dockerfile"
|
||||||
|
|
||||||
|
cp -a start-qemu "$version/"
|
||||||
|
done
|
|
@ -10,8 +10,10 @@ declare -A aliases=(
|
||||||
self="$(basename "$BASH_SOURCE")"
|
self="$(basename "$BASH_SOURCE")"
|
||||||
cd "$(dirname "$(readlink -f "$BASH_SOURCE")")"
|
cd "$(dirname "$(readlink -f "$BASH_SOURCE")")"
|
||||||
|
|
||||||
versions=( */ )
|
if [ "$#" -eq 0 ]; then
|
||||||
versions=( "${versions[@]%/}" )
|
versions="$(jq -r 'keys | map(@sh) | join(" ")' versions.json)"
|
||||||
|
eval "set -- $versions"
|
||||||
|
fi
|
||||||
|
|
||||||
# sort version numbers with highest first
|
# sort version numbers with highest first
|
||||||
IFS=$'\n'; versions=( $(echo "${versions[*]}" | sort -rV) ); unset IFS
|
IFS=$'\n'; versions=( $(echo "${versions[*]}" | sort -rV) ); unset IFS
|
||||||
|
@ -52,10 +54,8 @@ join() {
|
||||||
echo "${out#$sep}"
|
echo "${out#$sep}"
|
||||||
}
|
}
|
||||||
|
|
||||||
for version in "${versions[@]}"; do
|
for version; do
|
||||||
commit="$(dirCommit "$version")"
|
fullVersion="$(jq -r --arg version "$version" '.[$version].version' versions.json)"
|
||||||
|
|
||||||
fullVersion="$(git show "$commit":"$version/Dockerfile" | awk '$1 == "ENV" && $2 == "QEMU_VERSION" { print $3; exit }')"
|
|
||||||
|
|
||||||
rcVersion="${version%-rc}"
|
rcVersion="${version%-rc}"
|
||||||
|
|
||||||
|
@ -69,6 +69,8 @@ for version in "${versions[@]}"; do
|
||||||
${aliases[$version]:-}
|
${aliases[$version]:-}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
commit="$(dirCommit "$version")"
|
||||||
|
|
||||||
echo
|
echo
|
||||||
cat <<-EOE
|
cat <<-EOE
|
||||||
Tags: $(join ', ' "${versionAliases[@]}")
|
Tags: $(join ', ' "${versionAliases[@]}")
|
||||||
|
|
45
update.sh
45
update.sh
|
@ -3,46 +3,5 @@ set -Eeuo pipefail
|
||||||
|
|
||||||
cd "$(dirname "$(readlink -f "$BASH_SOURCE")")"
|
cd "$(dirname "$(readlink -f "$BASH_SOURCE")")"
|
||||||
|
|
||||||
versions=( */ )
|
./versions.sh "$@"
|
||||||
versions=( "${versions[@]%/}" )
|
./apply-templates.sh "$@"
|
||||||
|
|
||||||
# https://download.qemu.org/?C=M;O=D
|
|
||||||
urls="$(
|
|
||||||
wget -qO- 'https://www.qemu.org/download/' \
|
|
||||||
| grep -oE 'https://download[.]qemu[.]org/qemu-([^"]+)[.]tar[.]xz' \
|
|
||||||
| sort -ruV
|
|
||||||
)"
|
|
||||||
|
|
||||||
for version in "${versions[@]}"; do
|
|
||||||
rcGrepV='-v'
|
|
||||||
rcVersion="${version%-rc}"
|
|
||||||
if [ "$rcVersion" != "$version" ]; then
|
|
||||||
rcGrepV=
|
|
||||||
fi
|
|
||||||
|
|
||||||
url="$(
|
|
||||||
grep -E "qemu-$rcVersion([.-])" <<<"$urls" \
|
|
||||||
| grep $rcGrepV -E -- '-rc' \
|
|
||||||
| head -1
|
|
||||||
)"
|
|
||||||
fullVersion="${url##*/qemu-}"
|
|
||||||
fullVersion="${fullVersion%%.tar.*}"
|
|
||||||
|
|
||||||
echo "$version: $fullVersion"
|
|
||||||
|
|
||||||
sed -r \
|
|
||||||
-e 's/%%QEMU_VERSION%%/'"$fullVersion"'/g' \
|
|
||||||
-e 's!%%QEMU_URL%%!'"$url"'!g' \
|
|
||||||
Dockerfile.template > "$version/Dockerfile"
|
|
||||||
cp -a start-qemu "$version/"
|
|
||||||
|
|
||||||
case "$rcVersion" in
|
|
||||||
# https://github.com/qemu/qemu/commit/b10d49d7619e4957b4b971f816661b57e5061d71
|
|
||||||
3.0 | 3.1 | 4.0)
|
|
||||||
sed -ri \
|
|
||||||
-e 's/libssh-dev/libssh2-1-dev/g' \
|
|
||||||
-e 's/--enable-libssh/--enable-libssh2/g' \
|
|
||||||
"$version/Dockerfile"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
18
versions.json
Normal file
18
versions.json
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
{
|
||||||
|
"4.1": {
|
||||||
|
"url": "https://download.qemu.org/qemu-4.1.1.tar.xz",
|
||||||
|
"version": "4.1.1"
|
||||||
|
},
|
||||||
|
"4.2": {
|
||||||
|
"url": "https://download.qemu.org/qemu-4.2.1.tar.xz",
|
||||||
|
"version": "4.2.1"
|
||||||
|
},
|
||||||
|
"5.0": {
|
||||||
|
"url": "https://download.qemu.org/qemu-5.0.0.tar.xz",
|
||||||
|
"version": "5.0.0"
|
||||||
|
},
|
||||||
|
"5.1": {
|
||||||
|
"url": "https://download.qemu.org/qemu-5.1.0.tar.xz",
|
||||||
|
"version": "5.1.0"
|
||||||
|
}
|
||||||
|
}
|
48
versions.sh
Executable file
48
versions.sh
Executable file
|
@ -0,0 +1,48 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -Eeuo pipefail
|
||||||
|
|
||||||
|
cd "$(dirname "$(readlink -f "$BASH_SOURCE")")"
|
||||||
|
|
||||||
|
versions=( "$@" )
|
||||||
|
if [ ${#versions[@]} -eq 0 ]; then
|
||||||
|
versions=( */ )
|
||||||
|
json='{}'
|
||||||
|
else
|
||||||
|
json="$(< versions.json)"
|
||||||
|
fi
|
||||||
|
versions=( "${versions[@]%/}" )
|
||||||
|
|
||||||
|
# https://download.qemu.org/?C=M;O=D
|
||||||
|
urls="$(
|
||||||
|
wget -qO- 'https://www.qemu.org/download/' \
|
||||||
|
| grep -oE 'https://download[.]qemu[.]org/qemu-([^"]+)[.]tar[.]xz' \
|
||||||
|
| sort -ruV
|
||||||
|
)"
|
||||||
|
|
||||||
|
for version in "${versions[@]}"; do
|
||||||
|
rcGrepV='-v'
|
||||||
|
rcVersion="${version%-rc}"
|
||||||
|
if [ "$rcVersion" != "$version" ]; then
|
||||||
|
rcGrepV=
|
||||||
|
fi
|
||||||
|
|
||||||
|
url="$(
|
||||||
|
grep -E "qemu-$rcVersion([.-])" <<<"$urls" \
|
||||||
|
| grep $rcGrepV -E -- '-rc' \
|
||||||
|
| head -1
|
||||||
|
)"
|
||||||
|
fullVersion="${url##*/qemu-}"
|
||||||
|
fullVersion="${fullVersion%%.tar.*}"
|
||||||
|
|
||||||
|
echo "$version: $fullVersion"
|
||||||
|
|
||||||
|
export version fullVersion url
|
||||||
|
json="$(jq <<<"$json" '
|
||||||
|
.[env.version] = {
|
||||||
|
version: env.fullVersion,
|
||||||
|
url: env.url,
|
||||||
|
}
|
||||||
|
')"
|
||||||
|
done
|
||||||
|
|
||||||
|
jq <<<"$json" -S . > versions.json
|
Loading…
Reference in New Issue
Block a user