From 8753dc285dd0361446c40fd8be0df0cc5d904c07 Mon Sep 17 00:00:00 2001 From: Olivier Benz <olivier.benz@b-data.ch> Date: Wed, 17 Apr 2024 07:51:05 +0200 Subject: [PATCH] Freeze GHC v9.6.5 --- .devcontainer/VERSION_MATRIX.md | 3 +- .gitlab-ci.yml | 6 +- VERSION_MATRIX.md | 1 + prior/9.6.5.Dockerfile | 175 ++++++++++++++++++++++++++++++++ 4 files changed, 181 insertions(+), 4 deletions(-) create mode 100644 prior/9.6.5.Dockerfile diff --git a/.devcontainer/VERSION_MATRIX.md b/.devcontainer/VERSION_MATRIX.md index 9a44b30..e5c77c1 100644 --- a/.devcontainer/VERSION_MATRIX.md +++ b/.devcontainer/VERSION_MATRIX.md @@ -6,7 +6,8 @@ |:----------------------------|:----------|:------------|:------------------------------------------------------------------------------------ | | latest<br>9.8.2<br>9.8<br>9 | 3.10.3.0 | ≥ 2.13.1 | latest<br>2.7.0.0<br>2.6.0.0 | | 9.8.1 | 3.10.2.1 | ≥ 2.13.1 | 2.6.0.0<br>2.5.0.0<br>2.4.0.0 | -| 9.6.4<br>9.6 | 3.10.3.0 | ≥ 2.13.1 | 2.7.0.0<br>2.6.0.0 | +| 9.6.5<br>9.6 | 3.10.3.0 | ≥ 2.13.1 | 2.7.0.0 | +| 9.6.4 | 3.10.3.0 | ≥ 2.13.1 | 2.7.0.0<br>2.6.0.0 | | 9.6.3 | 3.10.1.0 | ≥ 2.13.1 | 2.5.0.0<br>2.4.0.0<br>2.3.0.0<br>2.2.0.0 | | 9.4.8<br>9.4 | 3.8.1.0 | ≥ 2.13.1 | 2.7.0.0<br>2.6.0.0<br>2.5.0.0<br>2.4.0.0 | | 9.4.7 | 3.8.1.0 | ≥ 2.13.1 | 2.4.0.0<br>2.3.0.0<br>2.2.0.0<br>2.1.0.0<br>2.0.0.1 | diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index df6151d..708a85b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,12 +1,12 @@ .env: variables: - GHC_VERSION: "9.8.2" + GHC_VERSION: "9.6.5" CABAL_VERSION: "3.10.3.0" STACK_VERSION: "2.15.5" HLS_VERSION: "2.7.0.0" BUILD_GHC: "true" - BUILD_HLS: "false" - TAG_VERSION_MAJ_MIN: "false" + BUILD_HLS: "true" + TAG_VERSION_MAJ_MIN: "true" TAG_VERSION_MAJ: "false" .before-script-build: &before-script-build diff --git a/VERSION_MATRIX.md b/VERSION_MATRIX.md index 5b279c8..399945d 100644 --- a/VERSION_MATRIX.md +++ b/VERSION_MATRIX.md @@ -6,6 +6,7 @@ Topmost entry = Tag `latest` |:-----------|:---------|:-----------|:---- |:-------------| | 9.8.2 | 3.10.3.0 | 2.15.5 | 14 | Alpine 3.19 | | 9.8.1 | 3.10.2.1 | 2.15.1 | 14 | Alpine 3.19 | +| 9.6.5 | 3.10.3.0 | 2.15.5 | 14 | Alpine 3.19 | | 9.6.4 | 3.10.3.0 | 2.15.5 | 14 | Alpine 3.19 | | 9.6.3 | 3.10.1.0 | 2.13.1 | 14 | Alpine 3.19 | | 9.6.2 | 3.10.1.0 | 2.11.1[^1] | 14 | Alpine 3.18 | diff --git a/prior/9.6.5.Dockerfile b/prior/9.6.5.Dockerfile new file mode 100644 index 0000000..0fcc4e3 --- /dev/null +++ b/prior/9.6.5.Dockerfile @@ -0,0 +1,175 @@ +ARG GHC_VERSION=9.6.5 +ARG CABAL_VERSION=3.10.3.0 +ARG STACK_VERSION=2.15.5 + +ARG GHC_VERSION_BUILD=${GHC_VERSION} +ARG CABAL_VERSION_BUILD=${CABAL_VERSION} + +FROM glcr.b-data.ch/ghc/ghc-musl:9.4.8 as bootstrap + +RUN apk upgrade --no-cache \ + && apk add --no-cache \ + autoconf \ + automake \ + binutils-gold \ + build-base \ + coreutils \ + cpio \ + curl \ + gnupg \ + linux-headers \ + libffi-dev \ + llvm14 \ + ncurses-dev \ + perl \ + python3 \ + xz \ + zlib-dev + +FROM bootstrap as bootstrap-ghc + +ARG GHC_VERSION_BUILD + +ENV GHC_VERSION=${GHC_VERSION_BUILD} + +RUN cd /tmp \ + && curl -sSLO https://downloads.haskell.org/~ghc/"$GHC_VERSION"/ghc-"$GHC_VERSION"-src.tar.xz \ + && curl -sSLO https://downloads.haskell.org/~ghc/"$GHC_VERSION"/ghc-"$GHC_VERSION"-src.tar.xz.sig \ + && gpg --keyserver hkps://keyserver.ubuntu.com:443 \ + --receive-keys 88B57FCF7DB53B4DB3BFA4B1588764FBE22D19C4 || \ + gpg --keyserver hkp://keyserver.ubuntu.com:80 \ + --receive-keys 88B57FCF7DB53B4DB3BFA4B1588764FBE22D19C4 \ + && gpg --verify "ghc-$GHC_VERSION-src.tar.xz.sig" "ghc-$GHC_VERSION-src.tar.xz" \ + && tar -xJf "ghc-$GHC_VERSION-src.tar.xz" \ + && cd "ghc-$GHC_VERSION" \ + && ./boot.source \ + && ./configure --disable-ld-override LD=ld.gold \ + ## Use the LLVM backend + ## Switch llvm-targets from unknown-linux-gnueabihf->alpine-linux + ## so we can match the llvm vendor string alpine uses + && sed -i -e 's/unknown-linux-gnueabihf/alpine-linux/g' llvm-targets \ + && sed -i -e 's/unknown-linux-gnueabi/alpine-linux/g' llvm-targets \ + && sed -i -e 's/unknown-linux-gnu/alpine-linux/g' llvm-targets \ + && cabal update \ + ## See https://unix.stackexchange.com/questions/519092/what-is-the-logic-of-using-nproc-1-in-make-command + && hadrian/build binary-dist -j"$(($(nproc)+1))" \ + --flavour=perf+llvm+split_sections \ + --docs=none + +FROM bootstrap as bootstrap-cabal + +ARG CABAL_VERSION_BUILD + +ENV CABAL_VERSION=${CABAL_VERSION_BUILD} + +## Build Cabal (the tool) with the GHC bootstrap version +RUN cabal update \ + ## See https://gitlab.haskell.org/ghc/ghc/-/wikis/commentary/libraries/version-history + && cabal install "cabal-install-$CABAL_VERSION" + +FROM alpine:3.19 as ghc-base + +LABEL org.opencontainers.image.licenses="MIT" \ + org.opencontainers.image.source="https://gitlab.b-data.ch/ghc/ghc-musl" \ + org.opencontainers.image.vendor="Olivier Benz" \ + org.opencontainers.image.authors="Olivier Benz <olivier.benz@b-data.ch>" + +ARG GHC_VERSION_BUILD +ARG CABAL_VERSION_BUILD +ARG STACK_VERSION + +ENV GHC_VERSION=${GHC_VERSION_BUILD} \ + CABAL_VERSION=${CABAL_VERSION_BUILD} \ + STACK_VERSION=${STACK_VERSION} + +RUN apk add --no-cache \ + bash \ + build-base \ + bzip2 \ + bzip2-dev \ + bzip2-static \ + curl \ + curl-static \ + dpkg \ + fakeroot \ + git \ + gmp-dev \ + libcurl \ + libffi \ + libffi-dev \ + llvm14 \ + ncurses-dev \ + ncurses-static \ + openssl-dev \ + openssl-libs-static \ + pcre \ + pcre-dev \ + pcre2 \ + pcre2-dev \ + perl \ + ## Install shadow for `stack --docker` + shadow \ + wget \ + xz \ + xz-dev \ + zlib \ + zlib-dev \ + zlib-static + +FROM ghc-base as ghc-stage1 + +COPY --from=bootstrap-ghc /tmp/ghc-"$GHC_VERSION"/_build/bindist/ghc-"$GHC_VERSION"-*-alpine-linux.tar.xz /tmp/ + +RUN cd /tmp \ + ## Install GHC + && tar -xJf ghc-"$GHC_VERSION"-*-alpine-linux.tar.xz \ + && cd ghc-"$GHC_VERSION"-*-alpine-linux \ + && ./configure --disable-ld-override \ + && make install \ + ## Install Stack + && cd /tmp \ + && curl -sSLO https://github.com/commercialhaskell/stack/releases/download/v"$STACK_VERSION"/stack-"$STACK_VERSION"-linux-"$(uname -m)".tar.gz \ + && curl -sSLO https://github.com/commercialhaskell/stack/releases/download/v"$STACK_VERSION"/stack-"$STACK_VERSION"-linux-"$(uname -m)".tar.gz.sha256 \ + && sha256sum -cs stack-"$STACK_VERSION"-linux-"$(uname -m)".tar.gz.sha256 \ + && tar -xzf stack-"$STACK_VERSION"-linux-"$(uname -m)".tar.gz \ + && mv stack-"$STACK_VERSION"-linux-"$(uname -m)"/stack /usr/local/bin/stack \ + ## Clean up + && rm -rf /tmp/* + +FROM ghc-stage1 as ghc-stage2 + +## Install Cabal (the tool) built with the GHC bootstrap version +COPY --from=bootstrap-cabal /root/.cabal/bin/cabal /usr/local/bin/cabal + +## Rebuild Cabal (the tool) with the GHC target version +RUN cabal update \ + && cabal install "cabal-install-$CABAL_VERSION" + +FROM ghc-stage1 as test + +WORKDIR /usr/local/src + +## Install Cabal (the tool) built with the GHC target version +COPY --from=ghc-stage2 /root/.local/bin/cabal /usr/local/bin/cabal + +COPY Main.hs Main.hs + +RUN ghc -static -optl-pthread -optl-static Main.hs \ + && file Main \ + && ./Main \ + ## Test cabal workflow + && mkdir cabal-test \ + && cd cabal-test \ + && cabal update \ + && cabal init -n --is-executable -p tester -l MIT \ + && cabal run + +FROM ghc-base + +## Install GHC and Stack +COPY --from=ghc-stage1 /usr/local /usr/local + +## Install Cabal (the tool) built with the GHC target version +COPY --from=ghc-stage2 /root/.local/bin/cabal /usr/local/bin/cabal + +CMD ["ghci"] -- GitLab