From f9fae5812a5f7b915d86172f82e07ea6b855b06b Mon Sep 17 00:00:00 2001 From: Oleg Grenrus Date: Thu, 3 Aug 2023 14:42:40 +0300 Subject: [PATCH] Resolve #665: ghc-head works with GHA --- .github/workflows/haskell-ci.yml | 24 +++++++++++++++++++++++- cabal.haskell-ci | 2 +- haskell-ci.cabal | 2 +- src/HaskellCI/Compiler.hs | 2 +- src/HaskellCI/Ghcup.hs | 2 +- src/HaskellCI/GitHub.hs | 18 +++++++++--------- 6 files changed, 36 insertions(+), 14 deletions(-) diff --git a/.github/workflows/haskell-ci.yml b/.github/workflows/haskell-ci.yml index 368facba..931c84fa 100644 --- a/.github/workflows/haskell-ci.yml +++ b/.github/workflows/haskell-ci.yml @@ -70,6 +70,11 @@ jobs: compilerVersion: 8.2.2 setup-method: ghcup allow-failure: false + - compiler: ghc-head + compilerKind: ghc + compilerVersion: latest-nightly + setup-method: ghcup + allow-failure: true fail-fast: false steps: - name: apt @@ -79,6 +84,8 @@ jobs: mkdir -p "$HOME/.ghcup/bin" curl -sL https://downloads.haskell.org/ghcup/0.1.19.2/x86_64-linux-ghcup-0.1.19.2 > "$HOME/.ghcup/bin/ghcup" chmod a+x "$HOME/.ghcup/bin/ghcup" + "$HOME/.ghcup/bin/ghcup" config add-release-channel https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-prereleases-0.0.7.yaml; + "$HOME/.ghcup/bin/ghcup" config add-release-channel https://ghc.gitlab.haskell.org/ghcup-metadata/ghcup-nightlies-0.0.7.yaml; "$HOME/.ghcup/bin/ghcup" install ghc "$HCVER" || (cat "$HOME"/.ghcup/logs/*.* && false) "$HOME/.ghcup/bin/ghcup" install cabal 3.10.1.0 || (cat "$HOME"/.ghcup/logs/*.* && false) env: @@ -101,7 +108,7 @@ jobs: echo "HCNUMVER=$HCNUMVER" >> "$GITHUB_ENV" echo "ARG_TESTS=--enable-tests" >> "$GITHUB_ENV" echo "ARG_BENCH=--enable-benchmarks" >> "$GITHUB_ENV" - echo "HEADHACKAGE=false" >> "$GITHUB_ENV" + if [ $((HCNUMVER > 90405)) -ne 0 ] ; then echo "HEADHACKAGE=true" >> "$GITHUB_ENV" ; else echo "HEADHACKAGE=false" >> "$GITHUB_ENV" ; fi echo "ARG_COMPILER=--$HCKIND --with-compiler=$HC" >> "$GITHUB_ENV" echo "GHCJSARITH=0" >> "$GITHUB_ENV" env: @@ -130,6 +137,18 @@ jobs: repository hackage.haskell.org url: http://hackage.haskell.org/ EOF + if $HEADHACKAGE; then + cat >> $CABAL_CONFIG <> $CABAL_CONFIG <> cabal.project + fi $HCPKG list --simple-output --names-only | perl -ne 'for (split /\s+/) { print "constraints: $_ installed\n" unless /^(Cabal|Cabal-syntax|cabal-install-parsers|haskell-ci|parsec)$/; }' >> cabal.project.local cat cabal.project cat cabal.project.local diff --git a/cabal.haskell-ci b/cabal.haskell-ci index 7bbf52db..9316aa12 100644 --- a/cabal.haskell-ci +++ b/cabal.haskell-ci @@ -15,7 +15,7 @@ jobs: 2:2 -- linux-jobs: >=8.10 -- Add GHC head job -ghc-head: False +ghc-head: True -- travis Caching -- cache: True diff --git a/haskell-ci.cabal b/haskell-ci.cabal index ddd75259..24bcb49a 100644 --- a/haskell-ci.cabal +++ b/haskell-ci.cabal @@ -1,6 +1,6 @@ cabal-version: 2.2 name: haskell-ci -version: 0.16.6 +version: 0.17.20230803 synopsis: Cabal package script generator for Travis-CI description: Script generator (@haskell-ci@) for diff --git a/src/HaskellCI/Compiler.hs b/src/HaskellCI/Compiler.hs index c93fa9ad..87ba0f76 100644 --- a/src/HaskellCI/Compiler.hs +++ b/src/HaskellCI/Compiler.hs @@ -69,7 +69,7 @@ compilerKind (GHC _) = "ghc" compilerKind (GHCJS _) = "ghcjs" compilerVersion :: CompilerVersion -> String -compilerVersion GHCHead = "head" +compilerVersion GHCHead = "latest-nightly" -- https://ghc.gitlab.haskell.org/ghcup-metadata/ghcup-nightlies-0.0.7.yaml compilerVersion (GHC v) = C.prettyShow v compilerVersion (GHCJS v) = C.prettyShow v diff --git a/src/HaskellCI/Ghcup.hs b/src/HaskellCI/Ghcup.hs index 13ef0945..700079aa 100644 --- a/src/HaskellCI/Ghcup.hs +++ b/src/HaskellCI/Ghcup.hs @@ -5,4 +5,4 @@ import HaskellCI.Prelude import qualified Distribution.Version as C defaultGhcupVersion :: Version -defaultGhcupVersion = C.mkVersion [0,1,19,2] +defaultGhcupVersion = C.mkVersion [0,1,19,5] diff --git a/src/HaskellCI/GitHub.hs b/src/HaskellCI/GitHub.hs index 7445dead..31eb06ba 100644 --- a/src/HaskellCI/GitHub.hs +++ b/src/HaskellCI/GitHub.hs @@ -155,9 +155,10 @@ makeGitHub _argv config@Config {..} gitconfig prj jobs@JobVersions {..} = do sh $ "chmod a+x \"$HOME/.ghcup/bin/ghcup\"" -- if any job uses prereleases, add release channel unconditionally. (HEADHACKAGE variable is set later) - when (anyJobUsesHeadHackage || previewCabal cfgCabalInstallVersion) $ + when (anyJobUsesHeadHackage || previewCabal cfgCabalInstallVersion) $ do sh "\"$HOME/.ghcup/bin/ghcup\" config add-release-channel https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-prereleases-0.0.7.yaml;" - + sh "\"$HOME/.ghcup/bin/ghcup\" config add-release-channel https://ghc.gitlab.haskell.org/ghcup-metadata/ghcup-nightlies-0.0.7.yaml;" + installGhcupCabal :: ShM () installGhcupCabal = sh $ "\"$HOME/.ghcup/bin/ghcup\" install cabal " ++ cabalFullVer ++ " || (cat \"$HOME\"/.ghcup/logs/*.* && false)" @@ -219,11 +220,12 @@ makeGitHub _argv config@Config {..} gitconfig prj jobs@JobVersions {..} = do else tell_env "CABAL" $ "/opt/cabal/" ++ cabalVer ++ "/bin/cabal -vnormal+nowrap" ghcup <- runSh $ do - let hc = "$HOME/.ghcup/bin/$HCKIND-$HCVER" - sh $ "HC=" ++ hc -- HC is an absolute path. - tell_env "HC" "$HC" - tell_env "HCPKG" $ "$HOME/.ghcup/bin/$HCKIND-pkg-$HCVER" - tell_env "HADDOCK" "$HOME/.ghcup/bin/haddock-$HCVER" + sh $ "HC=$(\"$HOME/.ghcup/bin/ghcup\" whereis ghc \"$HCVER\")" + sh $ "HCPKG=$(echo \"$HC\" | sed 's#ghc$#ghc-pkg#')" + sh $ "HADDOCK=$(echo \"$HC\" | sed 's#ghc$#haddock#')" + tell_env "HC" "$HC" + tell_env "HCPKG" "$HCPKG" + tell_env "HADDOCK" "$HADDOCK" ghcupCabalPath setup hvrppa ghcup @@ -642,8 +644,6 @@ makeGitHub _argv config@Config {..} gitconfig prj jobs@JobVersions {..} = do , ghmeSetupMethod = if isGHCUP compiler then GHCUP else HVRPPA } | compiler <- reverse $ toList linuxVersions - , compiler /= GHCHead -- TODO: Make this work - -- https://github.com/haskell-CI/haskell-ci/issues/458 ] }) unless (null cfgIrcChannels) $