Skip to content

Commit c191e1a

Browse files
committed
Add initial jq-based templating engine
1 parent f6ffec9 commit c191e1a

14 files changed

+211
-69
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+
**/docker-entrypoint.sh linguist-generated
3+
Dockerfile.template linguist-language=Dockerfile
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
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: Check Git Status
20+
run: |
21+
status="$(git status --short)"
22+
[ -z "$status" ]

.gitignore

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

2.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.

2.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.

3.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.

3.11/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.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.

Dockerfile.template

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM adoptopenjdk:%%JAVA_VERSION%%-jre-hotspot-bionic
1+
FROM adoptopenjdk:{{ .java }}-jre-hotspot-bionic
22

33
# explicitly set user/group IDs
44
RUN set -eux; \
@@ -13,7 +13,15 @@ RUN set -eux; \
1313
# "free" is used by cassandra-env.sh
1414
procps \
1515
# "cqlsh" needs a python interpreter
16+
{{
17+
# python3 is only supported in 4.0+
18+
# https://issues.apache.org/jira/browse/CASSANDRA-10190
19+
if env.version | split(".") | .[0] | tonumber < 4 then (
20+
-}}
21+
python \
22+
{{ ) else ( -}}
1623
python3 \
24+
{{ ) end -}}
1725
# "ip" is not required by Cassandra itself, but is commonly used in scripting Cassandra's configuration (since it is so fixated on explicit IP addresses)
1826
iproute2 \
1927
# Cassandra will automatically use numactl if available
@@ -59,8 +67,8 @@ ENV GPG_KEYS \
5967
# gpg: key E91335D77E3E87CB: public key "Michael Semb Wever <[email protected]>" imported
6068
A4C465FEA0C552561A392A61E91335D77E3E87CB
6169

62-
ENV CASSANDRA_VERSION %%CASSANDRA_VERSION%%
63-
ENV CASSANDRA_SHA512 %%CASSANDRA_SHA512%%
70+
ENV CASSANDRA_VERSION {{ .version }}
71+
ENV CASSANDRA_SHA512 {{ .sha512 }}
6472

6573
RUN set -eux; \
6674
savedAptMark="$(apt-mark showmanual)"; \
@@ -142,7 +150,9 @@ RUN set -eux; \
142150
VOLUME /var/lib/cassandra
143151

144152
COPY docker-entrypoint.sh /usr/local/bin/
153+
{{ if env.version | split(".") | .[0] | tonumber < 4 then ( -}}
145154
RUN ln -s usr/local/bin/docker-entrypoint.sh /docker-entrypoint.sh # backwards compat
155+
{{ ) else "" end -}}
146156
ENTRYPOINT ["docker-entrypoint.sh"]
147157

148158
# 7000: intra-node communication

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/ac3e8e9541cb362a579b05bec41dd40d1df1c6e6/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 docker-entrypoint.sh "$version/"
40+
done

0 commit comments

Comments
 (0)