From 77ae6ed566a2c41d95827928567a5a866016be30 Mon Sep 17 00:00:00 2001
From: Olivier Benz <olivier.benz@b-data.ch>
Date: Wed, 19 Jun 2024 16:55:33 +0200
Subject: [PATCH] Update HLS to v2.9.0.0

---
 .devcontainer/VERSION_MATRIX.md          | 10 ++---
 .devcontainer/ghc-9.10/devcontainer.json |  1 +
 .devcontainer/ghc-9.8/devcontainer.json  |  2 +-
 .gitlab-ci.yml                           |  6 +--
 packages/hls/2.9.0.0.Dockerfile          | 50 ++++++++++++++++++++++++
 5 files changed, 60 insertions(+), 9 deletions(-)
 create mode 100644 packages/hls/2.9.0.0.Dockerfile

diff --git a/.devcontainer/VERSION_MATRIX.md b/.devcontainer/VERSION_MATRIX.md
index 3a5b121..c58adf1 100644
--- a/.devcontainer/VERSION_MATRIX.md
+++ b/.devcontainer/VERSION_MATRIX.md
@@ -2,11 +2,11 @@
 
 ## Current
 
-| GHC                           | Cabal[^1] | Stack[^1] | HLS                           |
-|:------------------------------|:----------|:----------|:----------------------------- |
-| latest<br>9.10.1<br>9.10<br>9 | 3.11.0.0  | ≥ 2.13.1  | n/a                           |
-| 9.8.2<br>9.8                  | 3.10.3.0  | ≥ 2.13.1  | 2.8.0.0<br>2.7.0.0<br>2.6.0.0 |
-| 9.6.5<br>9.6                  | 3.10.3.0  | ≥ 2.13.1  | 2.8.0.0<br>2.7.0.0            |
+| GHC                           | Cabal[^1] | Stack[^1] | HLS                                      |
+|:------------------------------|:----------|:----------|:---------------------------------------- |
+| latest<br>9.10.1<br>9.10<br>9 | 3.11.0.0  | ≥ 2.13.1  | latest<br>2.9.0.0                        |
+| 9.8.2<br>9.8                  | 3.10.3.0  | ≥ 2.13.1  | 2.9.0.0<br>2.8.0.0<br>2.7.0.0<br>2.6.0.0 |
+| 9.6.5<br>9.6                  | 3.10.3.0  | ≥ 2.13.1  | 2.9.0.0<br>2.8.0.0<br>2.7.0.0            |
 
 [^1]: built-in version; see [GHC musl > Version Matrix](../VERSION_MATRIX.md)
 
diff --git a/.devcontainer/ghc-9.10/devcontainer.json b/.devcontainer/ghc-9.10/devcontainer.json
index c0e15c8..77042a0 100644
--- a/.devcontainer/ghc-9.10/devcontainer.json
+++ b/.devcontainer/ghc-9.10/devcontainer.json
@@ -5,6 +5,7 @@
     "context": "..",
     "args": {
       "GHC_VERSION": "9.10",
+      "HLS_VERSION": "2.9.0.0",
       "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 70cf528..166f7d5 100644
--- a/.devcontainer/ghc-9.8/devcontainer.json
+++ b/.devcontainer/ghc-9.8/devcontainer.json
@@ -5,7 +5,7 @@
     "context": "..",
     "args": {
       "GHC_VERSION": "9.8",
-      "HLS_VERSION": "2.8.0.0",
+      "HLS_VERSION": "2.9.0.0",
       "USE_ZSH_FOR_ROOT": "unset-to-use-ash",
       "SET_LANG": "C.UTF-8",
       "SET_TZ": ""
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 9c4108c..c4e42a0 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -3,9 +3,9 @@
     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: "false"
+    HLS_VERSION: "2.9.0.0"
+    BUILD_GHC: "false"
+    BUILD_HLS: "true"
     TAG_VERSION_MAJ_MIN: "false"
     TAG_VERSION_MAJ: "false"
 
diff --git a/packages/hls/2.9.0.0.Dockerfile b/packages/hls/2.9.0.0.Dockerfile
new file mode 100644
index 0000000..571cad3
--- /dev/null
+++ b/packages/hls/2.9.0.0.Dockerfile
@@ -0,0 +1,50 @@
+ARG GHC_VERSION
+ARG HLS_VERSION=2.9.0.0
+
+FROM glcr.b-data.ch/ghc/ghc-musl:${GHC_VERSION} as builder
+
+ARG HLS_VERSION
+
+RUN apk add --no-cache patchelf findutils \
+  && cd /tmp \
+  && curl -sSL "https://github.com/haskell/haskell-language-server/archive/refs/tags/$HLS_VERSION.tar.gz" \
+    -o "haskell-language-server-$HLS_VERSION.tar.gz" \
+  && tar -xzf "haskell-language-server-$HLS_VERSION.tar.gz" \
+  && cd "haskell-language-server-$HLS_VERSION" \
+  && . .github/scripts/env.sh \
+  && . .github/scripts/common.sh \
+  && sed -i.bak -e '/DELETE MARKER FOR CI/,/END DELETE/d' cabal.project \
+  && GHCS="$GHC_VERSION" \
+  && export GHCS \
+  && ARTIFACT="$(uname -m)-linux-alpine" \
+  && export ARTIFACT \
+  && cabal update \
+  && emake hls-ghc \
+  && CABAL_VERSION_NUMERIC="$(cabal --numeric-version)" \
+  && if dpkg --compare-versions "${CABAL_VERSION_NUMERIC%.*.*}" ge "3.11"; then \
+    sed -i 's|"$(STORE_DIR)/ghc-$(GHC_VERSION)"|"$(STORE_DIR)/ghc-$(GHC_VERSION)-inplace"|g' \
+      GNUmakefile; \
+  fi \
+  && emake bindist \
+  && strip "out/bindist/$ARTIFACT/haskell-language-server-$HLS_VERSION/lib/$GHC_VERSION"/*.so \
+  && emake bindist-tar
+
+FROM alpine:3.20 as hls
+
+ARG HLS_VERSION
+
+COPY --from=builder /tmp/haskell-language-server-"$HLS_VERSION"/out/haskell-language-server-*-linux-alpine.tar.xz /tmp/
+
+RUN apk add --no-cache build-base \
+  && cd /tmp \
+  && tar -xJf haskell-language-server-"$HLS_VERSION"-*-linux-alpine.tar.xz \
+  && cd haskell-language-server-"$HLS_VERSION" \
+  && make install
+
+FROM scratch
+
+ARG HLS_VERSION
+
+ENV HLS_VERSION=${HLS_VERSION}
+
+COPY --from=hls /usr/local /usr/local
-- 
GitLab