Skip to content

Commit 92c1731

Browse files
authored
Merge pull request #47 from lungben/master
Add Alpine-based Julia 1.5 image
2 parents 6a716f3 + 4c89f47 commit 92c1731

File tree

5 files changed

+117
-3
lines changed

5 files changed

+117
-3
lines changed

.github/workflows/ci.yml

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ jobs:
2525
git clone --depth 1 https://github.com/docker-library/bashbrew.git -b master ~/bashbrew
2626
strategy="$(~/bashbrew/scripts/github-actions/generate.sh)"
2727
strategy="$(~/bashbrew/scripts/github-actions/munge-i386.sh -c <<<"$strategy")"
28+
strategy="$(jq -c <<<"$strategy" '.matrix.include = [ .matrix.include[] | select(.name | test("alpine.*i386") | not) ]')" # Alpine releases do not exist for i386
2829
jq . <<<"$strategy" # sanity check / debugging aid
2930
echo "::set-output name=strategy::$strategy"
3031

1.5-rc/alpine3.12/Dockerfile

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
FROM alpine:3.12
2+
3+
ENV JULIA_PATH /usr/local/julia
4+
ENV PATH $JULIA_PATH/bin:$PATH
5+
6+
# https://julialang.org/juliareleases.asc
7+
# Julia (Binary signing key) <[email protected]>
8+
ENV JULIA_GPG 3673DF529D9049477F76B37566E3C7DC03D6E495
9+
10+
# https://julialang.org/downloads/
11+
ENV JULIA_VERSION 1.5.0-rc1
12+
13+
RUN set -eux; \
14+
\
15+
apk add --no-cache --virtual .fetch-deps gnupg; \
16+
\
17+
# https://julialang.org/downloads/#julia-command-line-version
18+
# https://julialang-s3.julialang.org/bin/checksums/julia-1.5.0-rc1.sha256
19+
# this "case" statement is generated via "update.sh"
20+
apkArch="$(apk --print-arch)"; \
21+
case "$apkArch" in \
22+
# amd64
23+
x86_64) tarArch='x86_64'; dirArch='x64'; sha256='43e3a30133aee14657cc8984cc51e8f308ac1978e4c5986f4c976b8e8747194f' ;; \
24+
*) echo >&2 "error: current architecture ($apkArch) does not have a corresponding Julia binary release"; exit 1 ;; \
25+
esac; \
26+
\
27+
folder="$(echo "$JULIA_VERSION" | cut -d. -f1-2)"; \
28+
wget -O julia.tar.gz.asc "https://julialang-s3.julialang.org/bin/musl/${dirArch}/${folder}/julia-${JULIA_VERSION}-musl-${tarArch}.tar.gz.asc"; \
29+
wget -O julia.tar.gz "https://julialang-s3.julialang.org/bin/musl/${dirArch}/${folder}/julia-${JULIA_VERSION}-musl-${tarArch}.tar.gz"; \
30+
\
31+
echo "${sha256} *julia.tar.gz" | sha256sum -c -; \
32+
\
33+
export GNUPGHOME="$(mktemp -d)"; \
34+
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$JULIA_GPG"; \
35+
gpg --batch --verify julia.tar.gz.asc julia.tar.gz; \
36+
command -v gpgconf > /dev/null && gpgconf --kill all; \
37+
rm -rf "$GNUPGHOME" julia.tar.gz.asc; \
38+
\
39+
mkdir "$JULIA_PATH"; \
40+
tar -xzf julia.tar.gz -C "$JULIA_PATH" --strip-components 1; \
41+
rm julia.tar.gz; \
42+
\
43+
apk del --no-network .fetch-deps; \
44+
\
45+
# smoke test
46+
julia --version
47+
48+
CMD ["julia"]

Dockerfile-alpine.template

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
FROM alpine:%%TAG%%
2+
3+
ENV JULIA_PATH /usr/local/julia
4+
ENV PATH $JULIA_PATH/bin:$PATH
5+
6+
# https://julialang.org/juliareleases.asc
7+
# Julia (Binary signing key) <[email protected]>
8+
ENV JULIA_GPG 3673DF529D9049477F76B37566E3C7DC03D6E495
9+
10+
# https://julialang.org/downloads/
11+
ENV JULIA_VERSION %%JULIA_VERSION%%
12+
13+
RUN set -eux; \
14+
\
15+
apk add --no-cache --virtual .fetch-deps gnupg; \
16+
\
17+
# https://julialang.org/downloads/#julia-command-line-version
18+
# https://julialang-s3.julialang.org/bin/checksums/julia-%%JULIA_VERSION%%.sha256
19+
# this "case" statement is generated via "update.sh"
20+
%%ARCH-CASE%%; \
21+
\
22+
folder="$(echo "$JULIA_VERSION" | cut -d. -f1-2)"; \
23+
wget -O julia.tar.gz.asc "https://julialang-s3.julialang.org/bin/musl/${dirArch}/${folder}/julia-${JULIA_VERSION}-musl-${tarArch}.tar.gz.asc"; \
24+
wget -O julia.tar.gz "https://julialang-s3.julialang.org/bin/musl/${dirArch}/${folder}/julia-${JULIA_VERSION}-musl-${tarArch}.tar.gz"; \
25+
\
26+
echo "${sha256} *julia.tar.gz" | sha256sum -c -; \
27+
\
28+
export GNUPGHOME="$(mktemp -d)"; \
29+
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$JULIA_GPG"; \
30+
gpg --batch --verify julia.tar.gz.asc julia.tar.gz; \
31+
command -v gpgconf > /dev/null && gpgconf --kill all; \
32+
rm -rf "$GNUPGHOME" julia.tar.gz.asc; \
33+
\
34+
mkdir "$JULIA_PATH"; \
35+
tar -xzf julia.tar.gz -C "$JULIA_PATH" --strip-components 1; \
36+
rm julia.tar.gz; \
37+
\
38+
apk del --no-network .fetch-deps; \
39+
\
40+
# smoke test
41+
julia --version
42+
43+
CMD ["julia"]

generate-stackbrew-library.sh

+5
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ declare -A aliases=(
66
[1.5-rc]='rc'
77
)
88
defaultDebianVariant='buster'
9+
defaultAlpineVariant='alpine3.12'
910

1011
self="$(basename "$BASH_SOURCE")"
1112
cd "$(dirname "$(readlink -f "$BASH_SOURCE")")"
@@ -90,6 +91,7 @@ join() {
9091
for version in "${versions[@]}"; do
9192
for v in \
9293
{buster,stretch} \
94+
alpine3.12 \
9395
windows/windowsservercore-{ltsc2016,1809} \
9496
; do
9597
dir="$version/$v"
@@ -113,6 +115,9 @@ for version in "${versions[@]}"; do
113115
)
114116

115117
variantAliases=( "${versionAliases[@]/%/-$variant}" )
118+
if [ "$variant" = "$defaultAlpineVariant" ]; then
119+
variantAliases+=( "${versionAliases[@]/%/-alpine}" )
120+
fi
116121
variantAliases=( "${variantAliases[@]//latest-/}" )
117122

118123
sharedTags=()

update.sh

+20-3
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ for version in "${versions[@]}"; do
4747
for dpkgArch in $(dpkgArches "$version"); do
4848
tarArch="$(dpkgToJuliaTarArch "$version" "$dpkgArch")"
4949
dirArch="$(dpkgToJuliaDirArch "$version" "$dpkgArch")"
50-
sha256="$(echo "$sha256s" | grep "julia-${fullVersion}-linux-${tarArch}.tar.gz$" | cut -d' ' -f1 || :)"
50+
sha256="$(grep "julia-${fullVersion}-linux-${tarArch}.tar.gz$" <<<"$sha256s" | cut -d' ' -f1 || :)"
5151
if [ -z "$sha256" ]; then
5252
echo >&2 "warning: cannot find sha256 for $fullVersion on arch $tarArch / $dirArch ($dpkgArch); skipping"
5353
continue
@@ -59,12 +59,13 @@ for version in "${versions[@]}"; do
5959
linuxArchCase+=$'\t\t''*) echo >&2 "error: current architecture ($dpkgArch) does not have a corresponding Julia binary release"; exit 1 ;; '$'\\\n'
6060
linuxArchCase+=$'\t''esac'
6161

62-
winSha256="$(echo "$sha256s" | grep "julia-${fullVersion}-win64.exe$" | cut -d' ' -f1)"
62+
winSha256="$(grep "julia-${fullVersion}-win64.exe$" <<<"$sha256s" | cut -d' ' -f1)"
6363

6464
echo "$version: $fullVersion"
6565

6666
for v in \
6767
windows/windowsservercore-{ltsc2016,1809} \
68+
alpine3.12 \
6869
{stretch,buster} \
6970
; do
7071
dir="$version/$v"
@@ -74,6 +75,7 @@ for version in "${versions[@]}"; do
7475

7576
case "$variant" in
7677
windowsservercore-*) template='windowsservercore'; tag="${variant#*-}" ;;
78+
alpine*) template='alpine'; tag="${variant#alpine}" ;;
7779
*) template='debian'; tag="${variant}-slim" ;;
7880
esac
7981

@@ -82,11 +84,26 @@ for version in "${versions[@]}"; do
8284
tag="$variant"
8385
fi
8486

87+
variantArchCase="$linuxArchCase"
88+
if [ "$template" = 'alpine' ]; then
89+
sha256="$(grep "julia-${fullVersion}-musl-x86_64.tar.gz$" <<<"$sha256s" | cut -d' ' -f1 || :)"
90+
[ -n "$sha256" ] || continue
91+
variantArchCase='apkArch="$(apk --print-arch)"; '$'\\\n'
92+
variantArchCase+=$'\t''case "$apkArch" in '$'\\\n'
93+
# TODO Alpine multiarch
94+
variantArchCase+='# amd64'$'\n'
95+
tarArch="$(dpkgToJuliaTarArch "$version" 'amd64')"
96+
dirArch="$(dpkgToJuliaDirArch "$version" 'amd64')"
97+
variantArchCase+=$'\t\t'"x86_64) tarArch='$tarArch'; dirArch='$dirArch'; sha256='$sha256' ;; "$'\\\n'
98+
variantArchCase+=$'\t\t''*) echo >&2 "error: current architecture ($apkArch) does not have a corresponding Julia binary release"; exit 1 ;; '$'\\\n'
99+
variantArchCase+=$'\t''esac'
100+
fi
101+
85102
sed -r \
86103
-e 's!%%JULIA_VERSION%%!'"$fullVersion"'!g' \
87104
-e 's!%%TAG%%!'"$tag"'!g' \
88105
-e 's!%%JULIA_WINDOWS_SHA256%%!'"$winSha256"'!g' \
89-
-e 's!%%ARCH-CASE%%!'"$(sed_escape_rhs "$linuxArchCase")"'!g' \
106+
-e 's!%%ARCH-CASE%%!'"$(sed_escape_rhs "$variantArchCase")"'!g' \
90107
"Dockerfile-$template.template" > "$dir/Dockerfile"
91108

92109
case "$dir" in

0 commit comments

Comments
 (0)