Skip to content

Commit 64d7e9b

Browse files
authored
add: Dockerfile generator initial draft (#159)
1 parent c34f977 commit 64d7e9b

29 files changed

+1605
-289
lines changed

.github/workflows/debian.yml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,18 @@ jobs:
3535
- ghc: '9.12.2'
3636
ghc_minor: '9.12'
3737
deb: 'slim-bookworm'
38+
- ghc: '9.12.2'
39+
ghc_minor: '9.12'
40+
deb: 'bullseye'
41+
- ghc: '9.12.2'
42+
ghc_minor: '9.12'
43+
deb: 'slim-bullseye'
3844
- ghc: '9.10.2'
3945
ghc_minor: '9.10'
4046
- ghc: '9.8.4'
4147
ghc_minor: '9.8'
4248
- ghc: '9.6.7'
4349
ghc_minor: '9.6'
44-
exclude:
45-
- ghc: '9.12.2'
46-
deb: 'bullseye'
47-
- ghc: '9.12.2'
48-
deb: 'slim-bullseye'
4950
steps:
5051
- uses: actions/checkout@v4
5152
- name: build + smoke test [${{ matrix.ghc }}]

.gitignore

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
generator/.stack-work
2+
generator/dist-newstyle
3+
/.idea
4+
15
keys/*
26

37
### https://raw.github.com/github/gitignore/2399ff1c7957fa3b4eeecefa7354bbe50776063b/Global/Emacs.gitignore
@@ -55,7 +59,8 @@ tramp
5559
.LSOverride
5660

5761
# Icon must end with two \r
58-
Icon
62+
Icon
63+
5964

6065
# Thumbnails
6166
._*

9.10/_globals.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
stack:
2+
version: "3.3.1"
3+
release_key: "C5705533DA4F78D8664B5DC0575159689BEFB442"
4+
sha256sum:
5+
"aarch64": 'bdd618ea5a9c921417727011f2ecd78987dffa5cee5e741108baf65a9b5b58ab'
6+
"x86_64": '88d7e517342c125b0a098d9d578fe53e590618ae4b2427283a27408a1ebd06d8'
7+
cabal_install:
8+
version: "3.14.1.1"
9+
release_key: "EAF2A9A722C0C96F2B431CA511AAD8CEDEE0CAEF"

9.10/bookworm.yaml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
---
2+
distro:
3+
codename: 'bookworm'
4+
abbr: 'deb12'
5+
image: 'debian:bookworm'
6+
ghc:
7+
version: "9.10.2"
8+
release_key: "88B57FCF7DB53B4DB3BFA4B1588764FBE22D19C4"
9+
sha256sum:
10+
"aarch64": '0188ca098abdaf71eb0804d0f35311f405da489137d8d438bfaa43b8d1e3f1b0'
11+
"x86_64": '71d025743f2eb4d3af95d4dd94a22c093c2814d78ab95dd0e12bb6751b1c7d4e'
12+
cabal_install:
13+
sha256sum:
14+
"aarch64": 'f763fb2af2bc1ff174b7361a7d51109a585954f87a0e14f86d144f3bce28f7a9'
15+
"x86_64": '73a463306c771e18ca22c0a9469176ffab0138ec5925adb5364ef47174e1adc5'
16+
overrides:
17+
ghc:
18+
"aarch64":
19+
# GHC 9.10.2 doesn't have a deb12 bindist for aarch64 for some reason, so we're using the bullseye one instead
20+
url: "https://downloads.haskell.org/~ghc/9.10.2/ghc-9.10.2-aarch64-deb11-linux.tar.xz"
21+
_globals: !include '_globals.yaml'

9.10/bookworm/Dockerfile

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

9.10/bullseye.yaml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
distro:
3+
codename: 'bullseye'
4+
abbr: 'deb11'
5+
image: 'debian:bullseye'
6+
ghc:
7+
version: "9.10.2"
8+
release_key: "88B57FCF7DB53B4DB3BFA4B1588764FBE22D19C4"
9+
sha256sum:
10+
"aarch64": '0188ca098abdaf71eb0804d0f35311f405da489137d8d438bfaa43b8d1e3f1b0'
11+
"x86_64": '2fe2c3e0a07e4782530e8bf83eeda8ff6935e40d5450c1809abcdc6182c9c848'
12+
cabal_install:
13+
sha256sum:
14+
"aarch64": '5e8c47a055d5b744741039a7061ee43ec7d080d1251784e7a4cd836403e42523'
15+
"x86_64": '41b85bb25fa654e4b79169014b9142fe696ff35e002e043caa0e52d65204ba8a'
16+
_globals: !include '_globals.yaml'
17+

0 commit comments

Comments
 (0)