1- FROM  debian:bookworm
1+ FROM  ' debian:bookworm' 
22
3- ENV  LANG= C.UTF-8
3+ ENV  LANG  C.UTF-8
44
55#  common haskell + stack dependencies
6- RUN  apt-get update && \
6+ RUN  <<EOT
7+     apt-get update && \
78    apt-get install -y --no-install-recommends \
89        ca-certificates \
910        curl \
@@ -22,113 +23,121 @@ RUN apt-get update && \
2223        xz-utils \
2324        zlib1g-dev && \
2425    rm -rf /var/lib/apt/lists/*
26+ EOT
2527
2628ARG  STACK=3.3.1
2729ARG  STACK_RELEASE_KEY=C5705533DA4F78D8664B5DC0575159689BEFB442
2830
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" ; \
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" 
3336    #  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-     \
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+     
5862    stack --version;
63+ EOT
5964
6065ARG  CABAL_INSTALL=3.14.1.1
6166ARG  CABAL_INSTALL_RELEASE_KEY=EAF2A9A722C0C96F2B431CA511AAD8CEDEE0CAEF
6267
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" ; \
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" 
6975    #  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; \ 
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
8793    #  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-     \ 
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+ 
95101    cabal --version
102+ EOT
96103
97104ARG  GHC=9.12.2
98105ARG  GHC_RELEASE_KEY=FFEB7CE81E16A36B3E2DED6F2DE04D4E97DB64AD
99106
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" ; \
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" 
104112    #  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-     \ 
113+     case "$ARCH"  in
114+         'aarch64' )
115+             GHC_SHA256='bee95bc91a621d8a2e9a9d86dac28ff839605e87316518dae12c779709bd58f1' 
116+             ;;
117+         'x86_64' )
118+             GHC_SHA256='447ec2fcc773ae9ebc3f39766c719641631274f9b765d7426a8cbe9241677c9f' 
119+             ;;
120+         *) echo >&2 "error: unsupported architecture '$ARCH'"  ; exit 1 ;;
121+     esac
122+     curl -sSL "$GHC_URL"  -o ghc.tar.xz
123+     echo "$GHC_SHA256 ghc.tar.xz"  | sha256sum --strict --check
124+ 
125+     GNUPGHOME="$(mktemp -d)" ; export GNUPGHOME
126+     curl -sSL "$GHC_URL.sig"  -o ghc.tar.xz.sig
127+     gpg --batch --keyserver keyserver.ubuntu.com --receive-keys "$GHC_RELEASE_KEY" 
128+     gpg --batch --verify ghc.tar.xz.sig ghc.tar.xz
129+     gpgconf --kill all
130+ 
131+     tar xf ghc.tar.xz
132+     cd "ghc-$GHC-$ARCH-unknown-linux" 
133+     ./configure --prefix "/opt/ghc/$GHC" 
134+     make install
135+ 
136+     rm -rf /tmp/*
137+ 
130138    "/opt/ghc/$GHC/bin/ghc"  --version
139+ EOT
131140
132- ENV  PATH= /root/.cabal/bin:/root/.local/bin:/opt/ghc/${GHC}/bin:$PATH
141+ ENV  PATH  /root/.cabal/bin:/root/.local/bin:/opt/ghc/${GHC}/bin:$PATH
133142
134143CMD  ["ghci" ]
0 commit comments