Skip to content

Commit 32ea631

Browse files
authored
feat: ghc 9.12.2, cabal 3.14.1.1 and stack 3.1.1 on bookworm (#151)
1 parent 68ddf62 commit 32ea631

File tree

3 files changed

+294
-4
lines changed

3 files changed

+294
-4
lines changed

.github/workflows/debian.yml

+26-4
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ on:
55
branches:
66
- master
77
paths:
8+
- '**/bookworm/Dockerfile'
89
- '**/bullseye/Dockerfile'
910
- '**/buster/Dockerfile'
11+
- '**/slim-bookworm/Dockerfile'
1012
- '**/slim-bullseye/Dockerfile'
1113
- '**/slim-buster/Dockerfile'
1214
- '.github/workflows/debian.yml'
@@ -24,9 +26,15 @@ jobs:
2426
strategy:
2527
fail-fast: false
2628
matrix:
27-
ghc: ['9.10.1', '9.8.4', '9.6.6', '9.4.8', '9.2.8', '9.0.2' ]
29+
ghc: ['9.12.2', '9.10.1', '9.8.4', '9.6.6', '9.4.8', '9.2.8', '9.0.2']
2830
deb: ['buster', 'slim-buster']
2931
include:
32+
- ghc: '9.12.2'
33+
ghc_minor: '9.12'
34+
deb: 'bookworm'
35+
- ghc: '9.12.2'
36+
ghc_minor: '9.12'
37+
deb: 'slim-bookworm'
3038
- ghc: '9.10.1'
3139
ghc_minor: '9.10'
3240
deb: 'slim-bullseye'
@@ -57,7 +65,11 @@ jobs:
5765
ghc_minor: '9.2'
5866
- ghc: '9.0.2'
5967
ghc_minor: '9.0'
60-
68+
exclude:
69+
- ghc: '9.12.2'
70+
deb: 'buster'
71+
- ghc: '9.12.2'
72+
deb: 'slim-buster'
6173
steps:
6274
- uses: actions/checkout@v4
6375
- name: build + smoke test [${{ matrix.ghc }}]
@@ -84,11 +96,17 @@ jobs:
8496
strategy:
8597
fail-fast: false
8698
matrix:
87-
ghc: ['9.0.2', '9.2.8', '9.4.8', '9.6.6', '9.8.4', '9.10.1']
99+
ghc: ['9.0.2', '9.2.8', '9.4.8', '9.6.6', '9.8.4', '9.10.1', '9.12.2']
88100
# uraimo/run-on-arch-action does not support debian slim variants
89101
deb: ['buster']
90102
arch: ['aarch64']
91103
include:
104+
# bookworm (debian 12)
105+
- ghc: '9.12.2'
106+
ghc_minor: '9.12'
107+
deb: 'bookworm'
108+
arch: 'aarch64'
109+
docker_platform: arm64
92110
# bullseye (debian 11)
93111
- ghc: '9.10.1'
94112
ghc_minor: '9.10'
@@ -120,10 +138,14 @@ jobs:
120138
ghc_minor: '9.0'
121139
- arch: aarch64
122140
docker_platform: arm64
141+
exclude:
142+
- ghc: '9.12.2'
143+
deb: 'buster'
144+
123145
steps:
124146
- uses: actions/checkout@v4
125147
- name: docker build [ ${{ matrix.arch }} ${{ matrix.ghc }}]
126-
uses: uraimo/run-on-arch-action@v2.8.1
148+
uses: uraimo/run-on-arch-action@v3.0.0
127149
with:
128150
arch: ${{ matrix.arch }}
129151
distro: ${{ matrix.deb }}

9.12/bookworm/Dockerfile

+134
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
FROM debian:bookworm
2+
3+
ENV LANG=C.UTF-8
4+
5+
# common haskell + stack dependencies
6+
RUN apt-get update && \
7+
apt-get install -y --no-install-recommends \
8+
ca-certificates \
9+
curl \
10+
dpkg-dev \
11+
git \
12+
gcc \
13+
gnupg \
14+
g++ \
15+
libc6-dev \
16+
libffi-dev \
17+
libgmp-dev \
18+
libnuma-dev \
19+
libtinfo-dev \
20+
make \
21+
netbase \
22+
xz-utils \
23+
zlib1g-dev && \
24+
rm -rf /var/lib/apt/lists/*
25+
26+
ARG STACK=3.3.1
27+
ARG STACK_RELEASE_KEY=C5705533DA4F78D8664B5DC0575159689BEFB442
28+
29+
RUN set -eux; \
30+
cd /tmp; \
31+
ARCH="$(dpkg-architecture --query DEB_BUILD_GNU_CPU)"; \
32+
STACK_URL="https://github.com/commercialhaskell/stack/releases/download/v${STACK}/stack-${STACK}-linux-$ARCH.tar.gz"; \
33+
# sha256 from https://github.com/commercialhaskell/stack/releases/download/v${STACK}/stack-${STACK}-linux-$ARCH.tar.gz.sha256
34+
case "$ARCH" in \
35+
'aarch64') \
36+
STACK_SHA256='bdd618ea5a9c921417727011f2ecd78987dffa5cee5e741108baf65a9b5b58ab'; \
37+
;; \
38+
'x86_64') \
39+
STACK_SHA256='88d7e517342c125b0a098d9d578fe53e590618ae4b2427283a27408a1ebd06d8'; \
40+
;; \
41+
*) echo >&2 "error: unsupported architecture '$ARCH'" ; exit 1 ;; \
42+
esac; \
43+
curl -sSL "$STACK_URL" -o stack.tar.gz; \
44+
echo "$STACK_SHA256 stack.tar.gz" | sha256sum --strict --check; \
45+
\
46+
curl -sSL "$STACK_URL.asc" -o stack.tar.gz.asc; \
47+
GNUPGHOME="$(mktemp -d)"; export GNUPGHOME; \
48+
gpg --batch --keyserver keyserver.ubuntu.com --receive-keys "$STACK_RELEASE_KEY"; \
49+
gpg --batch --verify stack.tar.gz.asc stack.tar.gz; \
50+
gpgconf --kill all; \
51+
\
52+
tar -xf stack.tar.gz -C /usr/local/bin --strip-components=1 "stack-$STACK-linux-$ARCH/stack"; \
53+
stack config set system-ghc --global true; \
54+
stack config set install-ghc --global false; \
55+
\
56+
rm -rf /tmp/*; \
57+
\
58+
stack --version;
59+
60+
ARG CABAL_INSTALL=3.14.1.1
61+
ARG CABAL_INSTALL_RELEASE_KEY=EAF2A9A722C0C96F2B431CA511AAD8CEDEE0CAEF
62+
63+
RUN set -eux; \
64+
cd /tmp; \
65+
ARCH="$(dpkg-architecture --query DEB_BUILD_GNU_CPU)"; \
66+
CABAL_INSTALL_TAR="cabal-install-$CABAL_INSTALL-$ARCH-linux-deb12.tar.xz"; \
67+
CABAL_INSTALL_URL="https://downloads.haskell.org/~cabal/cabal-install-$CABAL_INSTALL/$CABAL_INSTALL_TAR"; \
68+
CABAL_INSTALL_SHA256SUMS_URL="https://downloads.haskell.org/~cabal/cabal-install-$CABAL_INSTALL/SHA256SUMS"; \
69+
# sha256 from https://downloads.haskell.org/~cabal/cabal-install-$CABAL_INSTALL/SHA256SUMS
70+
case "$ARCH" in \
71+
'aarch64') \
72+
CABAL_INSTALL_SHA256='f763fb2af2bc1ff174b7361a7d51109a585954f87a0e14f86d144f3bce28f7a9'; \
73+
;; \
74+
'x86_64') \
75+
CABAL_INSTALL_SHA256='73a463306c771e18ca22c0a9469176ffab0138ec5925adb5364ef47174e1adc5'; \
76+
;; \
77+
*) echo >&2 "error: unsupported architecture '$ARCH'"; exit 1 ;; \
78+
esac; \
79+
curl -fSL "$CABAL_INSTALL_URL" -o cabal-install.tar.gz; \
80+
echo "$CABAL_INSTALL_SHA256 cabal-install.tar.gz" | sha256sum --strict --check; \
81+
\
82+
curl -sSLO "$CABAL_INSTALL_SHA256SUMS_URL"; \
83+
curl -sSLO "$CABAL_INSTALL_SHA256SUMS_URL.sig"; \
84+
GNUPGHOME="$(mktemp -d)"; export GNUPGHOME; \
85+
gpg --batch --keyserver keyserver.ubuntu.com --receive-keys "$CABAL_INSTALL_RELEASE_KEY"; \
86+
gpg --batch --verify SHA256SUMS.sig SHA256SUMS; \
87+
# confirm we are verifying SHA256SUMS that matches the release + sha256
88+
grep "$CABAL_INSTALL_SHA256 $CABAL_INSTALL_TAR" SHA256SUMS; \
89+
gpgconf --kill all; \
90+
\
91+
tar -xf cabal-install.tar.gz -C /usr/local/bin; \
92+
\
93+
rm -rf /tmp/*; \
94+
\
95+
cabal --version
96+
97+
ARG GHC=9.12.2
98+
ARG GHC_RELEASE_KEY=FFEB7CE81E16A36B3E2DED6F2DE04D4E97DB64AD
99+
100+
RUN set -eux; \
101+
cd /tmp; \
102+
ARCH="$(dpkg-architecture --query DEB_BUILD_GNU_CPU)"; \
103+
GHC_URL="https://downloads.haskell.org/~ghc/$GHC/ghc-$GHC-$ARCH-deb12-linux.tar.xz"; \
104+
# sha256 from https://downloads.haskell.org/~ghc/$GHC/SHA256SUMS
105+
case "$ARCH" in \
106+
'aarch64') \
107+
GHC_SHA256='bee95bc91a621d8a2e9a9d86dac28ff839605e87316518dae12c779709bd58f1'; \
108+
;; \
109+
'x86_64') \
110+
GHC_SHA256='447ec2fcc773ae9ebc3f39766c719641631274f9b765d7426a8cbe9241677c9f'; \
111+
;; \
112+
*) echo >&2 "error: unsupported architecture '$ARCH'" ; exit 1 ;; \
113+
esac; \
114+
curl -sSL "$GHC_URL" -o ghc.tar.xz; \
115+
echo "$GHC_SHA256 ghc.tar.xz" | sha256sum --strict --check; \
116+
\
117+
GNUPGHOME="$(mktemp -d)"; export GNUPGHOME; \
118+
curl -sSL "$GHC_URL.sig" -o ghc.tar.xz.sig; \
119+
gpg --batch --keyserver keyserver.ubuntu.com --receive-keys "$GHC_RELEASE_KEY"; \
120+
gpg --batch --verify ghc.tar.xz.sig ghc.tar.xz; \
121+
gpgconf --kill all; \
122+
\
123+
tar xf ghc.tar.xz; \
124+
cd "ghc-$GHC-$ARCH-unknown-linux"; \
125+
./configure --prefix "/opt/ghc/$GHC"; \
126+
make install; \
127+
\
128+
rm -rf /tmp/*; \
129+
\
130+
"/opt/ghc/$GHC/bin/ghc" --version
131+
132+
ENV PATH=/root/.cabal/bin:/root/.local/bin:/opt/ghc/${GHC}/bin:$PATH
133+
134+
CMD ["ghci"]

9.12/slim-bookworm/Dockerfile

+134
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
FROM debian:bookworm-slim
2+
3+
ENV LANG=C.UTF-8
4+
5+
# common haskell + stack dependencies
6+
RUN apt-get update && \
7+
apt-get install -y --no-install-recommends \
8+
ca-certificates \
9+
curl \
10+
dpkg-dev \
11+
git \
12+
gcc \
13+
gnupg \
14+
g++ \
15+
libc6-dev \
16+
libffi-dev \
17+
libgmp-dev \
18+
libnuma-dev \
19+
libtinfo-dev \
20+
make \
21+
netbase \
22+
xz-utils \
23+
zlib1g-dev && \
24+
rm -rf /var/lib/apt/lists/*
25+
26+
ARG STACK=3.3.1
27+
ARG STACK_RELEASE_KEY=C5705533DA4F78D8664B5DC0575159689BEFB442
28+
29+
RUN set -eux; \
30+
cd /tmp; \
31+
ARCH="$(dpkg-architecture --query DEB_BUILD_GNU_CPU)"; \
32+
STACK_URL="https://github.com/commercialhaskell/stack/releases/download/v${STACK}/stack-${STACK}-linux-$ARCH.tar.gz"; \
33+
# sha256 from https://github.com/commercialhaskell/stack/releases/download/v${STACK}/stack-${STACK}-linux-$ARCH.tar.gz.sha256
34+
case "$ARCH" in \
35+
'aarch64') \
36+
STACK_SHA256='bdd618ea5a9c921417727011f2ecd78987dffa5cee5e741108baf65a9b5b58ab'; \
37+
;; \
38+
'x86_64') \
39+
STACK_SHA256='88d7e517342c125b0a098d9d578fe53e590618ae4b2427283a27408a1ebd06d8'; \
40+
;; \
41+
*) echo >&2 "error: unsupported architecture '$ARCH'" ; exit 1 ;; \
42+
esac; \
43+
curl -sSL "$STACK_URL" -o stack.tar.gz; \
44+
echo "$STACK_SHA256 stack.tar.gz" | sha256sum --strict --check; \
45+
\
46+
curl -sSL "$STACK_URL.asc" -o stack.tar.gz.asc; \
47+
GNUPGHOME="$(mktemp -d)"; export GNUPGHOME; \
48+
gpg --batch --keyserver keyserver.ubuntu.com --receive-keys "$STACK_RELEASE_KEY"; \
49+
gpg --batch --verify stack.tar.gz.asc stack.tar.gz; \
50+
gpgconf --kill all; \
51+
\
52+
tar -xf stack.tar.gz -C /usr/local/bin --strip-components=1 "stack-$STACK-linux-$ARCH/stack"; \
53+
stack config set system-ghc --global true; \
54+
stack config set install-ghc --global false; \
55+
\
56+
rm -rf /tmp/*; \
57+
\
58+
stack --version;
59+
60+
ARG CABAL_INSTALL=3.14.1.1
61+
ARG CABAL_INSTALL_RELEASE_KEY=EAF2A9A722C0C96F2B431CA511AAD8CEDEE0CAEF
62+
63+
RUN set -eux; \
64+
cd /tmp; \
65+
ARCH="$(dpkg-architecture --query DEB_BUILD_GNU_CPU)"; \
66+
CABAL_INSTALL_TAR="cabal-install-$CABAL_INSTALL-$ARCH-linux-deb12.tar.xz"; \
67+
CABAL_INSTALL_URL="https://downloads.haskell.org/~cabal/cabal-install-$CABAL_INSTALL/$CABAL_INSTALL_TAR"; \
68+
CABAL_INSTALL_SHA256SUMS_URL="https://downloads.haskell.org/~cabal/cabal-install-$CABAL_INSTALL/SHA256SUMS"; \
69+
# sha256 from https://downloads.haskell.org/~cabal/cabal-install-$CABAL_INSTALL/SHA256SUMS
70+
case "$ARCH" in \
71+
'aarch64') \
72+
CABAL_INSTALL_SHA256='f763fb2af2bc1ff174b7361a7d51109a585954f87a0e14f86d144f3bce28f7a9'; \
73+
;; \
74+
'x86_64') \
75+
CABAL_INSTALL_SHA256='73a463306c771e18ca22c0a9469176ffab0138ec5925adb5364ef47174e1adc5'; \
76+
;; \
77+
*) echo >&2 "error: unsupported architecture '$ARCH'"; exit 1 ;; \
78+
esac; \
79+
curl -fSL "$CABAL_INSTALL_URL" -o cabal-install.tar.gz; \
80+
echo "$CABAL_INSTALL_SHA256 cabal-install.tar.gz" | sha256sum --strict --check; \
81+
\
82+
curl -sSLO "$CABAL_INSTALL_SHA256SUMS_URL"; \
83+
curl -sSLO "$CABAL_INSTALL_SHA256SUMS_URL.sig"; \
84+
GNUPGHOME="$(mktemp -d)"; export GNUPGHOME; \
85+
gpg --batch --keyserver keyserver.ubuntu.com --receive-keys "$CABAL_INSTALL_RELEASE_KEY"; \
86+
gpg --batch --verify SHA256SUMS.sig SHA256SUMS; \
87+
# confirm we are verifying SHA256SUMS that matches the release + sha256
88+
grep "$CABAL_INSTALL_SHA256 $CABAL_INSTALL_TAR" SHA256SUMS; \
89+
gpgconf --kill all; \
90+
\
91+
tar -xf cabal-install.tar.gz -C /usr/local/bin; \
92+
\
93+
rm -rf /tmp/*; \
94+
\
95+
cabal --version
96+
97+
ARG GHC=9.12.2
98+
ARG GHC_RELEASE_KEY=FFEB7CE81E16A36B3E2DED6F2DE04D4E97DB64AD
99+
100+
RUN set -eux; \
101+
cd /tmp; \
102+
ARCH="$(dpkg-architecture --query DEB_BUILD_GNU_CPU)"; \
103+
GHC_URL="https://downloads.haskell.org/~ghc/$GHC/ghc-$GHC-$ARCH-deb12-linux.tar.xz"; \
104+
# sha256 from https://downloads.haskell.org/~ghc/$GHC/SHA256SUMS
105+
case "$ARCH" in \
106+
'aarch64') \
107+
GHC_SHA256='bee95bc91a621d8a2e9a9d86dac28ff839605e87316518dae12c779709bd58f1'; \
108+
;; \
109+
'x86_64') \
110+
GHC_SHA256='447ec2fcc773ae9ebc3f39766c719641631274f9b765d7426a8cbe9241677c9f'; \
111+
;; \
112+
*) echo >&2 "error: unsupported architecture '$ARCH'" ; exit 1 ;; \
113+
esac; \
114+
curl -sSL "$GHC_URL" -o ghc.tar.xz; \
115+
echo "$GHC_SHA256 ghc.tar.xz" | sha256sum --strict --check; \
116+
\
117+
GNUPGHOME="$(mktemp -d)"; export GNUPGHOME; \
118+
curl -sSL "$GHC_URL.sig" -o ghc.tar.xz.sig; \
119+
gpg --batch --keyserver keyserver.ubuntu.com --receive-keys "$GHC_RELEASE_KEY"; \
120+
gpg --batch --verify ghc.tar.xz.sig ghc.tar.xz; \
121+
gpgconf --kill all; \
122+
\
123+
tar xf ghc.tar.xz; \
124+
cd "ghc-$GHC-$ARCH-unknown-linux"; \
125+
./configure --prefix "/opt/ghc/$GHC"; \
126+
make install; \
127+
\
128+
rm -rf /tmp/*; \
129+
\
130+
"/opt/ghc/$GHC/bin/ghc" --version
131+
132+
ENV PATH=/root/.cabal/bin:/root/.local/bin:/opt/ghc/${GHC}/bin:$PATH
133+
134+
CMD ["ghci"]

0 commit comments

Comments
 (0)