diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 61f4721e23da6e467915e429d5eedfb374010650..1c0c990ac870d23560963cd62f146d8987f8f385 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -35,8 +35,8 @@ DOCKER_DRIVER: overlay2 DOCKER_TLS_CERTDIR: "/certs" BUILDX_NO_DEFAULT_ATTESTATIONS: "true" - GHC_VERSION_BUILD: "9.6.1" - CABAL_VERSION_BUILD: "3.10.1.0" + GHC_VERSION_BUILD: "9.4.5" + CABAL_VERSION_BUILD: "3.8.1.0" before_script: - *before-script-build @@ -196,6 +196,13 @@ build-manifest:version-linux-multiarch: $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 fi docker manifest push $CI_APP_REPO:$CI_APP_TAG + - | + docker manifest create $CI_APP_REPO:$VERSION_MAJ_MIN $CI_MANIFEST_LIST + if echo $OS_ARCH | grep "linux-arm64v8" >/dev/null ; then + docker manifest annotate --variant v8 $CI_APP_REPO:$VERSION_MAJ_MIN \ + $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 + fi + docker manifest push $CI_APP_REPO:$VERSION_MAJ_MIN rules: - if: $CI_COMMIT_BRANCH == "freeze-version" changes: diff --git a/prior/9.4.5.Dockerfile b/prior/9.4.5.Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..98aa6ab85b4fa93169f95bda7f253a8be738e2d0 --- /dev/null +++ b/prior/9.4.5.Dockerfile @@ -0,0 +1,128 @@ +ARG GHC_VERSION_BUILD=9.4.5 +ARG CABAL_VERSION_BUILD=3.8.1.0 + +FROM glcr.b-data.ch/ghc/ghc-musl:9.2.7 as bootstrap + +ARG GHC_VERSION_BUILD +ARG CABAL_VERSION_BUILD + +ENV GHC_VERSION=${GHC_VERSION_BUILD} \ + CABAL_VERSION=${CABAL_VERSION_BUILD} + +RUN apk upgrade --no-cache \ + && apk add --update --no-cache \ + autoconf \ + automake \ + binutils-gold \ + build-base \ + coreutils \ + cpio \ + curl \ + gnupg \ + linux-headers \ + libffi-dev \ + llvm12 \ + ncurses-dev \ + perl \ + python3 \ + xz \ + zlib-dev + +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 --verify ghc-$GHC_VERSION-src.tar.xz.sig ghc-$GHC_VERSION-src.tar.xz \ + && tar xf 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 \ + # See https://gitlab.haskell.org/ghc/ghc/-/wikis/commentary/libraries/version-history + && cabal install --allow-newer --constraint 'Cabal-syntax<3.9' cabal-install-$CABAL_VERSION + +FROM alpine:3.17 as builder + +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 + +ENV GHC_VERSION=${GHC_VERSION_BUILD} \ + CABAL_VERSION=${CABAL_VERSION_BUILD} + +RUN apk upgrade --no-cache \ + && apk add --update --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 \ + wget \ + xz \ + xz-dev \ + zlib \ + zlib-dev \ + zlib-static + +COPY --from=bootstrap /tmp/ghc-$GHC_VERSION/_build/bindist/ghc-$GHC_VERSION-*-alpine-linux.tar.xz /tmp/ +COPY --from=bootstrap /root/.cabal/bin/cabal /usr/bin/cabal + +RUN cd /tmp \ + && tar -xJf ghc-$GHC_VERSION-*-alpine-linux.tar.xz \ + && cd ghc-$GHC_VERSION-*-alpine-linux \ + && ./configure --disable-ld-override \ + && make install \ + && cd / \ + && rm -rf /tmp/* + +FROM builder as tester + +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 builder as final + +CMD ["ghci"]