diff --git a/.devcontainer/VERSION_MATRIX.md b/.devcontainer/VERSION_MATRIX.md index 956ac5c..3a5b121 100644 --- a/.devcontainer/VERSION_MATRIX.md +++ b/.devcontainer/VERSION_MATRIX.md @@ -2,19 +2,25 @@ ## Current -| GHC | Cabal[^1] | Stack[^1] | HLS | -|:----------------------------|:----------|:------------|:----------------------------------------------------------------------------------------------- | -| latest
9.8.2
9.8
9 | 3.10.3.0 | ≥ 2.13.1 | latest
2.8.0.0
2.7.0.0
2.6.0.0 | -| 9.8.1 | 3.10.2.1 | ≥ 2.13.1 | 2.6.0.0
2.5.0.0
2.4.0.0 | -| 9.6.5
9.6 | 3.10.3.0 | ≥ 2.13.1 | 2.8.0.0
2.7.0.0 | -| 9.6.4 | 3.10.3.0 | ≥ 2.13.1 | 2.7.0.0
2.6.0.0 | -| 9.6.3 | 3.10.1.0 | ≥ 2.13.1 | 2.5.0.0
2.4.0.0
2.3.0.0
2.2.0.0 | -| 9.4.8
9.4 | 3.8.1.0 | ≥ 2.13.1 | 2.8.0.0
2.7.0.0
2.6.0.0
2.5.0.0
2.4.0.0 | -| 9.4.7 | 3.8.1.0 | ≥ 2.13.1 | 2.4.0.0
2.3.0.0
2.2.0.0
2.1.0.0
2.0.0.1 | -| 9.2.8
9.2 | 3.6.2.0 | ≥ 2.13.1 | 2.8.0.0
2.7.0.0
2.6.0.0
2.5.0.0
2.4.0.0
2.3.0.0
2.2.0.0
2.1.0.0
2.0.0.1 | +| GHC | Cabal[^1] | Stack[^1] | HLS | +|:------------------------------|:----------|:----------|:----------------------------- | +| latest
9.10.1
9.10
9 | 3.11.0.0 | ≥ 2.13.1 | n/a | +| 9.8.2
9.8 | 3.10.3.0 | ≥ 2.13.1 | 2.8.0.0
2.7.0.0
2.6.0.0 | +| 9.6.5
9.6 | 3.10.3.0 | ≥ 2.13.1 | 2.8.0.0
2.7.0.0 | [^1]: built-in version; see [GHC musl > Version Matrix](../VERSION_MATRIX.md) +## Prior + +| GHC | Cabal[^1] | Stack[^1] | HLS | +|:-------------|:----------|:----------|:----------------------------------------------------------------------------------------------- | +| 9.8.1 | 3.10.2.1 | ≥ 2.13.1 | 2.6.0.0
2.5.0.0
2.4.0.0 | +| 9.6.4 | 3.10.3.0 | ≥ 2.13.1 | 2.7.0.0
2.6.0.0 | +| 9.6.3 | 3.10.1.0 | ≥ 2.13.1 | 2.5.0.0
2.4.0.0
2.3.0.0
2.2.0.0 | +| 9.4.8
9.4 | 3.8.1.0 | ≥ 2.13.1 | 2.8.0.0
2.7.0.0
2.6.0.0
2.5.0.0
2.4.0.0 | +| 9.4.7 | 3.8.1.0 | ≥ 2.13.1 | 2.4.0.0
2.3.0.0
2.2.0.0
2.1.0.0
2.0.0.1 | +| 9.2.8
9.2 | 3.6.2.0 | ≥ 2.13.1 | 2.8.0.0
2.7.0.0
2.6.0.0
2.5.0.0
2.4.0.0
2.3.0.0
2.2.0.0
2.1.0.0
2.0.0.1 | + ## Legacy | GHC | Cabal[^1] | Stack[^2] | HLS | diff --git a/.devcontainer/ghc-9.4/devcontainer.json b/.devcontainer/ghc-9.10/devcontainer.json similarity index 82% rename from .devcontainer/ghc-9.4/devcontainer.json rename to .devcontainer/ghc-9.10/devcontainer.json index 6b11434..c0e15c8 100644 --- a/.devcontainer/ghc-9.4/devcontainer.json +++ b/.devcontainer/ghc-9.10/devcontainer.json @@ -1,11 +1,10 @@ { - "name": "GHC 9.4", + "name": "GHC 9.10 (latest)", "build": { "dockerfile": "../GHC.Dockerfile", "context": "..", "args": { - "GHC_VERSION": "9.4", - "HLS_VERSION": "2.8.0.0", + "GHC_VERSION": "9.10", "USE_ZSH_FOR_ROOT": "unset-to-use-ash", "SET_LANG": "C.UTF-8", "SET_TZ": "" @@ -58,13 +57,13 @@ // Set 'remoteUser' to 'root' to connect as root instead. "remoteUser": "vscode", - "workspaceMount": "source=ghc-musl-ghc-9.4-home-vscode,target=/home/vscode,type=volume", - // "workspaceMount": "source=${localWorkspaceFolder}/.devcontainer/bind-mounts/ghc-musl-ghc-9.4-home-vscode,target=/home/vscode,type=bind", + "workspaceMount": "source=ghc-musl-ghc-9.10-home-vscode,target=/home/vscode,type=volume", + // "workspaceMount": "source=${localWorkspaceFolder}/.devcontainer/bind-mounts/ghc-musl-ghc-9.10-home-vscode,target=/home/vscode,type=bind", "workspaceFolder": "/home/vscode", // "remoteUser": "root", - // "workspaceMount": "source=ghc-musl-ghc-9.4-root,target=/root,type=volume", - // // "workspaceMount": "source=${localWorkspaceFolder}/.devcontainer/bind-mounts/ghc-musl-ghc-9.4-root,target=/root,type=bind", + // "workspaceMount": "source=ghc-musl-ghc-9.10-root,target=/root,type=volume", + // // "workspaceMount": "source=${localWorkspaceFolder}/.devcontainer/bind-mounts/ghc-musl-ghc-9.10-root,target=/root,type=bind", // "workspaceFolder": "/root", "remoteEnv": { diff --git a/.devcontainer/ghc-9.2/devcontainer.json b/.devcontainer/ghc-9.2/devcontainer.json deleted file mode 100644 index f64aeb9..0000000 --- a/.devcontainer/ghc-9.2/devcontainer.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "name": "GHC 9.2 (recommended)", - "build": { - "dockerfile": "../GHC-legacy.Dockerfile", - "context": "..", - "args": { - "GHC_VERSION": "9.2", - "HLS_VERSION": "2.8.0.0", - "STACK_VERSION": "2.11.1", - "USE_ZSH_FOR_ROOT": "unset-to-use-ash", - "SET_LANG": "C.UTF-8", - "SET_TZ": "" - } - }, - - "onCreateCommand": "onCreateCommand.sh", - "postCreateCommand": "cabal update", - "postAttachCommand": "${HOME}/.local/bin/checkForUpdates.sh", - - "features": { - "ghcr.io/devcontainers/features/common-utils:2": { - "configureZshAsDefaultShell": true, - "upgradePackages": false, - "username": "vscode", - "userUid": "automatic", - "userGid": "automatic" - } - }, - - "customizations": { - "vscode": { - "extensions": [ - "alefragnani.project-manager", - "christian-kohler.path-intellisense", - "DavidAnson.vscode-markdownlint", - "eamodio.gitlens@11.7.0", - "editorconfig.editorconfig", - "exiasr.hadolint", - "GitHub.vscode-pull-request-github", - "GitLab.gitlab-workflow", - "haskell.haskell", - "mhutchie.git-graph", - "mutantdino.resourcemonitor", - "piotrpalarz.vscode-gitignore-generator", - "redhat.vscode-yaml", - "timonwong.shellcheck" - ], - "settings": { - "gitlab.aiAssistedCodeSuggestions.enabled": false, - "gitlab.duoChat.enabled": false, - "gitlens.showWelcomeOnInstall": false, - "gitlens.showWhatsNewAfterUpgrades": false, - "haskell.manageHLS": "PATH", - "resmon.show.battery": false, - "resmon.show.cpufreq": false - } - } - }, - - // Set 'remoteUser' to 'root' to connect as root instead. - "remoteUser": "vscode", - "workspaceMount": "source=ghc-musl-ghc-9.2-home-vscode,target=/home/vscode,type=volume", - // "workspaceMount": "source=${localWorkspaceFolder}/.devcontainer/bind-mounts/ghc-musl-ghc-9.2-home-vscode,target=/home/vscode,type=bind", - "workspaceFolder": "/home/vscode", - - // "remoteUser": "root", - // "workspaceMount": "source=ghc-musl-ghc-9.2-root,target=/root,type=volume", - // // "workspaceMount": "source=${localWorkspaceFolder}/.devcontainer/bind-mounts/ghc-musl-ghc-9.2-root,target=/root,type=bind", - // "workspaceFolder": "/root", - - "remoteEnv": { - // Pip: Install packages to the user site - "PIP_USER": "1" - } -} diff --git a/.devcontainer/ghc-9.6/devcontainer.json b/.devcontainer/ghc-9.6/devcontainer.json index 736197a..e489ed3 100644 --- a/.devcontainer/ghc-9.6/devcontainer.json +++ b/.devcontainer/ghc-9.6/devcontainer.json @@ -1,11 +1,12 @@ { - "name": "GHC 9.6", + "name": "GHC 9.6 (recommended)", "build": { "dockerfile": "../GHC.Dockerfile", "context": "..", "args": { "GHC_VERSION": "9.6", - "HLS_VERSION": "2.8.0.0", + "HLS_VERSION": "2.7.0.0", + "STACK_VERSION": "2.15.5", "USE_ZSH_FOR_ROOT": "unset-to-use-ash", "SET_LANG": "C.UTF-8", "SET_TZ": "" diff --git a/.devcontainer/ghc-9.8/devcontainer.json b/.devcontainer/ghc-9.8/devcontainer.json index b35e890..70cf528 100644 --- a/.devcontainer/ghc-9.8/devcontainer.json +++ b/.devcontainer/ghc-9.8/devcontainer.json @@ -1,5 +1,5 @@ { - "name": "GHC 9.8 (latest)", + "name": "GHC 9.8", "build": { "dockerfile": "../GHC.Dockerfile", "context": "..", diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3decb8b..9c4108c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,12 +1,12 @@ .env: variables: - GHC_VERSION: "9.8.2" - CABAL_VERSION: "3.10.3.0" + GHC_VERSION: "9.10.1" + CABAL_VERSION: "3.12.0.0-prerelease" STACK_VERSION: "2.15.7" HLS_VERSION: "2.8.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/README.md b/README.md index 19d8e61..69193c6 100644 --- a/README.md +++ b/README.md @@ -53,8 +53,8 @@ To install docker, follow the instructions for your platform: ```bash docker build \ - --build-arg GHC_VERSION=9.8.2 \ - --build-arg CABAL_VERSION=3.10.3.0 \ + --build-arg GHC_VERSION=9.10.1 \ + --build-arg CABAL_VERSION=3.12.0.0-prerelease \ --build-arg STACK_VERSION=2.15.7 \ -t ghc-musl \ -f latest.Dockerfile . diff --git a/VERSION_MATRIX.md b/VERSION_MATRIX.md index 9f6331f..9cb6264 100644 --- a/VERSION_MATRIX.md +++ b/VERSION_MATRIX.md @@ -4,6 +4,7 @@ Topmost entry = Tag `latest` | GHC | Cabal | Stack | LLVM | Linux distro | |:-----------|:---------|:-----------|:---- |:-------------| +| 9.10.1 | 3.11.0.0 | 2.15.7 | 18 | Alpine 3.20 | | 9.8.2 | 3.10.3.0 | 2.15.7 | 16 | Alpine 3.20 | | 9.8.1 | 3.10.2.1 | 2.15.1 | 14 | Alpine 3.19 | | 9.6.5 | 3.10.3.0 | 2.15.7 | 16 | Alpine 3.20 | diff --git a/latest.Dockerfile b/latest.Dockerfile index 0b90abe..7c073f6 100644 --- a/latest.Dockerfile +++ b/latest.Dockerfile @@ -5,7 +5,7 @@ ARG STACK_VERSION ARG GHC_VERSION_BUILD=${GHC_VERSION} ARG CABAL_VERSION_BUILD=${CABAL_VERSION} -FROM glcr.b-data.ch/ghc/ghc-musl:9.6.5 as bootstrap +FROM glcr.b-data.ch/ghc/ghc-musl:9.8.2 as bootstrap RUN apk upgrade --no-cache \ && apk add --no-cache \ @@ -13,13 +13,14 @@ RUN apk upgrade --no-cache \ automake \ binutils-gold \ build-base \ + clang18 \ coreutils \ cpio \ curl \ gnupg \ linux-headers \ libffi-dev \ - llvm14 \ + llvm18 \ ncurses-dev \ perl \ python3 \ @@ -32,18 +33,23 @@ ARG GHC_VERSION_BUILD ENV GHC_VERSION=${GHC_VERSION_BUILD} +COPY patches/${GHC_VERSION}.patch /tmp/ + 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 || \ + --receive-keys FFEB7CE81E16A36B3E2DED6F2DE04D4E97DB64AD || \ gpg --keyserver hkp://keyserver.ubuntu.com:80 \ - --receive-keys 88B57FCF7DB53B4DB3BFA4B1588764FBE22D19C4 \ + --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" \ + # Apply patches + && mv "/tmp/$GHC_VERSION.patch" . \ + && patch -p0 <"$GHC_VERSION.patch" \ && ./boot.source \ - && ./configure --disable-ld-override LD=ld.gold \ + && ./configure \ ## Use the LLVM backend ## Switch llvm-targets from unknown-linux-gnueabihf->alpine-linux ## so we can match the llvm vendor string alpine uses @@ -51,6 +57,8 @@ 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 \ && cabal update \ + && cabal install alex \ + && export PATH=/root/.local/bin:$PATH \ ## 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 \ @@ -65,9 +73,9 @@ 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" + && cabal install cabal-install-3.10.3.0 -FROM alpine:3.19 as ghc-base +FROM alpine:3.20 as ghc-base LABEL org.opencontainers.image.licenses="MIT" \ org.opencontainers.image.source="https://gitlab.b-data.ch/ghc/ghc-musl" \ @@ -88,6 +96,7 @@ RUN apk add --no-cache \ bzip2 \ bzip2-dev \ bzip2-static \ + clang18 \ curl \ curl-static \ dpkg \ @@ -97,7 +106,7 @@ RUN apk add --no-cache \ libcurl \ libffi \ libffi-dev \ - llvm14 \ + llvm18 \ ncurses-dev \ ncurses-static \ openssl-dev \ @@ -124,7 +133,7 @@ RUN cd /tmp \ ## Install GHC && tar -xJf ghc-"$GHC_VERSION"-*-alpine-linux.tar.xz \ && cd ghc-"$GHC_VERSION"-*-alpine-linux \ - && ./configure --disable-ld-override \ + && ./configure \ && make install \ ## Install Stack && cd /tmp \ @@ -142,8 +151,14 @@ FROM ghc-stage1 as ghc-stage2 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" +RUN cd /tmp \ + && curl -sSLO https://github.com/haskell/cabal/archive/refs/tags/cabal-install-v"$CABAL_VERSION".tar.gz \ + && tar -xzf cabal-install-v"$CABAL_VERSION".tar.gz \ + && cd cabal-cabal-install-v"$CABAL_VERSION" \ + && sed -i 's/2024-03-20T08:02:24Z/2024-04-02T17:52:00Z/g' cabal.project.release \ + && sed -i 's/hashable >= 1.0 /hashable >= 1.4.4.0 /g' cabal-install/cabal-install.cabal \ + && cabal update \ + && cabal install --project-file=cabal.project.release --allow-newer cabal-install FROM ghc-stage1 as test diff --git a/patches/9.10.1.patch b/patches/9.10.1.patch new file mode 100644 index 0000000..4dd9938 --- /dev/null +++ b/patches/9.10.1.patch @@ -0,0 +1,11 @@ +--- configure.ac ++++ configure.ac.patched +@@ -492,7 +492,7 @@ + # versions of LLVM simultaneously, but that stopped working around + # 3.5/3.6 release of LLVM. + LlvmMinVersion=13 # inclusive +-LlvmMaxVersion=16 # not inclusive ++LlvmMaxVersion=19 # not inclusive + AC_SUBST([LlvmMinVersion]) + AC_SUBST([LlvmMaxVersion]) +