diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c6a5d6b1a6a44aefd6d20d445e2f2bd2eaed4917..25b2b56449de2b1c38141738a3c32e45717a5b16 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -168,6 +168,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/9.2.4.Dockerfile b/9.2.4.Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..1e49c7fee4aebd23c147b59a9d470c65b2a05302 --- /dev/null +++ b/9.2.4.Dockerfile @@ -0,0 +1,133 @@ +ARG GHC_VERSION_BUILD=9.2.4 +ARG CABAL_VERSION_BUILD=3.6.2.0 + +FROM registry.gitlab.b-data.ch/ghc/ghc4pandoc:9.0.2 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 \ + # Use the LLVM backend + && cp mk/build.mk.sample mk/build.mk \ + && echo 'BuildFlavour=perf-llvm' >> mk/build.mk \ + && echo 'BeConservative=YES' >> mk/build.mk \ + && echo 'SplitSections=YES' >> mk/build.mk \ + && echo 'HADDOCK_DOCS=NO' >> mk/build.mk \ + && echo 'HSCOLOUR_SRCS=NO' >> mk/build.mk \ + && echo 'BUILD_SPHINX_HTML=NO' >> mk/build.mk \ + && echo 'BUILD_SPHINX_PS=NO' >> mk/build.mk \ + && echo 'BUILD_SPHINX_PDF=NO' >> mk/build.mk \ + && ./boot \ + && ./configure --disable-ld-override LD=ld.gold \ + # 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 \ + # See https://unix.stackexchange.com/questions/519092/what-is-the-logic-of-using-nproc-1-in-make-command + && 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 cabal-install-$CABAL_VERSION + +FROM alpine:3.16 as builder + +LABEL org.label-schema.license="MIT" \ + org.label-schema.vcs-url="https://gitlab.b-data.ch/ghc/ghc4pandoc" \ + maintainer="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 \ + llvm12 \ + 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/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 \ + && ./configure --disable-ld-override --prefix=/usr \ + && 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