Skip to content

Commit f7eee51

Browse files
committed
1 parent ea13688 commit f7eee51

File tree

189 files changed

+2939
-935
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

189 files changed

+2939
-935
lines changed

.gitattributes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Dockerfile* linguist-language=Dockerfile

.github/workflows/generate.sh

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,8 @@ done
2222
jq -c . <<<"$strategy" > /dev/null # sanity check
2323

2424
# now that we have a list of legit images with generate scripts, look for dangling Dockerfiles
25-
strategyDockerfiles="$(jq -c '[ .matrix.include[].meta.dockerfiles[], "cygwin/Dockerfile" ]' <<<"$strategy")"
2625
allDockerfiles="$(git ls-files '*/Dockerfile' | jq -Rsc 'rtrimstr("\n") | split("\n")')"
27-
danglingDockerfiles="$(jq -cn "$allDockerfiles - $strategyDockerfiles")"
26+
danglingDockerfiles="$(jq <<<"$strategy" -c --argjson allDockerfiles "$allDockerfiles" '$allDockerfiles - [ .matrix.include[].meta.dockerfiles[] ]')"
2827

2928
strategy="$(jq -c --argjson danglingDockerfiles "$danglingDockerfiles" '.matrix.include[0] as $first | .matrix.include += [
3029
$danglingDockerfiles[]
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
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: ./parallel.sh apply-templates.sh
19+
- name: Git Diff (informational)
20+
run: |
21+
git diff || :
22+
- name: Check Git Status
23+
run: |
24+
status="$(git status --short)"
25+
[ -z "$status" ]

.gitignore

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

.libs/deb-repo.sh

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#!/usr/bin/env bash
2+
set -Eeuo pipefail
3+
4+
deb-repo() {
5+
[ -n "$uri" ]
6+
[ -n "$suite" ]
7+
#[ -n "$component" ] # if suite ends with /, this is optional
8+
: "${arch:=amd64}"
9+
[ -n "$package" ]
10+
11+
_deb-repo_packages() {
12+
local packages
13+
if [[ "$suite" == */ ]]; then
14+
[ -z "${component:-}" ]
15+
packages="$uri/${suite}Packages"
16+
else
17+
[ -n "$component" ]
18+
packages="$uri/dists/$suite/$component/binary-$arch/Packages"
19+
fi
20+
{ wget -qO- "$packages.xz" | xz -d 2>/dev/null; } \
21+
|| { wget -qO- "$packages.bz2" | bunzip2 2>/dev/null; } \
22+
|| { wget -qO- "$packages.gz" | gunzip 2>/dev/null; } \
23+
|| { wget -qO- "$packages.zstd" | zstd -d 2>/dev/null; } \
24+
|| wget -qO- "$packages"
25+
}
26+
27+
local versions version
28+
versions="$(
29+
_deb-repo_packages | gawk -F ':[[:space:]]+' -v package="$package" '
30+
function do_the_thing() { if (pkg == package) { printf "%s %s\n", ver, sha256 }; pkg = ver = sha256 = "" }
31+
$1 == "Package" { do_the_thing(); pkg = $2; ver = sha256 = "" }
32+
$1 == "Version" { ver = $2 }
33+
$1 == "SHA256" { sha256 = $2 }
34+
END { do_the_thing() }
35+
' | sort -rV
36+
)"
37+
version="$(head -1 <<<"$versions")" # TODO some way to get *not* the latest version?
38+
if [ -z "$version" ]; then
39+
echo >&2 "error: failed to find a version for '$package' in '$uri' (suite '$suite', comp '$component', arch '$arch')"
40+
return 1
41+
fi
42+
local sha256="${version##* }"
43+
version="${version% $sha256}"
44+
[ "$sha256" != "$version" ] || sha256=
45+
46+
echo >&2 "deb $package: $version"
47+
# TODO gather "supported arches" list
48+
49+
jq -nS --arg version "$version" --arg sha256 "$sha256" '
50+
{
51+
version: $version,
52+
} | if $sha256 then .sha256 = $sha256 else . end
53+
'
54+
}

.libs/git.sh

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
#!/usr/bin/env bash
2+
set -Eeuo pipefail
3+
4+
git-tags() {
5+
local repo="$1"; shift
6+
[ -n "$repo" ]
7+
8+
local tag
9+
tag="$(
10+
git ls-remote --tags "$repo" \
11+
| cut -d/ -f3 \
12+
| cut -d^ -f1 \
13+
| grep -vE -- '-(rc|alpha|beta)' \
14+
| sort -Vu \
15+
| tail -1
16+
)"
17+
local version="${tag#v}"
18+
19+
local base; base="$(basename "$repo")"
20+
echo >&2 "git $base: $version"
21+
22+
jq -nc --arg tag "$tag" --arg version "$version" '
23+
{
24+
version: $version,
25+
tag: $tag,
26+
}
27+
'
28+
}
29+
30+
git-ref-commit() {
31+
local repo="$1"; shift
32+
local ref="$1"; shift
33+
34+
local commit
35+
commit="$(git ls-remote "$repo" "$ref" | cut -d$'\t' -f1)"
36+
37+
local base; base="$(basename "$repo")"
38+
echo >&2 "git $base - $ref: $commit"
39+
40+
jq -nc --arg commit "$commit" '{ version: $commit }'
41+
}
42+
43+
github-file-commit() {
44+
local repo="$1"; shift
45+
local branch="$1"; shift
46+
local file="$1"; shift
47+
[ -n "$repo" ]
48+
[ -n "$branch" ]
49+
[ -n "$file" ]
50+
51+
local atom
52+
atom="$(wget -qO- "https://github.com/$repo/commits/$branch/$file.atom")"
53+
local commit
54+
commit="$(awk <<<"$atom" -F ' *[<>/]+' '$2 == "id" && $3 ~ /Commit/ { print $4; exit }')"
55+
56+
echo >&2 "github $repo - $file: $commit"
57+
58+
jq -nc --arg commit "$commit" '{ version: $commit }'
59+
}

.libs/pypi.sh

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#!/usr/bin/env bash
2+
set -Eeuo pipefail
3+
4+
pypi() {
5+
local package="$1"; shift
6+
[ -n "$package" ]
7+
8+
local json version
9+
json="$(wget -qO- "https://pypi.org/pypi/$package/json")"
10+
version="$(jq <<<"$json" -r '.info.version')" # TODO some way to only get versions matching a particular string? ("1.14.x" etc. instead of just latest)
11+
12+
echo >&2 "pip $package: $version"
13+
14+
jq <<<"$json" -c '
15+
.info
16+
| (
17+
.classifiers
18+
| map(
19+
match("^(?:Programming Language :: )?Python :: ([0-9]+[.][0-9]+)$")
20+
| .captures[0].string
21+
| split(".")
22+
| map(tonumber)
23+
)
24+
| sort[-1]
25+
| join(".")
26+
) as $python
27+
| {
28+
version: .version,
29+
python: { version: $python },
30+
}
31+
'
32+
}

apply-templates.sh

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
#!/usr/bin/env bash
2+
set -Eeuo pipefail
3+
4+
jqt="$(dirname "$BASH_SOURCE")"
5+
jqt="$jqt/.jq-template.awk"
6+
if [ -n "${BASHBREW_SCRIPTS:-}" ]; then
7+
jqt="$BASHBREW_SCRIPTS/jq-template.awk"
8+
elif [ "$BASH_SOURCE" -nt "$jqt" ]; then
9+
# https://github.com/docker-library/bashbrew/blob/master/scripts/jq-template.awk
10+
jqtNew="$jqt.new.$$" # using a (unique) ".new" file so this is safe to run concurrently
11+
wget -qO "$jqtNew" 'https://github.com/docker-library/bashbrew/raw/1da7341a79651d28fbcc3d14b9176593c4231942/scripts/jq-template.awk'
12+
mv -f "$jqtNew" "$jqt"
13+
fi
14+
jqt="$(readlink -ve "$jqt")"
15+
16+
dirs="$(find "$@" -type f -name versions.json -exec bash -Eeuo pipefail -c 'for d; do dir="$(dirname "${d#./}")"; printf " %q" "$dir"; done' -- '{}' +)"
17+
eval "set -- $dirs"
18+
19+
if [ "$#" -eq 0 ]; then
20+
echo >&2 "error: failed to find any 'versions.json' files!"
21+
exit 1
22+
fi
23+
24+
generated_warning() {
25+
cat <<-EOH
26+
#
27+
# NOTE: THIS DOCKERFILE IS GENERATED VIA "apply-templates.sh"
28+
#
29+
# PLEASE DO NOT EDIT IT DIRECTLY.
30+
#
31+
32+
EOH
33+
}
34+
35+
for dir; do
36+
export dir
37+
38+
template="$dir"
39+
while [ ! -s "$template/Dockerfile.template" ]; do
40+
if [ "$template" = '.' ]; then
41+
echo >&2 "error: failed to find template for '$dir'!"
42+
exit 1
43+
fi
44+
template="$(dirname "$template")"
45+
done
46+
47+
variants="$(jq -r '.variants // [""] | map(@sh) | join(" ")' "$dir/versions.json")"
48+
eval "variants=( $variants )"
49+
50+
text="$dir"
51+
if [ "$dir" != "$template" ]; then
52+
text+=" ($template)"
53+
fi
54+
template="$template/Dockerfile.template"
55+
56+
for variant in "${variants[@]}"; do
57+
export variant
58+
59+
echo "processing $text${variant:+" variant '$variant'"} ..."
60+
61+
(
62+
cd "$dir"
63+
generated_warning
64+
gawk -f "$jqt"
65+
) < "$template" > "$dir/Dockerfile${variant:+".$variant"}"
66+
done
67+
done

backblaze-b2/Dockerfile

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
1-
FROM python:3.9-alpine3.14
1+
#
2+
# NOTE: THIS DOCKERFILE IS GENERATED VIA "apply-templates.sh"
3+
#
4+
# PLEASE DO NOT EDIT IT DIRECTLY.
5+
#
6+
7+
FROM python:3.10-alpine3.15
28

39
# https://pypi.org/project/b2/
410
ENV BACKBLAZE_B2_VERSION 3.2.1
511

612
RUN set -eux; \
7-
pip install --no-cache-dir "b2 == $BACKBLAZE_B2_VERSION"
13+
pip install --no-cache-dir "b2 == $BACKBLAZE_B2_VERSION"; \
14+
b2 version
815

916
CMD ["b2", "--help"]

backblaze-b2/Dockerfile.template

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
FROM python:{{ .python.version }}-alpine3.15
2+
3+
# https://pypi.org/project/b2/
4+
ENV BACKBLAZE_B2_VERSION {{ .version }}
5+
6+
RUN set -eux; \
7+
pip install --no-cache-dir "b2 == $BACKBLAZE_B2_VERSION"; \
8+
b2 version
9+
10+
CMD ["b2", "--help"]

backblaze-b2/update.sh

Lines changed: 0 additions & 9 deletions
This file was deleted.

backblaze-b2/versions.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"python": {
3+
"version": "3.10"
4+
},
5+
"version": "3.2.1"
6+
}

backblaze-b2/versions.sh

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#!/usr/bin/env bash
2+
set -Eeuo pipefail
3+
4+
[ -e versions.json ]
5+
6+
dir="$(readlink -ve "$BASH_SOURCE")"
7+
dir="$(dirname "$dir")"
8+
source "$dir/../.libs/pypi.sh"
9+
10+
json="$(pypi 'b2')"
11+
12+
jq <<<"$json" -S . > versions.json

beets/Dockerfile

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
1-
FROM python:3.9-alpine3.14
1+
#
2+
# NOTE: THIS DOCKERFILE IS GENERATED VIA "apply-templates.sh"
3+
#
4+
# PLEASE DO NOT EDIT IT DIRECTLY.
5+
#
6+
7+
FROM python:3.9-alpine3.15
28

39
ENV BEETS_VERSION 1.6.0
410

5-
RUN pip install --no-cache-dir beets==$BEETS_VERSION
11+
RUN set -eux; \
12+
pip install --no-cache-dir "beets == $BEETS_VERSION"; \
13+
beet --version
614

715
CMD ["beet"]

beets/Dockerfile.template

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
FROM python:{{ .python.version }}-alpine3.15
2+
3+
ENV BEETS_VERSION {{ .version }}
4+
5+
RUN set -eux; \
6+
pip install --no-cache-dir "beets == $BEETS_VERSION"; \
7+
beet --version
8+
9+
CMD ["beet"]

beets/update.sh

Lines changed: 0 additions & 9 deletions
This file was deleted.

beets/versions.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"python": {
3+
"version": "3.9"
4+
},
5+
"version": "1.6.0"
6+
}

beets/versions.sh

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#!/usr/bin/env bash
2+
set -Eeuo pipefail
3+
4+
[ -e versions.json ]
5+
6+
dir="$(readlink -ve "$BASH_SOURCE")"
7+
dir="$(dirname "$dir")"
8+
source "$dir/../.libs/pypi.sh"
9+
10+
json="$(pypi 'beets')"
11+
12+
jq <<<"$json" -S . > versions.json

0 commit comments

Comments
 (0)