diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 662b321227a86ee2efba9a419ef00b49b61e7374..d331d4d139abe43065c929498e86f411ed194303 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,8 +5,8 @@ STACK_VERSION: "2.15.1" HLS_VERSION: "2.6.0.0" BUILD_GHC: "true" - BUILD_HLS: "true" - TAG_VERSION_MAJ_MIN: "true" + BUILD_HLS: "false" + TAG_VERSION_MAJ_MIN: "false" TAG_VERSION_MAJ: "false" .before-script-build: &before-script-build diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index b8b19585c6bac5cfe5b72a8b97181afcf30872b8..a2d28187a573f9ea4a6336db1bc9c30e950d65b8 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -45,14 +45,14 @@ or harmful. Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are -not aligned to this Code of Conduct, and will communicate reasons formoderation +not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. ## Scope This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. -Examples of representing our community include using an official e-mail address, +Examples of representing our community include using an official email address, posting via an official social media account, or acting as an appointed representative at an online or offline event. diff --git a/prior/9.8.1.Dockerfile b/prior/9.8.1.Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..748b3e7b49254d2191c932e1c4f9db1b0d73b62c --- /dev/null +++ b/prior/9.8.1.Dockerfile @@ -0,0 +1,175 @@ +ARG GHC_VERSION=9.8.1 +ARG CABAL_VERSION=3.10.2.1 +ARG STACK_VERSION=2.15.1 + +ARG GHC_VERSION_BUILD=${GHC_VERSION} +ARG CABAL_VERSION_BUILD=${CABAL_VERSION} + +FROM glcr.b-data.ch/ghc/ghc-musl:9.6.4 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 FFEB7CE81E16A36B3E2DED6F2DE04D4E97DB64AD || \ + gpg --keyserver hkp://keyserver.ubuntu.com:80 \ + --receive-keys FFEB7CE81E16A36B3E2DED6F2DE04D4E97DB64AD \ + && 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/.local/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"]