diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8585b55275fb1bf120c5844237b769dece9a2958..6a42611b4d2e34a3520d516a2552284c19fafdac 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -35,8 +35,9 @@ DOCKER_DRIVER: overlay2 DOCKER_TLS_CERTDIR: "/certs" BUILDX_NO_DEFAULT_ATTESTATIONS: "true" - GHC_VERSION_BUILD: "9.6.2" - CABAL_VERSION_BUILD: "3.10.1.0" + GHC_VERSION_BUILD: "9.4.6" + CABAL_VERSION_BUILD: "3.8.1.0" + STACK_VERSION: "2.11.1" before_script: - *before-script-build @@ -50,6 +51,7 @@ build:latest-linux-amd64: docker build --build-arg GHC_VERSION_BUILD --build-arg CABAL_VERSION_BUILD + --build-arg STACK_VERSION --target tester -t $CI_APP_REPO:$CI_APP_TAG-linux-amd64 -t $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-amd64 @@ -58,6 +60,7 @@ build:latest-linux-amd64: docker build --build-arg GHC_VERSION_BUILD --build-arg CABAL_VERSION_BUILD + --build-arg STACK_VERSION -t $CI_APP_REPO:$CI_APP_TAG-linux-amd64 -t $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-amd64 -f latest.Dockerfile . @@ -79,6 +82,7 @@ build:latest-linux-arm64v8: docker build --build-arg GHC_VERSION_BUILD --build-arg CABAL_VERSION_BUILD + --build-arg STACK_VERSION --target tester -t $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 -t $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-arm64v8 @@ -87,6 +91,7 @@ build:latest-linux-arm64v8: docker build --build-arg GHC_VERSION_BUILD --build-arg CABAL_VERSION_BUILD + --build-arg STACK_VERSION -t $CI_APP_REPO:$CI_APP_TAG-linux-arm64v8 -t $CI_APP_REPO:$VERSION_MAJ_MIN_PAT-linux-arm64v8 -f latest.Dockerfile . @@ -196,6 +201,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.2.8.Dockerfile b/prior/9.2.8.Dockerfile index 9d2a55a303deb874079ad04b728e3d5bbc125e96..f31f44b469045b5617f4e1ad6d3c66807be003d8 100644 --- a/prior/9.2.8.Dockerfile +++ b/prior/9.2.8.Dockerfile @@ -1,5 +1,6 @@ ARG GHC_VERSION_BUILD=9.2.8 ARG CABAL_VERSION_BUILD=3.6.2.0 +ARG STACK_VERSION=2.11.1 FROM glcr.b-data.ch/ghc/ghc-musl:9.0.2 as bootstrap @@ -29,13 +30,13 @@ RUN apk upgrade --no-cache \ 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 \ + && 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 \ + && 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" \ # Use the LLVM backend && cp mk/build.mk.sample mk/build.mk \ && echo 'BuildFlavour=perf-llvm' >> mk/build.mk \ @@ -54,11 +55,11 @@ RUN cd /tmp \ && sed -i -e 's/unknown-linux-gnueabi/alpine-linux/g' llvm-targets \ && sed -i -e 's/unknown-linux-gnu/alpine-linux/g' llvm-targets \ # See https://unix.stackexchange.com/questions/519092/what-is-the-logic-of-using-nproc-1-in-make-command - && make -j$((`nproc`+1)) \ + && make -j"$(($(nproc)+1))" \ && make binary-dist \ && cabal update \ # See https://gitlab.haskell.org/ghc/ghc/-/wikis/commentary/libraries/version-history - && cabal install --allow-newer --constraint 'Cabal-syntax<3.7' cabal-install-$CABAL_VERSION + && cabal install --allow-newer --constraint 'Cabal-syntax<3.7' "cabal-install-$CABAL_VERSION" FROM alpine:3.16 as builder @@ -106,12 +107,12 @@ RUN apk upgrade --no-cache \ zlib-dev \ zlib-static -COPY --from=bootstrap /tmp/ghc-$GHC_VERSION/ghc-$GHC_VERSION-*-alpine-linux.tar.xz /tmp/ +COPY --from=bootstrap /tmp/ghc-"$GHC_VERSION"/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 \ + && tar -xJf ghc-"$GHC_VERSION"-*-alpine-linux.tar.xz \ + && cd "ghc-$GHC_VERSION" \ && ./configure --disable-ld-override --prefix=/usr \ && make install \ && cd / \ @@ -119,6 +120,8 @@ RUN cd /tmp \ FROM builder as tester +WORKDIR /usr/local/src + COPY Main.hs Main.hs RUN ghc -static -optl-pthread -optl-static Main.hs \ @@ -131,6 +134,14 @@ RUN ghc -static -optl-pthread -optl-static Main.hs \ && cabal init -n --is-executable -p tester -l MIT \ && cabal run +FROM glcr.b-data.ch/commercialhaskell/ssi:${STACK_VERSION} as ssi + FROM builder as final +ARG STACK_VERSION + +ENV STACK_VERSION=${STACK_VERSION} + +COPY --from=ssi /usr/local/bin/stack /usr/bin/stack + CMD ["ghci"] diff --git a/prior/9.4.1.Dockerfile b/prior/9.4.1.Dockerfile index df8b379e95797ceadfddf3e2549441aa8531dc17..fd13368d72412312f4adaaa4efa620ed3ee1e297 100644 --- a/prior/9.4.1.Dockerfile +++ b/prior/9.4.1.Dockerfile @@ -98,7 +98,7 @@ RUN apk upgrade --no-cache \ 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 +COPY --from=bootstrap /root/.cabal/bin/cabal /usr/local/bin/cabal RUN cd /tmp \ && tar -xJf ghc-$GHC_VERSION-*-alpine-linux.tar.xz \ diff --git a/prior/9.4.2.Dockerfile b/prior/9.4.2.Dockerfile index 2dbfd14d17996f9d2fdf8cf1119e87669081fde9..f45b6c6ed91bb4e2c34ef2230ae93e5fe8e17b37 100644 --- a/prior/9.4.2.Dockerfile +++ b/prior/9.4.2.Dockerfile @@ -99,7 +99,7 @@ RUN apk upgrade --no-cache \ 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 +COPY --from=bootstrap /root/.cabal/bin/cabal /usr/local/bin/cabal RUN cd /tmp \ && tar -xJf ghc-$GHC_VERSION-*-alpine-linux.tar.xz \ diff --git a/prior/9.4.3.Dockerfile b/prior/9.4.3.Dockerfile index fc79a1ccf1de051db208d7d4cd35510a2ad5bb34..96399aefbe5fbffe4fdd614097706469502385ee 100644 --- a/prior/9.4.3.Dockerfile +++ b/prior/9.4.3.Dockerfile @@ -99,7 +99,7 @@ RUN apk upgrade --no-cache \ 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 +COPY --from=bootstrap /root/.cabal/bin/cabal /usr/local/bin/cabal RUN cd /tmp \ && tar -xJf ghc-$GHC_VERSION-*-alpine-linux.tar.xz \ diff --git a/prior/9.4.4.Dockerfile b/prior/9.4.4.Dockerfile index c708f37c4705b78d3063537c371ce51c1fd183f7..396987165509a73dc28e52f0b29bffe8cb21c89f 100644 --- a/prior/9.4.4.Dockerfile +++ b/prior/9.4.4.Dockerfile @@ -99,7 +99,7 @@ RUN apk upgrade --no-cache \ 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 +COPY --from=bootstrap /root/.cabal/bin/cabal /usr/local/bin/cabal RUN cd /tmp \ && tar -xJf ghc-$GHC_VERSION-*-alpine-linux.tar.xz \ diff --git a/prior/9.4.5.Dockerfile b/prior/9.4.5.Dockerfile index 98aa6ab85b4fa93169f95bda7f253a8be738e2d0..d9bcaeec0148b8e06f986585e7722ce8f5c6125e 100644 --- a/prior/9.4.5.Dockerfile +++ b/prior/9.4.5.Dockerfile @@ -99,7 +99,7 @@ RUN apk upgrade --no-cache \ 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 +COPY --from=bootstrap /root/.cabal/bin/cabal /usr/local/bin/cabal RUN cd /tmp \ && tar -xJf ghc-$GHC_VERSION-*-alpine-linux.tar.xz \ diff --git a/prior/9.4.6.Dockerfile b/prior/9.4.6.Dockerfile index b1826e5a3ff447a0c5e4c4505d14d57746566f90..db5bcd7f04a501037a35885c5429eaee606b149b 100644 --- a/prior/9.4.6.Dockerfile +++ b/prior/9.4.6.Dockerfile @@ -1,5 +1,6 @@ ARG GHC_VERSION_BUILD=9.4.6 ARG CABAL_VERSION_BUILD=3.8.1.0 +ARG STACK_VERSION=2.11.1 FROM glcr.b-data.ch/ghc/ghc-musl:9.2.8 as bootstrap @@ -99,7 +100,7 @@ RUN apk upgrade --no-cache \ 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 +COPY --from=bootstrap /root/.cabal/bin/cabal /usr/local/bin/cabal RUN cd /tmp \ && tar -xJf ghc-"$GHC_VERSION"-*-alpine-linux.tar.xz \ @@ -125,6 +126,14 @@ RUN ghc -static -optl-pthread -optl-static Main.hs \ && cabal init -n --is-executable -p tester -l MIT \ && cabal run +FROM glcr.b-data.ch/commercialhaskell/ssi:${STACK_VERSION} as ssi + FROM builder as final +ARG STACK_VERSION + +ENV STACK_VERSION=${STACK_VERSION} + +COPY --from=ssi /usr/local/bin/stack /usr/local/bin/stack + CMD ["ghci"] diff --git a/prior/9.6.1.Dockerfile b/prior/9.6.1.Dockerfile index a54b4cfbbc40b027a49f75299a0cc19247bec627..45f17ed4b26184b12c81c443841f9940ed3174ab 100644 --- a/prior/9.6.1.Dockerfile +++ b/prior/9.6.1.Dockerfile @@ -29,13 +29,13 @@ RUN apk upgrade --no-cache \ 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 \ + && 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 FFEB7CE81E16A36B3E2DED6F2DE04D4E97DB64AD \ - && 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 \ + && 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 @@ -46,11 +46,11 @@ RUN cd /tmp \ && 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)) \ + && 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.11' cabal-install-$CABAL_VERSION + && cabal install --allow-newer --constraint 'Cabal-syntax<3.11' "cabal-install-$CABAL_VERSION" FROM alpine:3.18 as builder @@ -81,7 +81,7 @@ RUN apk upgrade --no-cache \ libcurl \ libffi \ libffi-dev \ - llvm16 \ + llvm14 \ ncurses-dev \ ncurses-static \ openssl-dev \ @@ -98,12 +98,12 @@ RUN apk upgrade --no-cache \ 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 +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/local/bin/cabal RUN cd /tmp \ - && tar -xJf ghc-$GHC_VERSION-*-alpine-linux.tar.xz \ - && cd ghc-$GHC_VERSION-*-alpine-linux \ + && tar -xJf ghc-"$GHC_VERSION"-*-alpine-linux.tar.xz \ + && cd ghc-"$GHC_VERSION"-*-alpine-linux \ && ./configure --disable-ld-override \ && make install \ && cd / \ @@ -111,6 +111,8 @@ RUN cd /tmp \ FROM builder as tester +WORKDIR /usr/local/src + COPY Main.hs Main.hs RUN ghc -static -optl-pthread -optl-static Main.hs \