@@ -4,20 +4,70 @@ set -Eeuo pipefail
4
4
5
5
source " $CI_PROJECT_DIR /.gitlab/common.sh"
6
6
7
- # # Figure out how to get the Haskell toolchain.
8
-
9
- # For backport, the centos image no longer has the right GHC version, so use
10
- # ghcup.
11
- if [[ -f /etc/os-release && " $( grep ^ID /etc/os-release) " =~ " centos" ]]; then
12
- . " $CI_PROJECT_DIR /.gitlab/ghcup.sh"
13
- # All the other ones are fine.
14
- elif [[ " $( uname) " == " Linux" ]]; then
15
- export PATH=" /opt/ghc/${GHC_VERSION} /bin:${PATH} "
16
- # Not all runners use ci-images, so ghcup is used.
7
+ # Required arguments to the script
8
+ : " ${GHC_VERSION:? Need to set GHC_VERSION} "
9
+ : " ${CABAL_INSTALL_VERSION:? Need to set CABAL_INSTALL_VERSION} "
10
+
11
+ # If GHC is set, extract its directory and add it to PATH
12
+ # The linux images set the GHC variable to specify the location of the GHC installation.
13
+ if [[ -n " ${GHC:- } " ]]; then
14
+ echo " GHC variable is set to: $GHC "
15
+ export PATH=" $( dirname " $GHC " ) :$PATH "
16
+ else
17
+ GHC=" ghc"
18
+ fi
19
+
20
+ echo " Checking toolchain versions..."
21
+
22
+ # GHC check
23
+ ghc_version_ok=false
24
+ if command -v ghc & > /dev/null; then
25
+ current_ghc_version=$( ghc --numeric-version)
26
+ if [[ " $current_ghc_version " == " $GHC_VERSION " ]]; then
27
+ ghc_version_ok=true
28
+ else
29
+ echo " Wrong GHC version: found $current_ghc_version , expected $GHC_VERSION "
30
+ fi
17
31
else
18
- . " $CI_PROJECT_DIR /.gitlab/ghcup.sh "
32
+ echo " GHC executable ' $GHC ' not found on PATH "
19
33
fi
20
34
35
+ # cabal check
36
+ cabal_version_ok=false
37
+ if command -v cabal & > /dev/null; then
38
+ current_cabal_version=$( cabal --numeric-version)
39
+ if [[ " $current_cabal_version " == " $CABAL_INSTALL_VERSION " ]]; then
40
+ cabal_version_ok=true
41
+ else
42
+ echo " Wrong cabal version: found $current_cabal_version , expected $CABAL_INSTALL_VERSION "
43
+ fi
44
+ else
45
+ echo " cabal not found on PATH"
46
+ fi
47
+
48
+ # If either is wrong, install via ghcup
49
+ if ! $ghc_version_ok || ! $cabal_version_ok ; then
50
+ echo " Installing correct GHC and/or cabal via ghcup..."
51
+ . " $CI_PROJECT_DIR /.gitlab/ghcup.sh"
52
+ fi
53
+
54
+ # Final verification (ghc and cabal must now be on PATH)
55
+ echo " Verifying installed versions..."
56
+
57
+ actual_ghc_version=$( ghc --numeric-version)
58
+ actual_cabal_version=$( cabal --numeric-version)
59
+
60
+ if [[ " $actual_ghc_version " != " $GHC_VERSION " ]]; then
61
+ fail " Incorrect GHC version (actual: $actual_ghc_version , expected: $GHC_VERSION )"
62
+ fi
63
+
64
+ if [[ " $actual_cabal_version " != " $CABAL_INSTALL_VERSION " ]]; then
65
+ fail " Incorrect cabal version (actual: $actual_cabal_version , expected: $CABAL_INSTALL_VERSION )"
66
+ fi
67
+
68
+ echo " Using GHC version: $actual_ghc_version "
69
+ echo " Using cabal-install version: $actual_cabal_version "
70
+
21
71
export CABAL_DIR=" $CI_PROJECT_DIR /cabal"
22
72
23
73
case " $( uname) " in
0 commit comments