Compare commits
No commits in common. "master" and "issue-380" have entirely different histories.
@ -1,11 +0,0 @@
|
|||||||
root = true
|
|
||||||
|
|
||||||
[*]
|
|
||||||
end_of_line = LF
|
|
||||||
trim_trailing_whitespace = true
|
|
||||||
insert_final_newline = true
|
|
||||||
|
|
||||||
[*.hs]
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 2
|
|
||||||
max_line_length = 80
|
|
4946
.github/ghc-8.10.3-linux.alpine.files
vendored
4946
.github/ghc-8.10.3-linux.alpine.files
vendored
File diff suppressed because it is too large
Load Diff
31
.github/ghcup-run.files.alpine
vendored
31
.github/ghcup-run.files.alpine
vendored
@ -1,31 +0,0 @@
|
|||||||
.
|
|
||||||
./cabal
|
|
||||||
./ghc
|
|
||||||
./ghc-8.10.7
|
|
||||||
./ghc-pkg
|
|
||||||
./ghc-pkg-8.10.7
|
|
||||||
./ghci
|
|
||||||
./ghci-8.10.7
|
|
||||||
./haddock
|
|
||||||
./haddock-8.10.7
|
|
||||||
./haskell-language-server-8.10.7
|
|
||||||
./haskell-language-server-8.10.7~1.6.1.0
|
|
||||||
./haskell-language-server-8.8.4
|
|
||||||
./haskell-language-server-8.8.4~1.6.1.0
|
|
||||||
./haskell-language-server-9.0.2
|
|
||||||
./haskell-language-server-9.0.2~1.6.1.0
|
|
||||||
./haskell-language-server-9.2.1
|
|
||||||
./haskell-language-server-9.2.1~1.6.1.0
|
|
||||||
./haskell-language-server-wrapper
|
|
||||||
./haskell-language-server-wrapper-1.6.1.0
|
|
||||||
./hp2ps
|
|
||||||
./hp2ps-8.10.7
|
|
||||||
./hpc
|
|
||||||
./hpc-8.10.7
|
|
||||||
./hsc2hs
|
|
||||||
./hsc2hs-8.10.7
|
|
||||||
./runghc
|
|
||||||
./runghc-8.10.7
|
|
||||||
./runhaskell
|
|
||||||
./runhaskell-8.10.7
|
|
||||||
./stack
|
|
18
.github/scripts/bootstrap.sh
vendored
18
.github/scripts/bootstrap.sh
vendored
@ -1,18 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -eux
|
|
||||||
|
|
||||||
. .github/scripts/env.sh
|
|
||||||
|
|
||||||
mkdir -p "$CI_PROJECT_DIR"/.local/bin
|
|
||||||
|
|
||||||
git describe --always
|
|
||||||
|
|
||||||
### build
|
|
||||||
|
|
||||||
./scripts/bootstrap/bootstrap-haskell
|
|
||||||
|
|
||||||
[ "$(ghc --numeric-version)" = "${BOOTSTRAP_HASKELL_GHC_VERSION}" ]
|
|
||||||
# https://github.com/actions/runner-images/issues/7061
|
|
||||||
[ "$(ghcup config | grep --color=never meta-mode)" = "meta-mode: Lax" ]
|
|
||||||
|
|
27
.github/scripts/brew.sh
vendored
27
.github/scripts/brew.sh
vendored
@ -1,27 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -eux
|
|
||||||
|
|
||||||
. .github/scripts/env.sh
|
|
||||||
|
|
||||||
if [ -e "$HOME/.brew" ] ; then
|
|
||||||
(
|
|
||||||
cd "$HOME/.brew"
|
|
||||||
git fetch --depth 1
|
|
||||||
git reset --hard origin/master
|
|
||||||
)
|
|
||||||
else
|
|
||||||
git clone --depth=1 https://github.com/Homebrew/brew "$HOME/.brew"
|
|
||||||
fi
|
|
||||||
export PATH="$HOME/.brew/bin:$HOME/.brew/sbin:$PATH"
|
|
||||||
|
|
||||||
mkdir -p $CI_PROJECT_DIR/.brew_cache
|
|
||||||
export HOMEBREW_CACHE=$CI_PROJECT_DIR/.brew_cache
|
|
||||||
mkdir -p $CI_PROJECT_DIR/.brew_logs
|
|
||||||
export HOMEBREW_LOGS=$CI_PROJECT_DIR/.brew_logs
|
|
||||||
mkdir -p /private/tmp/.brew_tmp
|
|
||||||
export HOMEBREW_TEMP=/private/tmp/.brew_tmp
|
|
||||||
|
|
||||||
brew update
|
|
||||||
brew install ${1+"$@"}
|
|
||||||
|
|
37
.github/scripts/build.sh
vendored
37
.github/scripts/build.sh
vendored
@ -1,37 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -eux
|
|
||||||
|
|
||||||
. .github/scripts/common.sh
|
|
||||||
|
|
||||||
git_describe
|
|
||||||
|
|
||||||
# ensure ghcup
|
|
||||||
install_ghcup
|
|
||||||
|
|
||||||
# ensure cabal-cache
|
|
||||||
download_cabal_cache "$HOME/.local/bin/cabal-cache"
|
|
||||||
|
|
||||||
# install toolchain (if necessary)
|
|
||||||
ghcup -v install ghc --set --force "$GHC_VER"
|
|
||||||
ghcup -v install cabal --force "$CABAL_VER"
|
|
||||||
ghc --version
|
|
||||||
cabal --version
|
|
||||||
GHC="ghc-${GHC_VER}"
|
|
||||||
|
|
||||||
# build
|
|
||||||
ecabal update
|
|
||||||
build_with_cache --project-file=cabal.project.release -w "${GHC}" --enable-tests
|
|
||||||
|
|
||||||
# set up artifacts
|
|
||||||
mkdir -p out
|
|
||||||
binary=$(cabal --project-file=cabal.project.release list-bin ghcup)
|
|
||||||
binary_test=$(cabal --project-file=cabal.project.release list-bin ghcup-test)
|
|
||||||
binary_opttest=$(cabal --project-file=cabal.project.release list-bin ghcup-optparse-test)
|
|
||||||
ver=$("${binary}" --numeric-version)
|
|
||||||
strip_binary "${binary}"
|
|
||||||
cp "${binary}" "out/${ARTIFACT}-${ver}${ext}"
|
|
||||||
cp "${binary_test}" "out/test-${ARTIFACT}-${ver}${ext}"
|
|
||||||
cp "${binary_opttest}" "out/test-optparse-${ARTIFACT}-${ver}${ext}"
|
|
||||||
cp ./dist-newstyle/cache/plan.json "out/${ARTIFACT}.plan.json"
|
|
||||||
|
|
13
.github/scripts/cabal-cache.sh
vendored
13
.github/scripts/cabal-cache.sh
vendored
@ -1,13 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
case "$(uname -s)" in
|
|
||||||
MSYS_*|MINGW*)
|
|
||||||
ext=".exe"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
ext=""
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
echo "cabal-cache disabled (CABAL_CACHE_DISABLE set)"
|
|
||||||
|
|
174
.github/scripts/common.sh
vendored
174
.github/scripts/common.sh
vendored
@ -1,174 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
. .github/scripts/env.sh
|
|
||||||
|
|
||||||
ecabal() {
|
|
||||||
cabal "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
nonfatal() {
|
|
||||||
"$@" || "$* failed"
|
|
||||||
}
|
|
||||||
|
|
||||||
sync_from() {
|
|
||||||
if [ "${RUNNER_OS}" != "Windows" ] ; then
|
|
||||||
cabal_store_path="$(dirname "$(cabal help user-config | tail -n 1 | xargs)")/store"
|
|
||||||
fi
|
|
||||||
|
|
||||||
cabal-cache.sh sync-from-archive \
|
|
||||||
--host-name-override=${S3_HOST} \
|
|
||||||
--host-port-override=443 \
|
|
||||||
--host-ssl-override=True \
|
|
||||||
--region us-west-2 \
|
|
||||||
$([ "${RUNNER_OS}" != "Windows" ] && echo --store-path="$cabal_store_path") \
|
|
||||||
--archive-uri "s3://ghcup-hs/${RUNNER_OS}-${ARCH}-${DISTRO}"
|
|
||||||
}
|
|
||||||
|
|
||||||
sync_to() {
|
|
||||||
if [ "${RUNNER_OS}" != "Windows" ] ; then
|
|
||||||
cabal_store_path="$(dirname "$(cabal help user-config | tail -n 1 | xargs)")/store"
|
|
||||||
fi
|
|
||||||
|
|
||||||
cabal-cache.sh sync-to-archive \
|
|
||||||
--host-name-override=${S3_HOST} \
|
|
||||||
--host-port-override=443 \
|
|
||||||
--host-ssl-override=True \
|
|
||||||
--region us-west-2 \
|
|
||||||
$([ "${RUNNER_OS}" != "Windows" ] && echo --store-path="$cabal_store_path") \
|
|
||||||
--archive-uri "s3://ghcup-hs/${RUNNER_OS}-${ARCH}-${DISTRO}"
|
|
||||||
}
|
|
||||||
|
|
||||||
raw_eghcup() {
|
|
||||||
"$GHCUP_BIN/ghcup${ext}" -v -c "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
eghcup() {
|
|
||||||
if [ "${OS}" = "Windows" ] ; then
|
|
||||||
"$GHCUP_BIN/ghcup${ext}" -c -s "file:${GITHUB_WORKSPACE//\\//}/data/metadata/ghcup-${JSON_VERSION}.yaml" "$@"
|
|
||||||
else
|
|
||||||
"$GHCUP_BIN/ghcup${ext}" -c -s "file://$CI_PROJECT_DIR/data/metadata/ghcup-${JSON_VERSION}.yaml" "$@"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
sha_sum() {
|
|
||||||
if [ "${OS}" = "FreeBSD" ] ; then
|
|
||||||
sha256 "$@"
|
|
||||||
else
|
|
||||||
sha256sum "$@"
|
|
||||||
fi
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
git_describe() {
|
|
||||||
git config --global --get-all safe.directory | grep '^\*$' || git config --global --add safe.directory "*"
|
|
||||||
git describe --always
|
|
||||||
}
|
|
||||||
|
|
||||||
download_cabal_cache() {
|
|
||||||
(
|
|
||||||
set -e
|
|
||||||
mkdir -p "$HOME/.local/bin"
|
|
||||||
dest="$HOME/.local/bin/cabal-cache"
|
|
||||||
url=""
|
|
||||||
exe=""
|
|
||||||
cd /tmp
|
|
||||||
case "${RUNNER_OS}" in
|
|
||||||
"Linux")
|
|
||||||
case "${ARCH}" in
|
|
||||||
"32") url=https://downloads.haskell.org/~ghcup/unofficial-bindists/cabal-cache/experimental5/i386-linux-cabal-cache
|
|
||||||
;;
|
|
||||||
"64") url=https://downloads.haskell.org/~ghcup/unofficial-bindists/cabal-cache/experimental5/x86_64-linux-cabal-cache
|
|
||||||
;;
|
|
||||||
"ARM64") url=https://downloads.haskell.org/~ghcup/unofficial-bindists/cabal-cache/experimental5/aarch64-linux-cabal-cache
|
|
||||||
;;
|
|
||||||
"ARM") url=https://downloads.haskell.org/~ghcup/unofficial-bindists/cabal-cache/experimental5/armv7-linux-cabal-cache
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
"FreeBSD")
|
|
||||||
url=https://downloads.haskell.org/~ghcup/unofficial-bindists/cabal-cache/experimental5/x86_64-portbld-freebsd-cabal-cache
|
|
||||||
;;
|
|
||||||
"Windows")
|
|
||||||
exe=".exe"
|
|
||||||
url=https://downloads.haskell.org/~ghcup/unofficial-bindists/cabal-cache/experimental5/x86_64-mingw64-cabal-cache
|
|
||||||
;;
|
|
||||||
"macOS")
|
|
||||||
case "${ARCH}" in
|
|
||||||
"ARM64") url=https://downloads.haskell.org/~ghcup/unofficial-bindists/cabal-cache/experimental5/aarch64-apple-darwin-cabal-cache
|
|
||||||
;;
|
|
||||||
"64") url=https://downloads.haskell.org/~ghcup/unofficial-bindists/cabal-cache/experimental5/x86_64-apple-darwin-cabal-cache
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
if [ -n "${url}" ] ; then
|
|
||||||
case "${url##*.}" in
|
|
||||||
"gz")
|
|
||||||
curl -L -o - "${url}" | gunzip > cabal-cache${exe}
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
curl -o cabal-cache${exe} -L "${url}"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
sha_sum cabal-cache${exe}
|
|
||||||
mv "cabal-cache${exe}" "${dest}${exe}"
|
|
||||||
chmod +x "${dest}${exe}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# install shell wrapper
|
|
||||||
cp "${CI_PROJECT_DIR}"/.github/scripts/cabal-cache.sh "$HOME"/.local/bin/
|
|
||||||
chmod +x "$HOME"/.local/bin/cabal-cache.sh
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
build_with_cache() {
|
|
||||||
ecabal configure "$@"
|
|
||||||
ecabal build --dependencies-only "$@" --dry-run
|
|
||||||
sync_from
|
|
||||||
ecabal build --dependencies-only "$@" || sync_to
|
|
||||||
sync_to
|
|
||||||
ecabal build "$@"
|
|
||||||
sync_to
|
|
||||||
}
|
|
||||||
|
|
||||||
install_ghcup() {
|
|
||||||
case "${RUNNER_OS}" in
|
|
||||||
"Linux")
|
|
||||||
case "${ARCH}" in
|
|
||||||
"ARM"*)
|
|
||||||
if command -v ghcup ; then
|
|
||||||
mkdir -p "$GHCUP_BIN"
|
|
||||||
cp "$(command -v ghcup)" "$GHCUP_BIN/ghcup${ext}"
|
|
||||||
else
|
|
||||||
install_ghcup_curl_sh
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
*) install_ghcup_curl_sh
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
*) install_ghcup_curl_sh
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
install_ghcup_curl_sh() {
|
|
||||||
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | BOOTSTRAP_HASKELL_NONINTERACTIVE=1 BOOTSTRAP_HASKELL_MINIMAL=1 BOOTSTRAP_HASKELL_INSTALL_NO_STACK=yes sh
|
|
||||||
}
|
|
||||||
|
|
||||||
strip_binary() {
|
|
||||||
(
|
|
||||||
set -e
|
|
||||||
local binary=$1
|
|
||||||
case "$(uname -s)" in
|
|
||||||
"Darwin"|"darwin")
|
|
||||||
;;
|
|
||||||
MSYS_*|MINGW*)
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
strip -s "${binary}"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
)
|
|
||||||
}
|
|
74
.github/scripts/cross.sh
vendored
74
.github/scripts/cross.sh
vendored
@ -1,74 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -ex
|
|
||||||
|
|
||||||
. .github/scripts/common.sh
|
|
||||||
|
|
||||||
run() {
|
|
||||||
"$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ "${OS}" = "Windows" ] ; then
|
|
||||||
GHCUP_DIR="${GHCUP_INSTALL_BASE_PREFIX}"/ghcup
|
|
||||||
else
|
|
||||||
GHCUP_DIR="${GHCUP_INSTALL_BASE_PREFIX}"/.ghcup
|
|
||||||
fi
|
|
||||||
|
|
||||||
git_describe
|
|
||||||
|
|
||||||
rm -rf "${GHCUP_DIR}"
|
|
||||||
mkdir -p "${GHCUP_BIN}"
|
|
||||||
|
|
||||||
cp "out/${ARTIFACT}"-* "$GHCUP_BIN/ghcup${ext}"
|
|
||||||
cp "out/test-${ARTIFACT}"-* "ghcup-test${ext}"
|
|
||||||
chmod +x "$GHCUP_BIN/ghcup${ext}"
|
|
||||||
chmod +x "ghcup-test${ext}"
|
|
||||||
|
|
||||||
"$GHCUP_BIN/ghcup${ext}" --version
|
|
||||||
eghcup --version
|
|
||||||
sha_sum "$GHCUP_BIN/ghcup${ext}"
|
|
||||||
sha_sum "$(raw_eghcup --offline whereis ghcup)"
|
|
||||||
|
|
||||||
|
|
||||||
### cross build
|
|
||||||
|
|
||||||
eghcup --numeric-version
|
|
||||||
|
|
||||||
eghcup install ghc "${GHC_VER}"
|
|
||||||
eghcup set ghc "${GHC_VER}"
|
|
||||||
eghcup install cabal "${CABAL_VER}"
|
|
||||||
|
|
||||||
cabal --version
|
|
||||||
|
|
||||||
eghcup debug-info
|
|
||||||
|
|
||||||
ecabal update
|
|
||||||
|
|
||||||
"${WRAPPER}" "$GHCUP_BIN/ghcup${ext}" -c -s "file://$CI_PROJECT_DIR/data/metadata/ghcup-${JSON_VERSION}.yaml" -v \
|
|
||||||
compile ghc \
|
|
||||||
$(if [ -n "${HADRIAN_FLAVOUR}" ] ; then printf "%s" "--flavour=${HADRIAN_FLAVOUR}" ; else true ; fi) \
|
|
||||||
-j "$(nproc)" \
|
|
||||||
-v "${GHC_TARGET_VERSION}" \
|
|
||||||
-b "${GHC_VER}" \
|
|
||||||
-x "${CROSS}" \
|
|
||||||
-- ${BUILD_CONF_ARGS}
|
|
||||||
eghcup set ghc "${CROSS}-${GHC_TARGET_VERSION}"
|
|
||||||
|
|
||||||
[ "$($(eghcup whereis ghc "${CROSS}-${GHC_TARGET_VERSION}") --numeric-version)" = "${GHC_TARGET_VERSION}" ]
|
|
||||||
|
|
||||||
# test that doing fishy symlinks into GHCup dir doesn't cause weird stuff on 'ghcup nuke'
|
|
||||||
mkdir no_nuke/
|
|
||||||
mkdir no_nuke/bar
|
|
||||||
echo 'foo' > no_nuke/file
|
|
||||||
echo 'bar' > no_nuke/bar/file
|
|
||||||
ln -s "$CI_PROJECT_DIR"/no_nuke/ "${GHCUP_DIR}"/cache/no_nuke
|
|
||||||
ln -s "$CI_PROJECT_DIR"/no_nuke/ "${GHCUP_DIR}"/logs/no_nuke
|
|
||||||
|
|
||||||
# nuke
|
|
||||||
eghcup nuke
|
|
||||||
[ ! -e "${GHCUP_DIR}" ]
|
|
||||||
|
|
||||||
# make sure nuke doesn't resolve symlinks
|
|
||||||
[ -e "$CI_PROJECT_DIR"/no_nuke/file ]
|
|
||||||
[ -e "$CI_PROJECT_DIR"/no_nuke/bar/file ]
|
|
||||||
|
|
34
.github/scripts/env.sh
vendored
34
.github/scripts/env.sh
vendored
@ -1,34 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
if [ "${RUNNER_OS}" = "Windows" ] ; then
|
|
||||||
ext=".exe"
|
|
||||||
else
|
|
||||||
ext=''
|
|
||||||
fi
|
|
||||||
|
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
|
||||||
export TZ=Asia/Singapore
|
|
||||||
|
|
||||||
if [ "${RUNNER_OS}" = "freebsd" ] ; then
|
|
||||||
export RUNNER_OS=FreeBSD
|
|
||||||
fi
|
|
||||||
|
|
||||||
export OS="$RUNNER_OS"
|
|
||||||
export PATH="$HOME/.local/bin:$PATH"
|
|
||||||
|
|
||||||
if [ "${RUNNER_OS}" = "Windows" ] ; then
|
|
||||||
# on windows use pwd to get unix style path
|
|
||||||
CI_PROJECT_DIR="$(pwd)"
|
|
||||||
export CI_PROJECT_DIR
|
|
||||||
export GHCUP_INSTALL_BASE_PREFIX="/c"
|
|
||||||
export GHCUP_BIN="$GHCUP_INSTALL_BASE_PREFIX/ghcup/bin"
|
|
||||||
export PATH="$GHCUP_BIN:$PATH"
|
|
||||||
export CABAL_DIR="C:\\Users\\runneradmin\\AppData\\Roaming\\cabal"
|
|
||||||
else
|
|
||||||
export CI_PROJECT_DIR="${GITHUB_WORKSPACE}"
|
|
||||||
export GHCUP_INSTALL_BASE_PREFIX="$CI_PROJECT_DIR"
|
|
||||||
export GHCUP_BIN="$GHCUP_INSTALL_BASE_PREFIX/.ghcup/bin"
|
|
||||||
export PATH="$GHCUP_BIN:$PATH"
|
|
||||||
export CABAL_DIR="$CI_PROJECT_DIR/cabal"
|
|
||||||
export CABAL_CACHE="$CI_PROJECT_DIR/cabal-cache"
|
|
||||||
fi
|
|
72
.github/scripts/hls.sh
vendored
72
.github/scripts/hls.sh
vendored
@ -1,72 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -eux
|
|
||||||
|
|
||||||
. .github/scripts/common.sh
|
|
||||||
|
|
||||||
mkdir -p "$CI_PROJECT_DIR"/.local/bin
|
|
||||||
|
|
||||||
### build
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if [ "${OS}" = "Windows" ] ; then
|
|
||||||
GHCUP_DIR="${GHCUP_INSTALL_BASE_PREFIX}"/ghcup
|
|
||||||
else
|
|
||||||
GHCUP_DIR="${GHCUP_INSTALL_BASE_PREFIX}"/.ghcup
|
|
||||||
fi
|
|
||||||
|
|
||||||
rm -rf "${GHCUP_DIR}"
|
|
||||||
mkdir -p "${GHCUP_BIN}"
|
|
||||||
|
|
||||||
ls -lah out
|
|
||||||
find out
|
|
||||||
cp "out/${ARTIFACT}"-* "$GHCUP_BIN/ghcup${ext}"
|
|
||||||
chmod +x "$GHCUP_BIN/ghcup${ext}"
|
|
||||||
echo "$PATH"
|
|
||||||
|
|
||||||
"$GHCUP_BIN/ghcup${ext}" --version
|
|
||||||
eghcup --version
|
|
||||||
sha_sum "$GHCUP_BIN/ghcup${ext}"
|
|
||||||
sha_sum "$(raw_eghcup --offline whereis ghcup)"
|
|
||||||
|
|
||||||
git_describe
|
|
||||||
|
|
||||||
eghcup install ghc "${GHC_VERSION}"
|
|
||||||
eghcup install cabal "${CABAL_VERSION}"
|
|
||||||
|
|
||||||
ecabal update
|
|
||||||
|
|
||||||
if ! command -v cabal-cache ; then
|
|
||||||
download_cabal_cache "$HOME/.local/bin/cabal-cache"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! cabal-cache version ; then
|
|
||||||
build_cabal_cache "$HOME/.local/bin"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
eghcup debug-info
|
|
||||||
|
|
||||||
(
|
|
||||||
cd /tmp
|
|
||||||
git clone --depth 1 --branch "${HLS_TARGET_VERSION}" \
|
|
||||||
https://github.com/haskell/haskell-language-server.git \
|
|
||||||
"haskell-language-server-${HLS_TARGET_VERSION}"
|
|
||||||
cd "haskell-language-server-${HLS_TARGET_VERSION}/"
|
|
||||||
ecabal configure -w "ghc-${GHC_VERSION}" --disable-profiling --disable-tests --jobs="$(nproc)"
|
|
||||||
ecabal build --dependencies-only -w "ghc-${GHC_VERSION}" --disable-profiling --disable-tests --jobs="$(nproc)" --dry-run
|
|
||||||
sync_from
|
|
||||||
ecabal build --dependencies-only -w "ghc-${GHC_VERSION}" --disable-profiling --disable-tests --jobs="$(nproc)" || sync_to
|
|
||||||
sync_to
|
|
||||||
)
|
|
||||||
|
|
||||||
eghcup -v compile hls -j "$(nproc)" -g "${HLS_TARGET_VERSION}" --ghc "${GHC_VERSION}"
|
|
||||||
|
|
||||||
[ "$($(eghcup whereis hls "${HLS_TARGET_VERSION}") --numeric-version)" = "${HLS_TARGET_VERSION}" ] ||
|
|
||||||
[ "$($(eghcup whereis hls "${HLS_TARGET_VERSION}") --numeric-version | sed 's/.0$//')" = "${HLS_TARGET_VERSION}" ]
|
|
||||||
|
|
||||||
# nuke
|
|
||||||
eghcup nuke
|
|
||||||
[ ! -e "${GHCUP_DIR}" ]
|
|
||||||
|
|
272
.github/scripts/test.sh
vendored
272
.github/scripts/test.sh
vendored
@ -1,272 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -eux
|
|
||||||
|
|
||||||
. .github/scripts/common.sh
|
|
||||||
|
|
||||||
|
|
||||||
if [ "${OS}" = "Windows" ] ; then
|
|
||||||
GHCUP_DIR="${GHCUP_INSTALL_BASE_PREFIX}"/ghcup
|
|
||||||
else
|
|
||||||
GHCUP_DIR="${GHCUP_INSTALL_BASE_PREFIX}"/.ghcup
|
|
||||||
fi
|
|
||||||
|
|
||||||
env
|
|
||||||
git_describe
|
|
||||||
|
|
||||||
rm -rf "${GHCUP_DIR}"
|
|
||||||
mkdir -p "${GHCUP_BIN}"
|
|
||||||
|
|
||||||
cp "out/${ARTIFACT}"-* "$GHCUP_BIN/ghcup${ext}"
|
|
||||||
cp "out/test-${ARTIFACT}"-* "ghcup-test${ext}"
|
|
||||||
cp "out/test-optparse-${ARTIFACT}"-* "ghcup-test-optparse${ext}"
|
|
||||||
chmod +x "$GHCUP_BIN/ghcup${ext}"
|
|
||||||
chmod +x "ghcup-test${ext}"
|
|
||||||
chmod +x "ghcup-test-optparse${ext}"
|
|
||||||
|
|
||||||
"$GHCUP_BIN/ghcup${ext}" --version
|
|
||||||
eghcup --version
|
|
||||||
sha_sum "$GHCUP_BIN/ghcup${ext}"
|
|
||||||
sha_sum "$(raw_eghcup --offline whereis ghcup)"
|
|
||||||
|
|
||||||
### Haskell test suite
|
|
||||||
|
|
||||||
./"ghcup-test${ext}"
|
|
||||||
./"ghcup-test-optparse${ext}"
|
|
||||||
rm "ghcup-test${ext}" "ghcup-test-optparse${ext}"
|
|
||||||
|
|
||||||
### manual cli based testing
|
|
||||||
|
|
||||||
eghcup --numeric-version
|
|
||||||
|
|
||||||
# test PATH on windows wrt msys2
|
|
||||||
# https://github.com/haskell/ghcup-hs/pull/992/checks
|
|
||||||
if [ "${OS}" = "Windows" ] ; then
|
|
||||||
eghcup run -m -- sh -c 'echo $PATH' | sed 's/:/\n/' | grep '^/mingw64/bin$'
|
|
||||||
fi
|
|
||||||
|
|
||||||
eghcup install ghc "${GHC_VER}"
|
|
||||||
eghcup unset ghc "${GHC_VER}"
|
|
||||||
ls -lah "$(eghcup whereis -d ghc "${GHC_VER}")"
|
|
||||||
[ "$($(eghcup whereis ghc "${GHC_VER}") --numeric-version)" = "${GHC_VER}" ]
|
|
||||||
[ "$(eghcup run -q --ghc "${GHC_VER}" -- ghc --numeric-version)" = "${GHC_VER}" ]
|
|
||||||
[ "$(ghcup run -q --ghc "${GHC_VER}" -- ghc -e 'Control.Monad.join (Control.Monad.fmap System.IO.putStr System.Environment.getExecutablePath)')" = "$($(ghcup whereis ghc "${GHC_VER}") -e 'Control.Monad.join (Control.Monad.fmap System.IO.putStr System.Environment.getExecutablePath)')" ]
|
|
||||||
eghcup set ghc "${GHC_VER}"
|
|
||||||
eghcup install cabal "${CABAL_VER}"
|
|
||||||
[ "$($(eghcup whereis cabal "${CABAL_VER}") --numeric-version)" = "${CABAL_VER}" ]
|
|
||||||
eghcup unset cabal
|
|
||||||
"$GHCUP_BIN"/cabal --version && exit 1 || echo yes
|
|
||||||
|
|
||||||
# make sure no cabal is set when running 'ghcup run' to check that PATH propagages properly
|
|
||||||
# https://gitlab.haskell.org/haskell/ghcup-hs/-/issues/375
|
|
||||||
[ "$(eghcup run -q --cabal "${CABAL_VER}" -- cabal --numeric-version)" = "${CABAL_VER}" ]
|
|
||||||
eghcup set cabal "${CABAL_VER}"
|
|
||||||
|
|
||||||
[ "$($(eghcup whereis cabal "${CABAL_VER}") --numeric-version)" = "${CABAL_VER}" ]
|
|
||||||
|
|
||||||
if [ "${OS}" != "FreeBSD" ] ; then
|
|
||||||
if [ "${ARCH}" = "64" ] && [ "${DISTRO}" != "Alpine" ] ; then
|
|
||||||
eghcup run --ghc 8.10.7 --cabal 3.4.1.0 --hls 1.6.1.0 --stack 2.7.3 --install --bindir "$(pwd)/.bin"
|
|
||||||
if [ "${OS}" = "Windows" ] ; then
|
|
||||||
cat "$( cd "$(dirname "$0")" ; pwd -P )/../ghcup-run.files.windows" | sort > expected.txt
|
|
||||||
elif [ "${DISTRO}" = "Alpine" ] ; then
|
|
||||||
cat "$( cd "$(dirname "$0")" ; pwd -P )/../ghcup-run.files.alpine" | sort > expected.txt
|
|
||||||
else
|
|
||||||
cat "$( cd "$(dirname "$0")" ; pwd -P )/../ghcup-run.files" | sort > expected.txt
|
|
||||||
fi
|
|
||||||
(cd ".bin" && find . | sort) > actual.txt
|
|
||||||
diff --strip-trailing-cr -w -u actual.txt expected.txt
|
|
||||||
rm actual.txt expected.txt
|
|
||||||
rm -rf .bin
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
cabal --version
|
|
||||||
|
|
||||||
eghcup debug-info
|
|
||||||
|
|
||||||
# also test etags
|
|
||||||
eghcup list
|
|
||||||
eghcup list -t ghc
|
|
||||||
eghcup list -t cabal
|
|
||||||
|
|
||||||
ghc_ver=$(ghc --numeric-version)
|
|
||||||
ghc --version
|
|
||||||
"ghc-${ghc_ver}" --version
|
|
||||||
if [ "${OS}" != "Windows" ] ; then
|
|
||||||
ghci --version
|
|
||||||
"ghci-${ghc_ver}" --version
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if [ "${OS}" = "macOS" ] && [ "${ARCH}" = "ARM64" ] ; then
|
|
||||||
# missing bindists
|
|
||||||
echo
|
|
||||||
elif [ "${OS}" = "FreeBSD" ] ; then
|
|
||||||
# not enough space
|
|
||||||
echo
|
|
||||||
else
|
|
||||||
# test installing new ghc doesn't mess with currently set GHC
|
|
||||||
# https://gitlab.haskell.org/haskell/ghcup-hs/issues/7
|
|
||||||
if [ "${OS}" = "Linux" ] ; then
|
|
||||||
eghcup --downloader=wget prefetch ghc 8.10.3
|
|
||||||
eghcup --offline install ghc 8.10.3
|
|
||||||
if [ "${ARCH}" = "64" ] ; then
|
|
||||||
if [ "${DISTRO}" = "Alpine" ] ; then
|
|
||||||
(cat "$( cd "$(dirname "$0")" ; pwd -P )/../ghc-8.10.3-linux.alpine.files" | sort) > expected.txt
|
|
||||||
else
|
|
||||||
(cat "$( cd "$(dirname "$0")" ; pwd -P )/../ghc-8.10.3-linux.files" | sort) > expected.txt
|
|
||||||
fi
|
|
||||||
(cd "${GHCUP_DIR}/ghc/8.10.3/" && find . | sort) > actual.txt
|
|
||||||
# ignore docs
|
|
||||||
sed -i '/share\/doc/d' actual.txt
|
|
||||||
sed -i '/share\/doc/d' expected.txt
|
|
||||||
diff --strip-trailing-cr -w -u actual.txt expected.txt
|
|
||||||
rm actual.txt expected.txt
|
|
||||||
fi
|
|
||||||
elif [ "${OS}" = "Windows" ] ; then
|
|
||||||
eghcup prefetch ghc 8.10.3
|
|
||||||
eghcup --offline install ghc 8.10.3
|
|
||||||
(cat "$( cd "$(dirname "$0")" ; pwd -P )/../ghc-8.10.3-windows.files" | sort) > expected.txt
|
|
||||||
(cd "${GHCUP_DIR}/ghc/8.10.3/" && find . | sort) > actual.txt
|
|
||||||
diff --strip-trailing-cr -w -u actual.txt expected.txt
|
|
||||||
rm actual.txt expected.txt
|
|
||||||
else
|
|
||||||
eghcup prefetch ghc 8.10.3
|
|
||||||
eghcup --offline install ghc 8.10.3
|
|
||||||
fi
|
|
||||||
[ "$(ghc --numeric-version)" = "${ghc_ver}" ]
|
|
||||||
eghcup --offline set 8.10.3
|
|
||||||
eghcup set 8.10.3
|
|
||||||
[ "$(ghc --numeric-version)" = "8.10.3" ]
|
|
||||||
eghcup set "${GHC_VER}"
|
|
||||||
[ "$(ghc --numeric-version)" = "${ghc_ver}" ]
|
|
||||||
eghcup unset ghc
|
|
||||||
"$GHCUP_BIN"/ghc --numeric-version && exit 1 || echo yes
|
|
||||||
eghcup set "${GHC_VER}"
|
|
||||||
eghcup --offline rm 8.10.3
|
|
||||||
[ "$(ghc --numeric-version)" = "${ghc_ver}" ]
|
|
||||||
|
|
||||||
|
|
||||||
ls -lah "$GHCUP_BIN"
|
|
||||||
|
|
||||||
if [ "${OS}" = "macOS" ] ; then
|
|
||||||
eghcup install hls
|
|
||||||
$(eghcup whereis hls) --version
|
|
||||||
|
|
||||||
eghcup install stack
|
|
||||||
$(eghcup whereis stack) --version
|
|
||||||
elif [ "${OS}" = "Linux" ] ; then
|
|
||||||
if [ "${ARCH}" = "64" ] && [ "${DISTRO}" != "Alpine" ] ; then
|
|
||||||
eghcup install hls
|
|
||||||
haskell-language-server-wrapper --version
|
|
||||||
eghcup unset hls
|
|
||||||
"$GHCUP_BIN"/haskell-language-server-wrapper --version && exit 1 || echo yes
|
|
||||||
|
|
||||||
eghcup install stack
|
|
||||||
stack --version
|
|
||||||
eghcup unset stack
|
|
||||||
"$GHCUP_BIN"/stack --version && exit 1 || echo yes
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# check that lazy loading works for 'whereis'
|
|
||||||
cp "$CI_PROJECT_DIR/data/metadata/ghcup-${JSON_VERSION}.yaml" "$CI_PROJECT_DIR/data/metadata/ghcup-${JSON_VERSION}.yaml.bak"
|
|
||||||
echo '**' > "$CI_PROJECT_DIR/data/metadata/ghcup-${JSON_VERSION}.yaml"
|
|
||||||
eghcup whereis ghc "$(ghc --numeric-version)"
|
|
||||||
mv -f "$CI_PROJECT_DIR/data/metadata/ghcup-${JSON_VERSION}.yaml.bak" "$CI_PROJECT_DIR/data/metadata/ghcup-${JSON_VERSION}.yaml"
|
|
||||||
|
|
||||||
eghcup rm "$(ghc --numeric-version)"
|
|
||||||
|
|
||||||
# https://gitlab.haskell.org/haskell/ghcup-hs/-/issues/116
|
|
||||||
if [ "${OS}" = "Linux" ] ; then
|
|
||||||
if [ "${ARCH}" = "64" ] ; then
|
|
||||||
eghcup install cabal -u https://downloads.haskell.org/~ghcup/unofficial-bindists/cabal/3.7.0.0-pre20220407/cabal-install-3.7-x86_64-linux-alpine.tar.xz 3.4.0.0-rc4
|
|
||||||
eghcup rm cabal 3.4.0.0-rc4
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
eghcup gc -c
|
|
||||||
|
|
||||||
# test etags
|
|
||||||
rm -f "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml"
|
|
||||||
raw_eghcup -s "https://www.haskell.org/ghcup/data/ghcup-${JSON_VERSION}.yaml" list
|
|
||||||
# snapshot yaml and etags file
|
|
||||||
etag=$(cat "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml.etags")
|
|
||||||
sha=$(sha_sum "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml")
|
|
||||||
# invalidate access time timer, which is 5minutes, so we re-download
|
|
||||||
touch -a -m -t '199901010101' "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml"
|
|
||||||
# redownload same file with some newlines added
|
|
||||||
raw_eghcup -s https://raw.githubusercontent.com/haskell/ghcup-metadata/exp/ghcup-${JSON_VERSION}.yaml list
|
|
||||||
# snapshot new yaml and etags file
|
|
||||||
etag2=$(cat "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml.etags")
|
|
||||||
sha2=$(sha_sum "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml")
|
|
||||||
# compare
|
|
||||||
[ "${etag}" != "${etag2}" ]
|
|
||||||
[ "${sha}" != "${sha2}" ]
|
|
||||||
# invalidate access time timer, which is 5minutes, but don't expect a re-download
|
|
||||||
touch -a -m -t '199901010101' "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml"
|
|
||||||
# this time, we expect the same hash and etag
|
|
||||||
raw_eghcup -s https://raw.githubusercontent.com/haskell/ghcup-metadata/exp/ghcup-${JSON_VERSION}.yaml list
|
|
||||||
etag3=$(cat "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml.etags")
|
|
||||||
sha3=$(sha_sum "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml")
|
|
||||||
[ "${etag2}" = "${etag3}" ]
|
|
||||||
[ "${sha2}" = "${sha3}" ]
|
|
||||||
|
|
||||||
# test isolated installs
|
|
||||||
if [ "${DISTRO}" != "Alpine" ] ; then
|
|
||||||
eghcup install ghc -i "$(pwd)/isolated" 8.10.5
|
|
||||||
[ "$(isolated/bin/ghc --numeric-version)" = "8.10.5" ]
|
|
||||||
! eghcup install ghc -i "$(pwd)/isolated" 8.10.5
|
|
||||||
if [ "${ARCH}" = "64" ] ; then
|
|
||||||
if [ "${OS}" = "Linux" ] || [ "${OS}" = "Windows" ] ; then
|
|
||||||
eghcup install cabal -i "$(pwd)/isolated" 3.4.0.0
|
|
||||||
[ "$(isolated/cabal --numeric-version)" = "3.4.0.0" ]
|
|
||||||
eghcup install stack -i "$(pwd)/isolated" 2.7.3
|
|
||||||
[ "$(isolated/stack --numeric-version)" = "2.7.3" ]
|
|
||||||
eghcup install hls -i "$(pwd)/isolated" 1.3.0
|
|
||||||
[ "$(isolated/haskell-language-server-wrapper --numeric-version)" = "1.3.0" ] ||
|
|
||||||
[ "$(isolated/haskell-language-server-wrapper --numeric-version)" = "1.3.0.0" ]
|
|
||||||
|
|
||||||
# test that isolated installs don't clean up target directory
|
|
||||||
cat <<EOF > "${GHCUP_BIN}/gmake"
|
|
||||||
#!/bin/bash
|
|
||||||
exit 1
|
|
||||||
EOF
|
|
||||||
chmod +x "${GHCUP_BIN}/gmake"
|
|
||||||
mkdir isolated_tainted/
|
|
||||||
touch isolated_tainted/lol
|
|
||||||
|
|
||||||
! eghcup install ghc -i "$(pwd)/isolated_tainted" 8.10.5 --force
|
|
||||||
[ -e "$(pwd)/isolated_tainted/lol" ]
|
|
||||||
rm "${GHCUP_BIN}/gmake"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
eghcup upgrade
|
|
||||||
eghcup upgrade -f
|
|
||||||
|
|
||||||
# restore old ghcup, because we want to test nuke
|
|
||||||
cp "out/${ARTIFACT}"-* "$GHCUP_BIN/ghcup${ext}"
|
|
||||||
chmod +x "$GHCUP_BIN/ghcup${ext}"
|
|
||||||
|
|
||||||
# test that doing fishy symlinks into GHCup dir doesn't cause weird stuff on 'ghcup nuke'
|
|
||||||
mkdir no_nuke/
|
|
||||||
mkdir no_nuke/bar
|
|
||||||
echo 'foo' > no_nuke/file
|
|
||||||
echo 'bar' > no_nuke/bar/file
|
|
||||||
ln -s "$CI_PROJECT_DIR"/no_nuke/ "${GHCUP_DIR}"/cache/no_nuke
|
|
||||||
ln -s "$CI_PROJECT_DIR"/no_nuke/ "${GHCUP_DIR}"/logs/no_nuke
|
|
||||||
|
|
||||||
# nuke
|
|
||||||
eghcup nuke
|
|
||||||
[ ! -e "${GHCUP_DIR}" ]
|
|
||||||
|
|
||||||
# make sure nuke doesn't resolve symlinks
|
|
||||||
[ -e "$CI_PROJECT_DIR"/no_nuke/file ]
|
|
||||||
[ -e "$CI_PROJECT_DIR"/no_nuke/bar/file ]
|
|
||||||
|
|
60
.github/workflows/bootstrap.yaml
vendored
60
.github/workflows/bootstrap.yaml
vendored
@ -1,60 +0,0 @@
|
|||||||
name: Bootstrap tests
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
tags:
|
|
||||||
- 'v*'
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
bootstrap:
|
|
||||||
name: bootstrap
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
env:
|
|
||||||
BOOTSTRAP_HASKELL_CABAL_VERSION: 3.6.2.0
|
|
||||||
BOOTSTRAP_HASKELL_GHC_VERSION: 8.10.7
|
|
||||||
BOOTSTRAP_HASKELL_NONINTERACTIVE: yes
|
|
||||||
ARCH: 64
|
|
||||||
JSON_VERSION: "0.0.7"
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- os: ubuntu-latest
|
|
||||||
DISTRO: Ubuntu
|
|
||||||
- os: macOS-11
|
|
||||||
DISTRO: na
|
|
||||||
- os: windows-latest
|
|
||||||
DISTRO: na
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
submodules: 'true'
|
|
||||||
|
|
||||||
- if: runner.os == 'Linux'
|
|
||||||
name: Run bootstrap
|
|
||||||
run: |
|
|
||||||
sudo apt-get install -y libnuma-dev zlib1g-dev libgmp-dev libgmp10 libssl-dev liblzma-dev libbz2-dev git wget lsb-release software-properties-common gnupg2 apt-transport-https gcc autoconf automake build-essential curl gzip
|
|
||||||
sh ./.github/scripts/bootstrap.sh
|
|
||||||
env:
|
|
||||||
DISTRO: ${{ matrix.DISTRO }}
|
|
||||||
|
|
||||||
- if: runner.os == 'macOS'
|
|
||||||
name: Run bootstrap
|
|
||||||
run: sh ./.github/scripts/bootstrap.sh
|
|
||||||
env:
|
|
||||||
DISTRO: ${{ matrix.DISTRO }}
|
|
||||||
|
|
||||||
- if: runner.os == 'Windows'
|
|
||||||
name: Run bootstrap
|
|
||||||
run: |
|
|
||||||
$ErrorActionPreference = [System.Management.Automation.ActionPreference]::Stop
|
|
||||||
$curDir = Get-Location
|
|
||||||
Write-Host "Current Working Directory: $curDir"
|
|
||||||
./scripts/bootstrap/bootstrap-haskell.ps1 -InstallDir ${GITHUB_WORKSPACE} -BootstrapUrl ("{0}/scripts/bootstrap/bootstrap-haskell" -f $curDir) -InBash -Msys2Env "MINGW64"
|
|
||||||
shell: pwsh
|
|
||||||
|
|
39
.github/workflows/cabal.project.yaml
vendored
39
.github/workflows/cabal.project.yaml
vendored
@ -1,39 +0,0 @@
|
|||||||
name: Test cabal.project files
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
tags:
|
|
||||||
- 'v*'
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
schedule:
|
|
||||||
- cron: '0 2 * * *'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
name: Build binary
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
os: [macOS-latest, macOS-11, windows-latest, ubuntu-latest]
|
|
||||||
ghc: ["8.10.7", "9.0.2", "9.2.8", "9.4.8"]
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: 'true'
|
|
||||||
|
|
||||||
- name: Run build
|
|
||||||
run: |
|
|
||||||
env
|
|
||||||
ghcup --version
|
|
||||||
ghcup run -i --cabal latest -- cabal update
|
|
||||||
ghcup run -i --cabal latest --ghc ${GHC_VER} -- cabal build --project-file=cabal.ghc${GHC_VER//./}.project
|
|
||||||
env:
|
|
||||||
GHC_VER: ${{ matrix.ghc }}
|
|
||||||
shell: bash
|
|
||||||
|
|
37
.github/workflows/cache.yaml
vendored
37
.github/workflows/cache.yaml
vendored
@ -1,37 +0,0 @@
|
|||||||
name: Cache eviction
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
key:
|
|
||||||
description: Which cache to evict
|
|
||||||
required: true
|
|
||||||
default: '/'
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- FreeBSD-64-na
|
|
||||||
- Linux-32-Alpine
|
|
||||||
- Linux-64-Alpine
|
|
||||||
- Linux-64-Ubuntu
|
|
||||||
- Linux-ARM-Ubuntu
|
|
||||||
- Linux-ARM64-Ubuntu
|
|
||||||
- Windows-64-na
|
|
||||||
- macOS-64-na
|
|
||||||
- macOS-ARM64-na
|
|
||||||
- /
|
|
||||||
jobs:
|
|
||||||
evict:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Remove from S3
|
|
||||||
uses: vitorsgomes/s3-rm-action@master
|
|
||||||
with:
|
|
||||||
args: --recursive
|
|
||||||
env:
|
|
||||||
AWS_S3_ENDPOINT: https://${{ secrets.S3_HOST }}
|
|
||||||
AWS_S3_BUCKET: ghcup-hs
|
|
||||||
AWS_REGION: us-west-2
|
|
||||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
||||||
PATH_TO_DELETE: ${{ github.event.inputs.key }}
|
|
147
.github/workflows/cross.yaml
vendored
147
.github/workflows/cross.yaml
vendored
@ -1,147 +0,0 @@
|
|||||||
name: Test cross bindists
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
tags:
|
|
||||||
- 'v*'
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
schedule:
|
|
||||||
- cron: '0 2 * * *'
|
|
||||||
|
|
||||||
env:
|
|
||||||
CABAL_CACHE_DISABLE: ${{ vars.CABAL_CACHE_DISABLE }}
|
|
||||||
CABAL_CACHE_NONFATAL: yes
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
name: Build linux binary
|
|
||||||
runs-on: [self-hosted, Linux, X64, maerwald]
|
|
||||||
env:
|
|
||||||
CABAL_VER: 3.10.3.0
|
|
||||||
JSON_VERSION: "0.0.8"
|
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
||||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
||||||
S3_HOST: ${{ secrets.S3_HOST }}
|
|
||||||
ARTIFACT: "x86_64-linux-ghcup"
|
|
||||||
GHC_VER: 8.10.7
|
|
||||||
ARCH: 64
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: 'true'
|
|
||||||
|
|
||||||
- name: Run build
|
|
||||||
uses: docker://hasufell/alpine-haskell:3.12
|
|
||||||
with:
|
|
||||||
args: sh .github/scripts/build.sh
|
|
||||||
env:
|
|
||||||
ARTIFACT: ${{ env.ARTIFACT }}
|
|
||||||
ARCH: ${{ env.ARCH }}
|
|
||||||
GHC_VER: ${{ env.GHC_VER }}
|
|
||||||
DISTRO: Alpine
|
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ env.AWS_SECRET_ACCESS_KEY }}
|
|
||||||
AWS_ACCESS_KEY_ID: ${{ env.AWS_ACCESS_KEY_ID }}
|
|
||||||
S3_HOST: ${{ env.S3_HOST }}
|
|
||||||
|
|
||||||
- if: always()
|
|
||||||
name: Upload artifact
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: artifacts
|
|
||||||
path: |
|
|
||||||
./out/*
|
|
||||||
|
|
||||||
test-cross-linux:
|
|
||||||
name: Test linux cross
|
|
||||||
needs: "build"
|
|
||||||
runs-on: [self-hosted, Linux, X64]
|
|
||||||
container:
|
|
||||||
image: registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb12:a9297a370025101b479cfd4977f8f910814e03ab
|
|
||||||
options: --user root
|
|
||||||
env:
|
|
||||||
CABAL_VER: 3.10.3.0
|
|
||||||
BUILD_CONF_ARGS: "--enable-unregisterised"
|
|
||||||
HADRIAN_FLAVOUR: ""
|
|
||||||
JSON_VERSION: "0.0.8"
|
|
||||||
GHC_VER: 8.10.6
|
|
||||||
GHC_TARGET_VERSION: "8.10.7"
|
|
||||||
ARCH: 64
|
|
||||||
DISTRO: Debian
|
|
||||||
ARTIFACT: "x86_64-linux-ghcup"
|
|
||||||
CROSS: "arm-linux-gnueabihf"
|
|
||||||
WRAPPER: "run"
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: 'true'
|
|
||||||
|
|
||||||
- uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
name: artifacts
|
|
||||||
path: ./out
|
|
||||||
|
|
||||||
- name: Run test (64 bit linux)
|
|
||||||
run: |
|
|
||||||
sudo apt-get update -y
|
|
||||||
sudo apt-get install -y libnuma-dev zlib1g-dev libgmp-dev libgmp10 libssl-dev liblzma-dev libbz2-dev git wget lsb-release software-properties-common gnupg2 apt-transport-https gcc autoconf automake build-essential curl gzip libstdc++-11-dev
|
|
||||||
sudo apt-get install -y gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
|
|
||||||
sudo dpkg --add-architecture armhf
|
|
||||||
sudo apt-get update -y
|
|
||||||
sudo apt-get install -y libncurses-dev:armhf libstdc++-11-dev:armhf
|
|
||||||
# ld.bfd is broken on armv7: https://sourceware.org/bugzilla/show_bug.cgi?id=16177
|
|
||||||
update-alternatives --install "/usr/bin/x86_64-linux-gnu-ld" "ld" "/usr/bin/x86_64-linux-gnu-ld.gold" 20
|
|
||||||
update-alternatives --install "/usr/bin/x86_64-linux-gnu-ld" "ld" "/usr/bin/x86_64-linux-gnu-ld.bfd" 10
|
|
||||||
update-alternatives --set "ld" "/usr/bin/x86_64-linux-gnu-ld.gold"
|
|
||||||
update-alternatives --install "/usr/bin/arm-linux-gnueabihf-ld" "ld-arm" "/usr/bin/arm-linux-gnueabihf-ld.gold" 20
|
|
||||||
update-alternatives --install "/usr/bin/arm-linux-gnueabihf-ld" "ld-arm" "/usr/bin/arm-linux-gnueabihf-ld.bfd" 10
|
|
||||||
update-alternatives --set "ld-arm" "/usr/bin/arm-linux-gnueabihf-ld.gold"
|
|
||||||
sh .github/scripts/cross.sh
|
|
||||||
|
|
||||||
test-cross-js:
|
|
||||||
name: Test GHC JS cross
|
|
||||||
needs: "build"
|
|
||||||
runs-on: [self-hosted, Linux, X64]
|
|
||||||
container:
|
|
||||||
image: registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb12:a9297a370025101b479cfd4977f8f910814e03ab
|
|
||||||
options: --user root
|
|
||||||
env:
|
|
||||||
CABAL_VER: 3.10.3.0
|
|
||||||
BUILD_CONF_ARGS: ""
|
|
||||||
HADRIAN_FLAVOUR: "default+native_bignum"
|
|
||||||
JSON_VERSION: "0.0.8"
|
|
||||||
GHC_VER: 9.6.2
|
|
||||||
GHC_TARGET_VERSION: "9.6.2"
|
|
||||||
ARCH: 64
|
|
||||||
DISTRO: Debian
|
|
||||||
ARTIFACT: "x86_64-linux-ghcup"
|
|
||||||
CROSS: "javascript-unknown-ghcjs"
|
|
||||||
WRAPPER: "emconfigure"
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: 'true'
|
|
||||||
|
|
||||||
- uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
name: artifacts
|
|
||||||
path: ./out
|
|
||||||
|
|
||||||
- name: Run test (64 bit linux)
|
|
||||||
run: |
|
|
||||||
sudo apt-get update -y
|
|
||||||
sudo apt-get install -y libnuma-dev zlib1g-dev libgmp-dev libgmp10 libssl-dev liblzma-dev libbz2-dev git wget lsb-release software-properties-common gnupg2 apt-transport-https gcc autoconf automake build-essential curl gzip
|
|
||||||
git clone https://github.com/emscripten-core/emsdk.git
|
|
||||||
cd emsdk
|
|
||||||
./emsdk install latest
|
|
||||||
./emsdk activate latest
|
|
||||||
. ./emsdk_env.sh
|
|
||||||
cd ..
|
|
||||||
bash .github/scripts/cross.sh
|
|
||||||
|
|
127
.github/workflows/docker.yaml
vendored
127
.github/workflows/docker.yaml
vendored
@ -1,127 +0,0 @@
|
|||||||
name: Docker image builds
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
schedule:
|
|
||||||
- cron: '0 0 * * *'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
docker-alpine32:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
- name: Set up QEMU
|
|
||||||
uses: docker/setup-qemu-action@v2
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v2
|
|
||||||
- name: Login to Docker Hub
|
|
||||||
uses: docker/login-action@v2
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
||||||
- name: Build and push (alpine 32bit)
|
|
||||||
uses: docker/build-push-action@v3
|
|
||||||
with:
|
|
||||||
context: ./docker/alpine32
|
|
||||||
push: true
|
|
||||||
tags: hasufell/i386-alpine-haskell:3.12
|
|
||||||
platforms: |
|
|
||||||
linux/i386
|
|
||||||
linux/amd64
|
|
||||||
|
|
||||||
docker-alpine:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
- name: Set up QEMU
|
|
||||||
uses: docker/setup-qemu-action@v2
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v2
|
|
||||||
- name: Login to Docker Hub
|
|
||||||
uses: docker/login-action@v2
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
||||||
- name: Build and push (alpine 64bit)
|
|
||||||
uses: docker/build-push-action@v3
|
|
||||||
with:
|
|
||||||
context: ./docker/alpine64
|
|
||||||
push: true
|
|
||||||
tags: hasufell/alpine-haskell:3.12
|
|
||||||
platforms: linux/amd64
|
|
||||||
|
|
||||||
docker-arm32:
|
|
||||||
runs-on: [self-hosted, Linux, ARM64]
|
|
||||||
steps:
|
|
||||||
- uses: docker://arm64v8/ubuntu:focal
|
|
||||||
name: Cleanup (aarch64 linux)
|
|
||||||
continue-on-error: true
|
|
||||||
with:
|
|
||||||
args: "find . -mindepth 1 -maxdepth 1 -exec rm -rf -- {} +"
|
|
||||||
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v2
|
|
||||||
|
|
||||||
- name: Login to Docker Hub
|
|
||||||
uses: docker/login-action@v2
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Build and push (debian buster)
|
|
||||||
uses: docker/build-push-action@v3
|
|
||||||
with:
|
|
||||||
context: ./docker/arm32v7/buster
|
|
||||||
push: true
|
|
||||||
tags: hasufell/arm32v7-debian-haskell:10
|
|
||||||
platforms: linux/arm
|
|
||||||
|
|
||||||
- name: Build and push (ubuntu focal)
|
|
||||||
uses: docker/build-push-action@v3
|
|
||||||
with:
|
|
||||||
context: ./docker/arm32v7/focal
|
|
||||||
push: true
|
|
||||||
tags: hasufell/arm32v7-ubuntu-haskell:focal
|
|
||||||
platforms: linux/arm
|
|
||||||
|
|
||||||
docker-aarch:
|
|
||||||
runs-on: [self-hosted, Linux, ARM64]
|
|
||||||
steps:
|
|
||||||
- uses: docker://arm64v8/ubuntu:focal
|
|
||||||
name: Cleanup (aarch64 linux)
|
|
||||||
continue-on-error: true
|
|
||||||
with:
|
|
||||||
args: "find . -mindepth 1 -maxdepth 1 -exec rm -rf -- {} +"
|
|
||||||
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v2
|
|
||||||
|
|
||||||
- name: Login to Docker Hub
|
|
||||||
uses: docker/login-action@v2
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Build and push (debian buster)
|
|
||||||
uses: docker/build-push-action@v3
|
|
||||||
with:
|
|
||||||
context: ./docker/arm64v8/buster
|
|
||||||
push: true
|
|
||||||
tags: hasufell/arm64v8-debian-haskell:10
|
|
||||||
platforms: linux/arm64
|
|
||||||
|
|
||||||
- name: Build and push (ubuntu focal)
|
|
||||||
uses: docker/build-push-action@v3
|
|
||||||
with:
|
|
||||||
context: ./docker/arm64v8/focal
|
|
||||||
push: true
|
|
||||||
tags: hasufell/arm64v8-ubuntu-haskell:focal
|
|
||||||
platforms: linux/arm64
|
|
26
.github/workflows/hlint.yaml
vendored
26
.github/workflows/hlint.yaml
vendored
@ -1,26 +0,0 @@
|
|||||||
name: Hlint
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
tags:
|
|
||||||
- 'v*'
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
hlint:
|
|
||||||
name: hlint
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
JSON_VERSION: "0.0.7"
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
submodules: 'true'
|
|
||||||
|
|
||||||
- name: Run hlint
|
|
||||||
run: curl -sSL https://raw.github.com/ndmitchell/hlint/master/misc/run.sh | sh -s -- -r lib/ test/
|
|
33
.github/workflows/mkdocs.yaml
vendored
33
.github/workflows/mkdocs.yaml
vendored
@ -1,33 +0,0 @@
|
|||||||
name: MkDocs
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
tags:
|
|
||||||
- 'v*'
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
mkdocs:
|
|
||||||
name: mkdocs
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
JSON_VERSION: "0.0.7"
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
submodules: 'true'
|
|
||||||
|
|
||||||
- name: Install mkdocs deps
|
|
||||||
run: |
|
|
||||||
sudo apt-get update -y
|
|
||||||
sudo apt-get install -y python3-pip
|
|
||||||
sudo pip3 install mkdocs
|
|
||||||
|
|
||||||
- name: Run mkdocs
|
|
||||||
run: |
|
|
||||||
mkdocs build
|
|
642
.github/workflows/release.yaml
vendored
642
.github/workflows/release.yaml
vendored
@ -1,581 +1,109 @@
|
|||||||
name: Build and release
|
name: Create Release
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
tags:
|
tags:
|
||||||
- 'v*'
|
- 'v*'
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
schedule:
|
|
||||||
- cron: '0 2 * * *'
|
|
||||||
|
|
||||||
env:
|
|
||||||
CABAL_CACHE_DISABLE: ${{ vars.CABAL_CACHE_DISABLE }}
|
|
||||||
CABAL_CACHE_NONFATAL: yes
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-linux:
|
draft_release:
|
||||||
name: Build linux binary
|
name: Draft Release
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Create Release
|
||||||
|
id: create_release
|
||||||
|
uses: actions/create-release@v1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
tag_name: ${{ github.ref }}
|
||||||
|
release_name: Release ${{ github.ref }}
|
||||||
|
body: |
|
||||||
|
Changes in this Release
|
||||||
|
- First Change
|
||||||
|
- Second Change
|
||||||
|
draft: true
|
||||||
|
prerelease: false
|
||||||
|
|
||||||
|
release-mac:
|
||||||
|
name: Create Release
|
||||||
|
needs: draft_release
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
env:
|
env:
|
||||||
CABAL_VER: 3.10.2.0
|
MACOSX_DEPLOYMENT_TARGET: 10.13
|
||||||
JSON_VERSION: "0.0.8"
|
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
||||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
||||||
S3_HOST: ${{ secrets.S3_HOST }}
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: true
|
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
os:
|
||||||
- os: ubuntu-latest
|
- macOS-10.15
|
||||||
ARTIFACT: "i386-linux-ghcup"
|
|
||||||
GHC_VER: 8.10.7
|
|
||||||
ARCH: 32
|
|
||||||
- os: ubuntu-latest
|
|
||||||
ARTIFACT: "x86_64-linux-ghcup"
|
|
||||||
GHC_VER: 9.4.8
|
|
||||||
ARCH: 64
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- uses: haskell/actions/setup@v1.2
|
||||||
with:
|
with:
|
||||||
submodules: 'true'
|
ghc-version: 8.10.7
|
||||||
|
cabal-version: 3.6.2.0
|
||||||
|
|
||||||
- if: matrix.ARCH == '32'
|
- name: create ~/.local/bin
|
||||||
name: Run build (32 bit linux)
|
run: mkdir -p "$HOME/.local/bin"
|
||||||
uses: docker://hasufell/i386-alpine-haskell:3.12
|
|
||||||
with:
|
|
||||||
args: sh .github/scripts/build.sh
|
|
||||||
env:
|
|
||||||
ARTIFACT: ${{ matrix.ARTIFACT }}
|
|
||||||
ARCH: ${{ matrix.ARCH }}
|
|
||||||
GHC_VER: ${{ matrix.GHC_VER }}
|
|
||||||
DISTRO: Alpine
|
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ env.AWS_SECRET_ACCESS_KEY }}
|
|
||||||
AWS_ACCESS_KEY_ID: ${{ env.AWS_ACCESS_KEY_ID }}
|
|
||||||
S3_HOST: ${{ env.S3_HOST }}
|
|
||||||
|
|
||||||
- if: matrix.ARCH == '64'
|
|
||||||
name: Run build (64 bit linux)
|
|
||||||
uses: docker://hasufell/alpine-haskell:3.12
|
|
||||||
with:
|
|
||||||
args: sh .github/scripts/build.sh
|
|
||||||
env:
|
|
||||||
ARTIFACT: ${{ matrix.ARTIFACT }}
|
|
||||||
ARCH: ${{ matrix.ARCH }}
|
|
||||||
GHC_VER: ${{ matrix.GHC_VER }}
|
|
||||||
DISTRO: Alpine
|
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ env.AWS_SECRET_ACCESS_KEY }}
|
|
||||||
AWS_ACCESS_KEY_ID: ${{ env.AWS_ACCESS_KEY_ID }}
|
|
||||||
S3_HOST: ${{ env.S3_HOST }}
|
|
||||||
|
|
||||||
- if: always()
|
|
||||||
name: Upload artifact
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: artifacts
|
|
||||||
path: |
|
|
||||||
./out/*
|
|
||||||
|
|
||||||
|
|
||||||
build-arm:
|
|
||||||
name: Build ARM binary
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
env:
|
|
||||||
CABAL_VER: 3.6.2.0
|
|
||||||
JSON_VERSION: "0.0.8"
|
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
||||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
||||||
S3_HOST: ${{ secrets.S3_HOST }}
|
|
||||||
strategy:
|
|
||||||
fail-fast: true
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- os: [self-hosted, Linux, ARM64, maerwald]
|
|
||||||
ARTIFACT: "armv7-linux-ghcup"
|
|
||||||
GHC_VER: 9.2.8
|
|
||||||
ARCH: ARM
|
|
||||||
- os: [self-hosted, Linux, ARM64, maerwald]
|
|
||||||
ARTIFACT: "aarch64-linux-ghcup"
|
|
||||||
GHC_VER: 9.4.8
|
|
||||||
ARCH: ARM64
|
|
||||||
steps:
|
|
||||||
- name: git config
|
|
||||||
run: |
|
|
||||||
git config --global --get-all safe.directory | grep '^\*$' || git config --global --add safe.directory "*"
|
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
- name: Checkout code
|
- name: Add ~/.local/bin to PATH
|
||||||
uses: actions/checkout@v4
|
run: echo "$HOME/.local/bin" >> $GITHUB_PATH
|
||||||
with:
|
shell: bash
|
||||||
submodules: 'true'
|
|
||||||
|
|
||||||
- if: matrix.ARCH == 'ARM'
|
- name: Update cabal cache
|
||||||
uses: docker://hasufell/arm32v7-debian-haskell:10
|
run: cabal update
|
||||||
name: Run build (armv7 linux)
|
shell: bash
|
||||||
with:
|
|
||||||
args: sh .github/scripts/build.sh
|
|
||||||
env:
|
|
||||||
ARTIFACT: ${{ matrix.ARTIFACT }}
|
|
||||||
ARCH: ${{ matrix.ARCH }}
|
|
||||||
GHC_VER: ${{ matrix.GHC_VER }}
|
|
||||||
DISTRO: Ubuntu
|
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ env.AWS_SECRET_ACCESS_KEY }}
|
|
||||||
AWS_ACCESS_KEY_ID: ${{ env.AWS_ACCESS_KEY_ID }}
|
|
||||||
S3_HOST: ${{ env.S3_HOST }}
|
|
||||||
LD: ld.gold
|
|
||||||
|
|
||||||
- if: matrix.ARCH == 'ARM64'
|
- name: Install cabal dependencies
|
||||||
uses: docker://hasufell/arm64v8-debian-haskell:10
|
run: cabal build --only-dependencies --constraint="zlib +bundled-c-zlib" --constraint="lzma +static" -ftui
|
||||||
name: Run build (aarch64 linux)
|
shell: bash
|
||||||
with:
|
|
||||||
args: sh .github/scripts/build.sh
|
- name: Build
|
||||||
|
run: cabal build --constraint="zlib +bundled-c-zlib" --constraint="lzma +static" -ftui
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Install
|
||||||
|
run: cp "$(cabal list-bin exe:ghcup)" ~/.local/bin/ghcup
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Strip
|
||||||
|
run: strip ~/.local/bin/ghcup
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: cabal test --constraint="zlib +bundled-c-zlib" --constraint="lzma +static" all
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Install git
|
||||||
|
run: brew install git
|
||||||
|
|
||||||
|
- name: set HOME
|
||||||
|
run: echo "HOME=$HOME" >> $GITHUB_ENV
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Set ASSET_PATH
|
||||||
|
run: echo "ASSET_PATH=$HOME/.local/bin/ghcup" >> $GITHUB_ENV
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Upload Release Asset
|
||||||
|
id: upload-release-asset
|
||||||
|
uses: actions/upload-release-asset@v1
|
||||||
env:
|
env:
|
||||||
ARTIFACT: ${{ matrix.ARTIFACT }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
ARCH: ${{ matrix.ARCH }}
|
with:
|
||||||
GHC_VER: ${{ matrix.GHC_VER }}
|
upload_url: ${{ needs.draft_release.outputs.upload_url }}
|
||||||
DISTRO: Ubuntu
|
asset_path: ${{ env.ASSET_PATH }}
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ env.AWS_SECRET_ACCESS_KEY }}
|
asset_name: ghcup-${{ matrix.os }}
|
||||||
AWS_ACCESS_KEY_ID: ${{ env.AWS_ACCESS_KEY_ID }}
|
asset_content_type: application/octet-stream
|
||||||
S3_HOST: ${{ env.S3_HOST }}
|
|
||||||
|
|
||||||
- if: always()
|
- if: always()
|
||||||
name: Upload artifact
|
uses: actions/upload-artifact@v2
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
with:
|
||||||
name: artifacts
|
name: plan.json
|
||||||
path: |
|
path: ./dist-newstyle/cache/plan.json
|
||||||
./out/*
|
|
||||||
|
|
||||||
build-macwin:
|
|
||||||
name: Build binary (Mac/Win)
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
env:
|
|
||||||
CABAL_VER: 3.10.2.0
|
|
||||||
MACOSX_DEPLOYMENT_TARGET: 10.13
|
|
||||||
JSON_VERSION: "0.0.8"
|
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
||||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
||||||
S3_HOST: ${{ secrets.S3_HOST }}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- os: [self-hosted, macOS, ARM64]
|
|
||||||
ARTIFACT: "aarch64-apple-darwin-ghcup"
|
|
||||||
GHC_VER: 9.4.8
|
|
||||||
ARCH: ARM64
|
|
||||||
- os: macOS-11
|
|
||||||
ARTIFACT: "x86_64-apple-darwin-ghcup"
|
|
||||||
GHC_VER: 9.4.8
|
|
||||||
ARCH: 64
|
|
||||||
- os: windows-latest
|
|
||||||
ARTIFACT: "x86_64-mingw64-ghcup"
|
|
||||||
GHC_VER: 9.4.8
|
|
||||||
ARCH: 64
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: 'true'
|
|
||||||
|
|
||||||
- if: matrix.ARCH == 'ARM64' && runner.os == 'macOS'
|
|
||||||
name: Run build
|
|
||||||
run: |
|
|
||||||
bash .github/scripts/brew.sh git coreutils llvm@13 autoconf automake
|
|
||||||
export PATH="$HOME/.brew/bin:$HOME/.brew/sbin:$HOME/.brew/opt/llvm@13/bin:$PATH"
|
|
||||||
export CC="$HOME/.brew/opt/llvm@13/bin/clang"
|
|
||||||
export CXX="$HOME/.brew/opt/llvm@13/bin/clang++"
|
|
||||||
export LD=ld
|
|
||||||
export AR="$HOME/.brew/opt/llvm@13/bin/llvm-ar"
|
|
||||||
export RANLIB="$HOME/.brew/opt/llvm@13/bin/llvm-ranlib"
|
|
||||||
bash .github/scripts/build.sh
|
|
||||||
env:
|
|
||||||
ARTIFACT: ${{ matrix.ARTIFACT }}
|
|
||||||
ARCH: ${{ matrix.ARCH }}
|
|
||||||
GHC_VER: ${{ matrix.GHC_VER }}
|
|
||||||
DISTRO: na
|
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ env.AWS_SECRET_ACCESS_KEY }}
|
|
||||||
AWS_ACCESS_KEY_ID: ${{ env.AWS_ACCESS_KEY_ID }}
|
|
||||||
S3_HOST: ${{ env.S3_HOST }}
|
|
||||||
HOMEBREW_CHANGE_ARCH_TO_ARM: 1
|
|
||||||
|
|
||||||
- if: matrix.ARCH == '64' && runner.os == 'macOS'
|
|
||||||
name: Run build (windows/mac)
|
|
||||||
run: |
|
|
||||||
bash .github/scripts/brew.sh coreutils
|
|
||||||
export PATH="$HOME/.brew/bin:$HOME/.brew/sbin:$PATH"
|
|
||||||
bash .github/scripts/build.sh
|
|
||||||
env:
|
|
||||||
ARTIFACT: ${{ matrix.ARTIFACT }}
|
|
||||||
ARCH: ${{ matrix.ARCH }}
|
|
||||||
GHC_VER: ${{ matrix.GHC_VER }}
|
|
||||||
DISTRO: na
|
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ env.AWS_SECRET_ACCESS_KEY }}
|
|
||||||
AWS_ACCESS_KEY_ID: ${{ env.AWS_ACCESS_KEY_ID }}
|
|
||||||
S3_HOST: ${{ env.S3_HOST }}
|
|
||||||
HOMEBREW_CHANGE_ARCH_TO_ARM: 1
|
|
||||||
|
|
||||||
- if: runner.os == 'Windows'
|
|
||||||
name: Run build (windows/mac)
|
|
||||||
run: |
|
|
||||||
bash .github/scripts/brew.sh git coreutils autoconf automake
|
|
||||||
bash .github/scripts/build.sh
|
|
||||||
env:
|
|
||||||
ARTIFACT: ${{ matrix.ARTIFACT }}
|
|
||||||
ARCH: ${{ matrix.ARCH }}
|
|
||||||
GHC_VER: ${{ matrix.GHC_VER }}
|
|
||||||
DISTRO: na
|
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ env.AWS_SECRET_ACCESS_KEY }}
|
|
||||||
AWS_ACCESS_KEY_ID: ${{ env.AWS_ACCESS_KEY_ID }}
|
|
||||||
S3_HOST: ${{ env.S3_HOST }}
|
|
||||||
HOMEBREW_CHANGE_ARCH_TO_ARM: 1
|
|
||||||
|
|
||||||
- if: always()
|
|
||||||
name: Upload artifact
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: artifacts
|
|
||||||
path: |
|
|
||||||
./out/*
|
|
||||||
|
|
||||||
build-freebsd:
|
|
||||||
name: Build binary (FreeBSD)
|
|
||||||
runs-on: [self-hosted, FreeBSD, X64]
|
|
||||||
env:
|
|
||||||
CABAL_VER: 3.10.2.0
|
|
||||||
MACOSX_DEPLOYMENT_TARGET: 10.13
|
|
||||||
JSON_VERSION: "0.0.8"
|
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
||||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
||||||
S3_HOST: ${{ secrets.S3_HOST }}
|
|
||||||
ARTIFACT: "x86_64-portbld-freebsd-ghcup"
|
|
||||||
GHC_VER: 9.4.8
|
|
||||||
ARCH: 64
|
|
||||||
DISTRO: na
|
|
||||||
RUNNER_OS: FreeBSD
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: 'true'
|
|
||||||
|
|
||||||
- name: Run build
|
|
||||||
run: |
|
|
||||||
sed -i.bak -e 's/quarterly/latest/' /etc/pkg/FreeBSD.conf
|
|
||||||
pkg install -y ghc hs-cabal-install git bash misc/compat10x misc/compat11x misc/compat12x gmake llvm14 libiconv
|
|
||||||
tzsetup Etc/GMT
|
|
||||||
adjkerntz -a
|
|
||||||
bash .github/scripts/build.sh
|
|
||||||
- if: always()
|
|
||||||
name: Upload artifact
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: artifacts
|
|
||||||
path: |
|
|
||||||
./out/*
|
|
||||||
|
|
||||||
test-linux:
|
|
||||||
name: Test linux
|
|
||||||
needs: "build-linux"
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
env:
|
|
||||||
CABAL_VER: 3.10.2.0
|
|
||||||
JSON_VERSION: "0.0.8"
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- os: ubuntu-latest
|
|
||||||
ARTIFACT: "i386-linux-ghcup"
|
|
||||||
GHC_VER: 8.10.7
|
|
||||||
ARCH: 32
|
|
||||||
DISTRO: Alpine
|
|
||||||
- os: ubuntu-latest
|
|
||||||
ARTIFACT: "x86_64-linux-ghcup"
|
|
||||||
GHC_VER: 9.4.8
|
|
||||||
ARCH: 64
|
|
||||||
DISTRO: Alpine
|
|
||||||
- os: ubuntu-latest
|
|
||||||
ARTIFACT: "x86_64-linux-ghcup"
|
|
||||||
GHC_VER: 9.4.8
|
|
||||||
ARCH: 64
|
|
||||||
DISTRO: Ubuntu
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: 'true'
|
|
||||||
|
|
||||||
- uses: actions/download-artifact@v3
|
|
||||||
with:
|
|
||||||
name: artifacts
|
|
||||||
path: ./out
|
|
||||||
|
|
||||||
- if: matrix.ARCH == '32' && matrix.DISTRO == 'Alpine'
|
|
||||||
name: Run test (32 bit linux Alpine)
|
|
||||||
uses: docker://hasufell/i386-alpine-haskell:3.12
|
|
||||||
with:
|
|
||||||
args: sh .github/scripts/test.sh
|
|
||||||
env:
|
|
||||||
ARTIFACT: ${{ matrix.ARTIFACT }}
|
|
||||||
ARCH: ${{ matrix.ARCH }}
|
|
||||||
GHC_VER: ${{ matrix.GHC_VER }}
|
|
||||||
DISTRO: ${{ matrix.DISTRO }}
|
|
||||||
|
|
||||||
- if: matrix.ARCH == '64' && matrix.DISTRO == 'Alpine'
|
|
||||||
name: Run test (64 bit linux Alpine)
|
|
||||||
uses: docker://hasufell/alpine-haskell:3.12
|
|
||||||
with:
|
|
||||||
args: sh .github/scripts/test.sh
|
|
||||||
env:
|
|
||||||
ARTIFACT: ${{ matrix.ARTIFACT }}
|
|
||||||
ARCH: ${{ matrix.ARCH }}
|
|
||||||
GHC_VER: ${{ matrix.GHC_VER }}
|
|
||||||
DISTRO: ${{ matrix.DISTRO }}
|
|
||||||
|
|
||||||
- if: matrix.DISTRO != 'Alpine'
|
|
||||||
name: Run test (64 bit linux)
|
|
||||||
run: |
|
|
||||||
sudo apt-get install -y libnuma-dev zlib1g-dev libgmp-dev libgmp10 libssl-dev liblzma-dev libbz2-dev git wget lsb-release software-properties-common gnupg2 apt-transport-https gcc autoconf automake build-essential curl gzip
|
|
||||||
sh .github/scripts/test.sh
|
|
||||||
env:
|
|
||||||
ARTIFACT: ${{ matrix.ARTIFACT }}
|
|
||||||
ARCH: ${{ matrix.ARCH }}
|
|
||||||
GHC_VER: ${{ matrix.GHC_VER }}
|
|
||||||
DISTRO: ${{ matrix.DISTRO }}
|
|
||||||
|
|
||||||
- if: failure()
|
|
||||||
name: Upload artifact
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: testfiles
|
|
||||||
path: |
|
|
||||||
./test/ghcup-test/golden/unix/GHCupInfo*json
|
|
||||||
|
|
||||||
test-arm:
|
|
||||||
name: Test ARM
|
|
||||||
needs: "build-arm"
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
env:
|
|
||||||
CABAL_VER: 3.6.2.0
|
|
||||||
JSON_VERSION: "0.0.8"
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- os: [self-hosted, Linux, ARM64, maerwald]
|
|
||||||
ARTIFACT: "armv7-linux-ghcup"
|
|
||||||
GHC_VER: 9.2.8
|
|
||||||
ARCH: ARM
|
|
||||||
DISTRO: Ubuntu
|
|
||||||
- os: [self-hosted, Linux, ARM64, maerwald]
|
|
||||||
ARTIFACT: "aarch64-linux-ghcup"
|
|
||||||
GHC_VER: 9.4.8
|
|
||||||
ARCH: ARM64
|
|
||||||
DISTRO: Ubuntu
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: 'true'
|
|
||||||
|
|
||||||
- uses: actions/download-artifact@v3
|
|
||||||
with:
|
|
||||||
name: artifacts
|
|
||||||
path: ./out
|
|
||||||
|
|
||||||
- if: matrix.ARCH == 'ARM'
|
|
||||||
uses: docker://hasufell/arm32v7-debian-haskell:10
|
|
||||||
name: Run test (armv7 linux)
|
|
||||||
with:
|
|
||||||
args: sh .github/scripts/test.sh
|
|
||||||
env:
|
|
||||||
ARTIFACT: ${{ matrix.ARTIFACT }}
|
|
||||||
ARCH: ${{ matrix.ARCH }}
|
|
||||||
GHC_VER: ${{ matrix.GHC_VER }}
|
|
||||||
DISTRO: Ubuntu
|
|
||||||
LD: ld.gold
|
|
||||||
|
|
||||||
- if: matrix.ARCH == 'ARM64'
|
|
||||||
uses: docker://hasufell/arm64v8-debian-haskell:10
|
|
||||||
name: Run test (aarch64 linux)
|
|
||||||
with:
|
|
||||||
args: sh .github/scripts/test.sh
|
|
||||||
env:
|
|
||||||
ARTIFACT: ${{ matrix.ARTIFACT }}
|
|
||||||
ARCH: ${{ matrix.ARCH }}
|
|
||||||
GHC_VER: ${{ matrix.GHC_VER }}
|
|
||||||
DISTRO: Ubuntu
|
|
||||||
|
|
||||||
- if: failure()
|
|
||||||
name: Upload artifact
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: testfiles
|
|
||||||
path: |
|
|
||||||
./test/ghcup-test/golden/unix/GHCupInfo*json
|
|
||||||
|
|
||||||
test-macwin:
|
|
||||||
name: Test Mac/Win
|
|
||||||
needs: "build-macwin"
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
env:
|
|
||||||
CABAL_VER: 3.10.2.0
|
|
||||||
MACOSX_DEPLOYMENT_TARGET: 10.13
|
|
||||||
JSON_VERSION: "0.0.8"
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- os: [self-hosted, macOS, ARM64]
|
|
||||||
ARTIFACT: "aarch64-apple-darwin-ghcup"
|
|
||||||
GHC_VER: 9.4.8
|
|
||||||
ARCH: ARM64
|
|
||||||
DISTRO: na
|
|
||||||
- os: macOS-11
|
|
||||||
ARTIFACT: "x86_64-apple-darwin-ghcup"
|
|
||||||
GHC_VER: 9.4.8
|
|
||||||
ARCH: 64
|
|
||||||
DISTRO: na
|
|
||||||
- os: windows-latest
|
|
||||||
ARTIFACT: "x86_64-mingw64-ghcup"
|
|
||||||
GHC_VER: 9.4.8
|
|
||||||
ARCH: 64
|
|
||||||
DISTRO: na
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: 'true'
|
|
||||||
|
|
||||||
- uses: actions/download-artifact@v3
|
|
||||||
with:
|
|
||||||
name: artifacts
|
|
||||||
path: ./out
|
|
||||||
|
|
||||||
- if: runner.os == 'macOS'
|
|
||||||
name: Run test
|
|
||||||
run: |
|
|
||||||
bash .github/scripts/brew.sh coreutils
|
|
||||||
export PATH="$HOME/.brew/bin:$HOME/.brew/sbin:$PATH"
|
|
||||||
bash .github/scripts/test.sh
|
|
||||||
env:
|
|
||||||
ARTIFACT: ${{ matrix.ARTIFACT }}
|
|
||||||
ARCH: ${{ matrix.ARCH }}
|
|
||||||
GHC_VER: ${{ matrix.GHC_VER }}
|
|
||||||
DISTRO: ${{ matrix.DISTRO }}
|
|
||||||
HOMEBREW_CHANGE_ARCH_TO_ARM: 1
|
|
||||||
|
|
||||||
- if: runner.os != 'macOS'
|
|
||||||
name: Run test
|
|
||||||
run: bash .github/scripts/test.sh
|
|
||||||
env:
|
|
||||||
ARTIFACT: ${{ matrix.ARTIFACT }}
|
|
||||||
ARCH: ${{ matrix.ARCH }}
|
|
||||||
GHC_VER: ${{ matrix.GHC_VER }}
|
|
||||||
DISTRO: ${{ matrix.DISTRO }}
|
|
||||||
HOMEBREW_CHANGE_ARCH_TO_ARM: 1
|
|
||||||
|
|
||||||
- if: failure() && runner.os == 'Windows'
|
|
||||||
name: Upload artifact
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: testfiles
|
|
||||||
path: |
|
|
||||||
./test/ghcup-test/golden/windows/GHCupInfo*json
|
|
||||||
|
|
||||||
- if: failure() && runner.os != 'Windows'
|
|
||||||
name: Upload artifact
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: testfiles
|
|
||||||
path: |
|
|
||||||
./test/ghcup-test/golden/unix/GHCupInfo*json
|
|
||||||
test-freebsd:
|
|
||||||
name: Test FreeBSD
|
|
||||||
needs: "build-freebsd"
|
|
||||||
runs-on: [self-hosted, FreeBSD, X64]
|
|
||||||
env:
|
|
||||||
CABAL_VER: 3.10.2.0
|
|
||||||
MACOSX_DEPLOYMENT_TARGET: 10.13
|
|
||||||
JSON_VERSION: "0.0.8"
|
|
||||||
ARTIFACT: "x86_64-portbld-freebsd-ghcup"
|
|
||||||
GHC_VER: 9.4.8
|
|
||||||
ARCH: 64
|
|
||||||
DISTRO: na
|
|
||||||
RUNNER_OS: FreeBSD
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: 'true'
|
|
||||||
|
|
||||||
- uses: actions/download-artifact@v3
|
|
||||||
with:
|
|
||||||
name: artifacts
|
|
||||||
path: ./out
|
|
||||||
|
|
||||||
- name: Run test
|
|
||||||
run: |
|
|
||||||
bash .github/scripts/test.sh
|
|
||||||
|
|
||||||
- if: failure()
|
|
||||||
name: Upload artifact
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: testfiles
|
|
||||||
path: |
|
|
||||||
./test/ghcup-test/golden/unix/GHCupInfo*json
|
|
||||||
hls:
|
|
||||||
name: hls
|
|
||||||
needs: build-linux
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
GHC_VERSION: "8.10.7"
|
|
||||||
HLS_TARGET_VERSION: "1.8.0.0"
|
|
||||||
CABAL_VERSION: "3.8.1.0"
|
|
||||||
JSON_VERSION: "0.0.8"
|
|
||||||
ARTIFACT: "x86_64-linux-ghcup"
|
|
||||||
DISTRO: Ubuntu
|
|
||||||
ARCH: 64
|
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
||||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
||||||
S3_HOST: ${{ secrets.S3_HOST }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: 'true'
|
|
||||||
|
|
||||||
- uses: actions/download-artifact@v3
|
|
||||||
with:
|
|
||||||
name: artifacts
|
|
||||||
path: ./out
|
|
||||||
|
|
||||||
- name: Run hls build
|
|
||||||
run: |
|
|
||||||
sudo apt-get install -y libnuma-dev zlib1g-dev libgmp-dev libgmp10 libssl-dev liblzma-dev libbz2-dev git wget lsb-release software-properties-common gnupg2 apt-transport-https gcc autoconf automake build-essential curl gzip
|
|
||||||
sh .github/scripts/hls.sh
|
|
||||||
|
|
||||||
release:
|
|
||||||
name: release
|
|
||||||
needs: ["test-linux", "test-arm", "test-macwin", "test-freebsd", "hls"]
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: startsWith(github.ref, 'refs/tags/v')
|
|
||||||
steps:
|
|
||||||
- name: Download artifacts
|
|
||||||
uses: actions/download-artifact@v3
|
|
||||||
with:
|
|
||||||
name: artifacts
|
|
||||||
path: ./out
|
|
||||||
|
|
||||||
- name: Release
|
|
||||||
uses: softprops/action-gh-release@v1
|
|
||||||
with:
|
|
||||||
draft: true
|
|
||||||
files: |
|
|
||||||
./out/*
|
|
||||||
|
28
.github/workflows/shellcheck.yaml
vendored
28
.github/workflows/shellcheck.yaml
vendored
@ -1,28 +0,0 @@
|
|||||||
name: Shellcheck
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
tags:
|
|
||||||
- 'v*'
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
shellcheck:
|
|
||||||
name: shellcheck
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
JSON_VERSION: "0.0.7"
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
submodules: 'true'
|
|
||||||
|
|
||||||
- name: Run shellcheck
|
|
||||||
uses: docker://koalaman/shellcheck-alpine
|
|
||||||
with:
|
|
||||||
args: shellcheck scripts/bootstrap/bootstrap-haskell
|
|
35
.github/workflows/stack.yaml
vendored
35
.github/workflows/stack.yaml
vendored
@ -1,35 +0,0 @@
|
|||||||
name: Test stack.yaml
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
tags:
|
|
||||||
- 'v*'
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
schedule:
|
|
||||||
- cron: '0 2 * * *'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
name: Build binary
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
os: [macOS-latest, macOS-11, windows-latest, ubuntu-latest]
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: 'true'
|
|
||||||
|
|
||||||
- name: Run build
|
|
||||||
run: |
|
|
||||||
env
|
|
||||||
ghcup --version
|
|
||||||
ghcup run -i --stack latest -- stack build
|
|
||||||
shell: bash
|
|
||||||
|
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -4,7 +4,6 @@ codex.tags
|
|||||||
dist-newstyle/
|
dist-newstyle/
|
||||||
cabal.project.local
|
cabal.project.local
|
||||||
.stack-work/
|
.stack-work/
|
||||||
.hiefiles/
|
|
||||||
bin/
|
bin/
|
||||||
/*.prof
|
/*.prof
|
||||||
/*.ps
|
/*.ps
|
||||||
|
689
.gitlab-ci.yml
Normal file
689
.gitlab-ci.yml
Normal file
@ -0,0 +1,689 @@
|
|||||||
|
stages:
|
||||||
|
- checks
|
||||||
|
- quick-test
|
||||||
|
- test
|
||||||
|
- expensive-test
|
||||||
|
- release
|
||||||
|
|
||||||
|
variables:
|
||||||
|
GIT_SSL_NO_VERIFY: "1"
|
||||||
|
|
||||||
|
# Commit of ghc/ci-images repository from which to pull Docker images
|
||||||
|
DOCKER_REV: 8d0224e6b2a08157649651e69302380b2bd24e11
|
||||||
|
|
||||||
|
# Sequential version number of all cached things.
|
||||||
|
# Bump to invalidate GitLab CI cache.
|
||||||
|
CACHE_REV: 1
|
||||||
|
|
||||||
|
GIT_SUBMODULE_STRATEGY: recursive
|
||||||
|
|
||||||
|
|
||||||
|
############################################################
|
||||||
|
# CI Step
|
||||||
|
############################################################
|
||||||
|
|
||||||
|
.debian:
|
||||||
|
image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb10:$DOCKER_REV"
|
||||||
|
tags:
|
||||||
|
- x86_64-linux
|
||||||
|
variables:
|
||||||
|
OS: "LINUX"
|
||||||
|
ARCH: "64"
|
||||||
|
CABAL_DIR: "$CI_PROJECT_DIR/cabal"
|
||||||
|
CROSS: ""
|
||||||
|
|
||||||
|
.alpine:64bit:
|
||||||
|
image: "alpine:3.12"
|
||||||
|
tags:
|
||||||
|
- x86_64-linux
|
||||||
|
variables:
|
||||||
|
OS: "LINUX"
|
||||||
|
ARCH: "64"
|
||||||
|
CABAL_DIR: "$CI_PROJECT_DIR/cabal"
|
||||||
|
|
||||||
|
.alpine:32bit:
|
||||||
|
image: "i386/alpine:3.12"
|
||||||
|
tags:
|
||||||
|
- x86_64-linux
|
||||||
|
variables:
|
||||||
|
OS: "LINUX"
|
||||||
|
ARCH: "32"
|
||||||
|
CABAL_DIR: "$CI_PROJECT_DIR/cabal"
|
||||||
|
|
||||||
|
.linux:armv7:
|
||||||
|
image: "registry.gitlab.haskell.org/ghc/ci-images/armv7-linux-deb10:$DOCKER_REV"
|
||||||
|
tags:
|
||||||
|
- armv7-linux
|
||||||
|
variables:
|
||||||
|
OS: "LINUX"
|
||||||
|
ARCH: "ARM"
|
||||||
|
CABAL_DIR: "$CI_PROJECT_DIR/cabal"
|
||||||
|
retry: 2
|
||||||
|
|
||||||
|
.linux:aarch64:
|
||||||
|
image: "registry.gitlab.haskell.org/ghc/ci-images/aarch64-linux-deb10:$DOCKER_REV"
|
||||||
|
tags:
|
||||||
|
- aarch64-linux
|
||||||
|
variables:
|
||||||
|
OS: "LINUX"
|
||||||
|
ARCH: "ARM64"
|
||||||
|
CABAL_DIR: "$CI_PROJECT_DIR/cabal"
|
||||||
|
|
||||||
|
.darwin:
|
||||||
|
tags:
|
||||||
|
- x86_64-darwin
|
||||||
|
variables:
|
||||||
|
OS: "DARWIN"
|
||||||
|
ARCH: "64"
|
||||||
|
CABAL_DIR: "$CI_PROJECT_DIR/cabal"
|
||||||
|
|
||||||
|
.darwin:aarch64:
|
||||||
|
tags:
|
||||||
|
- aarch64-darwin-m1
|
||||||
|
variables:
|
||||||
|
OS: "DARWIN"
|
||||||
|
ARCH: "ARM64"
|
||||||
|
CABAL_DIR: "$CI_PROJECT_DIR/cabal"
|
||||||
|
|
||||||
|
.freebsd13:
|
||||||
|
tags:
|
||||||
|
- x86_64-freebsd13
|
||||||
|
variables:
|
||||||
|
OS: "FREEBSD"
|
||||||
|
ARCH: "64"
|
||||||
|
CABAL_DIR: "$CI_PROJECT_DIR/cabal"
|
||||||
|
|
||||||
|
.freebsd12:
|
||||||
|
tags:
|
||||||
|
- x86_64-freebsd12
|
||||||
|
variables:
|
||||||
|
OS: "FREEBSD"
|
||||||
|
ARCH: "64"
|
||||||
|
CABAL_DIR: "$CI_PROJECT_DIR/cabal"
|
||||||
|
|
||||||
|
.windows:
|
||||||
|
tags:
|
||||||
|
- new-x86_64-windows
|
||||||
|
variables:
|
||||||
|
OS: "WINDOWS"
|
||||||
|
ARCH: "64"
|
||||||
|
CABAL_DIR: "$CI_PROJECT_DIR/cabal"
|
||||||
|
retry: 2
|
||||||
|
|
||||||
|
.root_cleanup:
|
||||||
|
after_script:
|
||||||
|
- bash ./.gitlab/after_script.sh
|
||||||
|
|
||||||
|
.test_ghcup_version:
|
||||||
|
script:
|
||||||
|
- bash ./.gitlab/script/ghcup_version.sh
|
||||||
|
variables:
|
||||||
|
JSON_VERSION: "0.0.7"
|
||||||
|
artifacts:
|
||||||
|
expire_in: 2 week
|
||||||
|
paths:
|
||||||
|
- test/golden
|
||||||
|
- dist-newstyle/cache/
|
||||||
|
when: on_failure
|
||||||
|
cache:
|
||||||
|
key: ghcup-test-$CACHE_REV
|
||||||
|
paths:
|
||||||
|
- cabal-cache
|
||||||
|
|
||||||
|
# .test_ghcup_scoop:
|
||||||
|
# script:
|
||||||
|
# - cl /O1 scoop-better-shimexe/shim.c
|
||||||
|
|
||||||
|
.test_ghcup_version:linux:
|
||||||
|
extends:
|
||||||
|
- .test_ghcup_version
|
||||||
|
- .debian
|
||||||
|
before_script:
|
||||||
|
- ./.gitlab/before_script/linux/install_deps.sh
|
||||||
|
- ./.gitlab/script/ci.sh extract_cabal_cache
|
||||||
|
after_script:
|
||||||
|
- ./.gitlab/script/ci.sh save_cabal_cache
|
||||||
|
- bash ./.gitlab/after_script.sh
|
||||||
|
|
||||||
|
.test_ghcup_version:linux32:
|
||||||
|
extends:
|
||||||
|
- .test_ghcup_version
|
||||||
|
- .alpine:32bit
|
||||||
|
before_script:
|
||||||
|
- ./.gitlab/before_script/linux/alpine/install_deps.sh
|
||||||
|
- ./.gitlab/script/ci.sh extract_cabal_cache
|
||||||
|
after_script:
|
||||||
|
- ./.gitlab/script/ci.sh save_cabal_cache
|
||||||
|
- bash ./.gitlab/after_script.sh
|
||||||
|
|
||||||
|
.test_ghcup_version:armv7:
|
||||||
|
extends:
|
||||||
|
- .test_ghcup_version
|
||||||
|
- .linux:armv7
|
||||||
|
before_script:
|
||||||
|
- ./.gitlab/before_script/linux/install_deps.sh
|
||||||
|
- ./.gitlab/script/ci.sh extract_cabal_cache
|
||||||
|
after_script:
|
||||||
|
- ./.gitlab/script/ci.sh save_cabal_cache
|
||||||
|
- bash ./.gitlab/after_script.sh
|
||||||
|
|
||||||
|
.test_ghcup_version:aarch64:
|
||||||
|
extends:
|
||||||
|
- .test_ghcup_version
|
||||||
|
- .linux:aarch64
|
||||||
|
before_script:
|
||||||
|
- ./.gitlab/before_script/linux/install_deps.sh
|
||||||
|
- ./.gitlab/script/ci.sh extract_cabal_cache
|
||||||
|
after_script:
|
||||||
|
- ./.gitlab/script/ci.sh save_cabal_cache
|
||||||
|
- bash ./.gitlab/after_script.sh
|
||||||
|
|
||||||
|
.test_ghcup_version:darwin:
|
||||||
|
extends:
|
||||||
|
- .test_ghcup_version
|
||||||
|
- .darwin
|
||||||
|
before_script:
|
||||||
|
- ./.gitlab/before_script/darwin/install_deps.sh
|
||||||
|
- ./.gitlab/script/ci.sh extract_cabal_cache
|
||||||
|
after_script:
|
||||||
|
- ./.gitlab/script/ci.sh save_cabal_cache
|
||||||
|
- bash ./.gitlab/after_script.sh
|
||||||
|
|
||||||
|
.test_ghcup_version:darwin:aarch64:
|
||||||
|
extends:
|
||||||
|
- .test_ghcup_version
|
||||||
|
- .darwin:aarch64
|
||||||
|
cache:
|
||||||
|
key: darwin-brew-$CACHE_REV
|
||||||
|
paths:
|
||||||
|
- brew_cache
|
||||||
|
key: ghcup-test-$CACHE_REV
|
||||||
|
paths:
|
||||||
|
- cabal-cache
|
||||||
|
before_script:
|
||||||
|
# extract brew cache
|
||||||
|
- ./.gitlab/script/ci.sh extract_brew_cache
|
||||||
|
# otherwise we seem to get intel binaries
|
||||||
|
- export HOMEBREW_CHANGE_ARCH_TO_ARM=1
|
||||||
|
# update and install packages
|
||||||
|
- /bin/bash ./.gitlab/script/brew.sh llvm autoconf automake coreutils
|
||||||
|
# extract cabal cache
|
||||||
|
- ./.gitlab/script/ci.sh extract_cabal_cache
|
||||||
|
script: |
|
||||||
|
export PATH="$CI_PROJECT_DIR/.brew/opt/llvm/bin:$CI_PROJECT_DIR/.brew/bin:$CI_PROJECT_DIR/.brew/sbin:$PATH"
|
||||||
|
export CC=$CI_PROJECT_DIR/.brew/opt/llvm/bin/clang
|
||||||
|
export CXX=$CI_PROJECT_DIR/.brew/opt/llvm/bin/clang++
|
||||||
|
export LD=ld
|
||||||
|
export AR=$CI_PROJECT_DIR/.brew/opt/llvm/bin/llvm-ar
|
||||||
|
export RANLIB=$CI_PROJECT_DIR/.brew/opt/llvm/bin/llvm-ranlib
|
||||||
|
./.gitlab/before_script/darwin/install_deps.sh
|
||||||
|
./.gitlab/script/ghcup_version.sh
|
||||||
|
after_script:
|
||||||
|
- ./.gitlab/script/ci.sh save_cabal_cache
|
||||||
|
- ./.gitlab/script/ci.sh save_brew_cache
|
||||||
|
- bash ./.gitlab/after_script.sh
|
||||||
|
|
||||||
|
.test_ghcup_version:freebsd12:
|
||||||
|
extends:
|
||||||
|
- .test_ghcup_version
|
||||||
|
- .freebsd12
|
||||||
|
before_script:
|
||||||
|
- ./.gitlab/before_script/freebsd/install_deps.sh
|
||||||
|
- ./.gitlab/script/ci.sh extract_cabal_cache
|
||||||
|
after_script:
|
||||||
|
- ./.gitlab/script/ci.sh save_cabal_cache
|
||||||
|
- bash ./.gitlab/after_script.sh
|
||||||
|
|
||||||
|
.test_ghcup_version:freebsd13:
|
||||||
|
extends:
|
||||||
|
- .test_ghcup_version
|
||||||
|
- .freebsd13
|
||||||
|
before_script:
|
||||||
|
- sudo pkg update
|
||||||
|
- sudo pkg install --yes compat12x-amd64
|
||||||
|
- sudo ln -s libncurses.so.6 /usr/local/lib/libncurses.so.6.2
|
||||||
|
- ./.gitlab/before_script/freebsd/install_deps.sh
|
||||||
|
- ./.gitlab/script/ci.sh extract_cabal_cache
|
||||||
|
after_script:
|
||||||
|
- ./.gitlab/script/ci.sh save_cabal_cache
|
||||||
|
- bash ./.gitlab/after_script.sh
|
||||||
|
|
||||||
|
.test_ghcup_version:windows:
|
||||||
|
extends:
|
||||||
|
- .test_ghcup_version
|
||||||
|
- .windows
|
||||||
|
before_script:
|
||||||
|
- bash ./.gitlab/before_script/windows/install_deps.sh
|
||||||
|
- bash ./.gitlab/script/ci.sh extract_cabal_cache
|
||||||
|
after_script:
|
||||||
|
- bash ./.gitlab/script/ci.sh save_cabal_cache
|
||||||
|
- bash ./.gitlab/after_script.sh
|
||||||
|
|
||||||
|
# .test_ghcup_scoop:windows:
|
||||||
|
# extends:
|
||||||
|
# - .windows
|
||||||
|
# - .test_ghcup_scoop
|
||||||
|
|
||||||
|
.release_ghcup:
|
||||||
|
script:
|
||||||
|
- bash ./.gitlab/script/ghcup_release.sh
|
||||||
|
artifacts:
|
||||||
|
expire_in: 2 week
|
||||||
|
paths:
|
||||||
|
- out
|
||||||
|
- dist-newstyle/cache/
|
||||||
|
only:
|
||||||
|
- tags
|
||||||
|
variables:
|
||||||
|
JSON_VERSION: "0.0.7"
|
||||||
|
|
||||||
|
######## stack test ########
|
||||||
|
|
||||||
|
test:linux:stack:
|
||||||
|
stage: test
|
||||||
|
before_script:
|
||||||
|
- ./.gitlab/script/ci.sh extract_stack_cache
|
||||||
|
- ./.gitlab/before_script/linux/install_deps_minimal.sh
|
||||||
|
script:
|
||||||
|
- ./.gitlab/script/ghcup_stack.sh
|
||||||
|
after_script:
|
||||||
|
- ./.gitlab/script/ci.sh save_stack_cache
|
||||||
|
extends:
|
||||||
|
- .debian
|
||||||
|
needs: []
|
||||||
|
|
||||||
|
######## bootstrap test ########
|
||||||
|
|
||||||
|
test:linux:bootstrap_script:
|
||||||
|
stage: quick-test
|
||||||
|
before_script:
|
||||||
|
- ./.gitlab/before_script/linux/install_deps_minimal.sh
|
||||||
|
script:
|
||||||
|
- ./.gitlab/script/ghcup_bootstrap.sh
|
||||||
|
variables:
|
||||||
|
GHC_VERSION: "8.10.7"
|
||||||
|
CABAL_VERSION: "3.6.2.0"
|
||||||
|
extends:
|
||||||
|
- .debian
|
||||||
|
- .root_cleanup
|
||||||
|
needs: []
|
||||||
|
|
||||||
|
test:windows:bootstrap_powershell_script:
|
||||||
|
stage: quick-test
|
||||||
|
script:
|
||||||
|
- ./scripts/bootstrap/bootstrap-haskell.ps1 -InstallDir $CI_PROJECT_DIR -BootstrapUrl $CI_PROJECT_DIR/bootstrap-haskell -InBash
|
||||||
|
after_script:
|
||||||
|
- "[Environment]::SetEnvironmentVariable('GHCUP_INSTALL_BASE_PREFIX', $null, [System.EnvironmentVariableTarget]::User)"
|
||||||
|
- "[Environment]::SetEnvironmentVariable('GHCUP_MSYS2', $null, [System.EnvironmentVariableTarget]::User)"
|
||||||
|
- "[Environment]::SetEnvironmentVariable('CABAL_DIR', $null, [System.EnvironmentVariableTarget]::User)"
|
||||||
|
- bash ./.gitlab/after_script.sh
|
||||||
|
- bash ./.gitlab/script/ci.sh save_cabal_cache
|
||||||
|
variables:
|
||||||
|
GHC_VERSION: "8.10.7"
|
||||||
|
CABAL_VERSION: "3.6.2.0"
|
||||||
|
extends:
|
||||||
|
- .windows
|
||||||
|
needs: []
|
||||||
|
|
||||||
|
######## linux test ########
|
||||||
|
|
||||||
|
test:linux:
|
||||||
|
stage: test
|
||||||
|
extends: .test_ghcup_version:linux
|
||||||
|
variables:
|
||||||
|
GHC_VERSION: "8.10.7"
|
||||||
|
CABAL_VERSION: "3.6.2.0"
|
||||||
|
needs: []
|
||||||
|
|
||||||
|
test:linux:hls:
|
||||||
|
stage: expensive-test
|
||||||
|
extends:
|
||||||
|
- .test_ghcup_version
|
||||||
|
- .debian
|
||||||
|
variables:
|
||||||
|
GHC_VERSION: "8.10.7"
|
||||||
|
HLS_TARGET_VERSION: "1.4.0"
|
||||||
|
CABAL_VERSION: "3.6.2.0"
|
||||||
|
needs: []
|
||||||
|
when: manual
|
||||||
|
allow_failure: true
|
||||||
|
before_script:
|
||||||
|
- ./.gitlab/before_script/linux/install_deps.sh
|
||||||
|
script:
|
||||||
|
- ./.gitlab/script/ghcup_hls.sh
|
||||||
|
|
||||||
|
test:linux:cross-armv7:
|
||||||
|
stage: expensive-test
|
||||||
|
extends:
|
||||||
|
- .test_ghcup_version
|
||||||
|
- .debian
|
||||||
|
variables:
|
||||||
|
GHC_VERSION: "8.10.6"
|
||||||
|
GHC_TARGET_VERSION: "8.10.7"
|
||||||
|
CABAL_VERSION: "3.6.2.0"
|
||||||
|
CROSS: "arm-linux-gnueabihf"
|
||||||
|
needs: []
|
||||||
|
when: manual
|
||||||
|
allow_failure: true
|
||||||
|
before_script:
|
||||||
|
- ./.gitlab/before_script/linux/install_deps.sh
|
||||||
|
script:
|
||||||
|
- ./.gitlab/script/ghcup_cross.sh
|
||||||
|
|
||||||
|
test:linux:git:hadrian:
|
||||||
|
stage: expensive-test
|
||||||
|
extends:
|
||||||
|
- .test_ghcup_version
|
||||||
|
- .debian
|
||||||
|
variables:
|
||||||
|
GHC_VERSION: "8.10.7"
|
||||||
|
GHC_GIT_TAG: "ghc-9.0.1-release"
|
||||||
|
GHC_GIT_VERSION: "9.0.1"
|
||||||
|
CABAL_VERSION: "3.6.2.0"
|
||||||
|
CROSS: ""
|
||||||
|
needs: []
|
||||||
|
when: manual
|
||||||
|
allow_failure: true
|
||||||
|
before_script:
|
||||||
|
- ./.gitlab/before_script/linux/install_deps.sh
|
||||||
|
script:
|
||||||
|
- ./.gitlab/script/ghcup_git.sh
|
||||||
|
|
||||||
|
|
||||||
|
######## linux 32bit test ########
|
||||||
|
|
||||||
|
test:linux:32bit:
|
||||||
|
stage: test
|
||||||
|
extends: .test_ghcup_version:linux32
|
||||||
|
variables:
|
||||||
|
GHC_VERSION: "8.10.7"
|
||||||
|
CABAL_VERSION: "3.6.2.0"
|
||||||
|
needs: []
|
||||||
|
|
||||||
|
######## arm tests ########
|
||||||
|
|
||||||
|
test:linux:armv7:
|
||||||
|
stage: test
|
||||||
|
extends: .test_ghcup_version:armv7
|
||||||
|
variables:
|
||||||
|
GHC_VERSION: "8.10.7"
|
||||||
|
CABAL_VERSION: "3.6.2.0"
|
||||||
|
CROSS: ""
|
||||||
|
when: manual
|
||||||
|
needs: []
|
||||||
|
|
||||||
|
test:linux:aarch64:
|
||||||
|
stage: test
|
||||||
|
extends: .test_ghcup_version:aarch64
|
||||||
|
variables:
|
||||||
|
GHC_VERSION: "8.10.7"
|
||||||
|
CABAL_VERSION: "3.6.2.0"
|
||||||
|
CROSS: ""
|
||||||
|
when: manual
|
||||||
|
needs: []
|
||||||
|
|
||||||
|
######## darwin test ########
|
||||||
|
|
||||||
|
test:mac:
|
||||||
|
stage: test
|
||||||
|
extends: .test_ghcup_version:darwin
|
||||||
|
variables:
|
||||||
|
GHC_VERSION: "8.10.7"
|
||||||
|
CABAL_VERSION: "3.6.2.0"
|
||||||
|
needs: []
|
||||||
|
|
||||||
|
test:mac:aarch64:
|
||||||
|
stage: test
|
||||||
|
extends: .test_ghcup_version:darwin:aarch64
|
||||||
|
variables:
|
||||||
|
GHC_VERSION: "8.10.7"
|
||||||
|
CABAL_VERSION: "3.6.2.0"
|
||||||
|
needs: []
|
||||||
|
allow_failure: true
|
||||||
|
when: manual
|
||||||
|
|
||||||
|
|
||||||
|
######## freebsd test ########
|
||||||
|
|
||||||
|
test:freebsd12:
|
||||||
|
stage: test
|
||||||
|
extends: .test_ghcup_version:freebsd12
|
||||||
|
variables:
|
||||||
|
GHC_VERSION: "8.10.7"
|
||||||
|
CABAL_VERSION: "3.6.2.0"
|
||||||
|
allow_failure: true # freebsd runners are unreliable
|
||||||
|
when: manual
|
||||||
|
needs: []
|
||||||
|
|
||||||
|
test:freebsd13:
|
||||||
|
stage: test
|
||||||
|
extends: .test_ghcup_version:freebsd13
|
||||||
|
variables:
|
||||||
|
GHC_VERSION: "8.10.7"
|
||||||
|
CABAL_VERSION: "3.6.2.0"
|
||||||
|
allow_failure: true # freebsd runners are unreliable
|
||||||
|
when: manual
|
||||||
|
needs: []
|
||||||
|
|
||||||
|
######## windows test ########
|
||||||
|
|
||||||
|
test:windows:
|
||||||
|
stage: test
|
||||||
|
extends: .test_ghcup_version:windows
|
||||||
|
variables:
|
||||||
|
GHC_VERSION: "8.10.7"
|
||||||
|
CABAL_VERSION: "3.6.2.0"
|
||||||
|
needs: []
|
||||||
|
|
||||||
|
# test:windows:scoop:
|
||||||
|
# stage: test
|
||||||
|
# extends: .test_ghcup_scoop:windows
|
||||||
|
# needs: []
|
||||||
|
|
||||||
|
######## linux release ########
|
||||||
|
|
||||||
|
release:linux:64bit:
|
||||||
|
stage: release
|
||||||
|
needs: ["test:linux"]
|
||||||
|
extends:
|
||||||
|
- .alpine:64bit
|
||||||
|
- .release_ghcup
|
||||||
|
before_script:
|
||||||
|
- ./.gitlab/before_script/linux/alpine/install_deps.sh
|
||||||
|
variables:
|
||||||
|
ARTIFACT: "x86_64-linux-ghcup"
|
||||||
|
GHC_VERSION: "8.10.7"
|
||||||
|
CABAL_VERSION: "3.6.2.0"
|
||||||
|
|
||||||
|
|
||||||
|
release:linux:32bit:
|
||||||
|
stage: release
|
||||||
|
needs: ["test:linux:32bit"]
|
||||||
|
extends:
|
||||||
|
- .alpine:32bit
|
||||||
|
- .release_ghcup
|
||||||
|
before_script:
|
||||||
|
- ./.gitlab/before_script/linux/alpine/install_deps.sh
|
||||||
|
variables:
|
||||||
|
ARTIFACT: "i386-linux-ghcup"
|
||||||
|
GHC_VERSION: "8.10.7"
|
||||||
|
CABAL_VERSION: "3.6.2.0"
|
||||||
|
|
||||||
|
release:linux:armv7:
|
||||||
|
stage: release
|
||||||
|
needs: ["test:linux:armv7"]
|
||||||
|
extends:
|
||||||
|
- .linux:armv7
|
||||||
|
- .release_ghcup
|
||||||
|
before_script:
|
||||||
|
- ./.gitlab/before_script/linux/install_deps.sh
|
||||||
|
variables:
|
||||||
|
ARTIFACT: "armv7-linux-ghcup"
|
||||||
|
GHC_VERSION: "8.10.7"
|
||||||
|
CABAL_VERSION: "3.6.2.0"
|
||||||
|
CROSS: ""
|
||||||
|
|
||||||
|
release:linux:aarch64:
|
||||||
|
stage: release
|
||||||
|
needs: ["test:linux:aarch64"]
|
||||||
|
extends:
|
||||||
|
- .linux:aarch64
|
||||||
|
- .release_ghcup
|
||||||
|
before_script:
|
||||||
|
- ./.gitlab/before_script/linux/install_deps.sh
|
||||||
|
variables:
|
||||||
|
ARTIFACT: "aarch64-linux-ghcup"
|
||||||
|
GHC_VERSION: "8.10.7"
|
||||||
|
CABAL_VERSION: "3.6.2.0"
|
||||||
|
CROSS: ""
|
||||||
|
|
||||||
|
######## darwin release ########
|
||||||
|
|
||||||
|
release:darwin:
|
||||||
|
stage: release
|
||||||
|
needs: ["test:mac"]
|
||||||
|
extends:
|
||||||
|
- .darwin
|
||||||
|
- .release_ghcup
|
||||||
|
- .root_cleanup
|
||||||
|
before_script:
|
||||||
|
- ./.gitlab/before_script/darwin/install_deps.sh
|
||||||
|
variables:
|
||||||
|
ARTIFACT: "x86_64-apple-darwin-ghcup"
|
||||||
|
GHC_VERSION: "8.10.7"
|
||||||
|
CABAL_VERSION: "3.6.2.0"
|
||||||
|
MACOSX_DEPLOYMENT_TARGET: "10.7"
|
||||||
|
|
||||||
|
release:darwin:aarch64:
|
||||||
|
stage: release
|
||||||
|
needs: ["test:mac:aarch64"]
|
||||||
|
extends:
|
||||||
|
- .darwin:aarch64
|
||||||
|
- .release_ghcup
|
||||||
|
- .root_cleanup
|
||||||
|
cache:
|
||||||
|
key: darwin-brew-$CACHE_REV
|
||||||
|
paths:
|
||||||
|
- brew_cache
|
||||||
|
key: ghcup-test-$CACHE_REV
|
||||||
|
paths:
|
||||||
|
- cabal-cache
|
||||||
|
before_script:
|
||||||
|
- ./.gitlab/script/ci.sh extract_brew_cache
|
||||||
|
- ./.gitlab/script/ci.sh extract_cabal_cache
|
||||||
|
# otherwise we seem to get intel binaries
|
||||||
|
- export HOMEBREW_CHANGE_ARCH_TO_ARM=1
|
||||||
|
# update and install packages
|
||||||
|
- /bin/bash ./.gitlab/script/brew.sh llvm autoconf automake coreutils
|
||||||
|
script: |
|
||||||
|
export PATH="$CI_PROJECT_DIR/.brew/opt/llvm/bin:$CI_PROJECT_DIR/.brew/bin:$CI_PROJECT_DIR/.brew/sbin:$PATH"
|
||||||
|
export CC=$CI_PROJECT_DIR/.brew/opt/llvm/bin/clang
|
||||||
|
export CXX=$CI_PROJECT_DIR/.brew/opt/llvm/bin/clang++
|
||||||
|
export LD=ld
|
||||||
|
export AR=$CI_PROJECT_DIR/.brew/opt/llvm/bin/llvm-ar
|
||||||
|
export RANLIB=$CI_PROJECT_DIR/.brew/opt/llvm/bin/llvm-ranlib
|
||||||
|
./.gitlab/before_script/darwin/install_deps.sh
|
||||||
|
./.gitlab/script/ghcup_release.sh
|
||||||
|
after_script:
|
||||||
|
- ./.gitlab/script/ci.sh save_cabal_cache
|
||||||
|
- ./.gitlab/script/ci.sh save_brew_cache
|
||||||
|
variables:
|
||||||
|
ARTIFACT: "aarch64-apple-darwin-ghcup"
|
||||||
|
GHC_VERSION: "8.10.7"
|
||||||
|
CABAL_VERSION: "3.6.2.0"
|
||||||
|
MACOSX_DEPLOYMENT_TARGET: "10.7"
|
||||||
|
allow_failure: true
|
||||||
|
when: manual
|
||||||
|
|
||||||
|
|
||||||
|
######## freebsd release ########
|
||||||
|
|
||||||
|
release:freebsd12:
|
||||||
|
stage: release
|
||||||
|
needs: ["test:freebsd12"]
|
||||||
|
extends:
|
||||||
|
- .freebsd12
|
||||||
|
- .release_ghcup
|
||||||
|
- .root_cleanup
|
||||||
|
before_script:
|
||||||
|
- ./.gitlab/before_script/freebsd/install_deps.sh
|
||||||
|
variables:
|
||||||
|
ARTIFACT: "x86_64-portbld-freebsd-ghcup"
|
||||||
|
GHC_VERSION: "8.10.7"
|
||||||
|
CABAL_VERSION: "3.6.2.0"
|
||||||
|
allow_failure: true
|
||||||
|
|
||||||
|
release:freebsd13:
|
||||||
|
stage: release
|
||||||
|
needs: ["test:freebsd13"]
|
||||||
|
extends:
|
||||||
|
- .freebsd13
|
||||||
|
- .release_ghcup
|
||||||
|
- .root_cleanup
|
||||||
|
before_script:
|
||||||
|
- sudo pkg update
|
||||||
|
- sudo pkg install --yes compat12x-amd64
|
||||||
|
- sudo ln -s libncurses.so.6 /usr/local/lib/libncurses.so.6.2
|
||||||
|
- ./.gitlab/before_script/freebsd/install_deps.sh
|
||||||
|
variables:
|
||||||
|
ARTIFACT: "x86_64-portbld-freebsd-ghcup"
|
||||||
|
GHC_VERSION: "8.10.7"
|
||||||
|
CABAL_VERSION: "3.6.2.0"
|
||||||
|
allow_failure: true
|
||||||
|
|
||||||
|
######## windows release ########
|
||||||
|
|
||||||
|
release:windows:
|
||||||
|
stage: release
|
||||||
|
needs: ["test:windows"]
|
||||||
|
extends:
|
||||||
|
- .windows
|
||||||
|
- .release_ghcup
|
||||||
|
- .root_cleanup
|
||||||
|
before_script:
|
||||||
|
- bash ./.gitlab/before_script/windows/install_deps.sh
|
||||||
|
variables:
|
||||||
|
ARTIFACT: "x86_64-mingw64-ghcup"
|
||||||
|
GHC_VERSION: "8.10.7"
|
||||||
|
CABAL_VERSION: "3.6.2.0"
|
||||||
|
|
||||||
|
######## hlint ########
|
||||||
|
|
||||||
|
hlint:
|
||||||
|
stage: checks
|
||||||
|
extends:
|
||||||
|
- .debian
|
||||||
|
script:
|
||||||
|
- curl -sSL https://raw.github.com/ndmitchell/hlint/master/misc/run.sh | sh -s -- -r lib/ test/
|
||||||
|
allow_failure: true
|
||||||
|
artifacts:
|
||||||
|
expire_in: 2 week
|
||||||
|
paths:
|
||||||
|
- report.html
|
||||||
|
when: on_failure
|
||||||
|
|
||||||
|
######## mkdocs ########
|
||||||
|
|
||||||
|
mkdocs:
|
||||||
|
stage: checks
|
||||||
|
extends:
|
||||||
|
- .debian
|
||||||
|
before_script:
|
||||||
|
- sudo apt-get update -y
|
||||||
|
- sudo apt-get install -y python3-pip
|
||||||
|
- pip3 install mkdocs
|
||||||
|
script:
|
||||||
|
- ~/.local/bin/mkdocs build
|
||||||
|
allow_failure: true
|
||||||
|
|
||||||
|
######## shellcheck ########
|
||||||
|
|
||||||
|
shellcheck:
|
||||||
|
image: "koalaman/shellcheck-alpine"
|
||||||
|
tags:
|
||||||
|
- x86_64-linux
|
||||||
|
stage: checks
|
||||||
|
script:
|
||||||
|
- shellcheck scripts/bootstrap/bootstrap-haskell
|
||||||
|
allow_failure: true
|
||||||
|
|
19
.gitlab/after_script.sh
Normal file
19
.gitlab/after_script.sh
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
|
||||||
|
BUILD_DIR=$CI_PROJECT_DIR
|
||||||
|
echo "Cleaning $BUILD_DIR"
|
||||||
|
cd $HOME
|
||||||
|
test -n "$BUILD_DIR"
|
||||||
|
shopt -s extglob
|
||||||
|
rm -Rf "$BUILD_DIR"/!(out)
|
||||||
|
if [ "${OS}" = "WINDOWS" ] ; then
|
||||||
|
rm -Rf /c/ghcup
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${OS}" = "DARWIN" ] ; then
|
||||||
|
rm -Rf /private/tmp/.brew_tmp
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
32
.gitlab/before_script/darwin/install_deps.sh
Executable file
32
.gitlab/before_script/darwin/install_deps.sh
Executable file
@ -0,0 +1,32 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
|
||||||
|
. "$( cd "$(dirname "$0")" ; pwd -P )/../../ghcup_env"
|
||||||
|
|
||||||
|
mkdir -p "${TMPDIR}"
|
||||||
|
|
||||||
|
if [ $ARCH = 'ARM64' ] ; then
|
||||||
|
curl -sSfL https://downloads.haskell.org/~ghcup/aarch64-apple-darwin-ghcup > ./ghcup-bin
|
||||||
|
chmod +x ghcup-bin
|
||||||
|
else
|
||||||
|
curl -sSfL https://downloads.haskell.org/~ghcup/x86_64-apple-darwin-ghcup > ./ghcup-bin
|
||||||
|
chmod +x ghcup-bin
|
||||||
|
./ghcup-bin upgrade -i -f
|
||||||
|
fi
|
||||||
|
|
||||||
|
./ghcup-bin install ${GHC_VERSION}
|
||||||
|
./ghcup-bin set ${GHC_VERSION}
|
||||||
|
./ghcup-bin install-cabal ${CABAL_VERSION}
|
||||||
|
|
||||||
|
if [ $ARCH = 'ARM64' ] ; then
|
||||||
|
cabal update
|
||||||
|
mkdir vendored
|
||||||
|
cd vendored
|
||||||
|
cabal unpack network-3.1.2.1
|
||||||
|
cd network*
|
||||||
|
autoreconf -fi
|
||||||
|
cd ../..
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
27
.gitlab/before_script/freebsd/install_deps.sh
Executable file
27
.gitlab/before_script/freebsd/install_deps.sh
Executable file
@ -0,0 +1,27 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
|
||||||
|
# pkg install --force --yes --no-repo-update curl gcc gmp gmake ncurses perl5 libffi libiconv
|
||||||
|
|
||||||
|
. "$( cd "$(dirname "$0")" ; pwd -P )/../../ghcup_env"
|
||||||
|
|
||||||
|
mkdir -p "${TMPDIR}"
|
||||||
|
|
||||||
|
if freebsd-version | grep -E '^12.*' ; then
|
||||||
|
freebsd_ver=12
|
||||||
|
elif freebsd-version | grep -E '^13.*' ; then
|
||||||
|
freebsd_ver=13
|
||||||
|
else
|
||||||
|
(>&2 echo "Unsupported FreeBSD version! Please report a bug at https://gitlab.haskell.org/haskell/ghcup-hs/-/issues")
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
curl -sSfL https://downloads.haskell.org/~ghcup/x86_64-freebsd${freebsd_ver}-ghcup > ./ghcup-bin
|
||||||
|
chmod +x ghcup-bin
|
||||||
|
|
||||||
|
./ghcup-bin -v upgrade -i -f
|
||||||
|
./ghcup-bin -v install ${GHC_VERSION}
|
||||||
|
./ghcup-bin -v set ${GHC_VERSION}
|
||||||
|
./ghcup-bin -v install-cabal ${CABAL_VERSION}
|
||||||
|
|
||||||
|
exit 0
|
58
.gitlab/before_script/linux/alpine/install_deps.sh
Executable file
58
.gitlab/before_script/linux/alpine/install_deps.sh
Executable file
@ -0,0 +1,58 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
|
||||||
|
. "$( cd "$(dirname "$0")" ; pwd -P )/../../../ghcup_env"
|
||||||
|
|
||||||
|
mkdir -p "${TMPDIR}"
|
||||||
|
|
||||||
|
apk add --no-cache \
|
||||||
|
curl \
|
||||||
|
gcc \
|
||||||
|
g++ \
|
||||||
|
binutils \
|
||||||
|
binutils-gold \
|
||||||
|
bsd-compat-headers \
|
||||||
|
gmp-dev \
|
||||||
|
ncurses-dev \
|
||||||
|
libffi-dev \
|
||||||
|
make \
|
||||||
|
xz \
|
||||||
|
tar \
|
||||||
|
perl
|
||||||
|
|
||||||
|
if [ "${ARCH}" = "32" ] ; then
|
||||||
|
curl -sSfL https://downloads.haskell.org/ghcup/i386-linux-ghcup > ./ghcup-bin
|
||||||
|
else
|
||||||
|
curl -sSfL https://downloads.haskell.org/ghcup/x86_64-linux-ghcup > ./ghcup-bin
|
||||||
|
fi
|
||||||
|
chmod +x ghcup-bin
|
||||||
|
./ghcup-bin upgrade -i -f
|
||||||
|
./ghcup-bin install ${GHC_VERSION}
|
||||||
|
./ghcup-bin install-cabal ${CABAL_VERSION}
|
||||||
|
|
||||||
|
# utils
|
||||||
|
apk add --no-cache \
|
||||||
|
bash \
|
||||||
|
git
|
||||||
|
|
||||||
|
## Package specific
|
||||||
|
apk add --no-cache \
|
||||||
|
zlib \
|
||||||
|
zlib-dev \
|
||||||
|
zlib-static \
|
||||||
|
bzip2 \
|
||||||
|
bzip2-dev \
|
||||||
|
bzip2-static \
|
||||||
|
gmp \
|
||||||
|
gmp-dev \
|
||||||
|
openssl-dev \
|
||||||
|
openssl-libs-static \
|
||||||
|
xz \
|
||||||
|
xz-dev \
|
||||||
|
ncurses-static
|
||||||
|
|
||||||
|
if [ "${ARCH}" = "32" ] ; then
|
||||||
|
apk add --no-cache \
|
||||||
|
bsd-compat-headers
|
||||||
|
fi
|
27
.gitlab/before_script/linux/install_deps.sh
Executable file
27
.gitlab/before_script/linux/install_deps.sh
Executable file
@ -0,0 +1,27 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
|
||||||
|
. "$( cd "$(dirname "$0")" ; pwd -P )/../../ghcup_env"
|
||||||
|
|
||||||
|
mkdir -p "${TMPDIR}"
|
||||||
|
|
||||||
|
sudo apt-get update -y
|
||||||
|
sudo apt-get install -y libnuma-dev zlib1g-dev libgmp-dev libgmp10 libssl-dev liblzma-dev libbz2-dev git wget lsb-release software-properties-common gnupg2 apt-transport-https gcc autoconf automake build-essential
|
||||||
|
|
||||||
|
if [ "${CROSS}" = "arm-linux-gnueabihf" ] ; then
|
||||||
|
sudo apt-get install -y gcc-arm-linux-gnueabihf
|
||||||
|
sudo dpkg --add-architecture armhf
|
||||||
|
sudo apt-get update -y
|
||||||
|
sudo apt-get install -y libncurses-dev:armhf
|
||||||
|
fi
|
||||||
|
|
||||||
|
export BOOTSTRAP_HASKELL_NONINTERACTIVE=1
|
||||||
|
export BOOTSTRAP_HASKELL_GHC_VERSION=$GHC_VERSION
|
||||||
|
export BOOTSTRAP_HASKELL_CABAL_VERSION=$CABAL_VERSION
|
||||||
|
export BOOTSTRAP_HASKELL_VERBOSE=1
|
||||||
|
|
||||||
|
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
|
||||||
|
|
||||||
|
rm "${GHCUP_INSTALL_BASE_PREFIX}"/.ghcup/bin/ghcup
|
||||||
|
|
10
.gitlab/before_script/linux/install_deps_minimal.sh
Executable file
10
.gitlab/before_script/linux/install_deps_minimal.sh
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
|
||||||
|
. "$( cd "$(dirname "$0")" ; pwd -P )/../../ghcup_env"
|
||||||
|
|
||||||
|
mkdir -p "${TMPDIR}"
|
||||||
|
|
||||||
|
sudo apt-get update -y
|
||||||
|
sudo apt-get install -y libnuma-dev zlib1g-dev libgmp-dev libgmp10 libssl-dev liblzma-dev libbz2-dev git wget
|
21
.gitlab/before_script/windows/install_deps.sh
Normal file
21
.gitlab/before_script/windows/install_deps.sh
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
|
||||||
|
. "$( cd "$(dirname "$0")" ; pwd -P )/../../ghcup_env"
|
||||||
|
|
||||||
|
mkdir -p "${TMPDIR}" "${CABAL_DIR}"
|
||||||
|
|
||||||
|
mkdir -p "$GHCUP_INSTALL_BASE_PREFIX/ghcup/bin"
|
||||||
|
|
||||||
|
CI_PROJECT_DIR=$(pwd)
|
||||||
|
curl -o ghcup.exe https://downloads.haskell.org/~ghcup/x86_64-mingw64-ghcup.exe
|
||||||
|
chmod +x ghcup.exe
|
||||||
|
|
||||||
|
./ghcup.exe install ${GHC_VERSION}
|
||||||
|
./ghcup.exe set ${GHC_VERSION}
|
||||||
|
./ghcup.exe install-cabal ${CABAL_VERSION}
|
||||||
|
|
||||||
|
rm ./ghcup.exe
|
||||||
|
|
||||||
|
exit 0
|
23
.gitlab/ghcup_env
Normal file
23
.gitlab/ghcup_env
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
if [ "${OS}" = "WINDOWS" ] ; then
|
||||||
|
export GHCUP_INSTALL_BASE_PREFIX="$CI_PROJECT_DIR"
|
||||||
|
export GHCUP_BIN="$CI_PROJECT_DIR/ghcup/bin"
|
||||||
|
export PATH="$GHCUP_BIN:$CI_PROJECT_DIR/.local/bin:$PATH"
|
||||||
|
export TMPDIR="$CI_PROJECT_DIR/tmp"
|
||||||
|
export CABAL_DIR="$CI_PROJECT_DIR/cabal"
|
||||||
|
export CABAL_CACHE="$CI_PROJECT_DIR/cabal-cache"
|
||||||
|
export STACK_ROOT="$CI_PROJECT_DIR/stack"
|
||||||
|
export STACK_CACHE="$CI_PROJECT_DIR/stack-cache"
|
||||||
|
export BREW_DIR="$CI_PROJECT_DIR/.brew_cache"
|
||||||
|
export BREW_CACHE="$CI_PROJECT_DIR/brew-cache"
|
||||||
|
else
|
||||||
|
export GHCUP_INSTALL_BASE_PREFIX="$CI_PROJECT_DIR"
|
||||||
|
export GHCUP_BIN="$CI_PROJECT_DIR/.ghcup/bin"
|
||||||
|
export PATH="$GHCUP_BIN:$CI_PROJECT_DIR/.local/bin:$PATH"
|
||||||
|
export TMPDIR="$CI_PROJECT_DIR/tmp"
|
||||||
|
export CABAL_DIR="$CI_PROJECT_DIR/cabal"
|
||||||
|
export CABAL_CACHE="$CI_PROJECT_DIR/cabal-cache"
|
||||||
|
export STACK_ROOT="$CI_PROJECT_DIR/stack"
|
||||||
|
export STACK_CACHE="$CI_PROJECT_DIR/stack-cache"
|
||||||
|
export BREW_DIR="$CI_PROJECT_DIR/.brew_cache"
|
||||||
|
export BREW_CACHE="$CI_PROJECT_DIR/brew-cache"
|
||||||
|
fi
|
19
.gitlab/script/brew.sh
Executable file
19
.gitlab/script/brew.sh
Executable file
@ -0,0 +1,19 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -Eeuxo pipefail
|
||||||
|
|
||||||
|
# Install brew locally in the project dir. Packages will also be installed here.
|
||||||
|
[ -e "$CI_PROJECT_DIR/.brew" ] || git clone --depth=1 https://github.com/Homebrew/brew $CI_PROJECT_DIR/.brew
|
||||||
|
export PATH="$CI_PROJECT_DIR/.brew/bin:$CI_PROJECT_DIR/.brew/sbin:$PATH"
|
||||||
|
|
||||||
|
# make sure to not pollute the machine with temp files etc
|
||||||
|
mkdir -p $CI_PROJECT_DIR/.brew_cache
|
||||||
|
export HOMEBREW_CACHE=$CI_PROJECT_DIR/.brew_cache
|
||||||
|
mkdir -p $CI_PROJECT_DIR/.brew_logs
|
||||||
|
export HOMEBREW_LOGS=$CI_PROJECT_DIR/.brew_logs
|
||||||
|
mkdir -p /private/tmp/.brew_tmp
|
||||||
|
export HOMEBREW_TEMP=/private/tmp/.brew_tmp
|
||||||
|
|
||||||
|
# update and install packages
|
||||||
|
brew update
|
||||||
|
brew install ${1+"$@"}
|
70
.gitlab/script/ci.sh
Executable file
70
.gitlab/script/ci.sh
Executable file
@ -0,0 +1,70 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -Eeuo pipefail
|
||||||
|
|
||||||
|
TOP="$( cd "$(dirname "$0")" ; pwd -P )"
|
||||||
|
. "${TOP}/../ghcup_env"
|
||||||
|
|
||||||
|
function save_cabal_cache () {
|
||||||
|
echo "Storing cabal cache from $CABAL_DIR to $CABAL_CACHE..."
|
||||||
|
rm -Rf "$CABAL_CACHE"
|
||||||
|
mkdir -p "$CABAL_CACHE"
|
||||||
|
if [ -d "$CABAL_DIR" ]; then
|
||||||
|
cp -Rf "$CABAL_DIR" "$CABAL_CACHE/"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function extract_cabal_cache () {
|
||||||
|
if [ -d "$CABAL_CACHE" ]; then
|
||||||
|
echo "Extracting cabal cache from $CABAL_CACHE to $CABAL_DIR..."
|
||||||
|
mkdir -p "$CABAL_DIR"
|
||||||
|
cp -Rf "$CABAL_CACHE"/* "$CABAL_DIR"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function save_stack_cache () {
|
||||||
|
echo "Storing stack cache from $STACK_ROOT to $STACK_CACHE..."
|
||||||
|
rm -Rf "$STACK_CACHE"
|
||||||
|
mkdir -p "$STACK_CACHE"
|
||||||
|
if [ -d "$STACK_ROOT" ]; then
|
||||||
|
cp -Rf "$STACK_DIR" "$STACK_CACHE"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function extract_stack_cache () {
|
||||||
|
if [ -d "$STACK_CACHE" ]; then
|
||||||
|
echo "Extracting stack cache from $STACK_CACHE to $STACK_ROOT..."
|
||||||
|
mkdir -p "$STACK_ROOT"
|
||||||
|
cp -Rf "$STACK_CACHE"/* "$STACK_ROOT"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function save_brew_cache () {
|
||||||
|
echo "Storing brew cache from $BREW_DIR to $BREW_CACHE..."
|
||||||
|
rm -Rf "$BREW_CACHE"
|
||||||
|
mkdir -p "$BREW_CACHE"
|
||||||
|
if [ -d "$BREW_DIR" ]; then
|
||||||
|
cp -Rf "$BREW_DIR" "$BREW_CACHE"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function extract_brew_cache () {
|
||||||
|
if [ -d "$BREW_CACHE" ]; then
|
||||||
|
echo "Extracting stack cache from $BREW_CACHE to $BREW_DIR..."
|
||||||
|
mkdir -p "$BREW_DIR"
|
||||||
|
cp -Rf "$BREW_CACHE"/* "$BREW_DIR"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
case $1 in
|
||||||
|
extract_cabal_cache) extract_cabal_cache ;;
|
||||||
|
save_cabal_cache) save_cabal_cache ;;
|
||||||
|
extract_stack_cache) extract_stack_cache ;;
|
||||||
|
save_stack_cache) save_stack_cache ;;
|
||||||
|
extract_brew_cache) extract_brew_cache ;;
|
||||||
|
save_brew_cache) save_brew_cache ;;
|
||||||
|
*) echo "unknown mode $1" ; exit 11 ;;
|
||||||
|
esac
|
20
.gitlab/script/ghcup_bootstrap.sh
Executable file
20
.gitlab/script/ghcup_bootstrap.sh
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
|
||||||
|
. "$( cd "$(dirname "$0")" ; pwd -P )/../ghcup_env"
|
||||||
|
|
||||||
|
mkdir -p "$CI_PROJECT_DIR"/.local/bin
|
||||||
|
|
||||||
|
git describe --always
|
||||||
|
|
||||||
|
### build
|
||||||
|
|
||||||
|
export BOOTSTRAP_HASKELL_NONINTERACTIVE=yes
|
||||||
|
export BOOTSTRAP_HASKELL_GHC_VERSION=$GHC_VERSION
|
||||||
|
export BOOTSTRAP_HASKELL_CABAL_VERSION=$CABAL_VERSION
|
||||||
|
|
||||||
|
./scripts/bootstrap/bootstrap-haskell
|
||||||
|
|
||||||
|
[ "$(ghc --numeric-version)" = "${GHC_VERSION}" ]
|
||||||
|
|
52
.gitlab/script/ghcup_cross.sh
Executable file
52
.gitlab/script/ghcup_cross.sh
Executable file
@ -0,0 +1,52 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
|
||||||
|
. "$( cd "$(dirname "$0")" ; pwd -P )/../ghcup_env"
|
||||||
|
|
||||||
|
mkdir -p "$CI_PROJECT_DIR"/.local/bin
|
||||||
|
|
||||||
|
CI_PROJECT_DIR=$(pwd)
|
||||||
|
|
||||||
|
ecabal() {
|
||||||
|
cabal "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
eghcup() {
|
||||||
|
ghcup -v -c -s file://$CI_PROJECT_DIR/data/metadata/ghcup-${JSON_VERSION}.yaml "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
git describe --always
|
||||||
|
|
||||||
|
### build
|
||||||
|
|
||||||
|
ecabal update
|
||||||
|
|
||||||
|
ecabal build -w ghc-${GHC_VERSION}
|
||||||
|
cp "$(ecabal new-exec -w ghc-${GHC_VERSION} --verbose=0 --offline sh -- -c 'command -v ghcup')" "$CI_PROJECT_DIR"/.local/bin/ghcup
|
||||||
|
|
||||||
|
### cleanup
|
||||||
|
|
||||||
|
rm -rf "${GHCUP_INSTALL_BASE_PREFIX}"/.ghcup
|
||||||
|
|
||||||
|
### manual cli based testing
|
||||||
|
|
||||||
|
eghcup --numeric-version
|
||||||
|
|
||||||
|
eghcup install ghc ${GHC_VERSION}
|
||||||
|
eghcup set ghc ${GHC_VERSION}
|
||||||
|
eghcup install cabal ${CABAL_VERSION}
|
||||||
|
|
||||||
|
cabal --version
|
||||||
|
|
||||||
|
eghcup debug-info
|
||||||
|
|
||||||
|
eghcup compile ghc -j $(nproc) -v ${GHC_TARGET_VERSION} -b ${GHC_VERSION} -x ${CROSS} -- --enable-unregisterised
|
||||||
|
eghcup set ghc ${CROSS}-${GHC_TARGET_VERSION}
|
||||||
|
|
||||||
|
[ `$(eghcup whereis ghc ${CROSS}-${GHC_TARGET_VERSION}) --numeric-version` = "${GHC_TARGET_VERSION}" ]
|
||||||
|
|
||||||
|
# nuke
|
||||||
|
eghcup nuke
|
||||||
|
[ ! -e "${GHCUP_INSTALL_BASE_PREFIX}/.ghcup" ]
|
||||||
|
|
52
.gitlab/script/ghcup_git.sh
Executable file
52
.gitlab/script/ghcup_git.sh
Executable file
@ -0,0 +1,52 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
|
||||||
|
. "$( cd "$(dirname "$0")" ; pwd -P )/../ghcup_env"
|
||||||
|
|
||||||
|
mkdir -p "$CI_PROJECT_DIR"/.local/bin
|
||||||
|
|
||||||
|
CI_PROJECT_DIR=$(pwd)
|
||||||
|
|
||||||
|
ecabal() {
|
||||||
|
cabal "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
eghcup() {
|
||||||
|
ghcup -v -c -s file://$CI_PROJECT_DIR/data/metadata/ghcup-${JSON_VERSION}.yaml "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
git describe --always
|
||||||
|
|
||||||
|
### build
|
||||||
|
|
||||||
|
ecabal update
|
||||||
|
|
||||||
|
ecabal build -w ghc-${GHC_VERSION}
|
||||||
|
cp "$(ecabal new-exec -w ghc-${GHC_VERSION} --verbose=0 --offline sh -- -c 'command -v ghcup')" "$CI_PROJECT_DIR"/.local/bin/ghcup
|
||||||
|
|
||||||
|
### cleanup
|
||||||
|
|
||||||
|
rm -rf "${GHCUP_INSTALL_BASE_PREFIX}"/.ghcup
|
||||||
|
|
||||||
|
### manual cli based testing
|
||||||
|
|
||||||
|
eghcup --numeric-version
|
||||||
|
|
||||||
|
eghcup install ghc ${GHC_VERSION}
|
||||||
|
eghcup set ghc ${GHC_VERSION}
|
||||||
|
eghcup install cabal ${CABAL_VERSION}
|
||||||
|
|
||||||
|
cabal --version
|
||||||
|
|
||||||
|
eghcup debug-info
|
||||||
|
|
||||||
|
eghcup compile ghc -j $(nproc) -g ${GHC_GIT_TAG} -b ${GHC_VERSION} -- --enable-unregisterised
|
||||||
|
eghcup set ghc ${GHC_GIT_VERSION}
|
||||||
|
|
||||||
|
[ `$(eghcup whereis ghc ${GHC_GIT_VERSION}) --numeric-version` = "${GHC_GIT_VERSION}" ]
|
||||||
|
|
||||||
|
# nuke
|
||||||
|
eghcup nuke
|
||||||
|
[ ! -e "${GHCUP_INSTALL_BASE_PREFIX}/.ghcup" ]
|
||||||
|
|
51
.gitlab/script/ghcup_hls.sh
Executable file
51
.gitlab/script/ghcup_hls.sh
Executable file
@ -0,0 +1,51 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
|
||||||
|
. "$( cd "$(dirname "$0")" ; pwd -P )/../ghcup_env"
|
||||||
|
|
||||||
|
mkdir -p "$CI_PROJECT_DIR"/.local/bin
|
||||||
|
|
||||||
|
CI_PROJECT_DIR=$(pwd)
|
||||||
|
|
||||||
|
ecabal() {
|
||||||
|
cabal "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
eghcup() {
|
||||||
|
ghcup -v -c -s file://$CI_PROJECT_DIR/data/metadata/ghcup-${JSON_VERSION}.yaml "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
git describe --always
|
||||||
|
|
||||||
|
### build
|
||||||
|
|
||||||
|
ecabal update
|
||||||
|
|
||||||
|
ecabal build -w ghc-${GHC_VERSION}
|
||||||
|
cp "$(ecabal new-exec -w ghc-${GHC_VERSION} --verbose=0 --offline sh -- -c 'command -v ghcup')" "$CI_PROJECT_DIR"/.local/bin/ghcup
|
||||||
|
|
||||||
|
### cleanup
|
||||||
|
|
||||||
|
rm -rf "${GHCUP_INSTALL_BASE_PREFIX}"/.ghcup
|
||||||
|
|
||||||
|
### manual cli based testing
|
||||||
|
|
||||||
|
eghcup --numeric-version
|
||||||
|
|
||||||
|
eghcup install ghc ${GHC_VERSION}
|
||||||
|
eghcup set ghc ${GHC_VERSION}
|
||||||
|
eghcup install cabal ${CABAL_VERSION}
|
||||||
|
|
||||||
|
cabal --version
|
||||||
|
|
||||||
|
eghcup debug-info
|
||||||
|
|
||||||
|
eghcup compile hls -j $(nproc) -v ${HLS_TARGET_VERSION} --ghc ${GHC_VERSION}
|
||||||
|
|
||||||
|
[ `$(eghcup whereis hls ${HLS_TARGET_VERSION}) --numeric-version` = "${HLS_TARGET_VERSION}" ] || [ `$(eghcup whereis hls ${HLS_TARGET_VERSION}) --numeric-version | sed 's/.0$//'` = "${HLS_TARGET_VERSION}" ]
|
||||||
|
|
||||||
|
# nuke
|
||||||
|
eghcup nuke
|
||||||
|
[ ! -e "${GHCUP_INSTALL_BASE_PREFIX}/.ghcup" ]
|
||||||
|
|
44
.gitlab/script/ghcup_release.sh
Executable file
44
.gitlab/script/ghcup_release.sh
Executable file
@ -0,0 +1,44 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
|
||||||
|
. "$( cd "$(dirname "$0")" ; pwd -P )/../ghcup_env"
|
||||||
|
|
||||||
|
mkdir -p "$CI_PROJECT_DIR"/.local/bin
|
||||||
|
|
||||||
|
ecabal() {
|
||||||
|
cabal "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
git describe
|
||||||
|
|
||||||
|
# build
|
||||||
|
ecabal update
|
||||||
|
|
||||||
|
|
||||||
|
if [ "${OS}" = "LINUX" ] ; then
|
||||||
|
if [ "${ARCH}" = "32" ] ; then
|
||||||
|
ecabal build -w ghc-${GHC_VERSION} --ghc-options='-split-sections -optl-static' -ftui
|
||||||
|
elif [ "${ARCH}" = "64" ] ; then
|
||||||
|
ecabal build -w ghc-${GHC_VERSION} --ghc-options='-split-sections -optl-static' -ftui
|
||||||
|
else
|
||||||
|
ecabal build -w ghc-${GHC_VERSION} -ftui
|
||||||
|
fi
|
||||||
|
elif [ "${OS}" = "FREEBSD" ] ; then
|
||||||
|
ecabal build -w ghc-${GHC_VERSION} --ghc-options='-split-sections' --constraint="zlib +bundled-c-zlib" --constraint="zip +disable-zstd" -ftui
|
||||||
|
elif [ "${OS}" = "WINDOWS" ] ; then
|
||||||
|
ecabal build -w ghc-${GHC_VERSION} --constraint="zlib +bundled-c-zlib" --constraint="lzma +static"
|
||||||
|
else
|
||||||
|
ecabal build -w ghc-${GHC_VERSION} --constraint="zlib +bundled-c-zlib" --constraint="lzma +static" -ftui
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir out
|
||||||
|
binary=$(ecabal new-exec -w ghc-${GHC_VERSION} --verbose=0 --offline sh -- -c 'command -v ghcup')
|
||||||
|
ver=$("${binary}" --numeric-version)
|
||||||
|
if [ "${OS}" = "DARWIN" ] ; then
|
||||||
|
strip "${binary}"
|
||||||
|
else
|
||||||
|
strip -s "${binary}"
|
||||||
|
fi
|
||||||
|
cp "${binary}" out/${ARTIFACT}-${ver}
|
||||||
|
|
21
.gitlab/script/ghcup_stack.sh
Executable file
21
.gitlab/script/ghcup_stack.sh
Executable file
@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
|
||||||
|
. "$( cd "$(dirname "$0")" ; pwd -P )/../ghcup_env"
|
||||||
|
|
||||||
|
mkdir -p "$CI_PROJECT_DIR"/.local/bin
|
||||||
|
|
||||||
|
git describe --always
|
||||||
|
|
||||||
|
### build
|
||||||
|
|
||||||
|
curl -L -O https://get.haskellstack.org/stable/linux-x86_64.tar.gz
|
||||||
|
tar xf linux-x86_64.tar.gz
|
||||||
|
cp stack-*-linux-*/stack "$CI_PROJECT_DIR"/.local/bin/stack
|
||||||
|
chmod +x "$CI_PROJECT_DIR"/.local/bin/stack
|
||||||
|
|
||||||
|
mkdir -p "$CI_PROJECT_DIR"/.stack_root
|
||||||
|
export TAR_OPTIONS=--no-same-owner
|
||||||
|
stack --allow-different-user --stack-root "$CI_PROJECT_DIR"/.stack_root build
|
||||||
|
stack --allow-different-user --stack-root "$CI_PROJECT_DIR"/.stack_root test
|
314
.gitlab/script/ghcup_version.sh
Executable file
314
.gitlab/script/ghcup_version.sh
Executable file
@ -0,0 +1,314 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
|
||||||
|
. "$( cd "$(dirname "$0")" ; pwd -P )/../ghcup_env"
|
||||||
|
|
||||||
|
mkdir -p "$CI_PROJECT_DIR"/.local/bin
|
||||||
|
|
||||||
|
CI_PROJECT_DIR=$(pwd)
|
||||||
|
|
||||||
|
|
||||||
|
ecabal() {
|
||||||
|
cabal "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
raw_eghcup() {
|
||||||
|
ghcup -v -c "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
eghcup() {
|
||||||
|
if [ "${OS}" = "WINDOWS" ] ; then
|
||||||
|
ghcup -v -c -s file:/$CI_PROJECT_DIR/data/metadata/ghcup-${JSON_VERSION}.yaml "$@"
|
||||||
|
else
|
||||||
|
ghcup -v -c -s file://$CI_PROJECT_DIR/data/metadata/ghcup-${JSON_VERSION}.yaml "$@"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ "${OS}" = "WINDOWS" ] ; then
|
||||||
|
GHCUP_DIR="${GHCUP_INSTALL_BASE_PREFIX}"/ghcup
|
||||||
|
else
|
||||||
|
GHCUP_DIR="${GHCUP_INSTALL_BASE_PREFIX}"/.ghcup
|
||||||
|
fi
|
||||||
|
|
||||||
|
git describe --always
|
||||||
|
|
||||||
|
### build
|
||||||
|
|
||||||
|
rm -rf "${GHCUP_DIR}"/share
|
||||||
|
|
||||||
|
ecabal update
|
||||||
|
|
||||||
|
if [ "${OS}" = "DARWIN" ] ; then
|
||||||
|
ecabal build -w ghc-${GHC_VERSION} -ftui
|
||||||
|
ecabal test -w ghc-${GHC_VERSION} -ftui ghcup-test
|
||||||
|
ecabal haddock -w ghc-${GHC_VERSION} -ftui
|
||||||
|
elif [ "${OS}" = "LINUX" ] ; then
|
||||||
|
if [ "${ARCH}" = "32" ] ; then
|
||||||
|
ecabal build -w ghc-${GHC_VERSION} -finternal-downloader -ftui
|
||||||
|
ecabal test -w ghc-${GHC_VERSION} -finternal-downloader -ftui ghcup-test
|
||||||
|
ecabal haddock -w ghc-${GHC_VERSION} -finternal-downloader -ftui
|
||||||
|
else
|
||||||
|
ecabal build -w ghc-${GHC_VERSION} -finternal-downloader -ftui
|
||||||
|
ecabal test -w ghc-${GHC_VERSION} -finternal-downloader -ftui ghcup-test
|
||||||
|
ecabal haddock -w ghc-${GHC_VERSION} -finternal-downloader -ftui
|
||||||
|
|
||||||
|
if [ "${ARCH}" = "64" ] ; then
|
||||||
|
# doctest
|
||||||
|
curl -sL https://downloads.haskell.org/~ghcup/unofficial-bindists/cabal-docspec/cabal-docspec-0.0.0.20210228_p1.tar.bz2 > cabal-docspec.tar.bz2
|
||||||
|
echo '3a10f6fec16dbd18efdd331b1cef5d2d342082da42f5b520726d1fa6a3990d12 cabal-docspec.tar.bz2' | sha256sum -c -
|
||||||
|
tar -xjf cabal-docspec.tar.bz2 cabal-docspec
|
||||||
|
mv cabal-docspec "$CI_PROJECT_DIR"/.local/bin/cabal-docspec
|
||||||
|
rm -f cabal-docspec.tar.bz2
|
||||||
|
chmod a+x "$CI_PROJECT_DIR"/.local/bin/cabal-docspec
|
||||||
|
|
||||||
|
cabal-docspec -XCPP -XTypeSynonymInstances -XOverloadedStrings -XPackageImports --check-properties
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
elif [ "${OS}" = "FREEBSD" ] ; then
|
||||||
|
ecabal build -w ghc-${GHC_VERSION} -finternal-downloader -ftui --constraint="zip +disable-zstd"
|
||||||
|
ecabal test -w ghc-${GHC_VERSION} -finternal-downloader -ftui --constraint="zip +disable-zstd" ghcup-test
|
||||||
|
ecabal haddock -w ghc-${GHC_VERSION} -finternal-downloader -ftui --constraint="zip +disable-zstd"
|
||||||
|
elif [ "${OS}" = "WINDOWS" ] ; then
|
||||||
|
ecabal build -w ghc-${GHC_VERSION}
|
||||||
|
ecabal test -w ghc-${GHC_VERSION} ghcup-test
|
||||||
|
ecabal haddock -w ghc-${GHC_VERSION}
|
||||||
|
else
|
||||||
|
ecabal build -w ghc-${GHC_VERSION} -finternal-downloader -ftui
|
||||||
|
ecabal test -w ghc-${GHC_VERSION} -finternal-downloader -ftui ghcup-test
|
||||||
|
ecabal haddock -w ghc-${GHC_VERSION} -finternal-downloader -ftui
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [ "${OS}" = "WINDOWS" ] ; then
|
||||||
|
ext=".exe"
|
||||||
|
else
|
||||||
|
ext=''
|
||||||
|
fi
|
||||||
|
cp "$(ecabal new-exec -w ghc-${GHC_VERSION} --verbose=0 --offline sh -- -c 'command -v ghcup')" "$CI_PROJECT_DIR"/.local/bin/ghcup${ext}
|
||||||
|
|
||||||
|
### cleanup
|
||||||
|
|
||||||
|
rm -rf "${GHCUP_DIR}"
|
||||||
|
|
||||||
|
### manual cli based testing
|
||||||
|
|
||||||
|
|
||||||
|
eghcup --numeric-version
|
||||||
|
|
||||||
|
eghcup install ghc ${GHC_VERSION}
|
||||||
|
eghcup unset ghc ${GHC_VERSION}
|
||||||
|
ls -lah "$(eghcup whereis -d ghc ${GHC_VERSION})"
|
||||||
|
[ "`$(eghcup whereis ghc ${GHC_VERSION}) --numeric-version`" = "${GHC_VERSION}" ]
|
||||||
|
[ "`eghcup run --ghc ${GHC_VERSION} -- ghc --numeric-version`" = "${GHC_VERSION}" ]
|
||||||
|
[ "`ghcup run --ghc ${GHC_VERSION} -- ghc -e 'Control.Monad.join (Control.Monad.fmap System.IO.putStr System.Environment.getExecutablePath)'`" = "`$(ghcup whereis ghc ${GHC_VERSION}) -e 'Control.Monad.join (Control.Monad.fmap System.IO.putStr System.Environment.getExecutablePath)'`" ]
|
||||||
|
eghcup set ghc ${GHC_VERSION}
|
||||||
|
eghcup install cabal ${CABAL_VERSION}
|
||||||
|
[ "`$(eghcup whereis cabal ${CABAL_VERSION}) --numeric-version`" = "${CABAL_VERSION}" ]
|
||||||
|
eghcup unset cabal
|
||||||
|
"$GHCUP_BIN"/cabal --version && exit 1 || echo yes
|
||||||
|
|
||||||
|
# make sure no cabal is set when running 'ghcup run' to check that PATH propagages properly
|
||||||
|
# https://gitlab.haskell.org/haskell/ghcup-hs/-/issues/375
|
||||||
|
[ "`eghcup run --cabal ${CABAL_VERSION} -- cabal --numeric-version`" = "${CABAL_VERSION}" ]
|
||||||
|
eghcup set cabal ${CABAL_VERSION}
|
||||||
|
|
||||||
|
[ "`$(eghcup whereis cabal ${CABAL_VERSION}) --numeric-version`" = "${CABAL_VERSION}" ]
|
||||||
|
|
||||||
|
if [ "${OS}" != "FREEBSD" ] ; then
|
||||||
|
if [ "${ARCH}" = "64" ] ; then
|
||||||
|
eghcup run --ghc 8.10.7 --cabal 3.4.1.0 --hls 1.6.1.0 --stack 2.7.3 --install --bindir "$(pwd)/.bin"
|
||||||
|
if [ "${OS}" == "WINDOWS" ] ; then
|
||||||
|
expected=$(cat "$( cd "$(dirname "$0")" ; pwd -P )/../ghcup-run.files.windows" | sort)
|
||||||
|
else
|
||||||
|
expected=$(cat "$( cd "$(dirname "$0")" ; pwd -P )/../ghcup-run.files" | sort)
|
||||||
|
fi
|
||||||
|
actual=$(cd ".bin" && find . | sort)
|
||||||
|
[ "${actual}" = "${expected}" ]
|
||||||
|
unset actual expected
|
||||||
|
rm -rf .bin
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
cabal --version
|
||||||
|
|
||||||
|
eghcup debug-info
|
||||||
|
|
||||||
|
# also test etags
|
||||||
|
eghcup list
|
||||||
|
eghcup list -t ghc
|
||||||
|
eghcup list -t cabal
|
||||||
|
|
||||||
|
ghc_ver=$(ghc --numeric-version)
|
||||||
|
ghc --version
|
||||||
|
ghc-${ghc_ver} --version
|
||||||
|
if [ "${OS}" != "WINDOWS" ] ; then
|
||||||
|
ghci --version
|
||||||
|
ghci-${ghc_ver} --version
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [ "${OS}" = "DARWIN" ] && [ "${ARCH}" = "ARM64" ] ; then
|
||||||
|
echo
|
||||||
|
else
|
||||||
|
# test installing new ghc doesn't mess with currently set GHC
|
||||||
|
# https://gitlab.haskell.org/haskell/ghcup-hs/issues/7
|
||||||
|
if [ "${OS}" = "LINUX" ] ; then
|
||||||
|
eghcup --downloader=wget prefetch ghc 8.10.3
|
||||||
|
eghcup --offline install ghc 8.10.3
|
||||||
|
if [ "${ARCH}" = "64" ] ; then
|
||||||
|
expected=$(cat "$( cd "$(dirname "$0")" ; pwd -P )/../ghc-8.10.3-linux.files" | sort)
|
||||||
|
actual=$(cd "${GHCUP_DIR}/ghc/8.10.3/" && find . | sort)
|
||||||
|
[ "${actual}" = "${expected}" ]
|
||||||
|
unset actual expected
|
||||||
|
fi
|
||||||
|
elif [ "${OS}" = "WINDOWS" ] ; then
|
||||||
|
eghcup prefetch ghc 8.10.3
|
||||||
|
eghcup --offline install ghc 8.10.3
|
||||||
|
expected=$(cat "$( cd "$(dirname "$0")" ; pwd -P )/../ghc-8.10.3-windows.files" | sort)
|
||||||
|
actual=$(cd "${GHCUP_DIR}/ghc/8.10.3/" && find . | sort)
|
||||||
|
[ "${actual}" = "${expected}" ]
|
||||||
|
unset actual expected
|
||||||
|
else
|
||||||
|
eghcup prefetch ghc 8.10.3
|
||||||
|
eghcup --offline install ghc 8.10.3
|
||||||
|
fi
|
||||||
|
[ "$(ghc --numeric-version)" = "${ghc_ver}" ]
|
||||||
|
eghcup --offline set 8.10.3
|
||||||
|
eghcup set 8.10.3
|
||||||
|
[ "$(ghc --numeric-version)" = "8.10.3" ]
|
||||||
|
eghcup set ${GHC_VERSION}
|
||||||
|
[ "$(ghc --numeric-version)" = "${ghc_ver}" ]
|
||||||
|
eghcup unset ghc
|
||||||
|
"$GHCUP_BIN"/ghc --numeric-version && exit 1 || echo yes
|
||||||
|
eghcup set ${GHC_VERSION}
|
||||||
|
eghcup --offline rm 8.10.3
|
||||||
|
[ "$(ghc --numeric-version)" = "${ghc_ver}" ]
|
||||||
|
|
||||||
|
|
||||||
|
ls -lah "$GHCUP_BIN"
|
||||||
|
|
||||||
|
if [ "${OS}" = "DARWIN" ] ; then
|
||||||
|
eghcup install hls
|
||||||
|
$(eghcup whereis hls) --version
|
||||||
|
|
||||||
|
eghcup install stack
|
||||||
|
$(eghcup whereis stack) --version
|
||||||
|
elif [ "${OS}" = "LINUX" ] ; then
|
||||||
|
if [ "${ARCH}" = "64" ] ; then
|
||||||
|
eghcup install hls
|
||||||
|
haskell-language-server-wrapper --version
|
||||||
|
eghcup unset hls
|
||||||
|
"$GHCUP_BIN"/haskell-language-server-wrapper --version && exit 1 || echo yes
|
||||||
|
|
||||||
|
eghcup install stack
|
||||||
|
stack --version
|
||||||
|
eghcup unset stack
|
||||||
|
"$GHCUP_BIN"/stack --version && exit 1 || echo yes
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# check that lazy loading works for 'whereis'
|
||||||
|
cp "$CI_PROJECT_DIR/data/metadata/ghcup-${JSON_VERSION}.yaml" "$CI_PROJECT_DIR/data/metadata/ghcup-${JSON_VERSION}.yaml.bak"
|
||||||
|
echo '**' > "$CI_PROJECT_DIR/data/metadata/ghcup-${JSON_VERSION}.yaml"
|
||||||
|
eghcup whereis ghc $(ghc --numeric-version)
|
||||||
|
mv -f "$CI_PROJECT_DIR/data/metadata/ghcup-${JSON_VERSION}.yaml.bak" "$CI_PROJECT_DIR/data/metadata/ghcup-${JSON_VERSION}.yaml"
|
||||||
|
|
||||||
|
eghcup rm $(ghc --numeric-version)
|
||||||
|
|
||||||
|
# https://gitlab.haskell.org/haskell/ghcup-hs/-/issues/116
|
||||||
|
if [ "${OS}" = "LINUX" ] ; then
|
||||||
|
if [ "${ARCH}" = "64" ] ; then
|
||||||
|
eghcup install cabal -u https://downloads.haskell.org/~ghcup/unofficial-bindists/cabal/3.7.0.0-pre20220407/cabal-install-3.7-x86_64-linux-alpine.tar.xz 3.4.0.0-rc4
|
||||||
|
eghcup rm cabal 3.4.0.0-rc4
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
eghcup gc -c
|
||||||
|
|
||||||
|
sha_sum() {
|
||||||
|
if [ "${OS}" = "FREEBSD" ] ; then
|
||||||
|
sha256 "$@"
|
||||||
|
else
|
||||||
|
sha256sum "$@"
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# test etags
|
||||||
|
rm -f "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml"
|
||||||
|
raw_eghcup -s https://www.haskell.org/ghcup/data/ghcup-${JSON_VERSION}.yaml list
|
||||||
|
# snapshot yaml and etags file
|
||||||
|
etag=$(cat "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml.etags")
|
||||||
|
sha=$(sha_sum "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml")
|
||||||
|
# invalidate access time timer, which is 5minutes, so we re-download
|
||||||
|
touch -a -m -t '199901010101' "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml"
|
||||||
|
# redownload same file with some newlines added
|
||||||
|
raw_eghcup -s https://www.haskell.org/ghcup/exp/ghcup-${JSON_VERSION}.yaml list
|
||||||
|
# snapshot new yaml and etags file
|
||||||
|
etag2=$(cat "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml.etags")
|
||||||
|
sha2=$(sha_sum "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml")
|
||||||
|
# compare
|
||||||
|
[ "${etag}" != "${etag2}" ]
|
||||||
|
[ "${sha}" != "${sha2}" ]
|
||||||
|
# invalidate access time timer, which is 5minutes, but don't expect a re-download
|
||||||
|
touch -a -m -t '199901010101' "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml"
|
||||||
|
# this time, we expect the same hash and etag
|
||||||
|
raw_eghcup -s https://www.haskell.org/ghcup/exp/ghcup-${JSON_VERSION}.yaml list
|
||||||
|
etag3=$(cat "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml.etags")
|
||||||
|
sha3=$(sha_sum "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml")
|
||||||
|
[ "${etag2}" = "${etag3}" ]
|
||||||
|
[ "${sha2}" = "${sha3}" ]
|
||||||
|
|
||||||
|
# test isolated installs
|
||||||
|
eghcup install ghc -i "$(pwd)/isolated" 8.10.5
|
||||||
|
[ "$(isolated/bin/ghc --numeric-version)" = "8.10.5" ]
|
||||||
|
! eghcup install ghc -i "$(pwd)/isolated" 8.10.5
|
||||||
|
if [ "${ARCH}" = "64" ] ; then
|
||||||
|
if [ "${OS}" = "LINUX" ] || [ "${OS}" = "WINDOWS" ] ; then
|
||||||
|
eghcup install cabal -i "$(pwd)/isolated" 3.4.0.0
|
||||||
|
[ "$(isolated/cabal --numeric-version)" = "3.4.0.0" ]
|
||||||
|
eghcup install stack -i "$(pwd)/isolated" 2.7.3
|
||||||
|
[ "$(isolated/stack --numeric-version)" = "2.7.3" ]
|
||||||
|
eghcup install hls -i "$(pwd)/isolated" 1.3.0
|
||||||
|
[ "$(isolated/haskell-language-server-wrapper --numeric-version)" = "1.3.0" ] ||
|
||||||
|
[ "$(isolated/haskell-language-server-wrapper --numeric-version)" = "1.3.0.0" ]
|
||||||
|
|
||||||
|
# test that isolated installs don't clean up target directory
|
||||||
|
cat <<EOF > "${GHCUP_BIN}/gmake"
|
||||||
|
#!/bin/bash
|
||||||
|
exit 1
|
||||||
|
EOF
|
||||||
|
chmod +x "${GHCUP_BIN}/gmake"
|
||||||
|
mkdir isolated_tainted/
|
||||||
|
touch isolated_tainted/lol
|
||||||
|
|
||||||
|
! eghcup install ghc -i "$(pwd)/isolated_tainted" 8.10.5 --force
|
||||||
|
[ -e "$(pwd)/isolated_tainted/lol" ]
|
||||||
|
rm "${GHCUP_BIN}/gmake"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
eghcup upgrade
|
||||||
|
eghcup upgrade -f
|
||||||
|
|
||||||
|
# test that doing fishy symlinks into GHCup dir doesn't cause weird stuff on 'ghcup nuke'
|
||||||
|
mkdir no_nuke/
|
||||||
|
mkdir no_nuke/bar
|
||||||
|
echo 'foo' > no_nuke/file
|
||||||
|
echo 'bar' > no_nuke/bar/file
|
||||||
|
ln -s "$CI_PROJECT_DIR"/no_nuke/ "${GHCUP_DIR}"/cache/no_nuke
|
||||||
|
ln -s "$CI_PROJECT_DIR"/no_nuke/ "${GHCUP_DIR}"/logs/no_nuke
|
||||||
|
|
||||||
|
# nuke
|
||||||
|
eghcup nuke
|
||||||
|
[ ! -e "${GHCUP_DIR}" ]
|
||||||
|
|
||||||
|
# make sure nuke doesn't resolve symlinks
|
||||||
|
[ -e "$CI_PROJECT_DIR"/no_nuke/file ]
|
||||||
|
[ -e "$CI_PROJECT_DIR"/no_nuke/bar/file ]
|
||||||
|
|
||||||
|
|
19
.gitlab/script/hlint.sh
Executable file
19
.gitlab/script/hlint.sh
Executable file
@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
|
||||||
|
. "$( cd "$(dirname "$0")" ; pwd -P )/../ghcup_env"
|
||||||
|
|
||||||
|
mkdir -p "$CI_PROJECT_DIR"/.local/bin
|
||||||
|
|
||||||
|
ecabal() {
|
||||||
|
cabal --store-dir="$(pwd)"/.store "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
git describe
|
||||||
|
|
||||||
|
ecabal update
|
||||||
|
ecabal install -w ghc-${GHC_VERSION} --installdir="$CI_PROJECT_DIR"/.local/bin hlint
|
||||||
|
|
||||||
|
hlint -r app/ lib/ test/
|
||||||
|
|
2
.gitmodules
vendored
2
.gitmodules
vendored
@ -1,4 +1,4 @@
|
|||||||
[submodule "data/metadata"]
|
[submodule "data/metadata"]
|
||||||
path = data/metadata
|
path = data/metadata
|
||||||
url = https://github.com/haskell/ghcup-metadata.git
|
url = https://github.com/haskell/ghcup-metadata.git
|
||||||
branch = develop
|
branch = master
|
||||||
|
25
.travis.yml
Normal file
25
.travis.yml
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
jobs:
|
||||||
|
include:
|
||||||
|
- os: osx
|
||||||
|
osx_image: xcode10.1
|
||||||
|
language: generic
|
||||||
|
env: ARTIFACT=x86_64-apple-darwin-10.13-ghcup
|
||||||
|
|
||||||
|
- os: osx
|
||||||
|
osx_image: xcode11.3
|
||||||
|
language: generic
|
||||||
|
env: ARTIFACT=x86_64-apple-darwin-10.14-ghcup
|
||||||
|
|
||||||
|
|
||||||
|
script: ".travis/build.sh"
|
||||||
|
|
||||||
|
deploy:
|
||||||
|
provider: releases
|
||||||
|
api_key:
|
||||||
|
secure: "hT2od8Iy04tdFVuonPSWv0NX5hZDmv4al8Q0GbIWmviUetROuM7c6/MCHUcgyiw6H2L3pmH4F24GBYWpKBT3ZMbxrKXhZOZ3KPLXzlnuRlm1qymKqqwsJs3466bMftaiBr16rx1VpAuditN4A32oSmTFcQAJc84Bxn2WZ4t8hk9muS8YPyLhqg3/NxT6ob8dzNp9eS2cA0WODMb/fMzaMruRtepSK8JvuXb/SnTvaDcl9plmPzEa+eW54jwVsDps8ZpQMQlTtGIjYHIwTQ36/iLH4LoAvD7OEnB7qf753LOzmI/bvlB75xYGsLxe1qgpzPMjuG3AK0jb2KGSZCzyAyrbBFSQMIyC1gNKMtab3CohnA9WdQqAT1xrzPzA9zNw516G5Fn/z+t9Ek1f6L2OYO2hJfweNhWh+ChAIsOags2QBpqc0qjkwUS4wqxCWBdyVfgPTUoGelvjCfjQgypgIyLEHFvXt9rlj+kd97FY7nG3vxZrsvWTKKKT551OqUYX5zWTyvGR71jKyNst/p93Pg3DkRy31gHrGnG9zfNgN5tWxJqDd/suR/BAFTp0VtkFb8fR3ct7WMVeJXtE2+bKqxO5Fnocs1VjEm8pKPk7glnp0muu08kaO0h54wiSOCbk1RvO1KZtHue4wKWrHcI18dwW2WtzoBQ4P1lOSkS81UY="
|
||||||
|
file: $ARTIFACT
|
||||||
|
on:
|
||||||
|
repo: hasufell/ghcup-hs
|
||||||
|
tags: true
|
||||||
|
skip_cleanup: true
|
||||||
|
draft: true
|
28
.travis/build.sh
Executable file
28
.travis/build.sh
Executable file
@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
mkdir -p ~/.ghcup/bin
|
||||||
|
curl -sSfL https://downloads.haskell.org/~ghcup/x86_64-apple-darwin-ghcup > ~/.ghcup/bin/ghcup
|
||||||
|
chmod +x ~/.ghcup/bin/ghcup
|
||||||
|
|
||||||
|
export PATH="$HOME/.ghcup/bin:$PATH"
|
||||||
|
|
||||||
|
ghcup install 8.10.4
|
||||||
|
ghcup install-cabal 3.4.0.0
|
||||||
|
ghcup set 8.10.4
|
||||||
|
|
||||||
|
|
||||||
|
## install ghcup
|
||||||
|
|
||||||
|
cabal update
|
||||||
|
|
||||||
|
(
|
||||||
|
cd /tmp
|
||||||
|
cabal install --installdir="$HOME"/.ghcup/bin hspec-discover
|
||||||
|
)
|
||||||
|
|
||||||
|
cabal build --constraint="zlib +static" --constraint="lzma +static" -ftui
|
||||||
|
cp "$(cabal new-exec --verbose=0 --offline sh -- -c 'command -v ghcup')" .
|
||||||
|
strip ./ghcup
|
||||||
|
cp ghcup "./${ARTIFACT}"
|
130
CHANGELOG.md
130
CHANGELOG.md
@ -1,135 +1,5 @@
|
|||||||
# Revision history for ghcup
|
# Revision history for ghcup
|
||||||
|
|
||||||
## 0.1.22.0 -- 2024-03-13
|
|
||||||
|
|
||||||
### New features
|
|
||||||
|
|
||||||
* A help screen/tutorial in the TUI by @lsmor (Luis Morillo)
|
|
||||||
* Beef up `--overwrite-version`, fixes [#998](https://github.com/haskell/ghcup-hs/issues/998)
|
|
||||||
* e.g. `ghcup compile hls -g master --overwrite-version='%v-%h' --ghc 9.4.8` will produce a binary called `haskell-language-server-wrapper-<version-from-cabal-file>-<short-git-commit-hash>`... refer to `ghcup compile hls --help` for more information
|
|
||||||
* Allow to set ghcup msys2 environment wrt [#982](https://github.com/haskell/ghcup-hs/issues/982)
|
|
||||||
* Add mechanism to warn on new metadata versions, fixes [#860](https://github.com/haskell/ghcup-hs/issues/860)
|
|
||||||
* Add pre-install message support via ghcup metadata, wrt [#1016](https://github.com/haskell/ghcup-hs/issues/1016)
|
|
||||||
* Allow to remove all unset versions, fixes [#1019](https://github.com/haskell/ghcup-hs/issues/1019)
|
|
||||||
* e.g.: `ghcup gc --unset`
|
|
||||||
|
|
||||||
### Improvements and bug fixes
|
|
||||||
|
|
||||||
* Fix potential [HSEC-2024-0002](https://haskell.github.io/security-advisories/advisory/HSEC-2024-0002.html)
|
|
||||||
* Fix TUI crash in windows terminal 1.19 [#1013](https://github.com/haskell/ghcup-hs/issues/1013)
|
|
||||||
* Clean up on git clone errors, fixes [#1004](https://github.com/haskell/ghcup-hs/issues/1004)
|
|
||||||
* Error out on empty UserSettings wrt [#922](https://github.com/haskell/ghcup-hs/issues/922)
|
|
||||||
* Fix failure mode when metadata is garbage, fixes [#921](https://github.com/haskell/ghcup-hs/issues/921)
|
|
||||||
* Be less confusing when user tries to 'set' ghcup in TUI, fixes [#923](https://github.com/haskell/ghcup-hs/issues/923)
|
|
||||||
* Fix prefetch for cross bindists
|
|
||||||
* Fix misinterpretation of '+' in URI paths, fixes [#408](https://github.com/haskell/ghcup-hs/issues/408)
|
|
||||||
* Stricter (and better) file uri handling
|
|
||||||
* Set LD=ld.bfd on Alpine linux during bindist configure
|
|
||||||
* Add rocky/void detection
|
|
||||||
* Logging improvements
|
|
||||||
* Remove the "show all tool" config in the TUI
|
|
||||||
* Fix opening changelog on windows
|
|
||||||
* Don't remove share dir link prematurely
|
|
||||||
* Require user to explicitly choose subcommand for 'ghcup config'
|
|
||||||
* Don't download twice when trying stack decoding
|
|
||||||
|
|
||||||
### Refactoring and maintenance
|
|
||||||
|
|
||||||
* Large TUI code cleanup by @lsmor (Luis Morillo)... more coming up soon
|
|
||||||
* Allow building with `tar` instead of `libarchive` (mainly to make contributions easier)
|
|
||||||
|
|
||||||
## 0.1.20.0 -- 2023-11-10
|
|
||||||
|
|
||||||
### New features
|
|
||||||
|
|
||||||
* support TUI on windows thanks to the work from vty and brick maintainers (Chris Hackett, Timofey Zakrevskiy, Jonathan Daugherty, ...), wrt [#912](https://github.com/haskell/ghcup-hs/pull/912)
|
|
||||||
* support JS and wasm cross compilers wrt [#838](https://github.com/haskell/ghcup-hs/issues/838), thanks to Sylvain Henry and IOG
|
|
||||||
* Support stacks installation strategy and metadata wrt [#892](https://github.com/haskell/ghcup-hs/issues/892)
|
|
||||||
- you can now enable stacks installation method via `ghcup config set url-source '["GHCupURL", "StackSetupURL"]'`... for more information, check the [documentation](https://www.haskell.org/ghcup/guide/#using-stacks-setup-info-metadata-to-install-ghc)
|
|
||||||
|
|
||||||
### Improvements and bug fixes
|
|
||||||
|
|
||||||
* fix segfault in TUI when hitting enter early wrt [#887](https://github.com/haskell/ghcup-hs/issues/887)
|
|
||||||
* Improve key handling in TUI, fixes [#875](https://github.com/haskell/ghcup-hs/issues/875)
|
|
||||||
* add explicit support for Void Linux and Rocky Linux (this requires a metadata version bump to `ghcup-0.0.8.yaml`)
|
|
||||||
* optparse cli interface now has a test suite thanks to Lei Zhu, wrt [#862](https://github.com/haskell/ghcup-hs/pull/862)
|
|
||||||
|
|
||||||
## 0.1.19.4 -- 2023-7-02
|
|
||||||
|
|
||||||
* fix missing TUI for aarch64 linux binaries
|
|
||||||
|
|
||||||
## 0.1.19.3 -- 2023-6-29
|
|
||||||
|
|
||||||
* Implement support for nightlies, wrt [#824](https://github.com/haskell/ghcup-hs/issues/824)
|
|
||||||
* Fix GC with XDG dirs, fixes [#810](https://github.com/haskell/ghcup-hs/issues/810)
|
|
||||||
|
|
||||||
## 0.1.19.2 -- 2023-2-24
|
|
||||||
|
|
||||||
* Follow-up fix for JFS/ReiserFS and other filesystem that don't support `d_type`, fixes [#787](https://github.com/haskell/ghcup-hs/issues/787)
|
|
||||||
- the previous release had a bug that invalidated that broke it
|
|
||||||
* Implement 'latest-prerelease' tag wrt [#788](https://github.com/haskell/ghcup-hs/issues/788)
|
|
||||||
* Fix 'Could not parse version of stray directory.DS_Store' warnings on macOs wrt [#797](https://github.com/haskell/ghcup-hs/issues/797)
|
|
||||||
|
|
||||||
## 0.1.19.1 -- 2023-2-19
|
|
||||||
|
|
||||||
* Fix GHCup on JFS/ReiserFS and other filesystem that don't support `d_type`, fixes [#766](https://github.com/haskell/ghcup-hs/issues/766)
|
|
||||||
* Don't fail on setModificationTime, fixes [#784](https://github.com/haskell/ghcup-hs/issues/784) and many GitHub actions issues
|
|
||||||
* Make armv7/aarch64 linux binaries more portable (built on Debian buster)
|
|
||||||
* Improve usability on 'ghcup config add-release-channel', fixes [#751](https://github.com/haskell/ghcup-hs/issues/751)
|
|
||||||
* Make version shortcuts work with 'ghcup set', fixes [#757](https://github.com/haskell/ghcup-hs/issues/757)
|
|
||||||
* Don't implicitly smuggle in config options in `ghcup config set` wrt [#775](https://github.com/haskell/ghcup-hs/issues/775)
|
|
||||||
* Fix build on unix with -ftui
|
|
||||||
|
|
||||||
## 0.1.19.0 -- 2023-1-13
|
|
||||||
|
|
||||||
* restore proper support for FreeBSD and Linux armv7
|
|
||||||
* integrate with [errors.haskell.org](https://errors.haskell.org/index.html), wrt [#434](https://github.com/haskell/ghcup-hs/issues/434)
|
|
||||||
* allow to overwrite distro detection via config wrt [#421](https://github.com/haskell/ghcup-hs/issues/421)
|
|
||||||
- this is particularly useful for e.g. Ubuntu derivates, where ghcup doesn't pick the optimal bindist, also see the [GHCup documentation on overriding distro detection](https://www.haskell.org/ghcup/guide/#overriding-distro-detection)
|
|
||||||
* Add proper support for mirrors wrt [#357](https://github.com/haskell/ghcup-hs/issues/357)
|
|
||||||
* fix a (harmless) bug in `ghcup nuke` on windows
|
|
||||||
* improvements to `ghcup add-release-channel` wrt [#708](https://github.com/haskell/ghcup-hs/issues/708)
|
|
||||||
* fix building newer GHC from source wrt [#433](https://github.com/haskell/ghcup-hs/issues/433)
|
|
||||||
* Fix `ghcup install hls -u` on windows
|
|
||||||
* Fix failure with `--isolate=dir --force`
|
|
||||||
* Add `--metadata-fetching-mode` arg, fixes [#440](https://github.com/haskell/ghcup-hs/issues/440)
|
|
||||||
* Add content-length property to downloads
|
|
||||||
* [Fix a grave bug on armv7](https://github.com/haskell/ghcup-hs/commit/78ee956df2618862f421178a565c82548ff7e578) during installation wrt [#415](https://github.com/haskell/ghcup-hs/issues/415)
|
|
||||||
* improve many warning/error messages (contributions by @taylorfausak)
|
|
||||||
* some minor optimization in `ghcup whereis ghcup`
|
|
||||||
* improve `--keep=always` to not clean up directories in certain circumstances
|
|
||||||
|
|
||||||
## 0.1.18.1 -- 2022-08-06
|
|
||||||
|
|
||||||
* fix sdist and unbreak hackage, wrt [#399](https://gitlab.haskell.org/haskell/ghcup-hs/-/issues/399)
|
|
||||||
|
|
||||||
## 0.1.18.0 -- 2022-07-30
|
|
||||||
|
|
||||||
* Fix tui set wrt [#266](https://gitlab.haskell.org/haskell/ghcup-hs/-/merge_requests/266) by Arjun Kathuria
|
|
||||||
- Ask the user to install the tool via prompt when setting an non-installed version
|
|
||||||
* improvements to safe (un-)installations
|
|
||||||
- bindists that don't support `make DESTDIR=/some/tmp/dir install` are now unsupported
|
|
||||||
- installed GHC files are now recorded to avoid use of `removePathForcibly`
|
|
||||||
- internally uses a newtype wrapper for user-input paths and restrict destructive operations to validated paths
|
|
||||||
* Add `--disable-ld-override` for darwin bindists wrt #391
|
|
||||||
* Allow passing bindist configure args wrt #377
|
|
||||||
* use of `TMPDIR` is dropped... now uses an internal tmp dir `~/.ghcup/tmp`
|
|
||||||
* improvements to error handling and warnings
|
|
||||||
* Require --isolate to have an absolute directory, fixes #367
|
|
||||||
* Fix mingw PATH handling wrt #371
|
|
||||||
* Add --mingw-path switch to `ghcup run`
|
|
||||||
* Fix `ghcup run` on windows, fixes #375
|
|
||||||
* Improve `ghcup compile <hls|ghc>`
|
|
||||||
- short hashes now work
|
|
||||||
- print the long hash in addition to the detected version
|
|
||||||
* Improve `ghcup compile hls`
|
|
||||||
- add `--git-describe-version` switch as an alternative to `--overwrite-version`
|
|
||||||
- Allow to build HLS from hackage (now is the default)
|
|
||||||
- Allow to run 'cabal update' automatically before the HLS build
|
|
||||||
- Fix parser and completer for 'ghcup compile hls --version'
|
|
||||||
* Improve `ghcup compile ghc`
|
|
||||||
- Allow to build from arbitrary GHC source dists
|
|
||||||
|
|
||||||
## 0.1.17.10 -- 2022-05-12
|
## 0.1.17.10 -- 2022-05-12
|
||||||
|
|
||||||
* windows hotfix (hackage-only release)
|
* windows hotfix (hackage-only release)
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
[![Join the chat at https://gitter.im/haskell/ghcup](https://badges.gitter.im/haskell/ghcup.svg)](https://gitter.im/haskell/ghcup?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
[![Join the chat at https://gitter.im/haskell/ghcup](https://badges.gitter.im/haskell/ghcup.svg)](https://gitter.im/haskell/ghcup?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||||
<a href="https://opencollective.com/ghcup#category-CONTRIBUTE"><img src="https://opencollective.com/webpack/donate/button@2x.png?color=blue" alt="Donate" width="150"></a>
|
<a href="https://opencollective.com/ghcup#category-CONTRIBUTE"><img src="https://opencollective.com/webpack/donate/button@2x.png?color=blue" alt="Donate" width="150"></a>
|
||||||
|
|
||||||
GHCup is the main installer for the general purpose language [Haskell](https://www.haskell.org/).
|
GHCup is an installer for the general purpose language [Haskell](https://www.haskell.org/).
|
||||||
|
|
||||||
Visit the [documentation](https://www.haskell.org/ghcup/) for installation instructions.
|
Visit the [documentation](https://www.haskell.org/ghcup/) for installation instructions.
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -8,7 +8,6 @@
|
|||||||
module GHCup.OptParse (
|
module GHCup.OptParse (
|
||||||
module GHCup.OptParse.Common
|
module GHCup.OptParse.Common
|
||||||
, module GHCup.OptParse.Install
|
, module GHCup.OptParse.Install
|
||||||
, module GHCup.OptParse.Test
|
|
||||||
, module GHCup.OptParse.Set
|
, module GHCup.OptParse.Set
|
||||||
, module GHCup.OptParse.UnSet
|
, module GHCup.OptParse.UnSet
|
||||||
, module GHCup.OptParse.Rm
|
, module GHCup.OptParse.Rm
|
||||||
@ -32,7 +31,6 @@ module GHCup.OptParse (
|
|||||||
|
|
||||||
import GHCup.OptParse.Common
|
import GHCup.OptParse.Common
|
||||||
import GHCup.OptParse.Install
|
import GHCup.OptParse.Install
|
||||||
import GHCup.OptParse.Test
|
|
||||||
import GHCup.OptParse.Set
|
import GHCup.OptParse.Set
|
||||||
import GHCup.OptParse.UnSet
|
import GHCup.OptParse.UnSet
|
||||||
import GHCup.OptParse.Rm
|
import GHCup.OptParse.Rm
|
||||||
@ -57,12 +55,16 @@ import GHCup.Types
|
|||||||
import Control.Monad.Fail ( MonadFail )
|
import Control.Monad.Fail ( MonadFail )
|
||||||
#endif
|
#endif
|
||||||
import Control.Monad.Reader
|
import Control.Monad.Reader
|
||||||
|
import Data.Bifunctor
|
||||||
import Data.Either
|
import Data.Either
|
||||||
import Data.Functor
|
import Data.Functor
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import Options.Applicative hiding ( style )
|
import Options.Applicative hiding ( style )
|
||||||
import Options.Applicative.Help.Pretty ( text )
|
import Options.Applicative.Help.Pretty ( text )
|
||||||
import Prelude hiding ( appendFile )
|
import Prelude hiding ( appendFile )
|
||||||
|
import URI.ByteString
|
||||||
|
|
||||||
|
import qualified Data.ByteString.UTF8 as UTF8
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -72,22 +74,18 @@ data Options = Options
|
|||||||
optVerbose :: Maybe Bool
|
optVerbose :: Maybe Bool
|
||||||
, optCache :: Maybe Bool
|
, optCache :: Maybe Bool
|
||||||
, optMetaCache :: Maybe Integer
|
, optMetaCache :: Maybe Integer
|
||||||
, optMetaMode :: Maybe MetaMode
|
, optUrlSource :: Maybe URI
|
||||||
, optPlatform :: Maybe PlatformRequest
|
|
||||||
, optUrlSource :: Maybe URLSource
|
|
||||||
, optNoVerify :: Maybe Bool
|
, optNoVerify :: Maybe Bool
|
||||||
, optKeepDirs :: Maybe KeepDirs
|
, optKeepDirs :: Maybe KeepDirs
|
||||||
, optsDownloader :: Maybe Downloader
|
, optsDownloader :: Maybe Downloader
|
||||||
, optNoNetwork :: Maybe Bool
|
, optNoNetwork :: Maybe Bool
|
||||||
, optGpg :: Maybe GPGSetting
|
, optGpg :: Maybe GPGSetting
|
||||||
, optStackSetup :: Maybe Bool
|
|
||||||
-- commands
|
-- commands
|
||||||
, optCommand :: Command
|
, optCommand :: Command
|
||||||
}
|
}
|
||||||
|
|
||||||
data Command
|
data Command
|
||||||
= Install (Either InstallCommand InstallOptions)
|
= Install (Either InstallCommand InstallOptions)
|
||||||
| Test TestCommand
|
|
||||||
| InstallCabalLegacy InstallOptions
|
| InstallCabalLegacy InstallOptions
|
||||||
| Set (Either SetCommand SetOptions)
|
| Set (Either SetCommand SetOptions)
|
||||||
| UnSet UnsetCommand
|
| UnSet UnsetCommand
|
||||||
@ -109,7 +107,6 @@ data Command
|
|||||||
| Prefetch PrefetchCommand
|
| Prefetch PrefetchCommand
|
||||||
| GC GCOptions
|
| GC GCOptions
|
||||||
| Run RunOptions
|
| Run RunOptions
|
||||||
| PrintAppErrors
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -118,27 +115,16 @@ opts =
|
|||||||
Options
|
Options
|
||||||
<$> invertableSwitch "verbose" (Just 'v') False (help "Enable verbosity (default: disabled)")
|
<$> invertableSwitch "verbose" (Just 'v') False (help "Enable verbosity (default: disabled)")
|
||||||
<*> invertableSwitch "cache" (Just 'c') False (help "Cache downloads in ~/.ghcup/cache (default: disabled)")
|
<*> invertableSwitch "cache" (Just 'c') False (help "Cache downloads in ~/.ghcup/cache (default: disabled)")
|
||||||
<*> optional (option auto (long "metadata-caching" <> metavar "SEC" <> help "How long the yaml metadata caching interval is (in seconds), 0 to disable"))
|
<*> optional (option auto (long "metadata-caching" <> help "How long the yaml metadata caching interval is (in seconds), 0 to disable" <> internal))
|
||||||
<*> optional (option auto (long "metadata-fetching-mode" <> metavar "<Strict|Lax>" <> help "Whether to fail on metadata download failure (Strict) or fall back to cached version (Lax (default))"))
|
|
||||||
<*> optional
|
|
||||||
(option
|
|
||||||
(eitherReader platformParser)
|
|
||||||
( short 'p'
|
|
||||||
<> long "platform"
|
|
||||||
<> metavar "PLATFORM"
|
|
||||||
<> help
|
|
||||||
"Override for platform (triple matching ghc tarball names), e.g. x86_64-fedora27-linux"
|
|
||||||
)
|
|
||||||
)
|
|
||||||
<*> optional
|
<*> optional
|
||||||
(option
|
(option
|
||||||
(eitherReader parseUrlSource)
|
(eitherReader parseUri)
|
||||||
( short 's'
|
( short 's'
|
||||||
<> long "url-source"
|
<> long "url-source"
|
||||||
<> metavar "URL_SOURCE"
|
<> metavar "URL"
|
||||||
<> help "Alternative ghcup download info"
|
<> help "Alternative ghcup download info url"
|
||||||
<> internal
|
<> internal
|
||||||
<> completer urlSourceCompleter
|
<> completer fileUri
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
<*> (fmap . fmap) not (invertableSwitch "verify" (Just 'n') True (help "Disable tarball checksum verification (default: enabled)"))
|
<*> (fmap . fmap) not (invertableSwitch "verify" (Just 'n') True (help "Disable tarball checksum verification (default: enabled)"))
|
||||||
@ -176,9 +162,10 @@ opts =
|
|||||||
"GPG verification (default: none)"
|
"GPG verification (default: none)"
|
||||||
<> completer (listCompleter ["strict", "lax", "none"])
|
<> completer (listCompleter ["strict", "lax", "none"])
|
||||||
))
|
))
|
||||||
<*> invertableSwitch "stack-setup" (Just 's') False (help "Use stack's setup info for discovering and installing GHC versions")
|
|
||||||
<*> com
|
<*> com
|
||||||
|
where
|
||||||
|
parseUri s' =
|
||||||
|
first show $ parseURI strictURIParserOptions (UTF8.fromString s')
|
||||||
|
|
||||||
|
|
||||||
com :: Parser Command
|
com :: Parser Command
|
||||||
@ -205,14 +192,6 @@ com =
|
|||||||
<> footerDoc (Just $ text installToolFooter)
|
<> footerDoc (Just $ text installToolFooter)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
<> command
|
|
||||||
"test"
|
|
||||||
(info
|
|
||||||
(Test <$> testParser <**> helper)
|
|
||||||
( progDesc "Run tests for a tool (if any) [EXPERIMENTAL!]"
|
|
||||||
<> footerDoc (Just $ text testFooter)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
<> command
|
<> command
|
||||||
"set"
|
"set"
|
||||||
(info
|
(info
|
||||||
@ -241,8 +220,7 @@ com =
|
|||||||
<> command
|
<> command
|
||||||
"list"
|
"list"
|
||||||
(info (List <$> listOpts <**> helper)
|
(info (List <$> listOpts <**> helper)
|
||||||
(progDesc "Show available GHCs and other tools"
|
(progDesc "Show available GHCs and other tools")
|
||||||
<> footerDoc (Just $ text listToolFooter))
|
|
||||||
)
|
)
|
||||||
<> command
|
<> command
|
||||||
"upgrade"
|
"upgrade"
|
||||||
@ -351,10 +329,3 @@ com =
|
|||||||
<> commandGroup "Nuclear Commands:"
|
<> commandGroup "Nuclear Commands:"
|
||||||
<> hidden
|
<> hidden
|
||||||
)
|
)
|
||||||
<|> subparser
|
|
||||||
(command
|
|
||||||
"print-app-errors"
|
|
||||||
(info (pure PrintAppErrors <**> helper)
|
|
||||||
(progDesc ""))
|
|
||||||
<> internal
|
|
||||||
)
|
|
@ -12,7 +12,6 @@ module GHCup.OptParse.ChangeLog where
|
|||||||
|
|
||||||
|
|
||||||
import GHCup.Types
|
import GHCup.Types
|
||||||
import GHCup.Errors
|
|
||||||
import GHCup.OptParse.Common
|
import GHCup.OptParse.Common
|
||||||
import GHCup.Prelude
|
import GHCup.Prelude
|
||||||
import GHCup.Prelude.Logger
|
import GHCup.Prelude.Logger
|
||||||
@ -29,13 +28,13 @@ import Data.Maybe
|
|||||||
import Options.Applicative hiding ( style )
|
import Options.Applicative hiding ( style )
|
||||||
import Prelude hiding ( appendFile )
|
import Prelude hiding ( appendFile )
|
||||||
import System.Exit
|
import System.Exit
|
||||||
import System.Process ( system )
|
|
||||||
import Text.PrettyPrint.HughesPJClass ( prettyShow )
|
import Text.PrettyPrint.HughesPJClass ( prettyShow )
|
||||||
|
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import Control.Exception.Safe (MonadMask)
|
import Control.Exception.Safe (MonadMask)
|
||||||
import GHCup.Types.Optics
|
import GHCup.Types.Optics
|
||||||
import GHCup.Utils
|
import GHCup.Utils
|
||||||
|
import Data.Versions
|
||||||
import URI.ByteString (serializeURIRef')
|
import URI.ByteString (serializeURIRef')
|
||||||
import Data.Char (toLower)
|
import Data.Char (toLower)
|
||||||
|
|
||||||
@ -50,7 +49,7 @@ data ChangeLogOptions = ChangeLogOptions
|
|||||||
{ clOpen :: Bool
|
{ clOpen :: Bool
|
||||||
, clTool :: Maybe Tool
|
, clTool :: Maybe Tool
|
||||||
, clToolVer :: Maybe ToolVersion
|
, clToolVer :: Maybe ToolVersion
|
||||||
} deriving (Eq, Show)
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -72,16 +71,15 @@ changelogP =
|
|||||||
"cabal" -> Right Cabal
|
"cabal" -> Right Cabal
|
||||||
"ghcup" -> Right GHCup
|
"ghcup" -> Right GHCup
|
||||||
"stack" -> Right Stack
|
"stack" -> Right Stack
|
||||||
"hls" -> Right HLS
|
|
||||||
e -> Left e
|
e -> Left e
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(short 't' <> long "tool" <> metavar "<ghc|cabal|hls|ghcup|stack>" <> help
|
(short 't' <> long "tool" <> metavar "<ghc|cabal|ghcup>" <> help
|
||||||
"Open changelog for given tool (default: ghc)"
|
"Open changelog for given tool (default: ghc)"
|
||||||
<> completer toolCompleter
|
<> completer toolCompleter
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
<*> optional (toolVersionTagArgument [] Nothing)
|
<*> optional (toolVersionArgument Nothing Nothing)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -115,36 +113,39 @@ changelog :: ( Monad m
|
|||||||
changelog ChangeLogOptions{..} runAppState runLogger = do
|
changelog ChangeLogOptions{..} runAppState runLogger = do
|
||||||
GHCupInfo { _ghcupDownloads = dls } <- runAppState getGHCupInfo
|
GHCupInfo { _ghcupDownloads = dls } <- runAppState getGHCupInfo
|
||||||
let tool = fromMaybe GHC clTool
|
let tool = fromMaybe GHC clTool
|
||||||
ver' = fromMaybe
|
ver' = maybe
|
||||||
(ToolTag Latest)
|
(Right Latest)
|
||||||
|
(\case
|
||||||
|
ToolVersion tv -> Left (_tvVersion tv) -- FIXME: ugly sharing of ToolVersion
|
||||||
|
ToolTag t -> Right t
|
||||||
|
)
|
||||||
clToolVer
|
clToolVer
|
||||||
muri = getChangeLog dls tool ver'
|
muri = getChangeLog dls tool ver'
|
||||||
case muri of
|
case muri of
|
||||||
Nothing -> do
|
Nothing -> do
|
||||||
runLogger
|
runLogger
|
||||||
(logWarn $
|
(logWarn $
|
||||||
"Could not find ChangeLog for " <> T.pack (prettyShow tool) <> ", version " <> T.pack (prettyShow ver')
|
"Could not find ChangeLog for " <> T.pack (prettyShow tool) <> ", version " <> either prettyVer (T.pack . show) ver'
|
||||||
)
|
)
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
Just uri -> do
|
Just uri -> do
|
||||||
pfreq <- runAppState getPlatformReq
|
pfreq <- runAppState getPlatformReq
|
||||||
let uri' = T.unpack . decUTF8Safe . serializeURIRef' $ uri
|
let uri' = T.unpack . decUTF8Safe . serializeURIRef' $ uri
|
||||||
|
cmd = case _rPlatform pfreq of
|
||||||
|
Darwin -> "open"
|
||||||
|
Linux _ -> "xdg-open"
|
||||||
|
FreeBSD -> "xdg-open"
|
||||||
|
Windows -> "start"
|
||||||
|
|
||||||
if clOpen
|
if clOpen
|
||||||
then do
|
then do
|
||||||
runAppState $
|
runAppState $
|
||||||
case _rPlatform pfreq of
|
exec cmd
|
||||||
Darwin -> exec "open" [T.unpack $ decUTF8Safe $ serializeURIRef' uri] Nothing Nothing
|
[T.unpack $ decUTF8Safe $ serializeURIRef' uri]
|
||||||
Linux _ -> exec "xdg-open" [T.unpack $ decUTF8Safe $ serializeURIRef' uri] Nothing Nothing
|
Nothing
|
||||||
FreeBSD -> exec "xdg-open" [T.unpack $ decUTF8Safe $ serializeURIRef' uri] Nothing Nothing
|
Nothing
|
||||||
Windows -> do
|
|
||||||
let args = "start \"\" " ++ (T.unpack $ decUTF8Safe $ serializeURIRef' uri)
|
|
||||||
c <- liftIO $ system $ args
|
|
||||||
case c of
|
|
||||||
(ExitFailure xi) -> pure $ Left $ NonZeroExit xi "cmd.exe" [args]
|
|
||||||
ExitSuccess -> pure $ Right ()
|
|
||||||
>>= \case
|
>>= \case
|
||||||
Right _ -> pure ExitSuccess
|
Right _ -> pure ExitSuccess
|
||||||
Left e -> logError (T.pack $ prettyHFError e)
|
Left e -> logError (T.pack $ prettyShow e)
|
||||||
>> pure (ExitFailure 13)
|
>> pure (ExitFailure 13)
|
||||||
else liftIO $ putStrLn uri' >> pure ExitSuccess
|
else liftIO $ putStrLn uri' >> pure ExitSuccess
|
||||||
|
|
@ -5,7 +5,6 @@
|
|||||||
{-# LANGUAGE DuplicateRecordFields #-}
|
{-# LANGUAGE DuplicateRecordFields #-}
|
||||||
{-# LANGUAGE TypeApplications #-}
|
{-# LANGUAGE TypeApplications #-}
|
||||||
{-# LANGUAGE NumericUnderscores #-}
|
{-# LANGUAGE NumericUnderscores #-}
|
||||||
{-# LANGUAGE ViewPatterns #-}
|
|
||||||
|
|
||||||
module GHCup.OptParse.Common where
|
module GHCup.OptParse.Common where
|
||||||
|
|
||||||
@ -26,7 +25,6 @@ import Control.DeepSeq
|
|||||||
import Control.Concurrent
|
import Control.Concurrent
|
||||||
import Control.Concurrent.Async
|
import Control.Concurrent.Async
|
||||||
import Control.Exception.Safe
|
import Control.Exception.Safe
|
||||||
import Control.Monad.Identity (Identity(..))
|
|
||||||
#if !MIN_VERSION_base(4,13,0)
|
#if !MIN_VERSION_base(4,13,0)
|
||||||
import Control.Monad.Fail ( MonadFail )
|
import Control.Monad.Fail ( MonadFail )
|
||||||
#endif
|
#endif
|
||||||
@ -46,9 +44,7 @@ import Data.Functor
|
|||||||
import Data.List ( nub, sort, sortBy, isPrefixOf, stripPrefix )
|
import Data.List ( nub, sort, sortBy, isPrefixOf, stripPrefix )
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import Data.Text ( Text )
|
import Data.Text ( Text )
|
||||||
import Data.Time.Calendar ( Day )
|
import Data.Versions hiding ( str )
|
||||||
import Data.Time.Format ( parseTimeM, defaultTimeLocale )
|
|
||||||
import Data.Versions
|
|
||||||
import Data.Void
|
import Data.Void
|
||||||
import qualified Data.Vector as V
|
import qualified Data.Vector as V
|
||||||
import GHC.IO.Exception
|
import GHC.IO.Exception
|
||||||
@ -59,44 +55,37 @@ import Safe
|
|||||||
import System.Process ( readProcess )
|
import System.Process ( readProcess )
|
||||||
import System.FilePath
|
import System.FilePath
|
||||||
import Text.HTML.TagSoup hiding ( Tag )
|
import Text.HTML.TagSoup hiding ( Tag )
|
||||||
import URI.ByteString hiding (parseURI)
|
import URI.ByteString
|
||||||
|
|
||||||
import qualified Data.ByteString.UTF8 as UTF8
|
import qualified Data.ByteString.UTF8 as UTF8
|
||||||
import qualified Data.Map.Strict as M
|
import qualified Data.Map.Strict as M
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import qualified Data.Text.Lazy.Encoding as LE
|
|
||||||
import qualified Data.Text.Lazy as LT
|
|
||||||
import qualified Text.Megaparsec as MP
|
import qualified Text.Megaparsec as MP
|
||||||
import qualified System.FilePath.Posix as FP
|
import qualified System.FilePath.Posix as FP
|
||||||
import GHCup.Version
|
import GHCup.Version
|
||||||
import Control.Exception (evaluate)
|
import Control.Exception (evaluate)
|
||||||
import qualified Cabal.Config as CC
|
|
||||||
|
|
||||||
|
|
||||||
-------------
|
-------------
|
||||||
--[ Types ]--
|
--[ Types ]--
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
|
data ToolVersion = ToolVersion GHCTargetVersion -- target is ignored for cabal
|
||||||
|
| ToolTag Tag
|
||||||
|
|
||||||
-- a superset of ToolVersion
|
-- a superset of ToolVersion
|
||||||
data SetToolVersion = SetGHCVersion GHCTargetVersion
|
data SetToolVersion = SetToolVersion GHCTargetVersion
|
||||||
| SetToolVersion Version
|
|
||||||
| SetToolTag Tag
|
| SetToolTag Tag
|
||||||
| SetToolDay Day
|
|
||||||
| SetRecommended
|
| SetRecommended
|
||||||
| SetNext
|
| SetNext
|
||||||
deriving (Eq, Show)
|
|
||||||
|
|
||||||
prettyToolVer :: ToolVersion -> String
|
prettyToolVer :: ToolVersion -> String
|
||||||
prettyToolVer (GHCVersion v') = T.unpack $ tVerToText v'
|
prettyToolVer (ToolVersion v') = T.unpack $ tVerToText v'
|
||||||
prettyToolVer (ToolVersion v') = T.unpack $ prettyVer v'
|
prettyToolVer (ToolTag t) = show t
|
||||||
prettyToolVer (ToolTag t) = show t
|
|
||||||
prettyToolVer (ToolDay day) = show day
|
|
||||||
|
|
||||||
toSetToolVer :: Maybe ToolVersion -> SetToolVersion
|
toSetToolVer :: Maybe ToolVersion -> SetToolVersion
|
||||||
toSetToolVer (Just (GHCVersion v')) = SetGHCVersion v'
|
|
||||||
toSetToolVer (Just (ToolVersion v')) = SetToolVersion v'
|
toSetToolVer (Just (ToolVersion v')) = SetToolVersion v'
|
||||||
toSetToolVer (Just (ToolTag t')) = SetToolTag t'
|
toSetToolVer (Just (ToolTag t')) = SetToolTag t'
|
||||||
toSetToolVer (Just (ToolDay d')) = SetToolDay d'
|
|
||||||
toSetToolVer Nothing = SetRecommended
|
toSetToolVer Nothing = SetRecommended
|
||||||
|
|
||||||
|
|
||||||
@ -107,30 +96,32 @@ toSetToolVer Nothing = SetRecommended
|
|||||||
--------------
|
--------------
|
||||||
|
|
||||||
|
|
||||||
toolVersionTagArgument :: [ListCriteria] -> Maybe Tool -> Parser ToolVersion
|
-- | same as toolVersionParser, except as an argument.
|
||||||
toolVersionTagArgument criteria tool =
|
toolVersionArgument :: Maybe ListCriteria -> Maybe Tool -> Parser ToolVersion
|
||||||
argument (eitherReader (parser tool))
|
toolVersionArgument criteria tool =
|
||||||
|
argument (eitherReader toolVersionEither)
|
||||||
(metavar (mv tool)
|
(metavar (mv tool)
|
||||||
<> completer (tagCompleter (fromMaybe GHC tool) [])
|
<> completer (tagCompleter (fromMaybe GHC tool) [])
|
||||||
<> foldMap (completer . versionCompleter criteria) tool)
|
<> foldMap (completer . versionCompleter criteria) tool)
|
||||||
where
|
where
|
||||||
mv (Just GHC) = "GHC_VERSION|TAG|RELEASE_DATE"
|
mv (Just GHC) = "GHC_VERSION|TAG"
|
||||||
mv (Just HLS) = "HLS_VERSION|TAG|RELEASE_DATE"
|
mv (Just HLS) = "HLS_VERSION|TAG"
|
||||||
mv _ = "VERSION|TAG|RELEASE_DATE"
|
mv _ = "VERSION|TAG"
|
||||||
|
|
||||||
parser (Just GHC) = ghcVersionTagEither
|
|
||||||
parser Nothing = ghcVersionTagEither
|
|
||||||
parser _ = toolVersionTagEither
|
|
||||||
|
|
||||||
|
|
||||||
versionParser' :: [ListCriteria] -> Maybe Tool -> Parser Version
|
versionParser :: Parser GHCTargetVersion
|
||||||
|
versionParser = option
|
||||||
|
(eitherReader tVersionEither)
|
||||||
|
(short 'v' <> long "version" <> metavar "VERSION" <> help "The target version"
|
||||||
|
)
|
||||||
|
|
||||||
|
versionParser' :: Maybe ListCriteria -> Maybe Tool -> Parser Version
|
||||||
versionParser' criteria tool = argument
|
versionParser' criteria tool = argument
|
||||||
(eitherReader (first show . version . T.pack))
|
(eitherReader (first show . version . T.pack))
|
||||||
(metavar "VERSION" <> foldMap (completer . versionCompleter criteria) tool)
|
(metavar "VERSION" <> foldMap (completer . versionCompleter criteria) tool)
|
||||||
|
|
||||||
ghcVersionArgument :: [ListCriteria] -> Maybe Tool -> Parser GHCTargetVersion
|
versionArgument :: Maybe ListCriteria -> Maybe Tool -> Parser GHCTargetVersion
|
||||||
ghcVersionArgument criteria tool = argument (eitherReader ghcVersionEither)
|
versionArgument criteria tool = argument (eitherReader tVersionEither) (metavar "VERSION" <> foldMap (completer . versionCompleter criteria) tool)
|
||||||
(metavar "VERSION" <> foldMap (completer . versionCompleter criteria) tool)
|
|
||||||
|
|
||||||
|
|
||||||
-- https://github.com/pcapriotti/optparse-applicative/issues/148
|
-- https://github.com/pcapriotti/optparse-applicative/issues/148
|
||||||
@ -210,11 +201,23 @@ platformParser s' = case MP.parse (platformP <* MP.eof) "" (T.pack s') of
|
|||||||
)
|
)
|
||||||
]
|
]
|
||||||
distroP :: MP.Parsec Void Text LinuxDistro
|
distroP :: MP.Parsec Void Text LinuxDistro
|
||||||
distroP = choice' ((\d -> MP.chunk (T.pack $ distroToString d) $> d) <$> allDistros)
|
distroP = choice'
|
||||||
|
[ MP.chunk "debian" $> Debian
|
||||||
|
, MP.chunk "deb" $> Debian
|
||||||
|
, MP.chunk "ubuntu" $> Ubuntu
|
||||||
|
, MP.chunk "mint" $> Mint
|
||||||
|
, MP.chunk "fedora" $> Fedora
|
||||||
|
, MP.chunk "centos" $> CentOS
|
||||||
|
, MP.chunk "redhat" $> RedHat
|
||||||
|
, MP.chunk "alpine" $> Alpine
|
||||||
|
, MP.chunk "gentoo" $> Gentoo
|
||||||
|
, MP.chunk "exherbo" $> Exherbo
|
||||||
|
, MP.chunk "unknown" $> UnknownLinux
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
uriParser :: String -> Either String URI
|
uriParser :: String -> Either String URI
|
||||||
uriParser = first show . parseURI . UTF8.fromString
|
uriParser = first show . parseURI strictURIParserOptions . UTF8.fromString
|
||||||
|
|
||||||
|
|
||||||
absolutePathParser :: FilePath -> Either String FilePath
|
absolutePathParser :: FilePath -> Either String FilePath
|
||||||
@ -227,36 +230,24 @@ isolateParser f = case isValid f && isAbsolute f of
|
|||||||
True -> Right $ normalise f
|
True -> Right $ normalise f
|
||||||
False -> Left "Please enter a valid filepath for isolate dir."
|
False -> Left "Please enter a valid filepath for isolate dir."
|
||||||
|
|
||||||
-- this accepts cross prefix
|
toolVersionEither :: String -> Either String ToolVersion
|
||||||
ghcVersionTagEither :: String -> Either String ToolVersion
|
toolVersionEither s' =
|
||||||
ghcVersionTagEither s' =
|
second ToolTag (tagEither s') <|> second ToolVersion (tVersionEither s')
|
||||||
second ToolDay (dayParser s') <|> second ToolTag (tagEither s') <|> second GHCVersion (ghcVersionEither s')
|
|
||||||
|
|
||||||
-- this ignores cross prefix
|
|
||||||
toolVersionTagEither :: String -> Either String ToolVersion
|
|
||||||
toolVersionTagEither s' =
|
|
||||||
second ToolDay (dayParser s') <|> second ToolTag (tagEither s') <|> second ToolVersion (toolVersionEither s')
|
|
||||||
|
|
||||||
tagEither :: String -> Either String Tag
|
tagEither :: String -> Either String Tag
|
||||||
tagEither s' = case fmap toLower s' of
|
tagEither s' = case fmap toLower s' of
|
||||||
"recommended" -> Right Recommended
|
"recommended" -> Right Recommended
|
||||||
"latest" -> Right Latest
|
"latest" -> Right Latest
|
||||||
"latest-prerelease" -> Right LatestPrerelease
|
|
||||||
"latest-nightly" -> Right LatestNightly
|
|
||||||
('b':'a':'s':'e':'-':ver') -> case pvp (T.pack ver') of
|
('b':'a':'s':'e':'-':ver') -> case pvp (T.pack ver') of
|
||||||
Right x -> Right (Base x)
|
Right x -> Right (Base x)
|
||||||
Left _ -> Left $ "Invalid PVP version for base " <> ver'
|
Left _ -> Left $ "Invalid PVP version for base " <> ver'
|
||||||
other -> Left $ "Unknown tag " <> other
|
other -> Left $ "Unknown tag " <> other
|
||||||
|
|
||||||
|
|
||||||
ghcVersionEither :: String -> Either String GHCTargetVersion
|
tVersionEither :: String -> Either String GHCTargetVersion
|
||||||
ghcVersionEither =
|
tVersionEither =
|
||||||
first (const "Not a valid version") . MP.parse ghcTargetVerP "" . T.pack
|
first (const "Not a valid version") . MP.parse ghcTargetVerP "" . T.pack
|
||||||
|
|
||||||
toolVersionEither :: String -> Either String Version
|
|
||||||
toolVersionEither =
|
|
||||||
first (const "Not a valid version") . MP.parse (version' <* MP.eof) "" . T.pack
|
|
||||||
|
|
||||||
|
|
||||||
toolParser :: String -> Either String Tool
|
toolParser :: String -> Either String Tool
|
||||||
toolParser s' | t == T.pack "ghc" = Right GHC
|
toolParser s' | t == T.pack "ghc" = Right GHC
|
||||||
@ -266,22 +257,12 @@ toolParser s' | t == T.pack "ghc" = Right GHC
|
|||||||
| otherwise = Left ("Unknown tool: " <> s')
|
| otherwise = Left ("Unknown tool: " <> s')
|
||||||
where t = T.toLower (T.pack s')
|
where t = T.toLower (T.pack s')
|
||||||
|
|
||||||
dayParser :: String -> Either String Day
|
|
||||||
dayParser s = maybe (Left $ "Could not parse \"" <> s <> "\". Expected format is: YYYY-MM-DD") Right
|
|
||||||
$ parseTimeM True defaultTimeLocale "%Y-%-m-%-d" s
|
|
||||||
|
|
||||||
|
|
||||||
criteriaParser :: String -> Either String ListCriteria
|
criteriaParser :: String -> Either String ListCriteria
|
||||||
criteriaParser s' | t == T.pack "installed" = Right $ ListInstalled True
|
criteriaParser s' | t == T.pack "installed" = Right ListInstalled
|
||||||
| t == T.pack "set" = Right $ ListSet True
|
| t == T.pack "set" = Right ListSet
|
||||||
| t == T.pack "available" = Right $ ListAvailable True
|
| t == T.pack "available" = Right ListAvailable
|
||||||
| t == T.pack "+installed" = Right $ ListInstalled True
|
| otherwise = Left ("Unknown criteria: " <> s')
|
||||||
| t == T.pack "+set" = Right $ ListSet True
|
|
||||||
| t == T.pack "+available" = Right $ ListAvailable True
|
|
||||||
| t == T.pack "-installed" = Right $ ListInstalled False
|
|
||||||
| t == T.pack "-set" = Right $ ListSet False
|
|
||||||
| t == T.pack "-available" = Right $ ListAvailable False
|
|
||||||
| otherwise = Left ("Unknown criteria: " <> s')
|
|
||||||
where t = T.toLower (T.pack s')
|
where t = T.toLower (T.pack s')
|
||||||
|
|
||||||
|
|
||||||
@ -312,29 +293,6 @@ gpgParser s' | t == T.pack "strict" = Right GPGStrict
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
overWriteVersionParser :: String -> Either String [VersionPattern]
|
|
||||||
overWriteVersionParser = first (const "Not a valid version pattern") . MP.parse (MP.many versionPattern <* MP.eof) "" . T.pack
|
|
||||||
where
|
|
||||||
versionPattern :: MP.Parsec Void Text VersionPattern
|
|
||||||
versionPattern = do
|
|
||||||
str' <- T.unpack <$> MP.takeWhileP Nothing (/= '%')
|
|
||||||
if str' /= mempty
|
|
||||||
then pure (S str')
|
|
||||||
else fmap (const CabalVer) v_cabal
|
|
||||||
<|> fmap (const GitBranchName) b_name
|
|
||||||
<|> fmap (const GitHashShort) s_hash
|
|
||||||
<|> fmap (const GitHashLong) l_hash
|
|
||||||
<|> fmap (const GitDescribe) g_desc
|
|
||||||
<|> ((\a b -> S (a : T.unpack b)) <$> MP.satisfy (const True) <*> MP.takeWhileP Nothing (== '%')) -- invalid pattern, e.g. "%k"
|
|
||||||
where
|
|
||||||
v_cabal = MP.chunk "%v"
|
|
||||||
b_name = MP.chunk "%b"
|
|
||||||
s_hash = MP.chunk "%h"
|
|
||||||
l_hash = MP.chunk "%H"
|
|
||||||
g_desc = MP.chunk "%g"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
------------------
|
------------------
|
||||||
--[ Completers ]--
|
--[ Completers ]--
|
||||||
------------------
|
------------------
|
||||||
@ -346,15 +304,6 @@ toolCompleter = listCompleter ["ghc", "cabal", "hls", "stack"]
|
|||||||
gitFileUri :: [String] -> Completer
|
gitFileUri :: [String] -> Completer
|
||||||
gitFileUri add = mkCompleter $ fileUri' (["git://"] <> add)
|
gitFileUri add = mkCompleter $ fileUri' (["git://"] <> add)
|
||||||
|
|
||||||
urlSourceCompleter :: Completer
|
|
||||||
urlSourceCompleter = mkCompleter $ urlSourceCompleter' []
|
|
||||||
|
|
||||||
urlSourceCompleter' :: [String] -> String -> IO [String]
|
|
||||||
urlSourceCompleter' add str' = do
|
|
||||||
let static = ["GHCupURL", "StackSetupURL"]
|
|
||||||
file <- fileUri' add str'
|
|
||||||
pure $ static ++ file
|
|
||||||
|
|
||||||
fileUri :: Completer
|
fileUri :: Completer
|
||||||
fileUri = mkCompleter $ fileUri' []
|
fileUri = mkCompleter $ fileUri' []
|
||||||
|
|
||||||
@ -483,21 +432,17 @@ tagCompleter tool add = listIOCompleter $ do
|
|||||||
defaultKeyBindings
|
defaultKeyBindings
|
||||||
loggerConfig
|
loggerConfig
|
||||||
|
|
||||||
mpFreq <- flip runReaderT appState . runE $ platformRequest
|
mGhcUpInfo <- flip runReaderT appState . runE $ getDownloadsF
|
||||||
forFold mpFreq $ \pfreq -> do
|
case mGhcUpInfo of
|
||||||
mGhcUpInfo <- flip runReaderT appState . runE $ getDownloadsF pfreq
|
VRight ghcupInfo -> do
|
||||||
case mGhcUpInfo of
|
let allTags = filter (/= Old)
|
||||||
VRight ghcupInfo -> do
|
$ _viTags =<< M.elems (availableToolVersions (_ghcupDownloads ghcupInfo) tool)
|
||||||
let allTags = filter (/= Old)
|
pure $ nub $ (add ++) $ fmap tagToString allTags
|
||||||
$ _viTags =<< M.elems (availableToolVersions (_ghcupDownloads ghcupInfo) tool)
|
VLeft _ -> pure (nub $ ["recommended", "latest"] ++ add)
|
||||||
pure $ nub $ (add ++) $ fmap tagToString allTags
|
|
||||||
VLeft _ -> pure (nub $ ["recommended", "latest", "latest-prerelease"] ++ add)
|
|
||||||
|
|
||||||
versionCompleter :: [ListCriteria] -> Tool -> Completer
|
|
||||||
versionCompleter criteria tool = versionCompleter' criteria tool (const True)
|
|
||||||
|
|
||||||
versionCompleter' :: [ListCriteria] -> Tool -> (Version -> Bool) -> Completer
|
versionCompleter :: Maybe ListCriteria -> Tool -> Completer
|
||||||
versionCompleter' criteria tool filter' = listIOCompleter $ do
|
versionCompleter criteria tool = listIOCompleter $ do
|
||||||
dirs' <- liftIO getAllDirs
|
dirs' <- liftIO getAllDirs
|
||||||
let loggerConfig = LoggerConfig
|
let loggerConfig = LoggerConfig
|
||||||
{ lcPrintDebug = False
|
{ lcPrintDebug = False
|
||||||
@ -512,8 +457,8 @@ versionCompleter' criteria tool filter' = listIOCompleter $ do
|
|||||||
defaultKeyBindings
|
defaultKeyBindings
|
||||||
loggerConfig
|
loggerConfig
|
||||||
mpFreq <- flip runReaderT leanAppState . runE $ platformRequest
|
mpFreq <- flip runReaderT leanAppState . runE $ platformRequest
|
||||||
|
mGhcUpInfo <- flip runReaderT leanAppState . runE $ getDownloadsF
|
||||||
forFold mpFreq $ \pfreq -> do
|
forFold mpFreq $ \pfreq -> do
|
||||||
mGhcUpInfo <- flip runReaderT leanAppState . runE $ getDownloadsF pfreq
|
|
||||||
forFold mGhcUpInfo $ \ghcupInfo -> do
|
forFold mGhcUpInfo $ \ghcupInfo -> do
|
||||||
let appState = AppState
|
let appState = AppState
|
||||||
settings
|
settings
|
||||||
@ -525,8 +470,8 @@ versionCompleter' criteria tool filter' = listIOCompleter $ do
|
|||||||
|
|
||||||
runEnv = flip runReaderT appState
|
runEnv = flip runReaderT appState
|
||||||
|
|
||||||
installedVersions <- runEnv $ listVersions (Just tool) criteria False False (Nothing, Nothing)
|
installedVersions <- runEnv $ listVersions (Just tool) criteria
|
||||||
return $ fmap (T.unpack . prettyVer) . filter filter' . fmap lVer $ installedVersions
|
return $ T.unpack . prettyVer . lVer <$> installedVersions
|
||||||
|
|
||||||
|
|
||||||
toolDlCompleter :: Tool -> Completer
|
toolDlCompleter :: Tool -> Completer
|
||||||
@ -693,7 +638,6 @@ fromVersion :: ( HasLog env
|
|||||||
-> Tool
|
-> Tool
|
||||||
-> Excepts
|
-> Excepts
|
||||||
'[ TagNotFound
|
'[ TagNotFound
|
||||||
, DayNotFound
|
|
||||||
, NextVerNotFound
|
, NextVerNotFound
|
||||||
, NoToolVersionSet
|
, NoToolVersionSet
|
||||||
] m (GHCTargetVersion, Maybe VersionInfo)
|
] m (GHCTargetVersion, Maybe VersionInfo)
|
||||||
@ -712,58 +656,34 @@ fromVersion' :: ( HasLog env
|
|||||||
-> Tool
|
-> Tool
|
||||||
-> Excepts
|
-> Excepts
|
||||||
'[ TagNotFound
|
'[ TagNotFound
|
||||||
, DayNotFound
|
|
||||||
, NextVerNotFound
|
, NextVerNotFound
|
||||||
, NoToolVersionSet
|
, NoToolVersionSet
|
||||||
] m (GHCTargetVersion, Maybe VersionInfo)
|
] m (GHCTargetVersion, Maybe VersionInfo)
|
||||||
fromVersion' SetRecommended tool = do
|
fromVersion' SetRecommended tool = do
|
||||||
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
||||||
second Just <$> getRecommended dls tool
|
bimap mkTVer Just <$> getRecommended dls tool
|
||||||
?? TagNotFound Recommended tool
|
?? TagNotFound Recommended tool
|
||||||
fromVersion' (SetGHCVersion v) tool = do
|
fromVersion' (SetToolVersion v) tool = do
|
||||||
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
||||||
let vi = getVersionInfo v tool dls
|
let vi = getVersionInfo (_tvVersion v) tool dls
|
||||||
case pvp $ prettyVer (_tvVersion v) of -- need to be strict here
|
case pvp $ prettyVer (_tvVersion v) of -- need to be strict here
|
||||||
Left _ -> pure (v, vi)
|
Left _ -> pure (v, vi)
|
||||||
Right pvpIn ->
|
Right pvpIn ->
|
||||||
lift (getLatestToolFor tool (_tvTarget v) pvpIn dls) >>= \case
|
lift (getLatestToolFor tool pvpIn dls) >>= \case
|
||||||
Just (pvp_, vi', mt) -> do
|
Just (pvp_, vi') -> do
|
||||||
v' <- lift $ pvpToVersion pvp_ ""
|
v' <- lift $ pvpToVersion pvp_ ""
|
||||||
when (v' /= _tvVersion v) $ lift $ logWarn ("Assuming you meant version " <> prettyVer v')
|
when (v' /= _tvVersion v) $ lift $ logWarn ("Assuming you meant version " <> prettyVer v')
|
||||||
pure (GHCTargetVersion mt v', Just vi')
|
pure (GHCTargetVersion (_tvTarget v) v', Just vi')
|
||||||
Nothing -> pure (v, vi)
|
|
||||||
fromVersion' (SetToolVersion (mkTVer -> v)) tool = do
|
|
||||||
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
|
||||||
let vi = getVersionInfo v tool dls
|
|
||||||
case pvp $ prettyVer (_tvVersion v) of -- need to be strict here
|
|
||||||
Left _ -> pure (v, vi)
|
|
||||||
Right pvpIn ->
|
|
||||||
lift (getLatestToolFor tool (_tvTarget v) pvpIn dls) >>= \case
|
|
||||||
Just (pvp_, vi', mt) -> do
|
|
||||||
v' <- lift $ pvpToVersion pvp_ ""
|
|
||||||
when (v' /= _tvVersion v) $ lift $ logWarn ("Assuming you meant version " <> prettyVer v')
|
|
||||||
pure (GHCTargetVersion mt v', Just vi')
|
|
||||||
Nothing -> pure (v, vi)
|
Nothing -> pure (v, vi)
|
||||||
fromVersion' (SetToolTag Latest) tool = do
|
fromVersion' (SetToolTag Latest) tool = do
|
||||||
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
||||||
bimap id Just <$> getLatest dls tool ?? TagNotFound Latest tool
|
bimap mkTVer Just <$> getLatest dls tool ?? TagNotFound Latest tool
|
||||||
fromVersion' (SetToolDay day) tool = do
|
|
||||||
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
|
||||||
bimap id Just <$> case getByReleaseDay dls tool day of
|
|
||||||
Left ad -> throwE $ DayNotFound day tool ad
|
|
||||||
Right v -> pure v
|
|
||||||
fromVersion' (SetToolTag LatestPrerelease) tool = do
|
|
||||||
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
|
||||||
bimap id Just <$> getLatestPrerelease dls tool ?? TagNotFound LatestPrerelease tool
|
|
||||||
fromVersion' (SetToolTag LatestNightly) tool = do
|
|
||||||
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
|
||||||
bimap id Just <$> getLatestNightly dls tool ?? TagNotFound LatestNightly tool
|
|
||||||
fromVersion' (SetToolTag Recommended) tool = do
|
fromVersion' (SetToolTag Recommended) tool = do
|
||||||
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
||||||
bimap id Just <$> getRecommended dls tool ?? TagNotFound Recommended tool
|
bimap mkTVer Just <$> getRecommended dls tool ?? TagNotFound Recommended tool
|
||||||
fromVersion' (SetToolTag (Base pvp'')) GHC = do
|
fromVersion' (SetToolTag (Base pvp'')) GHC = do
|
||||||
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
||||||
bimap id Just <$> getLatestBaseVersion dls pvp'' ?? TagNotFound (Base pvp'') GHC
|
bimap mkTVer Just <$> getLatestBaseVersion dls pvp'' ?? TagNotFound (Base pvp'') GHC
|
||||||
fromVersion' SetNext tool = do
|
fromVersion' SetNext tool = do
|
||||||
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
||||||
next <- case tool of
|
next <- case tool of
|
||||||
@ -808,7 +728,7 @@ fromVersion' SetNext tool = do
|
|||||||
. sort
|
. sort
|
||||||
$ stacks) ?? NoToolVersionSet tool
|
$ stacks) ?? NoToolVersionSet tool
|
||||||
GHCup -> fail "GHCup cannot be set"
|
GHCup -> fail "GHCup cannot be set"
|
||||||
let vi = getVersionInfo next tool dls
|
let vi = getVersionInfo (_tvVersion next) tool dls
|
||||||
pure (next, vi)
|
pure (next, vi)
|
||||||
fromVersion' (SetToolTag t') tool =
|
fromVersion' (SetToolTag t') tool =
|
||||||
throwE $ TagNotFound t' tool
|
throwE $ TagNotFound t' tool
|
||||||
@ -824,15 +744,15 @@ checkForUpdates :: ( MonadReader env m
|
|||||||
, MonadIO m
|
, MonadIO m
|
||||||
, MonadFail m
|
, MonadFail m
|
||||||
)
|
)
|
||||||
=> m [(Tool, GHCTargetVersion)]
|
=> m [(Tool, Version)]
|
||||||
checkForUpdates = do
|
checkForUpdates = do
|
||||||
GHCupInfo { _ghcupDownloads = dls } <- getGHCupInfo
|
GHCupInfo { _ghcupDownloads = dls } <- getGHCupInfo
|
||||||
lInstalled <- listVersions Nothing [ListInstalled True] False False (Nothing, Nothing)
|
lInstalled <- listVersions Nothing (Just ListInstalled)
|
||||||
let latestInstalled tool = (fmap (\lr -> GHCTargetVersion (lCross lr) (lVer lr)) . lastMay . filter (\lr -> lTool lr == tool)) lInstalled
|
let latestInstalled tool = (fmap lVer . lastMay . filter (\lr -> lTool lr == tool)) lInstalled
|
||||||
|
|
||||||
ghcup <- forMM (getLatest dls GHCup) $ \(GHCTargetVersion _ l, _) -> do
|
ghcup <- forMM (getLatest dls GHCup) $ \(l, _) -> do
|
||||||
(Right ghcup_ver) <- pure $ version $ prettyPVP ghcUpVer
|
(Right ghcup_ver) <- pure $ version $ prettyPVP ghcUpVer
|
||||||
if (l > ghcup_ver) then pure $ Just (GHCup, mkTVer l) else pure Nothing
|
if (l > ghcup_ver) then pure $ Just (GHCup, l) else pure Nothing
|
||||||
|
|
||||||
otherTools <- forM [GHC, Cabal, HLS, Stack] $ \t ->
|
otherTools <- forM [GHC, Cabal, HLS, Stack] $ \t ->
|
||||||
forMM (getLatest dls t) $ \(l, _) -> do
|
forMM (getLatest dls t) $ \(l, _) -> do
|
||||||
@ -843,24 +763,3 @@ checkForUpdates = do
|
|||||||
pure $ catMaybes (ghcup:otherTools)
|
pure $ catMaybes (ghcup:otherTools)
|
||||||
where
|
where
|
||||||
forMM a f = fmap join $ forM a f
|
forMM a f = fmap join $ forM a f
|
||||||
|
|
||||||
|
|
||||||
logGHCPostRm :: (MonadReader env m, HasLog env, MonadIO m) => GHCTargetVersion -> m ()
|
|
||||||
logGHCPostRm ghcVer = do
|
|
||||||
cabalStore <- liftIO $ handleIO (\_ -> if isWindows then pure "C:\\cabal\\store" else pure "~/.cabal/store or ~/.local/state/cabal/store")
|
|
||||||
(runIdentity . CC.cfgStoreDir <$> CC.readConfig)
|
|
||||||
let storeGhcDir = cabalStore </> ("ghc-" <> T.unpack (prettyVer $ _tvVersion ghcVer))
|
|
||||||
logInfo $ T.pack $ "After removing GHC you might also want to clean up your cabal store at: " <> storeGhcDir
|
|
||||||
|
|
||||||
parseUrlSource :: String -> Either String URLSource
|
|
||||||
parseUrlSource "GHCupURL" = pure GHCupURL
|
|
||||||
parseUrlSource "StackSetupURL" = pure StackSetupURL
|
|
||||||
parseUrlSource s' = (eitherDecode . LE.encodeUtf8 . LT.pack $ s')
|
|
||||||
<|> (fmap (OwnSource . (:[]) . Right) . first show . parseURI .UTF8.fromString $ s')
|
|
||||||
|
|
||||||
parseNewUrlSource :: String -> Either String NewURLSource
|
|
||||||
parseNewUrlSource "GHCupURL" = pure NewGHCupURL
|
|
||||||
parseNewUrlSource "StackSetupURL" = pure NewStackSetupURL
|
|
||||||
parseNewUrlSource s' = (eitherDecode . LE.encodeUtf8 . LT.pack $ s')
|
|
||||||
<|> (fmap NewURI . first show . parseURI .UTF8.fromString $ s')
|
|
||||||
|
|
@ -12,8 +12,6 @@ module GHCup.OptParse.Compile where
|
|||||||
|
|
||||||
|
|
||||||
import GHCup
|
import GHCup
|
||||||
import qualified GHCup.GHC as GHC
|
|
||||||
import qualified GHCup.HLS as HLS
|
|
||||||
import GHCup.Errors
|
import GHCup.Errors
|
||||||
import GHCup.Types
|
import GHCup.Types
|
||||||
import GHCup.Types.Optics
|
import GHCup.Types.Optics
|
||||||
@ -25,24 +23,25 @@ import GHCup.OptParse.Common
|
|||||||
#if !MIN_VERSION_base(4,13,0)
|
#if !MIN_VERSION_base(4,13,0)
|
||||||
import Control.Monad.Fail ( MonadFail )
|
import Control.Monad.Fail ( MonadFail )
|
||||||
#endif
|
#endif
|
||||||
|
import Codec.Archive ( ArchiveResult )
|
||||||
import Control.Concurrent (threadDelay)
|
import Control.Concurrent (threadDelay)
|
||||||
import Control.Monad.Reader
|
import Control.Monad.Reader
|
||||||
import Control.Monad.Trans.Resource
|
import Control.Monad.Trans.Resource
|
||||||
import Data.Bifunctor
|
import Data.Bifunctor
|
||||||
import Data.Functor
|
import Data.Functor
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import Data.Versions ( Version, prettyVer, version, pvp )
|
import Data.Versions ( Version, prettyVer, version )
|
||||||
import qualified Data.Versions as V
|
|
||||||
import Data.Text ( Text )
|
import Data.Text ( Text )
|
||||||
import Haskus.Utils.Variant.Excepts
|
import Haskus.Utils.Variant.Excepts
|
||||||
import Options.Applicative hiding ( style )
|
import Options.Applicative hiding ( style )
|
||||||
import Options.Applicative.Help.Pretty ( text, vsep )
|
import Options.Applicative.Help.Pretty ( text )
|
||||||
import Prelude hiding ( appendFile )
|
import Prelude hiding ( appendFile )
|
||||||
import System.Exit
|
import System.Exit
|
||||||
|
import Text.PrettyPrint.HughesPJClass ( prettyShow )
|
||||||
|
|
||||||
import URI.ByteString hiding ( uriParser )
|
import URI.ByteString hiding ( uriParser )
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import Control.Exception.Safe (MonadMask, displayException)
|
import Control.Exception.Safe (MonadMask)
|
||||||
import System.FilePath (isPathSeparator)
|
import System.FilePath (isPathSeparator)
|
||||||
import Text.Read (readEither)
|
import Text.Read (readEither)
|
||||||
|
|
||||||
@ -56,7 +55,6 @@ import Text.Read (readEither)
|
|||||||
|
|
||||||
data CompileCommand = CompileGHC GHCCompileOptions
|
data CompileCommand = CompileGHC GHCCompileOptions
|
||||||
| CompileHLS HLSCompileOptions
|
| CompileHLS HLSCompileOptions
|
||||||
deriving (Eq, Show)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -66,7 +64,7 @@ data CompileCommand = CompileGHC GHCCompileOptions
|
|||||||
|
|
||||||
|
|
||||||
data GHCCompileOptions = GHCCompileOptions
|
data GHCCompileOptions = GHCCompileOptions
|
||||||
{ targetGhc :: GHC.GHCVer
|
{ targetGhc :: Either Version GitBranch
|
||||||
, bootstrapGhc :: Either Version FilePath
|
, bootstrapGhc :: Either Version FilePath
|
||||||
, jobs :: Maybe Int
|
, jobs :: Maybe Int
|
||||||
, buildConfig :: Maybe FilePath
|
, buildConfig :: Maybe FilePath
|
||||||
@ -74,26 +72,24 @@ data GHCCompileOptions = GHCCompileOptions
|
|||||||
, crossTarget :: Maybe Text
|
, crossTarget :: Maybe Text
|
||||||
, addConfArgs :: [Text]
|
, addConfArgs :: [Text]
|
||||||
, setCompile :: Bool
|
, setCompile :: Bool
|
||||||
, overwriteVer :: Maybe [VersionPattern]
|
, ovewrwiteVer :: Maybe Version
|
||||||
, buildFlavour :: Maybe String
|
, buildFlavour :: Maybe String
|
||||||
, buildSystem :: Maybe BuildSystem
|
, hadrian :: Bool
|
||||||
, isolateDir :: Maybe FilePath
|
, isolateDir :: Maybe FilePath
|
||||||
} deriving (Eq, Show)
|
}
|
||||||
|
|
||||||
|
|
||||||
data HLSCompileOptions = HLSCompileOptions
|
data HLSCompileOptions = HLSCompileOptions
|
||||||
{ targetHLS :: HLS.HLSVer
|
{ targetHLS :: Either Version GitBranch
|
||||||
, jobs :: Maybe Int
|
, jobs :: Maybe Int
|
||||||
, setCompile :: Bool
|
, setCompile :: Bool
|
||||||
, updateCabal :: Bool
|
, ovewrwiteVer :: Either Bool Version
|
||||||
, overwriteVer :: Maybe [VersionPattern]
|
|
||||||
, isolateDir :: Maybe FilePath
|
, isolateDir :: Maybe FilePath
|
||||||
, cabalProject :: Maybe (Either FilePath URI)
|
, cabalProject :: Maybe (Either FilePath URI)
|
||||||
, cabalProjectLocal :: Maybe URI
|
, cabalProjectLocal :: Maybe URI
|
||||||
, patches :: Maybe (Either FilePath [URI])
|
, patches :: Maybe (Either FilePath [URI])
|
||||||
, targetGHCs :: [ToolVersion]
|
, targetGHCs :: [ToolVersion]
|
||||||
, cabalArgs :: [Text]
|
, cabalArgs :: [Text]
|
||||||
} deriving (Eq, Show)
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -153,27 +149,27 @@ Examples:
|
|||||||
These need to be available in PATH prior to compilation.
|
These need to be available in PATH prior to compilation.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
# compile 1.7.0.0 from hackage for 8.10.7, running 'cabal update' before the build
|
# compile 1.7.0.0 for ghc 8.10.5 and 8.10.7, passing '--allow-newer' to cabal
|
||||||
ghcup compile hls --version 1.7.0.0 --ghc 8.10.7 --cabal-update
|
ghcup compile hls -v 1.7.0.0 -j 12 --ghc 8.10.5 --ghc 8.10.7 -- --allow-newer
|
||||||
# compile from master for ghc 9.2.3, appending the short git commit hash to the version and ignore the pinned index state
|
# compile from master for ghc 9.2.3 and use 'git describe' to name the binary
|
||||||
ghcup compile hls -g master -o '%v-%h' --ghc 9.2.3 -- --index-state=@(date '+%s')
|
ghcup compile hls -g master --git-describe-version --ghc 9.2.3
|
||||||
# compile a specific commit for ghc 9.2.3 and set a specific version for the binary name
|
# compile a specific commit for ghc 9.2.3 and set a specifc version for the binary name
|
||||||
ghcup compile hls -g a32db0b -o 1.7.0.0-p1 --ghc 9.2.3|]
|
ghcup compile hls -g a32db0b -o 1.7.0.0-p1 --ghc 9.2.3|]
|
||||||
|
|
||||||
|
|
||||||
ghcCompileOpts :: Parser GHCCompileOptions
|
ghcCompileOpts :: Parser GHCCompileOptions
|
||||||
ghcCompileOpts =
|
ghcCompileOpts =
|
||||||
GHCCompileOptions
|
GHCCompileOptions
|
||||||
<$> ((GHC.SourceDist <$> option
|
<$> ((Left <$> option
|
||||||
(eitherReader
|
(eitherReader
|
||||||
(first (const "Not a valid version") . version . T.pack)
|
(first (const "Not a valid version") . version . T.pack)
|
||||||
)
|
)
|
||||||
(short 'v' <> long "version" <> metavar "VERSION" <> help
|
(short 'v' <> long "version" <> metavar "VERSION" <> help
|
||||||
"The tool version to compile"
|
"The tool version to compile"
|
||||||
<> (completer $ versionCompleter [] GHC)
|
<> (completer $ versionCompleter Nothing GHC)
|
||||||
)
|
)
|
||||||
) <|>
|
) <|>
|
||||||
(GHC.GitDist <$> (GitBranch <$> option
|
(Right <$> (GitBranch <$> option
|
||||||
str
|
str
|
||||||
(short 'g' <> long "git-ref" <> metavar "GIT_REFERENCE" <> help
|
(short 'g' <> long "git-ref" <> metavar "GIT_REFERENCE" <> help
|
||||||
"The git commit/branch/ref to build from"
|
"The git commit/branch/ref to build from"
|
||||||
@ -182,18 +178,7 @@ ghcCompileOpts =
|
|||||||
short 'r' <> long "repository" <> metavar "GIT_REPOSITORY" <> help "The git repository to build from (defaults to GHC upstream)"
|
short 'r' <> long "repository" <> metavar "GIT_REPOSITORY" <> help "The git repository to build from (defaults to GHC upstream)"
|
||||||
<> completer (gitFileUri ["https://gitlab.haskell.org/ghc/ghc.git"])
|
<> completer (gitFileUri ["https://gitlab.haskell.org/ghc/ghc.git"])
|
||||||
))
|
))
|
||||||
))
|
)))
|
||||||
<|>
|
|
||||||
(
|
|
||||||
GHC.RemoteDist <$> (option
|
|
||||||
(eitherReader uriParser)
|
|
||||||
(long "remote-source-dist" <> metavar "URI" <> help
|
|
||||||
"URI (https/http/file) to a GHC source distribution"
|
|
||||||
<> completer fileUri
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
<*> option
|
<*> option
|
||||||
(eitherReader
|
(eitherReader
|
||||||
(\x ->
|
(\x ->
|
||||||
@ -205,7 +190,7 @@ ghcCompileOpts =
|
|||||||
<> metavar "BOOTSTRAP_GHC"
|
<> metavar "BOOTSTRAP_GHC"
|
||||||
<> help
|
<> help
|
||||||
"The GHC version (or full path) to bootstrap with (must be installed)"
|
"The GHC version (or full path) to bootstrap with (must be installed)"
|
||||||
<> (completer $ versionCompleter [] GHC)
|
<> (completer $ versionCompleter Nothing GHC)
|
||||||
)
|
)
|
||||||
<*> optional
|
<*> optional
|
||||||
(option
|
(option
|
||||||
@ -253,17 +238,12 @@ ghcCompileOpts =
|
|||||||
<*> fmap (fromMaybe False) (invertableSwitch "set" Nothing False (help "Set as active version after install"))
|
<*> fmap (fromMaybe False) (invertableSwitch "set" Nothing False (help "Set as active version after install"))
|
||||||
<*> optional
|
<*> optional
|
||||||
(option
|
(option
|
||||||
(eitherReader overWriteVersionParser
|
(eitherReader
|
||||||
|
(first (const "Not a valid version") . version . T.pack)
|
||||||
)
|
)
|
||||||
(short 'o' <> long "overwrite-version" <> metavar "OVERWRITE_VERSION"
|
(short 'o' <> long "overwrite-version" <> metavar "OVERWRITE_VERSION" <> help
|
||||||
<> helpDoc (Just $ vsep [ text "Overwrite the finally installed VERSION with a different one. Allows to specify patterns"
|
"Allows to overwrite the finally installed VERSION with a different one, e.g. when you build 8.10.4 with your own patches, you might want to set this to '8.10.4-p1'"
|
||||||
, text "%v version"
|
<> (completer $ versionCompleter Nothing GHC)
|
||||||
, text "%b branch name"
|
|
||||||
, text "%h short commit hash"
|
|
||||||
, text "%H long commit hash"
|
|
||||||
, text "%g 'git describe' output"
|
|
||||||
])
|
|
||||||
<> (completer $ versionCompleter [] GHC)
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
<*> optional
|
<*> optional
|
||||||
@ -273,22 +253,16 @@ ghcCompileOpts =
|
|||||||
"Set the compile build flavour (this value depends on the build system type: 'make' vs 'hadrian')"
|
"Set the compile build flavour (this value depends on the build system type: 'make' vs 'hadrian')"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
<*> (
|
<*> switch
|
||||||
(\b -> if b then Just Hadrian else Nothing) <$> switch
|
(long "hadrian" <> help "Use the hadrian build system instead of make (only git versions seem to be properly supported atm)"
|
||||||
(long "hadrian" <> help "Use the hadrian build system instead of make. Tries to detect by default."
|
|
||||||
)
|
)
|
||||||
<|>
|
|
||||||
(\b -> if b then Just Make else Nothing) <$> switch
|
|
||||||
(long "make" <> help "Use the make build system instead of hadrian. Tries to detect by default."
|
|
||||||
)
|
|
||||||
)
|
|
||||||
<*> optional
|
<*> optional
|
||||||
(option
|
(option
|
||||||
(eitherReader isolateParser)
|
(eitherReader isolateParser)
|
||||||
( short 'i'
|
( short 'i'
|
||||||
<> long "isolate"
|
<> long "isolate"
|
||||||
<> metavar "DIR"
|
<> metavar "DIR"
|
||||||
<> help "install in an isolated absolute directory instead of the default one, no symlinks to this installation will be made"
|
<> help "install in an isolated directory instead of the default one, no symlinks to this installation will be made"
|
||||||
<> completer (bashCompleter "directory")
|
<> completer (bashCompleter "directory")
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@ -296,17 +270,16 @@ ghcCompileOpts =
|
|||||||
hlsCompileOpts :: Parser HLSCompileOptions
|
hlsCompileOpts :: Parser HLSCompileOptions
|
||||||
hlsCompileOpts =
|
hlsCompileOpts =
|
||||||
HLSCompileOptions
|
HLSCompileOptions
|
||||||
<$> ((HLS.HackageDist <$> option
|
<$> ((Left <$> option
|
||||||
(eitherReader
|
(eitherReader
|
||||||
((>>= first displayException . V.version . V.prettyPVP) . first (const "Not a valid PVP version") . pvp . T.pack)
|
(first (const "Not a valid version") . version . T.pack)
|
||||||
)
|
)
|
||||||
(short 'v' <> long "version" <> metavar "VERSION" <> help
|
(short 'v' <> long "version" <> metavar "VERSION" <> help
|
||||||
"The version to compile (pulled from hackage)"
|
"The tool version to compile"
|
||||||
<> (completer $ versionCompleter' [] HLS (either (const False) (const True) . V.pvp . V.prettyVer))
|
<> (completer $ versionCompleter Nothing HLS)
|
||||||
)
|
)
|
||||||
)
|
) <|>
|
||||||
<|>
|
(Right <$> (GitBranch <$> option
|
||||||
(HLS.GitDist <$> (GitBranch <$> option
|
|
||||||
str
|
str
|
||||||
(short 'g' <> long "git-ref" <> metavar "GIT_REFERENCE" <> help
|
(short 'g' <> long "git-ref" <> metavar "GIT_REFERENCE" <> help
|
||||||
"The git commit/branch/ref to build from (accepts anything 'git checkout' accepts)"
|
"The git commit/branch/ref to build from (accepts anything 'git checkout' accepts)"
|
||||||
@ -314,28 +287,7 @@ hlsCompileOpts =
|
|||||||
optional (option str (short 'r' <> long "repository" <> metavar "GIT_REPOSITORY" <> help "The git repository to build from (defaults to HLS upstream)"
|
optional (option str (short 'r' <> long "repository" <> metavar "GIT_REPOSITORY" <> help "The git repository to build from (defaults to HLS upstream)"
|
||||||
<> completer (gitFileUri ["https://github.com/haskell/haskell-language-server.git"])
|
<> completer (gitFileUri ["https://github.com/haskell/haskell-language-server.git"])
|
||||||
))
|
))
|
||||||
))
|
)))
|
||||||
<|>
|
|
||||||
(HLS.SourceDist <$> (option
|
|
||||||
(eitherReader
|
|
||||||
(first (const "Not a valid version") . version . T.pack)
|
|
||||||
)
|
|
||||||
(long "source-dist" <> metavar "VERSION" <> help
|
|
||||||
"The version to compile (pulled from packaged git sources)"
|
|
||||||
<> (completer $ versionCompleter [] HLS)
|
|
||||||
)
|
|
||||||
))
|
|
||||||
<|>
|
|
||||||
(
|
|
||||||
HLS.RemoteDist <$> (option
|
|
||||||
(eitherReader uriParser)
|
|
||||||
(long "remote-source-dist" <> metavar "URI" <> help
|
|
||||||
"URI (https/http/file) to a HLS source distribution"
|
|
||||||
<> completer fileUri
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
<*> optional
|
<*> optional
|
||||||
(option
|
(option
|
||||||
(eitherReader (readEither @Int))
|
(eitherReader (readEither @Int))
|
||||||
@ -345,28 +297,21 @@ hlsCompileOpts =
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
<*> fmap (fromMaybe True) (invertableSwitch "set" Nothing True (help "Don't set as active version after install"))
|
<*> fmap (fromMaybe True) (invertableSwitch "set" Nothing True (help "Don't set as active version after install"))
|
||||||
<*> switch (long "cabal-update" <> help "Run 'cabal update' before the build")
|
|
||||||
<*>
|
<*>
|
||||||
(
|
(
|
||||||
optional (option
|
(Right <$> option
|
||||||
(eitherReader overWriteVersionParser
|
(eitherReader
|
||||||
|
(first (const "Not a valid version") . version . T.pack)
|
||||||
)
|
)
|
||||||
(short 'o' <> long "overwrite-version" <> metavar "OVERWRITE_VERSION"
|
(short 'o' <> long "overwrite-version" <> metavar "OVERWRITE_VERSION" <> help
|
||||||
<> helpDoc (Just $ vsep [ text "Overwrite the finally installed VERSION with a different one. Allows to specify patterns"
|
"Allows to overwrite the finally installed VERSION with a different one, e.g. when you build 8.10.4 with your own patches, you might want to set this to '8.10.4-p1'"
|
||||||
, text "%v version from cabal file"
|
<> (completer $ versionCompleter Nothing HLS)
|
||||||
, text "%b branch name"
|
|
||||||
, text "%h short commit hash"
|
|
||||||
, text "%H long commit hash"
|
|
||||||
, text "%g 'git describe' output"
|
|
||||||
])
|
|
||||||
<> (completer $ versionCompleter [] HLS)
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
<|>
|
<|>
|
||||||
((\b -> if b then Just [GitDescribe] else Nothing) <$> (switch
|
(Left <$> (switch
|
||||||
(long "git-describe-version"
|
(long "git-describe-version"
|
||||||
<> help "Use the output of 'git describe' (if building from git) as the VERSION component of the installed binary."
|
<> help "Use the output of 'git describe' (if building from git) as the VERSION component of the installed binary."
|
||||||
<> internal
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@ -377,7 +322,7 @@ hlsCompileOpts =
|
|||||||
( short 'i'
|
( short 'i'
|
||||||
<> long "isolate"
|
<> long "isolate"
|
||||||
<> metavar "DIR"
|
<> metavar "DIR"
|
||||||
<> help "install in an isolated absolute directory instead of the default one, no symlinks to this installation will be made"
|
<> help "install in an isolated directory instead of the default one, no symlinks to this installation will be made"
|
||||||
<> completer (bashCompleter "directory")
|
<> completer (bashCompleter "directory")
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@ -417,10 +362,10 @@ hlsCompileOpts =
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
<*> some (
|
<*> some (
|
||||||
option (eitherReader ghcVersionTagEither)
|
option (eitherReader toolVersionEither)
|
||||||
( long "ghc" <> metavar "GHC_VERSION|TAG" <> help "For which GHC version to compile for (can be specified multiple times)"
|
( long "ghc" <> metavar "GHC_VERSION|TAG" <> help "For which GHC version to compile for (can be specified multiple times)"
|
||||||
<> completer (tagCompleter GHC [])
|
<> completer (tagCompleter GHC [])
|
||||||
<> completer (versionCompleter [] GHC))
|
<> completer (versionCompleter Nothing GHC))
|
||||||
)
|
)
|
||||||
<*> many (argument str (metavar "CABAL_ARGS" <> help "Additional arguments to cabal install, prefix with '-- ' (longopts)"))
|
<*> many (argument str (metavar "CABAL_ARGS" <> help "Additional arguments to cabal install, prefix with '-- ' (longopts)"))
|
||||||
|
|
||||||
@ -436,7 +381,6 @@ hlsCompileOpts =
|
|||||||
type GHCEffects = '[ AlreadyInstalled
|
type GHCEffects = '[ AlreadyInstalled
|
||||||
, BuildFailed
|
, BuildFailed
|
||||||
, DigestError
|
, DigestError
|
||||||
, ContentLengthError
|
|
||||||
, GPGError
|
, GPGError
|
||||||
, DownloadFailed
|
, DownloadFailed
|
||||||
, GHCupSetError
|
, GHCupSetError
|
||||||
@ -460,7 +404,6 @@ type GHCEffects = '[ AlreadyInstalled
|
|||||||
type HLSEffects = '[ AlreadyInstalled
|
type HLSEffects = '[ AlreadyInstalled
|
||||||
, BuildFailed
|
, BuildFailed
|
||||||
, DigestError
|
, DigestError
|
||||||
, ContentLengthError
|
|
||||||
, GPGError
|
, GPGError
|
||||||
, DownloadFailed
|
, DownloadFailed
|
||||||
, GHCupSetError
|
, GHCupSetError
|
||||||
@ -470,7 +413,6 @@ type HLSEffects = '[ AlreadyInstalled
|
|||||||
, UnknownArchive
|
, UnknownArchive
|
||||||
, TarDirDoesNotExist
|
, TarDirDoesNotExist
|
||||||
, TagNotFound
|
, TagNotFound
|
||||||
, DayNotFound
|
|
||||||
, NextVerNotFound
|
, NextVerNotFound
|
||||||
, NoToolVersionSet
|
, NoToolVersionSet
|
||||||
, NotInstalled
|
, NotInstalled
|
||||||
@ -526,34 +468,28 @@ compile compileCommand settings Dirs{..} runAppState runLogger = do
|
|||||||
(CompileHLS HLSCompileOptions { .. }) -> do
|
(CompileHLS HLSCompileOptions { .. }) -> do
|
||||||
runCompileHLS runAppState (do
|
runCompileHLS runAppState (do
|
||||||
case targetHLS of
|
case targetHLS of
|
||||||
HLS.SourceDist targetVer -> do
|
Left targetVer -> do
|
||||||
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
||||||
let vi = getVersionInfo (mkTVer targetVer) HLS dls
|
let vi = getVersionInfo targetVer HLS dls
|
||||||
forM_ (_viPreInstall =<< vi) $ \msg -> do
|
|
||||||
lift $ logWarn msg
|
|
||||||
lift $ logWarn
|
|
||||||
"...waiting for 5 seconds, you can still abort..."
|
|
||||||
liftIO $ threadDelay 5000000 -- give the user a sec to intervene
|
|
||||||
forM_ (_viPreCompile =<< vi) $ \msg -> do
|
forM_ (_viPreCompile =<< vi) $ \msg -> do
|
||||||
lift $ logWarn msg
|
lift $ logInfo msg
|
||||||
lift $ logWarn
|
lift $ logInfo
|
||||||
"...waiting for 5 seconds, you can still abort..."
|
"...waiting for 5 seconds, you can still abort..."
|
||||||
liftIO $ threadDelay 5000000 -- for compilation, give the user a sec to intervene
|
liftIO $ threadDelay 5000000 -- for compilation, give the user a sec to intervene
|
||||||
_ -> pure ()
|
Right _ -> pure ()
|
||||||
ghcs <- liftE $ forM targetGHCs (\ghc -> fmap (_tvVersion . fst) . fromVersion (Just ghc) $ GHC)
|
ghcs <- liftE $ forM targetGHCs (\ghc -> fmap (_tvVersion . fst) . fromVersion (Just ghc) $ GHC)
|
||||||
targetVer <- liftE $ compileHLS
|
targetVer <- liftE $ compileHLS
|
||||||
targetHLS
|
targetHLS
|
||||||
ghcs
|
ghcs
|
||||||
jobs
|
jobs
|
||||||
overwriteVer
|
ovewrwiteVer
|
||||||
(maybe GHCupInternal IsolateDir isolateDir)
|
(maybe GHCupInternal IsolateDir isolateDir)
|
||||||
cabalProject
|
cabalProject
|
||||||
cabalProjectLocal
|
cabalProjectLocal
|
||||||
updateCabal
|
|
||||||
patches
|
patches
|
||||||
cabalArgs
|
cabalArgs
|
||||||
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
||||||
let vi = getVersionInfo (mkTVer targetVer) HLS dls
|
let vi = getVersionInfo targetVer HLS dls
|
||||||
when setCompile $ void $ liftE $
|
when setCompile $ void $ liftE $
|
||||||
setHLS targetVer SetHLSOnly Nothing
|
setHLS targetVer SetHLSOnly Nothing
|
||||||
pure (vi, targetVer)
|
pure (vi, targetVer)
|
||||||
@ -568,46 +504,43 @@ compile compileCommand settings Dirs{..} runAppState runLogger = do
|
|||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
VLeft err@(V (BuildFailed tmpdir _)) -> do
|
VLeft err@(V (BuildFailed tmpdir _)) -> do
|
||||||
case keepDirs settings of
|
case keepDirs settings of
|
||||||
Never -> runLogger $ logError $ T.pack $ prettyHFError err
|
Never -> runLogger $ logError $ T.pack $ prettyShow err
|
||||||
_ -> runLogger (logError $ T.pack (prettyHFError err) <> "\n" <>
|
_ -> runLogger (logError $ T.pack (prettyShow err) <> "\n" <>
|
||||||
"Check the logs at " <> T.pack (fromGHCupPath logsDir) <> " and the build directory "
|
"Check the logs at " <> T.pack (fromGHCupPath logsDir) <> " and the build directory "
|
||||||
<> T.pack tmpdir <> " for more clues." <> "\n" <>
|
<> T.pack tmpdir <> " for more clues." <> "\n" <>
|
||||||
"Make sure to clean up " <> T.pack tmpdir <> " afterwards.")
|
"Make sure to clean up " <> T.pack tmpdir <> " afterwards.")
|
||||||
pure $ ExitFailure 9
|
pure $ ExitFailure 9
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger $ logError $ T.pack $ prettyHFError e
|
runLogger $ logError $ T.pack $ prettyShow e
|
||||||
pure $ ExitFailure 9
|
pure $ ExitFailure 9
|
||||||
|
(CompileGHC GHCCompileOptions { hadrian = True, crossTarget = Just _ }) -> do
|
||||||
|
runLogger $ logError "Hadrian cross compile support is not yet implemented!"
|
||||||
|
pure $ ExitFailure 9
|
||||||
(CompileGHC GHCCompileOptions {..}) ->
|
(CompileGHC GHCCompileOptions {..}) ->
|
||||||
runCompileGHC runAppState (do
|
runCompileGHC runAppState (do
|
||||||
case targetGhc of
|
case targetGhc of
|
||||||
GHC.SourceDist targetVer -> do
|
Left targetVer -> do
|
||||||
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
||||||
let vi = getVersionInfo (mkTVer targetVer) GHC dls
|
let vi = getVersionInfo targetVer GHC dls
|
||||||
forM_ (_viPreInstall =<< vi) $ \msg -> do
|
|
||||||
lift $ logWarn msg
|
|
||||||
lift $ logWarn
|
|
||||||
"...waiting for 5 seconds, you can still abort..."
|
|
||||||
liftIO $ threadDelay 5000000 -- give the user a sec to intervene
|
|
||||||
forM_ (_viPreCompile =<< vi) $ \msg -> do
|
forM_ (_viPreCompile =<< vi) $ \msg -> do
|
||||||
lift $ logWarn msg
|
lift $ logInfo msg
|
||||||
lift $ logWarn
|
lift $ logInfo
|
||||||
"...waiting for 5 seconds, you can still abort..."
|
"...waiting for 5 seconds, you can still abort..."
|
||||||
liftIO $ threadDelay 5000000 -- for compilation, give the user a sec to intervene
|
liftIO $ threadDelay 5000000 -- for compilation, give the user a sec to intervene
|
||||||
_ -> pure ()
|
Right _ -> pure ()
|
||||||
targetVer <- liftE $ compileGHC
|
targetVer <- liftE $ compileGHC
|
||||||
targetGhc
|
(first (GHCTargetVersion crossTarget) targetGhc)
|
||||||
crossTarget
|
ovewrwiteVer
|
||||||
overwriteVer
|
|
||||||
bootstrapGhc
|
bootstrapGhc
|
||||||
jobs
|
jobs
|
||||||
buildConfig
|
buildConfig
|
||||||
patches
|
patches
|
||||||
addConfArgs
|
addConfArgs
|
||||||
buildFlavour
|
buildFlavour
|
||||||
buildSystem
|
hadrian
|
||||||
(maybe GHCupInternal IsolateDir isolateDir)
|
(maybe GHCupInternal IsolateDir isolateDir)
|
||||||
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
||||||
let vi = getVersionInfo targetVer GHC dls
|
let vi = getVersionInfo (_tvVersion targetVer) GHC dls
|
||||||
when setCompile $ void $ liftE $
|
when setCompile $ void $ liftE $
|
||||||
setGHC targetVer SetGHCOnly Nothing
|
setGHC targetVer SetGHCOnly Nothing
|
||||||
pure (vi, targetVer)
|
pure (vi, targetVer)
|
||||||
@ -630,12 +563,12 @@ compile compileCommand settings Dirs{..} runAppState runLogger = do
|
|||||||
pure $ ExitFailure 3
|
pure $ ExitFailure 3
|
||||||
VLeft err@(V (BuildFailed tmpdir _)) -> do
|
VLeft err@(V (BuildFailed tmpdir _)) -> do
|
||||||
case keepDirs settings of
|
case keepDirs settings of
|
||||||
Never -> runLogger $ logError $ T.pack $ prettyHFError err
|
Never -> runLogger $ logError $ T.pack $ prettyShow err
|
||||||
_ -> runLogger (logError $ T.pack (prettyHFError err) <> "\n" <>
|
_ -> runLogger (logError $ T.pack (prettyShow err) <> "\n" <>
|
||||||
"Check the logs at " <> T.pack (fromGHCupPath logsDir) <> " and the build directory "
|
"Check the logs at " <> T.pack (fromGHCupPath logsDir) <> " and the build directory "
|
||||||
<> T.pack tmpdir <> " for more clues." <> "\n" <>
|
<> T.pack tmpdir <> " for more clues." <> "\n" <>
|
||||||
"Make sure to clean up " <> T.pack tmpdir <> " afterwards.")
|
"Make sure to clean up " <> T.pack tmpdir <> " afterwards.")
|
||||||
pure $ ExitFailure 9
|
pure $ ExitFailure 9
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger $ logError $ T.pack $ prettyHFError e
|
runLogger $ logError $ T.pack $ prettyShow e
|
||||||
pure $ ExitFailure 9
|
pure $ ExitFailure 9
|
@ -32,6 +32,7 @@ import Options.Applicative hiding ( style, ParseError )
|
|||||||
import Options.Applicative.Help.Pretty ( text )
|
import Options.Applicative.Help.Pretty ( text )
|
||||||
import Prelude hiding ( appendFile )
|
import Prelude hiding ( appendFile )
|
||||||
import System.Exit
|
import System.Exit
|
||||||
|
import URI.ByteString hiding ( uriParser )
|
||||||
|
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import qualified Data.ByteString.UTF8 as UTF8
|
import qualified Data.ByteString.UTF8 as UTF8
|
||||||
@ -50,8 +51,7 @@ data ConfigCommand
|
|||||||
= ShowConfig
|
= ShowConfig
|
||||||
| SetConfig String (Maybe String)
|
| SetConfig String (Maybe String)
|
||||||
| InitConfig
|
| InitConfig
|
||||||
| AddReleaseChannel Bool NewURLSource
|
| AddReleaseChannel URI
|
||||||
deriving (Eq, Show)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -67,14 +67,15 @@ configP = subparser
|
|||||||
<> command "show" showP
|
<> command "show" showP
|
||||||
<> command "add-release-channel" addP
|
<> command "add-release-channel" addP
|
||||||
)
|
)
|
||||||
|
<|> argsP -- add show for a single option
|
||||||
<|> pure ShowConfig
|
<|> pure ShowConfig
|
||||||
where
|
where
|
||||||
initP = info (pure InitConfig) (progDesc "Write default config to ~/.ghcup/config.yaml")
|
initP = info (pure InitConfig) (progDesc "Write default config to ~/.ghcup/config.yaml")
|
||||||
showP = info (pure ShowConfig) (progDesc "Show current config (default)")
|
showP = info (pure ShowConfig) (progDesc "Show current config (default)")
|
||||||
setP = info argsP (progDesc "Set config KEY to VALUE (or specify as single json value)" <> footerDoc (Just $ text configSetFooter))
|
setP = info argsP (progDesc "Set config KEY to VALUE (or specify as single json value)" <> footerDoc (Just $ text configSetFooter))
|
||||||
argsP = SetConfig <$> argument str (metavar "<JSON_VALUE | YAML_KEY>") <*> optional (argument str (metavar "YAML_VALUE"))
|
argsP = SetConfig <$> argument str (metavar "<JSON_VALUE | YAML_KEY>") <*> optional (argument str (metavar "YAML_VALUE"))
|
||||||
addP = info (AddReleaseChannel <$> switch (long "force" <> help "Delete existing entry (if any) and append instead of failing") <*> argument (eitherReader parseNewUrlSource) (metavar "URL_SOURCE" <> completer urlSourceCompleter))
|
addP = info (AddReleaseChannel <$> argument (eitherReader uriParser) (metavar "URI" <> completer fileUri))
|
||||||
(progDesc "Add a release channel, e.g. from a URI")
|
(progDesc "Add a release channel from a URI")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -119,38 +120,18 @@ formatConfig :: UserSettings -> String
|
|||||||
formatConfig = UTF8.toString . Y.encode
|
formatConfig = UTF8.toString . Y.encode
|
||||||
|
|
||||||
|
|
||||||
updateSettings :: UserSettings -> UserSettings -> UserSettings
|
updateSettings :: UserSettings -> Settings -> Settings
|
||||||
updateSettings usl usr =
|
updateSettings UserSettings{..} Settings{..} =
|
||||||
let cache' = uCache usl <|> uCache usr
|
let cache' = fromMaybe cache uCache
|
||||||
metaCache' = uMetaCache usl <|> uMetaCache usr
|
metaCache' = fromMaybe metaCache uMetaCache
|
||||||
metaMode' = uMetaMode usl <|> uMetaMode usr
|
noVerify' = fromMaybe noVerify uNoVerify
|
||||||
noVerify' = uNoVerify usl <|> uNoVerify usr
|
keepDirs' = fromMaybe keepDirs uKeepDirs
|
||||||
verbose' = uVerbose usl <|> uVerbose usr
|
downloader' = fromMaybe downloader uDownloader
|
||||||
keepDirs' = uKeepDirs usl <|> uKeepDirs usr
|
verbose' = fromMaybe verbose uVerbose
|
||||||
downloader' = uDownloader usl <|> uDownloader usr
|
urlSource' = fromMaybe urlSource uUrlSource
|
||||||
urlSource' = uUrlSource usl <|> uUrlSource usr
|
noNetwork' = fromMaybe noNetwork uNoNetwork
|
||||||
noNetwork' = uNoNetwork usl <|> uNoNetwork usr
|
gpgSetting' = fromMaybe gpgSetting uGPGSetting
|
||||||
gpgSetting' = uGPGSetting usl <|> uGPGSetting usr
|
in Settings cache' metaCache' noVerify' keepDirs' downloader' verbose' urlSource' noNetwork' gpgSetting' noColor
|
||||||
platformOverride' = uPlatformOverride usl <|> uPlatformOverride usr
|
|
||||||
mirrors' = uMirrors usl <|> uMirrors usr
|
|
||||||
defGHCconfOptions' = uDefGHCConfOptions usl <|> uDefGHCConfOptions usr
|
|
||||||
in UserSettings cache' metaCache' metaMode' noVerify' verbose' keepDirs' downloader' (updateKeyBindings (uKeyBindings usl) (uKeyBindings usr)) urlSource' noNetwork' gpgSetting' platformOverride' mirrors' defGHCconfOptions'
|
|
||||||
where
|
|
||||||
updateKeyBindings :: Maybe UserKeyBindings -> Maybe UserKeyBindings -> Maybe UserKeyBindings
|
|
||||||
updateKeyBindings Nothing Nothing = Nothing
|
|
||||||
updateKeyBindings (Just kbl) Nothing = Just kbl
|
|
||||||
updateKeyBindings Nothing (Just kbr) = Just kbr
|
|
||||||
updateKeyBindings (Just kbl) (Just kbr) =
|
|
||||||
Just $ UserKeyBindings {
|
|
||||||
kUp = kUp kbl <|> kUp kbr
|
|
||||||
, kDown = kDown kbl <|> kDown kbr
|
|
||||||
, kQuit = kQuit kbl <|> kQuit kbr
|
|
||||||
, kInstall = kInstall kbl <|> kInstall kbr
|
|
||||||
, kUninstall = kUninstall kbl <|> kUninstall kbr
|
|
||||||
, kSet = kSet kbl <|> kSet kbr
|
|
||||||
, kChangelog = kChangelog kbl <|> kChangelog kbr
|
|
||||||
, kShowAll = kShowAll kbl <|> kShowAll kbr
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -158,9 +139,6 @@ updateSettings usl usr =
|
|||||||
--[ Entrypoint ]--
|
--[ Entrypoint ]--
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
data Duplicate = Duplicate -- ^ there is a duplicate somewhere in the middle
|
|
||||||
| NoDuplicate -- ^ there is no duplicate
|
|
||||||
| DuplicateLast -- ^ there's a duplicate, but it's the last element
|
|
||||||
|
|
||||||
|
|
||||||
config :: forall m. ( Monad m
|
config :: forall m. ( Monad m
|
||||||
@ -170,11 +148,10 @@ config :: forall m. ( Monad m
|
|||||||
)
|
)
|
||||||
=> ConfigCommand
|
=> ConfigCommand
|
||||||
-> Settings
|
-> Settings
|
||||||
-> UserSettings
|
|
||||||
-> KeyBindings
|
-> KeyBindings
|
||||||
-> (ReaderT LeanAppState m () -> m ())
|
-> (ReaderT LeanAppState m () -> m ())
|
||||||
-> m ExitCode
|
-> m ExitCode
|
||||||
config configCommand settings userConf keybindings runLogger = case configCommand of
|
config configCommand settings keybindings runLogger = case configCommand of
|
||||||
InitConfig -> do
|
InitConfig -> do
|
||||||
path <- getConfigFilePath
|
path <- getConfigFilePath
|
||||||
liftIO $ writeFile path $ formatConfig $ fromSettings settings (Just keybindings)
|
liftIO $ writeFile path $ formatConfig $ fromSettings settings (Just keybindings)
|
||||||
@ -192,14 +169,10 @@ config configCommand settings userConf keybindings runLogger = case configComman
|
|||||||
throwE $ ParseError "Empty values are not allowed"
|
throwE $ ParseError "Empty values are not allowed"
|
||||||
Nothing -> do
|
Nothing -> do
|
||||||
usersettings <- decodeSettings k
|
usersettings <- decodeSettings k
|
||||||
when (usersettings == defaultUserSettings)
|
|
||||||
$ throwE $ ParseError ("Failed to parse setting (maybe typo?): " <> k)
|
|
||||||
lift $ doConfig usersettings
|
lift $ doConfig usersettings
|
||||||
pure ()
|
pure ()
|
||||||
Just v -> do
|
Just v -> do
|
||||||
usersettings <- decodeSettings (k <> ": " <> v <> "\n")
|
usersettings <- decodeSettings (k <> ": " <> v <> "\n")
|
||||||
when (usersettings == defaultUserSettings)
|
|
||||||
$ throwE $ ParseError ("Failed to parse key '" <> k <> "' with value '" <> v <> "' as user setting. Maybe typo?")
|
|
||||||
lift $ doConfig usersettings
|
lift $ doConfig usersettings
|
||||||
pure ()
|
pure ()
|
||||||
case r of
|
case r of
|
||||||
@ -207,38 +180,23 @@ config configCommand settings userConf keybindings runLogger = case configComman
|
|||||||
VLeft (V (JSONDecodeError e)) -> do
|
VLeft (V (JSONDecodeError e)) -> do
|
||||||
runLogger $ logError $ "Error decoding config: " <> T.pack e
|
runLogger $ logError $ "Error decoding config: " <> T.pack e
|
||||||
pure $ ExitFailure 65
|
pure $ ExitFailure 65
|
||||||
VLeft e -> do
|
VLeft _ -> pure $ ExitFailure 65
|
||||||
runLogger (logError $ T.pack $ prettyHFError e)
|
|
||||||
pure $ ExitFailure 65
|
|
||||||
|
|
||||||
AddReleaseChannel force new -> do
|
AddReleaseChannel uri -> do
|
||||||
r <- runE @'[DuplicateReleaseChannel] $ do
|
case urlSource settings of
|
||||||
let oldSources = fromURLSource (urlSource settings)
|
AddSource xs -> do
|
||||||
let merged = oldSources ++ [new]
|
doConfig (defaultUserSettings { uUrlSource = Just $ AddSource (xs <> [Right uri]) })
|
||||||
case checkDuplicate oldSources new of
|
pure ExitSuccess
|
||||||
Duplicate
|
_ -> do
|
||||||
| not force -> throwE (DuplicateReleaseChannel new)
|
doConfig (defaultUserSettings { uUrlSource = Just $ AddSource [Right uri] })
|
||||||
DuplicateLast -> pure ()
|
|
||||||
_ -> lift $ doConfig (defaultUserSettings { uUrlSource = Just $ SimpleList merged })
|
|
||||||
case r of
|
|
||||||
VRight _ -> do
|
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
VLeft e -> do
|
|
||||||
runLogger $ logError $ T.pack $ prettyHFError e
|
|
||||||
pure $ ExitFailure 15
|
|
||||||
|
|
||||||
where
|
where
|
||||||
checkDuplicate :: Eq a => [a] -> a -> Duplicate
|
|
||||||
checkDuplicate xs a
|
|
||||||
| last xs == a = DuplicateLast
|
|
||||||
| a `elem` xs = Duplicate
|
|
||||||
| otherwise = NoDuplicate
|
|
||||||
|
|
||||||
doConfig :: MonadIO m => UserSettings -> m ()
|
doConfig :: MonadIO m => UserSettings -> m ()
|
||||||
doConfig usersettings = do
|
doConfig usersettings = do
|
||||||
let settings' = updateSettings usersettings userConf
|
let settings' = updateSettings usersettings settings
|
||||||
path <- liftIO getConfigFilePath
|
path <- liftIO getConfigFilePath
|
||||||
liftIO $ writeFile path $ formatConfig $ settings'
|
liftIO $ writeFile path $ formatConfig $ fromSettings settings' (Just keybindings)
|
||||||
runLogger $ logDebug $ T.pack $ show settings'
|
runLogger $ logDebug $ T.pack $ show settings'
|
||||||
pure ()
|
pure ()
|
||||||
|
|
@ -115,5 +115,5 @@ dinfo runAppState runLogger = do
|
|||||||
liftIO $ putStrLn $ prettyDebugInfo di
|
liftIO $ putStrLn $ prettyDebugInfo di
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger $ logError $ T.pack $ prettyHFError e
|
runLogger $ logError $ T.pack $ prettyShow e
|
||||||
pure $ ExitFailure 8
|
pure $ ExitFailure 8
|
@ -27,6 +27,7 @@ import Haskus.Utils.Variant.Excepts
|
|||||||
import Options.Applicative hiding ( style )
|
import Options.Applicative hiding ( style )
|
||||||
import Prelude hiding ( appendFile )
|
import Prelude hiding ( appendFile )
|
||||||
import System.Exit
|
import System.Exit
|
||||||
|
import Text.PrettyPrint.HughesPJClass ( prettyShow )
|
||||||
|
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import Control.Exception.Safe (MonadMask)
|
import Control.Exception.Safe (MonadMask)
|
||||||
@ -47,8 +48,7 @@ data GCOptions = GCOptions
|
|||||||
, gcHLSNoGHC :: Bool
|
, gcHLSNoGHC :: Bool
|
||||||
, gcCache :: Bool
|
, gcCache :: Bool
|
||||||
, gcTmp :: Bool
|
, gcTmp :: Bool
|
||||||
, gcUnset :: Bool
|
}
|
||||||
} deriving (Eq, Show)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -78,9 +78,6 @@ gcP =
|
|||||||
<*>
|
<*>
|
||||||
switch
|
switch
|
||||||
(short 't' <> long "tmpdirs" <> help "Remove tmpdir leftovers")
|
(short 't' <> long "tmpdirs" <> help "Remove tmpdir leftovers")
|
||||||
<*>
|
|
||||||
switch
|
|
||||||
(short 'u' <> long "unset" <> help "Remove all tool versions that are not 'set'")
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -138,10 +135,9 @@ gc GCOptions{..} runAppState runLogger = runGC runAppState (do
|
|||||||
liftE $ when gcHLSNoGHC rmHLSNoGHC
|
liftE $ when gcHLSNoGHC rmHLSNoGHC
|
||||||
lift $ when gcCache rmCache
|
lift $ when gcCache rmCache
|
||||||
lift $ when gcTmp rmTmp
|
lift $ when gcTmp rmTmp
|
||||||
liftE $ when gcUnset rmUnsetTools
|
|
||||||
) >>= \case
|
) >>= \case
|
||||||
VRight _ -> do
|
VRight _ -> do
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger $ logError $ T.pack $ prettyHFError e
|
runLogger $ logError $ T.pack $ prettyShow e
|
||||||
pure $ ExitFailure 27
|
pure $ ExitFailure 27
|
@ -24,7 +24,7 @@ import GHCup.Prelude
|
|||||||
import GHCup.Prelude.Logger
|
import GHCup.Prelude.Logger
|
||||||
import GHCup.Prelude.String.QQ
|
import GHCup.Prelude.String.QQ
|
||||||
|
|
||||||
import Control.Concurrent (threadDelay)
|
import Codec.Archive
|
||||||
#if !MIN_VERSION_base(4,13,0)
|
#if !MIN_VERSION_base(4,13,0)
|
||||||
import Control.Monad.Fail ( MonadFail )
|
import Control.Monad.Fail ( MonadFail )
|
||||||
#endif
|
#endif
|
||||||
@ -38,6 +38,7 @@ import Options.Applicative hiding ( style )
|
|||||||
import Options.Applicative.Help.Pretty ( text )
|
import Options.Applicative.Help.Pretty ( text )
|
||||||
import Prelude hiding ( appendFile )
|
import Prelude hiding ( appendFile )
|
||||||
import System.Exit
|
import System.Exit
|
||||||
|
import Text.PrettyPrint.HughesPJClass ( prettyShow )
|
||||||
import URI.ByteString hiding ( uriParser )
|
import URI.ByteString hiding ( uriParser )
|
||||||
|
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
@ -54,7 +55,6 @@ data InstallCommand = InstallGHC InstallOptions
|
|||||||
| InstallCabal InstallOptions
|
| InstallCabal InstallOptions
|
||||||
| InstallHLS InstallOptions
|
| InstallHLS InstallOptions
|
||||||
| InstallStack InstallOptions
|
| InstallStack InstallOptions
|
||||||
deriving (Eq, Show)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -63,14 +63,16 @@ data InstallCommand = InstallGHC InstallOptions
|
|||||||
--[ Options ]--
|
--[ Options ]--
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
|
|
||||||
data InstallOptions = InstallOptions
|
data InstallOptions = InstallOptions
|
||||||
{ instVer :: Maybe ToolVersion
|
{ instVer :: Maybe ToolVersion
|
||||||
|
, instPlatform :: Maybe PlatformRequest
|
||||||
, instBindist :: Maybe URI
|
, instBindist :: Maybe URI
|
||||||
, instSet :: Bool
|
, instSet :: Bool
|
||||||
, isolateDir :: Maybe FilePath
|
, isolateDir :: Maybe FilePath
|
||||||
, forceInstall :: Bool
|
, forceInstall :: Bool
|
||||||
, addConfArgs :: [T.Text]
|
, addConfArgs :: [T.Text]
|
||||||
} deriving (Eq, Show)
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -133,7 +135,7 @@ installParser =
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
<|> (Right <$> installOpts (Just GHC))
|
<|> (Right <$> installOpts Nothing)
|
||||||
where
|
where
|
||||||
installHLSFooter :: String
|
installHLSFooter :: String
|
||||||
installHLSFooter = [s|Discussion:
|
installHLSFooter = [s|Discussion:
|
||||||
@ -169,13 +171,23 @@ Examples:
|
|||||||
ghcup install ghc 8.10.2
|
ghcup install ghc 8.10.2
|
||||||
|
|
||||||
# install GHC head fedora bindist
|
# install GHC head fedora bindist
|
||||||
ghcup install ghc -u 'https://gitlab.haskell.org/ghc/ghc/-/jobs/artifacts/master/raw/ghc-x86_64-linux-fedora33-release.tar.xz?job=x86_64-linux-fedora33-release' head|]
|
ghcup install ghc -u https://gitlab.haskell.org/api/v4/projects/1/jobs/artifacts/master/raw/ghc-x86_64-fedora27-linux.tar.xz?job=validate-x86_64-linux-fedora27 head|]
|
||||||
|
|
||||||
|
|
||||||
installOpts :: Maybe Tool -> Parser InstallOptions
|
installOpts :: Maybe Tool -> Parser InstallOptions
|
||||||
installOpts tool =
|
installOpts tool =
|
||||||
(\(u, v) b is f -> InstallOptions v u b is f)
|
(\p (u, v) b is f -> InstallOptions v p u b is f)
|
||||||
<$> ( ( (,)
|
<$> optional
|
||||||
|
(option
|
||||||
|
(eitherReader platformParser)
|
||||||
|
( short 'p'
|
||||||
|
<> long "platform"
|
||||||
|
<> metavar "PLATFORM"
|
||||||
|
<> help
|
||||||
|
"Override for platform (triple matching ghc tarball names), e.g. x86_64-fedora27-linux"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
<*> ( ( (,)
|
||||||
<$> optional
|
<$> optional
|
||||||
(option
|
(option
|
||||||
(eitherReader uriParser)
|
(eitherReader uriParser)
|
||||||
@ -184,7 +196,7 @@ installOpts tool =
|
|||||||
<> completer (toolDlCompleter (fromMaybe GHC tool))
|
<> completer (toolDlCompleter (fromMaybe GHC tool))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
<*> (Just <$> toolVersionTagArgument [] tool)
|
<*> (Just <$> toolVersionArgument Nothing tool)
|
||||||
)
|
)
|
||||||
<|> pure (Nothing, Nothing)
|
<|> pure (Nothing, Nothing)
|
||||||
)
|
)
|
||||||
@ -196,7 +208,7 @@ installOpts tool =
|
|||||||
( short 'i'
|
( short 'i'
|
||||||
<> long "isolate"
|
<> long "isolate"
|
||||||
<> metavar "DIR"
|
<> metavar "DIR"
|
||||||
<> help "install in an isolated absolute directory instead of the default one"
|
<> help "install in an isolated dir instead of the default one"
|
||||||
<> completer (bashCompleter "directory")
|
<> completer (bashCompleter "directory")
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@ -241,9 +253,7 @@ type InstallEffects = '[ AlreadyInstalled
|
|||||||
, NotInstalled
|
, NotInstalled
|
||||||
, BuildFailed
|
, BuildFailed
|
||||||
, TagNotFound
|
, TagNotFound
|
||||||
, DayNotFound
|
|
||||||
, DigestError
|
, DigestError
|
||||||
, ContentLengthError
|
|
||||||
, GPGError
|
, GPGError
|
||||||
, DownloadFailed
|
, DownloadFailed
|
||||||
, TarDirDoesNotExist
|
, TarDirDoesNotExist
|
||||||
@ -258,10 +268,11 @@ type InstallEffects = '[ AlreadyInstalled
|
|||||||
|
|
||||||
|
|
||||||
runInstTool :: AppState
|
runInstTool :: AppState
|
||||||
|
-> Maybe PlatformRequest
|
||||||
-> Excepts InstallEffects (ResourceT (ReaderT AppState IO)) a
|
-> Excepts InstallEffects (ResourceT (ReaderT AppState IO)) a
|
||||||
-> IO (VEither InstallEffects a)
|
-> IO (VEither InstallEffects a)
|
||||||
runInstTool appstate' =
|
runInstTool appstate' mInstPlatform =
|
||||||
flip runReaderT appstate'
|
flip runReaderT (maybe appstate' (\x -> appstate'{ pfreq = x } :: AppState) mInstPlatform)
|
||||||
. runResourceT
|
. runResourceT
|
||||||
. runE
|
. runE
|
||||||
@InstallEffects
|
@InstallEffects
|
||||||
@ -272,7 +283,6 @@ type InstallGHCEffects = '[ AlreadyInstalled
|
|||||||
, BuildFailed
|
, BuildFailed
|
||||||
, CopyError
|
, CopyError
|
||||||
, DigestError
|
, DigestError
|
||||||
, ContentLengthError
|
|
||||||
, DirNotEmpty
|
, DirNotEmpty
|
||||||
, DownloadFailed
|
, DownloadFailed
|
||||||
, FileAlreadyExistsError
|
, FileAlreadyExistsError
|
||||||
@ -285,23 +295,18 @@ type InstallGHCEffects = '[ AlreadyInstalled
|
|||||||
, NotInstalled
|
, NotInstalled
|
||||||
, ProcessError
|
, ProcessError
|
||||||
, TagNotFound
|
, TagNotFound
|
||||||
, DayNotFound
|
|
||||||
, TarDirDoesNotExist
|
, TarDirDoesNotExist
|
||||||
, UninstallFailed
|
, UninstallFailed
|
||||||
, UnknownArchive
|
, UnknownArchive
|
||||||
, InstallSetError
|
, InstallSetError
|
||||||
, NoCompatiblePlatform
|
|
||||||
, GHCup.Errors.ParseError
|
|
||||||
, UnsupportedSetupCombo
|
|
||||||
, DistroNotFound
|
|
||||||
, NoCompatibleArch
|
|
||||||
]
|
]
|
||||||
|
|
||||||
runInstGHC :: AppState
|
runInstGHC :: AppState
|
||||||
|
-> Maybe PlatformRequest
|
||||||
-> Excepts InstallGHCEffects (ResourceT (ReaderT AppState IO)) a
|
-> Excepts InstallGHCEffects (ResourceT (ReaderT AppState IO)) a
|
||||||
-> IO (VEither InstallGHCEffects a)
|
-> IO (VEither InstallGHCEffects a)
|
||||||
runInstGHC appstate' =
|
runInstGHC appstate' mInstPlatform =
|
||||||
flip runReaderT appstate'
|
flip runReaderT (maybe appstate' (\x -> appstate'{ pfreq = x } :: AppState) mInstPlatform)
|
||||||
. runResourceT
|
. runResourceT
|
||||||
. runE
|
. runE
|
||||||
@InstallGHCEffects
|
@InstallGHCEffects
|
||||||
@ -314,27 +319,22 @@ runInstGHC appstate' =
|
|||||||
|
|
||||||
install :: Either InstallCommand InstallOptions -> Settings -> IO AppState -> (ReaderT LeanAppState IO () -> IO ()) -> IO ExitCode
|
install :: Either InstallCommand InstallOptions -> Settings -> IO AppState -> (ReaderT LeanAppState IO () -> IO ()) -> IO ExitCode
|
||||||
install installCommand settings getAppState' runLogger = case installCommand of
|
install installCommand settings getAppState' runLogger = case installCommand of
|
||||||
(Right iGHCopts) -> do
|
(Right iopts) -> do
|
||||||
runLogger (logWarn "This is an old-style command for installing GHC. Use 'ghcup install ghc' instead.")
|
runLogger (logWarn "This is an old-style command for installing GHC. Use 'ghcup install ghc' instead.")
|
||||||
installGHC iGHCopts
|
installGHC iopts
|
||||||
(Left (InstallGHC iGHCopts)) -> installGHC iGHCopts
|
(Left (InstallGHC iopts)) -> installGHC iopts
|
||||||
(Left (InstallCabal iopts)) -> installCabal iopts
|
(Left (InstallCabal iopts)) -> installCabal iopts
|
||||||
(Left (InstallHLS iopts)) -> installHLS iopts
|
(Left (InstallHLS iopts)) -> installHLS iopts
|
||||||
(Left (InstallStack iopts)) -> installStack iopts
|
(Left (InstallStack iopts)) -> installStack iopts
|
||||||
where
|
where
|
||||||
installGHC :: InstallOptions -> IO ExitCode
|
installGHC :: InstallOptions -> IO ExitCode
|
||||||
installGHC InstallOptions{..} = do
|
installGHC InstallOptions{..} = do
|
||||||
s'@AppState{ dirs = Dirs{ .. } } <- liftIO getAppState'
|
s'@AppState{ dirs = Dirs{ .. } } <- liftIO getAppState'
|
||||||
(case instBindist of
|
(case instBindist of
|
||||||
Nothing -> runInstGHC s' $ do
|
Nothing -> runInstGHC s' instPlatform $ do
|
||||||
(v, vi) <- liftE $ fromVersion instVer GHC
|
(v, vi) <- liftE $ fromVersion instVer GHC
|
||||||
forM_ (_viPreInstall =<< vi) $ \msg -> do
|
|
||||||
lift $ logWarn msg
|
|
||||||
lift $ logWarn
|
|
||||||
"...waiting for 5 seconds, you can still abort..."
|
|
||||||
liftIO $ threadDelay 5000000 -- give the user a sec to intervene
|
|
||||||
liftE $ runBothE' (installGHCBin
|
liftE $ runBothE' (installGHCBin
|
||||||
v
|
(_tvVersion v)
|
||||||
(maybe GHCupInternal IsolateDir isolateDir)
|
(maybe GHCupInternal IsolateDir isolateDir)
|
||||||
forceInstall
|
forceInstall
|
||||||
addConfArgs
|
addConfArgs
|
||||||
@ -342,16 +342,11 @@ install installCommand settings getAppState' runLogger = case installCommand of
|
|||||||
$ when instSet $ when (isNothing isolateDir) $ liftE $ void $ setGHC v SetGHCOnly Nothing
|
$ when instSet $ when (isNothing isolateDir) $ liftE $ void $ setGHC v SetGHCOnly Nothing
|
||||||
pure vi
|
pure vi
|
||||||
Just uri -> do
|
Just uri -> do
|
||||||
runInstGHC s'{ settings = settings {noVerify = True}} $ do
|
runInstGHC s'{ settings = settings {noVerify = True}} instPlatform $ do
|
||||||
(v, vi) <- liftE $ fromVersion instVer GHC
|
(v, vi) <- liftE $ fromVersion instVer GHC
|
||||||
forM_ (_viPreInstall =<< vi) $ \msg -> do
|
|
||||||
lift $ logWarn msg
|
|
||||||
lift $ logWarn
|
|
||||||
"...waiting for 5 seconds, you can still abort..."
|
|
||||||
liftIO $ threadDelay 5000000 -- give the user a sec to intervene
|
|
||||||
liftE $ runBothE' (installGHCBindist
|
liftE $ runBothE' (installGHCBindist
|
||||||
(DownloadInfo uri (Just $ RegexDir "ghc-.*") "" Nothing Nothing)
|
(DownloadInfo uri (Just $ RegexDir "ghc-.*") "")
|
||||||
v
|
(_tvVersion v)
|
||||||
(maybe GHCupInternal IsolateDir isolateDir)
|
(maybe GHCupInternal IsolateDir isolateDir)
|
||||||
forceInstall
|
forceInstall
|
||||||
addConfArgs
|
addConfArgs
|
||||||
@ -367,10 +362,10 @@ install installCommand settings getAppState' runLogger = case installCommand of
|
|||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
|
|
||||||
VLeft e@(V (AlreadyInstalled _ _)) -> do
|
VLeft e@(V (AlreadyInstalled _ _)) -> do
|
||||||
runLogger $ logWarn $ T.pack $ prettyHFError e
|
runLogger $ logWarn $ T.pack $ prettyShow e
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
VLeft e@(V (AlreadyInstalled _ _)) -> do
|
VLeft e@(V (AlreadyInstalled _ _)) -> do
|
||||||
runLogger $ logWarn $ T.pack $ prettyHFError e
|
runLogger $ logWarn $ T.pack $ prettyShow e
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
|
|
||||||
VLeft (V (DirNotEmpty fp)) -> do
|
VLeft (V (DirNotEmpty fp)) -> do
|
||||||
@ -384,22 +379,22 @@ install installCommand settings getAppState' runLogger = case installCommand of
|
|||||||
|
|
||||||
VLeft err@(V (BuildFailed tmpdir _)) -> do
|
VLeft err@(V (BuildFailed tmpdir _)) -> do
|
||||||
case keepDirs settings of
|
case keepDirs settings of
|
||||||
Never -> runLogger (logError $ T.pack $ prettyHFError err)
|
Never -> runLogger (logError $ T.pack $ prettyShow err)
|
||||||
_ -> runLogger (logError $ T.pack (prettyHFError err) <> "\n" <>
|
_ -> runLogger (logError $ T.pack (prettyShow err) <> "\n" <>
|
||||||
"Check the logs at " <> T.pack (fromGHCupPath logsDir) <> " and the build directory " <> T.pack tmpdir <> " for more clues." <> "\n" <>
|
"Check the logs at " <> T.pack (fromGHCupPath logsDir) <> " and the build directory " <> T.pack tmpdir <> " for more clues." <> "\n" <>
|
||||||
"Make sure to clean up " <> T.pack tmpdir <> " afterwards.")
|
"Make sure to clean up " <> T.pack tmpdir <> " afterwards.")
|
||||||
pure $ ExitFailure 3
|
pure $ ExitFailure 3
|
||||||
VLeft err@(V (BuildFailed tmpdir _)) -> do
|
VLeft err@(V (BuildFailed tmpdir _)) -> do
|
||||||
case keepDirs settings of
|
case keepDirs settings of
|
||||||
Never -> runLogger (logError $ T.pack $ prettyHFError err)
|
Never -> runLogger (logError $ T.pack $ prettyShow err)
|
||||||
_ -> runLogger (logError $ T.pack (prettyHFError err) <> "\n" <>
|
_ -> runLogger (logError $ T.pack (prettyShow err) <> "\n" <>
|
||||||
"Check the logs at " <> T.pack (fromGHCupPath logsDir) <> " and the build directory " <> T.pack tmpdir <> " for more clues." <> "\n" <>
|
"Check the logs at " <> T.pack (fromGHCupPath logsDir) <> " and the build directory " <> T.pack tmpdir <> " for more clues." <> "\n" <>
|
||||||
"Make sure to clean up " <> T.pack tmpdir <> " afterwards.")
|
"Make sure to clean up " <> T.pack tmpdir <> " afterwards.")
|
||||||
pure $ ExitFailure 3
|
pure $ ExitFailure 3
|
||||||
|
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger $ do
|
runLogger $ do
|
||||||
logError $ T.pack $ prettyHFError e
|
logError $ T.pack $ prettyShow e
|
||||||
logError $ "Also check the logs in " <> T.pack (fromGHCupPath logsDir)
|
logError $ "Also check the logs in " <> T.pack (fromGHCupPath logsDir)
|
||||||
pure $ ExitFailure 3
|
pure $ ExitFailure 3
|
||||||
|
|
||||||
@ -408,13 +403,8 @@ install installCommand settings getAppState' runLogger = case installCommand of
|
|||||||
installCabal InstallOptions{..} = do
|
installCabal InstallOptions{..} = do
|
||||||
s'@AppState{ dirs = Dirs{ .. } } <- liftIO getAppState'
|
s'@AppState{ dirs = Dirs{ .. } } <- liftIO getAppState'
|
||||||
(case instBindist of
|
(case instBindist of
|
||||||
Nothing -> runInstTool s' $ do
|
Nothing -> runInstTool s' instPlatform $ do
|
||||||
(_tvVersion -> v, vi) <- liftE $ fromVersion instVer Cabal
|
(_tvVersion -> v, vi) <- liftE $ fromVersion instVer Cabal
|
||||||
forM_ (_viPreInstall =<< vi) $ \msg -> do
|
|
||||||
lift $ logWarn msg
|
|
||||||
lift $ logWarn
|
|
||||||
"...waiting for 5 seconds, you can still abort..."
|
|
||||||
liftIO $ threadDelay 5000000 -- give the user a sec to intervene
|
|
||||||
liftE $ runBothE' (installCabalBin
|
liftE $ runBothE' (installCabalBin
|
||||||
v
|
v
|
||||||
(maybe GHCupInternal IsolateDir isolateDir)
|
(maybe GHCupInternal IsolateDir isolateDir)
|
||||||
@ -422,15 +412,10 @@ install installCommand settings getAppState' runLogger = case installCommand of
|
|||||||
) $ when instSet $ when (isNothing isolateDir) $ liftE $ setCabal v
|
) $ when instSet $ when (isNothing isolateDir) $ liftE $ setCabal v
|
||||||
pure vi
|
pure vi
|
||||||
Just uri -> do
|
Just uri -> do
|
||||||
runInstTool s'{ settings = settings { noVerify = True}} $ do
|
runInstTool s'{ settings = settings { noVerify = True}} instPlatform $ do
|
||||||
(_tvVersion -> v, vi) <- liftE $ fromVersion instVer Cabal
|
(_tvVersion -> v, vi) <- liftE $ fromVersion instVer Cabal
|
||||||
forM_ (_viPreInstall =<< vi) $ \msg -> do
|
|
||||||
lift $ logWarn msg
|
|
||||||
lift $ logWarn
|
|
||||||
"...waiting for 5 seconds, you can still abort..."
|
|
||||||
liftIO $ threadDelay 5000000 -- give the user a sec to intervene
|
|
||||||
liftE $ runBothE' (installCabalBindist
|
liftE $ runBothE' (installCabalBindist
|
||||||
(DownloadInfo uri Nothing "" Nothing Nothing)
|
(DownloadInfo uri Nothing "")
|
||||||
v
|
v
|
||||||
(maybe GHCupInternal IsolateDir isolateDir)
|
(maybe GHCupInternal IsolateDir isolateDir)
|
||||||
forceInstall
|
forceInstall
|
||||||
@ -444,14 +429,14 @@ install installCommand settings getAppState' runLogger = case installCommand of
|
|||||||
runLogger $ logInfo msg
|
runLogger $ logInfo msg
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
VLeft e@(V (AlreadyInstalled _ _)) -> do
|
VLeft e@(V (AlreadyInstalled _ _)) -> do
|
||||||
runLogger $ logWarn $ T.pack $ prettyHFError e
|
runLogger $ logWarn $ T.pack $ prettyShow e
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
VLeft (V (FileAlreadyExistsError fp)) -> do
|
VLeft (V (FileAlreadyExistsError fp)) -> do
|
||||||
runLogger $ logWarn $
|
runLogger $ logWarn $
|
||||||
"File " <> T.pack fp <> " already exists. Use 'ghcup install cabal --isolate " <> T.pack fp <> " --force ..." <> "' if you want to overwrite."
|
"File " <> T.pack fp <> " already exists. Use 'ghcup install cabal --isolate " <> T.pack fp <> " --force ..." <> "' if you want to overwrite."
|
||||||
pure $ ExitFailure 3
|
pure $ ExitFailure 3
|
||||||
VLeft e@(V (AlreadyInstalled _ _)) -> do
|
VLeft e@(V (AlreadyInstalled _ _)) -> do
|
||||||
runLogger $ logWarn $ T.pack $ prettyHFError e
|
runLogger $ logWarn $ T.pack $ prettyShow e
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
VLeft (V (FileAlreadyExistsError fp)) -> do
|
VLeft (V (FileAlreadyExistsError fp)) -> do
|
||||||
runLogger $ logWarn $
|
runLogger $ logWarn $
|
||||||
@ -459,7 +444,7 @@ install installCommand settings getAppState' runLogger = case installCommand of
|
|||||||
pure $ ExitFailure 3
|
pure $ ExitFailure 3
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger $ do
|
runLogger $ do
|
||||||
logError $ T.pack $ prettyHFError e
|
logError $ T.pack $ prettyShow e
|
||||||
logError $ "Also check the logs in " <> T.pack (fromGHCupPath logsDir)
|
logError $ "Also check the logs in " <> T.pack (fromGHCupPath logsDir)
|
||||||
pure $ ExitFailure 4
|
pure $ ExitFailure 4
|
||||||
|
|
||||||
@ -467,13 +452,8 @@ install installCommand settings getAppState' runLogger = case installCommand of
|
|||||||
installHLS InstallOptions{..} = do
|
installHLS InstallOptions{..} = do
|
||||||
s'@AppState{ dirs = Dirs{ .. } } <- liftIO getAppState'
|
s'@AppState{ dirs = Dirs{ .. } } <- liftIO getAppState'
|
||||||
(case instBindist of
|
(case instBindist of
|
||||||
Nothing -> runInstTool s' $ do
|
Nothing -> runInstTool s' instPlatform $ do
|
||||||
(_tvVersion -> v, vi) <- liftE $ fromVersion instVer HLS
|
(_tvVersion -> v, vi) <- liftE $ fromVersion instVer HLS
|
||||||
forM_ (_viPreInstall =<< vi) $ \msg -> do
|
|
||||||
lift $ logWarn msg
|
|
||||||
lift $ logWarn
|
|
||||||
"...waiting for 5 seconds, you can still abort..."
|
|
||||||
liftIO $ threadDelay 5000000 -- give the user a sec to intervene
|
|
||||||
liftE $ runBothE' (installHLSBin
|
liftE $ runBothE' (installHLSBin
|
||||||
v
|
v
|
||||||
(maybe GHCupInternal IsolateDir isolateDir)
|
(maybe GHCupInternal IsolateDir isolateDir)
|
||||||
@ -481,16 +461,11 @@ install installCommand settings getAppState' runLogger = case installCommand of
|
|||||||
) $ when instSet $ when (isNothing isolateDir) $ liftE $ setHLS v SetHLSOnly Nothing
|
) $ when instSet $ when (isNothing isolateDir) $ liftE $ setHLS v SetHLSOnly Nothing
|
||||||
pure vi
|
pure vi
|
||||||
Just uri -> do
|
Just uri -> do
|
||||||
runInstTool s'{ settings = settings { noVerify = True}} $ do
|
runInstTool s'{ settings = settings { noVerify = True}} instPlatform $ do
|
||||||
(_tvVersion -> v, vi) <- liftE $ fromVersion instVer HLS
|
(_tvVersion -> v, vi) <- liftE $ fromVersion instVer HLS
|
||||||
forM_ (_viPreInstall =<< vi) $ \msg -> do
|
|
||||||
lift $ logWarn msg
|
|
||||||
lift $ logWarn
|
|
||||||
"...waiting for 5 seconds, you can still abort..."
|
|
||||||
liftIO $ threadDelay 5000000 -- give the user a sec to intervene
|
|
||||||
-- TODO: support legacy
|
-- TODO: support legacy
|
||||||
liftE $ runBothE' (installHLSBindist
|
liftE $ runBothE' (installHLSBindist
|
||||||
(DownloadInfo uri (if isWindows then Nothing else Just (RegexDir "haskell-language-server-*")) "" Nothing Nothing)
|
(DownloadInfo uri (Just $ RegexDir "haskell-language-server-*") "")
|
||||||
v
|
v
|
||||||
(maybe GHCupInternal IsolateDir isolateDir)
|
(maybe GHCupInternal IsolateDir isolateDir)
|
||||||
forceInstall
|
forceInstall
|
||||||
@ -504,14 +479,14 @@ install installCommand settings getAppState' runLogger = case installCommand of
|
|||||||
runLogger $ logInfo msg
|
runLogger $ logInfo msg
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
VLeft e@(V (AlreadyInstalled _ _)) -> do
|
VLeft e@(V (AlreadyInstalled _ _)) -> do
|
||||||
runLogger $ logWarn $ T.pack $ prettyHFError e
|
runLogger $ logWarn $ T.pack $ prettyShow e
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
VLeft (V (FileAlreadyExistsError fp)) -> do
|
VLeft (V (FileAlreadyExistsError fp)) -> do
|
||||||
runLogger $ logWarn $
|
runLogger $ logWarn $
|
||||||
"File " <> T.pack fp <> " already exists. Use 'ghcup install hls --isolate " <> T.pack fp <> " --force ..." <> "' if you want to overwrite."
|
"File " <> T.pack fp <> " already exists. Use 'ghcup install hls --isolate " <> T.pack fp <> " --force ..." <> "' if you want to overwrite."
|
||||||
pure $ ExitFailure 3
|
pure $ ExitFailure 3
|
||||||
VLeft e@(V (AlreadyInstalled _ _)) -> do
|
VLeft e@(V (AlreadyInstalled _ _)) -> do
|
||||||
runLogger $ logWarn $ T.pack $ prettyHFError e
|
runLogger $ logWarn $ T.pack $ prettyShow e
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
VLeft (V (FileAlreadyExistsError fp)) -> do
|
VLeft (V (FileAlreadyExistsError fp)) -> do
|
||||||
runLogger $ logWarn $
|
runLogger $ logWarn $
|
||||||
@ -519,7 +494,7 @@ install installCommand settings getAppState' runLogger = case installCommand of
|
|||||||
pure $ ExitFailure 3
|
pure $ ExitFailure 3
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger $ do
|
runLogger $ do
|
||||||
logError $ T.pack $ prettyHFError e
|
logError $ T.pack $ prettyShow e
|
||||||
logError $ "Also check the logs in " <> T.pack (fromGHCupPath logsDir)
|
logError $ "Also check the logs in " <> T.pack (fromGHCupPath logsDir)
|
||||||
pure $ ExitFailure 4
|
pure $ ExitFailure 4
|
||||||
|
|
||||||
@ -527,13 +502,8 @@ install installCommand settings getAppState' runLogger = case installCommand of
|
|||||||
installStack InstallOptions{..} = do
|
installStack InstallOptions{..} = do
|
||||||
s'@AppState{ dirs = Dirs{ .. } } <- liftIO getAppState'
|
s'@AppState{ dirs = Dirs{ .. } } <- liftIO getAppState'
|
||||||
(case instBindist of
|
(case instBindist of
|
||||||
Nothing -> runInstTool s' $ do
|
Nothing -> runInstTool s' instPlatform $ do
|
||||||
(_tvVersion -> v, vi) <- liftE $ fromVersion instVer Stack
|
(_tvVersion -> v, vi) <- liftE $ fromVersion instVer Stack
|
||||||
forM_ (_viPreInstall =<< vi) $ \msg -> do
|
|
||||||
lift $ logWarn msg
|
|
||||||
lift $ logWarn
|
|
||||||
"...waiting for 5 seconds, you can still abort..."
|
|
||||||
liftIO $ threadDelay 5000000 -- give the user a sec to intervene
|
|
||||||
liftE $ runBothE' (installStackBin
|
liftE $ runBothE' (installStackBin
|
||||||
v
|
v
|
||||||
(maybe GHCupInternal IsolateDir isolateDir)
|
(maybe GHCupInternal IsolateDir isolateDir)
|
||||||
@ -541,15 +511,10 @@ install installCommand settings getAppState' runLogger = case installCommand of
|
|||||||
) $ when instSet $ when (isNothing isolateDir) $ liftE $ setStack v
|
) $ when instSet $ when (isNothing isolateDir) $ liftE $ setStack v
|
||||||
pure vi
|
pure vi
|
||||||
Just uri -> do
|
Just uri -> do
|
||||||
runInstTool s'{ settings = settings { noVerify = True}} $ do
|
runInstTool s'{ settings = settings { noVerify = True}} instPlatform $ do
|
||||||
(_tvVersion -> v, vi) <- liftE $ fromVersion instVer Stack
|
(_tvVersion -> v, vi) <- liftE $ fromVersion instVer Stack
|
||||||
forM_ (_viPreInstall =<< vi) $ \msg -> do
|
|
||||||
lift $ logWarn msg
|
|
||||||
lift $ logWarn
|
|
||||||
"...waiting for 5 seconds, you can still abort..."
|
|
||||||
liftIO $ threadDelay 5000000 -- give the user a sec to intervene
|
|
||||||
liftE $ runBothE' (installStackBindist
|
liftE $ runBothE' (installStackBindist
|
||||||
(DownloadInfo uri Nothing "" Nothing Nothing)
|
(DownloadInfo uri Nothing "")
|
||||||
v
|
v
|
||||||
(maybe GHCupInternal IsolateDir isolateDir)
|
(maybe GHCupInternal IsolateDir isolateDir)
|
||||||
forceInstall
|
forceInstall
|
||||||
@ -563,14 +528,14 @@ install installCommand settings getAppState' runLogger = case installCommand of
|
|||||||
runLogger $ logInfo msg
|
runLogger $ logInfo msg
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
VLeft e@(V (AlreadyInstalled _ _)) -> do
|
VLeft e@(V (AlreadyInstalled _ _)) -> do
|
||||||
runLogger $ logWarn $ T.pack $ prettyHFError e
|
runLogger $ logWarn $ T.pack $ prettyShow e
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
VLeft (V (FileAlreadyExistsError fp)) -> do
|
VLeft (V (FileAlreadyExistsError fp)) -> do
|
||||||
runLogger $ logWarn $
|
runLogger $ logWarn $
|
||||||
"File " <> T.pack fp <> " already exists. Use 'ghcup install stack --isolate " <> T.pack fp <> " --force ..." <> "' if you want to overwrite."
|
"File " <> T.pack fp <> " already exists. Use 'ghcup install stack --isolate " <> T.pack fp <> " --force ..." <> "' if you want to overwrite."
|
||||||
pure $ ExitFailure 3
|
pure $ ExitFailure 3
|
||||||
VLeft e@(V (AlreadyInstalled _ _)) -> do
|
VLeft e@(V (AlreadyInstalled _ _)) -> do
|
||||||
runLogger $ logWarn $ T.pack $ prettyHFError e
|
runLogger $ logWarn $ T.pack $ prettyShow e
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
VLeft (V (FileAlreadyExistsError fp)) -> do
|
VLeft (V (FileAlreadyExistsError fp)) -> do
|
||||||
runLogger $ logWarn $
|
runLogger $ logWarn $
|
||||||
@ -578,6 +543,7 @@ install installCommand settings getAppState' runLogger = case installCommand of
|
|||||||
pure $ ExitFailure 3
|
pure $ ExitFailure 3
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger $ do
|
runLogger $ do
|
||||||
logError $ T.pack $ prettyHFError e
|
logError $ T.pack $ prettyShow e
|
||||||
logError $ "Also check the logs in " <> T.pack (fromGHCupPath logsDir)
|
logError $ "Also check the logs in " <> T.pack (fromGHCupPath logsDir)
|
||||||
pure $ ExitFailure 4
|
pure $ ExitFailure 4
|
||||||
|
|
@ -2,7 +2,6 @@
|
|||||||
{-# LANGUAGE DataKinds #-}
|
{-# LANGUAGE DataKinds #-}
|
||||||
{-# LANGUAGE FlexibleContexts #-}
|
{-# LANGUAGE FlexibleContexts #-}
|
||||||
{-# LANGUAGE OverloadedStrings #-}
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
{-# LANGUAGE QuasiQuotes #-}
|
|
||||||
{-# LANGUAGE DuplicateRecordFields #-}
|
{-# LANGUAGE DuplicateRecordFields #-}
|
||||||
{-# LANGUAGE RankNTypes #-}
|
{-# LANGUAGE RankNTypes #-}
|
||||||
|
|
||||||
@ -15,7 +14,6 @@ import GHCup
|
|||||||
import GHCup.Prelude
|
import GHCup.Prelude
|
||||||
import GHCup.Types
|
import GHCup.Types
|
||||||
import GHCup.OptParse.Common
|
import GHCup.OptParse.Common
|
||||||
import GHCup.Prelude.String.QQ
|
|
||||||
|
|
||||||
#if !MIN_VERSION_base(4,13,0)
|
#if !MIN_VERSION_base(4,13,0)
|
||||||
import Control.Monad.Fail ( MonadFail )
|
import Control.Monad.Fail ( MonadFail )
|
||||||
@ -26,8 +24,7 @@ import Data.Char
|
|||||||
import Data.List ( intercalate, sort )
|
import Data.List ( intercalate, sort )
|
||||||
import Data.Functor
|
import Data.Functor
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import Data.Time.Calendar ( Day )
|
import Data.Versions hiding ( str )
|
||||||
import Data.Versions
|
|
||||||
import Data.Void
|
import Data.Void
|
||||||
import Options.Applicative hiding ( style )
|
import Options.Applicative hiding ( style )
|
||||||
import Prelude hiding ( appendFile )
|
import Prelude hiding ( appendFile )
|
||||||
@ -53,12 +50,8 @@ import qualified Text.Megaparsec.Char as MPC
|
|||||||
data ListOptions = ListOptions
|
data ListOptions = ListOptions
|
||||||
{ loTool :: Maybe Tool
|
{ loTool :: Maybe Tool
|
||||||
, lCriteria :: Maybe ListCriteria
|
, lCriteria :: Maybe ListCriteria
|
||||||
, lFrom :: Maybe Day
|
|
||||||
, lTo :: Maybe Day
|
|
||||||
, lHideOld :: Bool
|
|
||||||
, lShowNightly :: Bool
|
|
||||||
, lRawFormat :: Bool
|
, lRawFormat :: Bool
|
||||||
} deriving (Eq, Show)
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -67,6 +60,7 @@ data ListOptions = ListOptions
|
|||||||
--[ Parsers ]--
|
--[ Parsers ]--
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
|
|
||||||
listOpts :: Parser ListOptions
|
listOpts :: Parser ListOptions
|
||||||
listOpts =
|
listOpts =
|
||||||
ListOptions
|
ListOptions
|
||||||
@ -75,7 +69,7 @@ listOpts =
|
|||||||
(eitherReader toolParser)
|
(eitherReader toolParser)
|
||||||
(short 't' <> long "tool" <> metavar "<ghc|cabal|hls|stack>" <> help
|
(short 't' <> long "tool" <> metavar "<ghc|cabal|hls|stack>" <> help
|
||||||
"Tool to list versions for. Default is all"
|
"Tool to list versions for. Default is all"
|
||||||
<> completer toolCompleter
|
<> completer (toolCompleter)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
<*> optional
|
<*> optional
|
||||||
@ -84,53 +78,15 @@ listOpts =
|
|||||||
( short 'c'
|
( short 'c'
|
||||||
<> long "show-criteria"
|
<> long "show-criteria"
|
||||||
<> metavar "<installed|set|available>"
|
<> metavar "<installed|set|available>"
|
||||||
<> help "Apply filtering criteria, prefix with + or -"
|
<> help "Show only installed/set/available tool versions"
|
||||||
<> completer (listCompleter
|
<> completer (listCompleter ["installed", "set", "available"])
|
||||||
[ "+installed", "+set", "+available", "-installed", "-set", "-available"])
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
<*> optional
|
|
||||||
(option
|
|
||||||
(eitherReader dayParser)
|
|
||||||
(short 's' <> long "since" <> metavar "YYYY-MM-DD" <> help
|
|
||||||
"List only tools with release date starting at YYYY-MM-DD or later"
|
|
||||||
<> completer toolCompleter
|
|
||||||
)
|
|
||||||
)
|
|
||||||
<*> optional
|
|
||||||
(option
|
|
||||||
(eitherReader dayParser)
|
|
||||||
(short 'u' <> long "until" <> metavar "YYYY-MM-DD" <> help
|
|
||||||
"List only tools with release date earlier than YYYY-MM-DD"
|
|
||||||
<> completer toolCompleter
|
|
||||||
)
|
|
||||||
)
|
|
||||||
<*> switch
|
|
||||||
(short 'o' <> long "hide-old" <> help "Hide 'old' GHC versions (installed ones are always shown)"
|
|
||||||
)
|
|
||||||
<*> switch
|
|
||||||
(short 'n' <> long "show-nightly" <> help "Show nightlies (installed ones are always shown)"
|
|
||||||
)
|
|
||||||
<*> switch
|
<*> switch
|
||||||
(short 'r' <> long "raw-format" <> help "More machine-parsable format"
|
(short 'r' <> long "raw-format" <> help "More machine-parsable format"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
--------------
|
|
||||||
--[ Footer ]--
|
|
||||||
--------------
|
|
||||||
|
|
||||||
|
|
||||||
listToolFooter :: String
|
|
||||||
listToolFooter = [s|Discussion:
|
|
||||||
Lists tool versions with optional criteria.
|
|
||||||
Nightlies are by default hidden.
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
# query nightlies in a specific range
|
|
||||||
ghcup list --show-nightly --since 2022-12-07 --until 2022-12-31
|
|
||||||
# show all installed GHC versions
|
|
||||||
ghcup list -t ghc -c installed|]
|
|
||||||
|
|
||||||
|
|
||||||
-----------------
|
-----------------
|
||||||
@ -149,11 +105,8 @@ printListResult no_color raw lr = do
|
|||||||
printTag Recommended = color Green "recommended"
|
printTag Recommended = color Green "recommended"
|
||||||
printTag Latest = color Yellow "latest"
|
printTag Latest = color Yellow "latest"
|
||||||
printTag Prerelease = color Red "prerelease"
|
printTag Prerelease = color Red "prerelease"
|
||||||
printTag Nightly = color Red "nightly"
|
|
||||||
printTag (Base pvp'') = "base-" ++ T.unpack (prettyPVP pvp'')
|
printTag (Base pvp'') = "base-" ++ T.unpack (prettyPVP pvp'')
|
||||||
printTag (UnknownTag t ) = t
|
printTag (UnknownTag t ) = t
|
||||||
printTag LatestPrerelease = color Red "latest-prerelease"
|
|
||||||
printTag LatestNightly = color Red "latest-nightly"
|
|
||||||
printTag Old = ""
|
printTag Old = ""
|
||||||
|
|
||||||
let
|
let
|
||||||
@ -180,10 +133,8 @@ printListResult no_color raw lr = do
|
|||||||
then [color Green "hls-powered"]
|
then [color Green "hls-powered"]
|
||||||
else mempty
|
else mempty
|
||||||
)
|
)
|
||||||
|
++ (if fromSrc then [color Blue "compiled"] else mempty)
|
||||||
++ (if lStray then [color Yellow "stray"] else mempty)
|
++ (if lStray then [color Yellow "stray"] else mempty)
|
||||||
++ (case lReleaseDay of
|
|
||||||
Nothing -> mempty
|
|
||||||
Just d -> [color Blue (show d)])
|
|
||||||
++ (if lNoBindist
|
++ (if lNoBindist
|
||||||
then [color Red "no-bindist"]
|
then [color Red "no-bindist"]
|
||||||
else mempty
|
else mempty
|
||||||
@ -308,7 +259,7 @@ list :: ( Monad m
|
|||||||
-> m ExitCode
|
-> m ExitCode
|
||||||
list ListOptions{..} no_color runAppState =
|
list ListOptions{..} no_color runAppState =
|
||||||
runAppState (do
|
runAppState (do
|
||||||
l <- listVersions loTool (maybeToList lCriteria) lHideOld lShowNightly (lFrom, lTo)
|
l <- listVersions loTool lCriteria
|
||||||
liftIO $ printListResult no_color lRawFormat l
|
liftIO $ printListResult no_color lRawFormat l
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
)
|
)
|
@ -26,6 +26,7 @@ import Haskus.Utils.Variant.Excepts
|
|||||||
import Options.Applicative hiding ( style )
|
import Options.Applicative hiding ( style )
|
||||||
import Prelude hiding ( appendFile )
|
import Prelude hiding ( appendFile )
|
||||||
import System.Exit
|
import System.Exit
|
||||||
|
import Text.PrettyPrint.HughesPJClass ( prettyShow )
|
||||||
|
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import Control.Exception.Safe (MonadMask)
|
import Control.Exception.Safe (MonadMask)
|
||||||
@ -77,7 +78,7 @@ nuke appState runLogger = do
|
|||||||
lift $ logInfo "Initiating Nuclear Sequence 🚀🚀🚀"
|
lift $ logInfo "Initiating Nuclear Sequence 🚀🚀🚀"
|
||||||
lift $ logInfo "Nuking in 3...2...1"
|
lift $ logInfo "Nuking in 3...2...1"
|
||||||
|
|
||||||
lInstalled <- lift $ listVersions Nothing [ListInstalled True] False True (Nothing, Nothing)
|
lInstalled <- lift $ listVersions Nothing (Just ListInstalled)
|
||||||
|
|
||||||
forM_ lInstalled (liftE . rmTool)
|
forM_ lInstalled (liftE . rmTool)
|
||||||
|
|
||||||
@ -94,5 +95,5 @@ nuke appState runLogger = do
|
|||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
|
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger $ logError $ T.pack $ prettyHFError e
|
runLogger $ logError $ T.pack $ prettyShow e
|
||||||
pure $ ExitFailure 15
|
pure $ ExitFailure 15
|
@ -14,7 +14,6 @@ module GHCup.OptParse.Prefetch where
|
|||||||
import GHCup
|
import GHCup
|
||||||
import GHCup.Errors
|
import GHCup.Errors
|
||||||
import GHCup.Types
|
import GHCup.Types
|
||||||
import GHCup.Types.Optics
|
|
||||||
import GHCup.Prelude.File
|
import GHCup.Prelude.File
|
||||||
import GHCup.Prelude.Logger
|
import GHCup.Prelude.Logger
|
||||||
import GHCup.Prelude.String.QQ
|
import GHCup.Prelude.String.QQ
|
||||||
@ -31,6 +30,7 @@ import Haskus.Utils.Variant.Excepts
|
|||||||
import Options.Applicative hiding ( style )
|
import Options.Applicative hiding ( style )
|
||||||
import Prelude hiding ( appendFile )
|
import Prelude hiding ( appendFile )
|
||||||
import System.Exit
|
import System.Exit
|
||||||
|
import Text.PrettyPrint.HughesPJClass ( prettyShow )
|
||||||
|
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import Control.Exception.Safe (MonadMask)
|
import Control.Exception.Safe (MonadMask)
|
||||||
@ -84,7 +84,7 @@ prefetchP = subparser
|
|||||||
<$> (PrefetchGHCOptions
|
<$> (PrefetchGHCOptions
|
||||||
<$> ( switch (short 's' <> long "source" <> help "Download source tarball instead of bindist") <**> helper )
|
<$> ( switch (short 's' <> long "source" <> help "Download source tarball instead of bindist") <**> helper )
|
||||||
<*> optional (option str (short 'd' <> long "directory" <> help "directory to download into (default: ~/.ghcup/cache/)" <> completer (bashCompleter "directory"))))
|
<*> optional (option str (short 'd' <> long "directory" <> help "directory to download into (default: ~/.ghcup/cache/)" <> completer (bashCompleter "directory"))))
|
||||||
<*> optional (toolVersionTagArgument [] (Just GHC)) )
|
<*> optional (toolVersionArgument Nothing (Just GHC)) )
|
||||||
( progDesc "Download GHC assets for installation")
|
( progDesc "Download GHC assets for installation")
|
||||||
)
|
)
|
||||||
<>
|
<>
|
||||||
@ -93,7 +93,7 @@ prefetchP = subparser
|
|||||||
(info
|
(info
|
||||||
(PrefetchCabal
|
(PrefetchCabal
|
||||||
<$> fmap PrefetchOptions (optional (option str (short 'd' <> long "directory" <> help "directory to download into (default: ~/.ghcup/cache/)" <> completer (bashCompleter "directory"))))
|
<$> fmap PrefetchOptions (optional (option str (short 'd' <> long "directory" <> help "directory to download into (default: ~/.ghcup/cache/)" <> completer (bashCompleter "directory"))))
|
||||||
<*> ( optional (toolVersionTagArgument [] (Just Cabal)) <**> helper ))
|
<*> ( optional (toolVersionArgument Nothing (Just Cabal)) <**> helper ))
|
||||||
( progDesc "Download cabal assets for installation")
|
( progDesc "Download cabal assets for installation")
|
||||||
)
|
)
|
||||||
<>
|
<>
|
||||||
@ -102,7 +102,7 @@ prefetchP = subparser
|
|||||||
(info
|
(info
|
||||||
(PrefetchHLS
|
(PrefetchHLS
|
||||||
<$> fmap PrefetchOptions (optional (option str (short 'd' <> long "directory" <> help "directory to download into (default: ~/.ghcup/cache/)" <> completer (bashCompleter "directory"))))
|
<$> fmap PrefetchOptions (optional (option str (short 'd' <> long "directory" <> help "directory to download into (default: ~/.ghcup/cache/)" <> completer (bashCompleter "directory"))))
|
||||||
<*> ( optional (toolVersionTagArgument [] (Just HLS)) <**> helper ))
|
<*> ( optional (toolVersionArgument Nothing (Just HLS)) <**> helper ))
|
||||||
( progDesc "Download HLS assets for installation")
|
( progDesc "Download HLS assets for installation")
|
||||||
)
|
)
|
||||||
<>
|
<>
|
||||||
@ -111,7 +111,7 @@ prefetchP = subparser
|
|||||||
(info
|
(info
|
||||||
(PrefetchStack
|
(PrefetchStack
|
||||||
<$> fmap PrefetchOptions (optional (option str (short 'd' <> long "directory" <> help "directory to download into (default: ~/.ghcup/cache/)" <> completer (bashCompleter "directory"))))
|
<$> fmap PrefetchOptions (optional (option str (short 'd' <> long "directory" <> help "directory to download into (default: ~/.ghcup/cache/)" <> completer (bashCompleter "directory"))))
|
||||||
<*> ( optional (toolVersionTagArgument [] (Just Stack)) <**> helper ))
|
<*> ( optional (toolVersionArgument Nothing (Just Stack)) <**> helper ))
|
||||||
( progDesc "Download stack assets for installation")
|
( progDesc "Download stack assets for installation")
|
||||||
)
|
)
|
||||||
<>
|
<>
|
||||||
@ -149,18 +149,14 @@ Examples:
|
|||||||
|
|
||||||
|
|
||||||
type PrefetchEffects = '[ TagNotFound
|
type PrefetchEffects = '[ TagNotFound
|
||||||
, DayNotFound
|
|
||||||
, NextVerNotFound
|
, NextVerNotFound
|
||||||
, NoToolVersionSet
|
, NoToolVersionSet
|
||||||
, NoDownload
|
, NoDownload
|
||||||
, DigestError
|
, DigestError
|
||||||
, ContentLengthError
|
|
||||||
, GPGError
|
, GPGError
|
||||||
, DownloadFailed
|
, DownloadFailed
|
||||||
, JSONError
|
, JSONError
|
||||||
, FileDoesNotExistError
|
, FileDoesNotExistError ]
|
||||||
, StackPlatformDetectError
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
runPrefetch :: MonadUnliftIO m
|
runPrefetch :: MonadUnliftIO m
|
||||||
@ -198,27 +194,26 @@ prefetch prefetchCommand runAppState runLogger =
|
|||||||
forM_ pfCacheDir (liftIO . createDirRecursive')
|
forM_ pfCacheDir (liftIO . createDirRecursive')
|
||||||
(v, _) <- liftE $ fromVersion mt GHC
|
(v, _) <- liftE $ fromVersion mt GHC
|
||||||
if pfGHCSrc
|
if pfGHCSrc
|
||||||
then liftE $ fetchGHCSrc v pfCacheDir
|
then liftE $ fetchGHCSrc (_tvVersion v) pfCacheDir
|
||||||
else liftE $ fetchToolBindist v GHC pfCacheDir
|
else liftE $ fetchToolBindist (_tvVersion v) GHC pfCacheDir
|
||||||
PrefetchCabal PrefetchOptions {pfCacheDir} mt -> do
|
PrefetchCabal PrefetchOptions {pfCacheDir} mt -> do
|
||||||
forM_ pfCacheDir (liftIO . createDirRecursive')
|
forM_ pfCacheDir (liftIO . createDirRecursive')
|
||||||
(v, _) <- liftE $ fromVersion mt Cabal
|
(v, _) <- liftE $ fromVersion mt Cabal
|
||||||
liftE $ fetchToolBindist v Cabal pfCacheDir
|
liftE $ fetchToolBindist (_tvVersion v) Cabal pfCacheDir
|
||||||
PrefetchHLS PrefetchOptions {pfCacheDir} mt -> do
|
PrefetchHLS PrefetchOptions {pfCacheDir} mt -> do
|
||||||
forM_ pfCacheDir (liftIO . createDirRecursive')
|
forM_ pfCacheDir (liftIO . createDirRecursive')
|
||||||
(v, _) <- liftE $ fromVersion mt HLS
|
(v, _) <- liftE $ fromVersion mt HLS
|
||||||
liftE $ fetchToolBindist v HLS pfCacheDir
|
liftE $ fetchToolBindist (_tvVersion v) HLS pfCacheDir
|
||||||
PrefetchStack PrefetchOptions {pfCacheDir} mt -> do
|
PrefetchStack PrefetchOptions {pfCacheDir} mt -> do
|
||||||
forM_ pfCacheDir (liftIO . createDirRecursive')
|
forM_ pfCacheDir (liftIO . createDirRecursive')
|
||||||
(v, _) <- liftE $ fromVersion mt Stack
|
(v, _) <- liftE $ fromVersion mt Stack
|
||||||
liftE $ fetchToolBindist v Stack pfCacheDir
|
liftE $ fetchToolBindist (_tvVersion v) Stack pfCacheDir
|
||||||
PrefetchMetadata -> do
|
PrefetchMetadata -> do
|
||||||
pfreq <- lift getPlatformReq
|
_ <- liftE getDownloadsF
|
||||||
_ <- liftE $ getDownloadsF pfreq
|
|
||||||
pure ""
|
pure ""
|
||||||
) >>= \case
|
) >>= \case
|
||||||
VRight _ -> do
|
VRight _ -> do
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger $ logError $ T.pack $ prettyHFError e
|
runLogger $ logError $ T.pack $ prettyShow e
|
||||||
pure $ ExitFailure 15
|
pure $ ExitFailure 15
|
@ -29,11 +29,12 @@ import Control.Monad.Reader
|
|||||||
import Control.Monad.Trans.Resource
|
import Control.Monad.Trans.Resource
|
||||||
import Data.Functor
|
import Data.Functor
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import Data.Versions
|
import Data.Versions hiding ( str )
|
||||||
import Haskus.Utils.Variant.Excepts
|
import Haskus.Utils.Variant.Excepts
|
||||||
import Options.Applicative hiding ( style )
|
import Options.Applicative hiding ( style )
|
||||||
import Prelude hiding ( appendFile )
|
import Prelude hiding ( appendFile )
|
||||||
import System.Exit
|
import System.Exit
|
||||||
|
import Text.PrettyPrint.HughesPJClass ( prettyShow )
|
||||||
|
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import Control.Exception.Safe (MonadMask)
|
import Control.Exception.Safe (MonadMask)
|
||||||
@ -50,7 +51,6 @@ data RmCommand = RmGHC RmOptions
|
|||||||
| RmCabal Version
|
| RmCabal Version
|
||||||
| RmHLS Version
|
| RmHLS Version
|
||||||
| RmStack Version
|
| RmStack Version
|
||||||
deriving (Eq, Show)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -62,7 +62,7 @@ data RmCommand = RmGHC RmOptions
|
|||||||
|
|
||||||
data RmOptions = RmOptions
|
data RmOptions = RmOptions
|
||||||
{ ghcVer :: GHCTargetVersion
|
{ ghcVer :: GHCTargetVersion
|
||||||
} deriving (Eq, Show)
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -81,19 +81,19 @@ rmParser =
|
|||||||
<> command
|
<> command
|
||||||
"cabal"
|
"cabal"
|
||||||
( RmCabal
|
( RmCabal
|
||||||
<$> info (versionParser' [ListInstalled True] (Just Cabal) <**> helper)
|
<$> info (versionParser' (Just ListInstalled) (Just Cabal) <**> helper)
|
||||||
(progDesc "Remove Cabal version")
|
(progDesc "Remove Cabal version")
|
||||||
)
|
)
|
||||||
<> command
|
<> command
|
||||||
"hls"
|
"hls"
|
||||||
( RmHLS
|
( RmHLS
|
||||||
<$> info (versionParser' [ListInstalled True] (Just HLS) <**> helper)
|
<$> info (versionParser' (Just ListInstalled) (Just HLS) <**> helper)
|
||||||
(progDesc "Remove haskell-language-server version")
|
(progDesc "Remove haskell-language-server version")
|
||||||
)
|
)
|
||||||
<> command
|
<> command
|
||||||
"stack"
|
"stack"
|
||||||
( RmStack
|
( RmStack
|
||||||
<$> info (versionParser' [ListInstalled True] (Just Stack) <**> helper)
|
<$> info (versionParser' (Just ListInstalled) (Just Stack) <**> helper)
|
||||||
(progDesc "Remove stack version")
|
(progDesc "Remove stack version")
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@ -103,7 +103,7 @@ rmParser =
|
|||||||
|
|
||||||
|
|
||||||
rmOpts :: Maybe Tool -> Parser RmOptions
|
rmOpts :: Maybe Tool -> Parser RmOptions
|
||||||
rmOpts tool = RmOptions <$> ghcVersionArgument [ListInstalled True] tool
|
rmOpts tool = RmOptions <$> versionArgument (Just ListInstalled) tool
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -171,15 +171,15 @@ rm rmCommand runAppState runLogger = case rmCommand of
|
|||||||
liftE $
|
liftE $
|
||||||
rmGHCVer ghcVer
|
rmGHCVer ghcVer
|
||||||
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
||||||
pure (getVersionInfo ghcVer GHC dls)
|
pure (getVersionInfo (_tvVersion ghcVer) GHC dls)
|
||||||
)
|
)
|
||||||
>>= \case
|
>>= \case
|
||||||
VRight vi -> do
|
VRight vi -> do
|
||||||
runLogger $ logGHCPostRm ghcVer
|
forM_ (_viPostRemove =<< vi) $ \msg ->
|
||||||
postRmLog vi
|
runLogger $ logInfo msg
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger $ logError $ T.pack $ prettyHFError e
|
runLogger $ logError $ T.pack $ prettyShow e
|
||||||
pure $ ExitFailure 7
|
pure $ ExitFailure 7
|
||||||
|
|
||||||
rmCabal' tv =
|
rmCabal' tv =
|
||||||
@ -187,14 +187,15 @@ rm rmCommand runAppState runLogger = case rmCommand of
|
|||||||
liftE $
|
liftE $
|
||||||
rmCabalVer tv
|
rmCabalVer tv
|
||||||
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
||||||
pure (getVersionInfo (mkTVer tv) Cabal dls)
|
pure (getVersionInfo tv Cabal dls)
|
||||||
)
|
)
|
||||||
>>= \case
|
>>= \case
|
||||||
VRight vi -> do
|
VRight vi -> do
|
||||||
postRmLog vi
|
forM_ (_viPostRemove =<< vi) $ \msg ->
|
||||||
|
runLogger $ logInfo msg
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger $ logError $ T.pack $ prettyHFError e
|
runLogger $ logError $ T.pack $ prettyShow e
|
||||||
pure $ ExitFailure 15
|
pure $ ExitFailure 15
|
||||||
|
|
||||||
rmHLS' tv =
|
rmHLS' tv =
|
||||||
@ -202,14 +203,15 @@ rm rmCommand runAppState runLogger = case rmCommand of
|
|||||||
liftE $
|
liftE $
|
||||||
rmHLSVer tv
|
rmHLSVer tv
|
||||||
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
||||||
pure (getVersionInfo (mkTVer tv) HLS dls)
|
pure (getVersionInfo tv HLS dls)
|
||||||
)
|
)
|
||||||
>>= \case
|
>>= \case
|
||||||
VRight vi -> do
|
VRight vi -> do
|
||||||
postRmLog vi
|
forM_ (_viPostRemove =<< vi) $ \msg ->
|
||||||
|
runLogger $ logInfo msg
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger $ logError $ T.pack $ prettyHFError e
|
runLogger $ logError $ T.pack $ prettyShow e
|
||||||
pure $ ExitFailure 15
|
pure $ ExitFailure 15
|
||||||
|
|
||||||
rmStack' tv =
|
rmStack' tv =
|
||||||
@ -217,16 +219,14 @@ rm rmCommand runAppState runLogger = case rmCommand of
|
|||||||
liftE $
|
liftE $
|
||||||
rmStackVer tv
|
rmStackVer tv
|
||||||
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
||||||
pure (getVersionInfo (mkTVer tv) Stack dls)
|
pure (getVersionInfo tv Stack dls)
|
||||||
)
|
)
|
||||||
>>= \case
|
>>= \case
|
||||||
VRight vi -> do
|
VRight vi -> do
|
||||||
postRmLog vi
|
forM_ (_viPostRemove =<< vi) $ \msg ->
|
||||||
|
runLogger $ logInfo msg
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger $ logError $ T.pack $ prettyHFError e
|
runLogger $ logError $ T.pack $ prettyShow e
|
||||||
pure $ ExitFailure 15
|
pure $ ExitFailure 15
|
||||||
|
|
||||||
postRmLog vi =
|
|
||||||
forM_ (_viPostRemove =<< vi) $ \msg ->
|
|
||||||
runLogger $ logInfo msg
|
|
@ -5,7 +5,6 @@
|
|||||||
{-# LANGUAGE RankNTypes #-}
|
{-# LANGUAGE RankNTypes #-}
|
||||||
{-# LANGUAGE FlexibleContexts #-}
|
{-# LANGUAGE FlexibleContexts #-}
|
||||||
{-# LANGUAGE TypeFamilies #-}
|
{-# LANGUAGE TypeFamilies #-}
|
||||||
{-# LANGUAGE ViewPatterns #-}
|
|
||||||
module GHCup.OptParse.Run where
|
module GHCup.OptParse.Run where
|
||||||
|
|
||||||
|
|
||||||
@ -28,6 +27,7 @@ import Control.Exception.Safe ( MonadMask, MonadCatch )
|
|||||||
#if !MIN_VERSION_base(4,13,0)
|
#if !MIN_VERSION_base(4,13,0)
|
||||||
import Control.Monad.Fail ( MonadFail )
|
import Control.Monad.Fail ( MonadFail )
|
||||||
#endif
|
#endif
|
||||||
|
import Codec.Archive
|
||||||
import Control.Monad.Reader
|
import Control.Monad.Reader
|
||||||
import Control.Monad.Trans.Resource
|
import Control.Monad.Trans.Resource
|
||||||
import Data.Functor
|
import Data.Functor
|
||||||
@ -39,13 +39,13 @@ import Prelude hiding ( appendFile )
|
|||||||
import System.FilePath
|
import System.FilePath
|
||||||
import System.Environment
|
import System.Environment
|
||||||
import System.Exit
|
import System.Exit
|
||||||
|
import Text.PrettyPrint.HughesPJClass ( prettyShow )
|
||||||
|
|
||||||
import qualified Data.Map.Strict as Map
|
import qualified Data.Map.Strict as Map
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
#ifndef IS_WINDOWS
|
#ifndef IS_WINDOWS
|
||||||
import qualified System.Posix.Process as SPP
|
import qualified System.Posix.Process as SPP
|
||||||
#endif
|
#endif
|
||||||
import Data.Versions ( prettyVer, Version )
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -67,7 +67,7 @@ data RunOptions = RunOptions
|
|||||||
, runBinDir :: Maybe FilePath
|
, runBinDir :: Maybe FilePath
|
||||||
, runQuick :: Bool
|
, runQuick :: Bool
|
||||||
, runCOMMAND :: [String]
|
, runCOMMAND :: [String]
|
||||||
} deriving (Eq, Show)
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -88,34 +88,34 @@ runOpts =
|
|||||||
(short 'm' <> long "mingw-path" <> help "On windows, add mingw64 PATHs to environment (does nothing on unix)")
|
(short 'm' <> long "mingw-path" <> help "On windows, add mingw64 PATHs to environment (does nothing on unix)")
|
||||||
<*> optional
|
<*> optional
|
||||||
(option
|
(option
|
||||||
(eitherReader ghcVersionTagEither)
|
(eitherReader toolVersionEither)
|
||||||
(metavar "GHC_VERSION" <> long "ghc" <> help "The ghc version"
|
(metavar "GHC_VERSION" <> long "ghc" <> help "The ghc version"
|
||||||
<> completer (tagCompleter GHC [])
|
<> completer (tagCompleter GHC [])
|
||||||
<> (completer $ versionCompleter [] GHC)
|
<> (completer $ versionCompleter Nothing GHC)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
<*> optional
|
<*> optional
|
||||||
(option
|
(option
|
||||||
(eitherReader toolVersionTagEither)
|
(eitherReader toolVersionEither)
|
||||||
(metavar "CABAL_VERSION" <> long "cabal" <> help "The cabal version"
|
(metavar "CABAL_VERSION" <> long "cabal" <> help "The cabal version"
|
||||||
<> completer (tagCompleter Cabal [])
|
<> completer (tagCompleter Cabal [])
|
||||||
<> (completer $ versionCompleter [] Cabal)
|
<> (completer $ versionCompleter Nothing Cabal)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
<*> optional
|
<*> optional
|
||||||
(option
|
(option
|
||||||
(eitherReader toolVersionTagEither)
|
(eitherReader toolVersionEither)
|
||||||
(metavar "HLS_VERSION" <> long "hls" <> help "The HLS version"
|
(metavar "HLS_VERSION" <> long "hls" <> help "The HLS version"
|
||||||
<> completer (tagCompleter HLS [])
|
<> completer (tagCompleter HLS [])
|
||||||
<> (completer $ versionCompleter [] HLS)
|
<> (completer $ versionCompleter Nothing HLS)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
<*> optional
|
<*> optional
|
||||||
(option
|
(option
|
||||||
(eitherReader toolVersionTagEither)
|
(eitherReader toolVersionEither)
|
||||||
(metavar "STACK_VERSION" <> long "stack" <> help "The stack version"
|
(metavar "STACK_VERSION" <> long "stack" <> help "The stack version"
|
||||||
<> completer (tagCompleter Stack [])
|
<> completer (tagCompleter Stack [])
|
||||||
<> (completer $ versionCompleter [] Stack)
|
<> (completer $ versionCompleter Nothing Stack)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
<*> optional
|
<*> optional
|
||||||
@ -174,9 +174,7 @@ type RunEffects = '[ AlreadyInstalled
|
|||||||
, NotInstalled
|
, NotInstalled
|
||||||
, BuildFailed
|
, BuildFailed
|
||||||
, TagNotFound
|
, TagNotFound
|
||||||
, DayNotFound
|
|
||||||
, DigestError
|
, DigestError
|
||||||
, ContentLengthError
|
|
||||||
, GPGError
|
, GPGError
|
||||||
, DownloadFailed
|
, DownloadFailed
|
||||||
, TarDirDoesNotExist
|
, TarDirDoesNotExist
|
||||||
@ -186,11 +184,6 @@ type RunEffects = '[ AlreadyInstalled
|
|||||||
, ProcessError
|
, ProcessError
|
||||||
, UninstallFailed
|
, UninstallFailed
|
||||||
, MergeFileTreeError
|
, MergeFileTreeError
|
||||||
, NoCompatiblePlatform
|
|
||||||
, GHCup.Errors.ParseError
|
|
||||||
, UnsupportedSetupCombo
|
|
||||||
, DistroNotFound
|
|
||||||
, NoCompatibleArch
|
|
||||||
]
|
]
|
||||||
|
|
||||||
runLeanRUN :: (MonadUnliftIO m, MonadIO m)
|
runLeanRUN :: (MonadUnliftIO m, MonadIO m)
|
||||||
@ -224,13 +217,12 @@ runRUN appState action' = do
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
run :: forall m .
|
run :: forall m.
|
||||||
( MonadFail m
|
( MonadFail m
|
||||||
, MonadMask m
|
, MonadMask m
|
||||||
, MonadCatch m
|
, MonadCatch m
|
||||||
, MonadIO m
|
, MonadIO m
|
||||||
, MonadUnliftIO m
|
, MonadUnliftIO m
|
||||||
, Alternative m
|
|
||||||
)
|
)
|
||||||
=> RunOptions
|
=> RunOptions
|
||||||
-> IO AppState
|
-> IO AppState
|
||||||
@ -241,16 +233,12 @@ run RunOptions{..} runAppState leanAppstate runLogger = do
|
|||||||
r <- if not runQuick
|
r <- if not runQuick
|
||||||
then runRUN runAppState $ do
|
then runRUN runAppState $ do
|
||||||
toolchain <- liftE resolveToolchainFull
|
toolchain <- liftE resolveToolchainFull
|
||||||
|
tmp <- liftIO $ createTmpDir toolchain
|
||||||
-- oh dear
|
|
||||||
r <- lift ask
|
|
||||||
tmp <- lift . lift . lift . flip runReaderT (fromAppState r) $ createTmpDir toolchain
|
|
||||||
|
|
||||||
liftE $ installToolChainFull toolchain tmp
|
liftE $ installToolChainFull toolchain tmp
|
||||||
pure tmp
|
pure tmp
|
||||||
else runLeanRUN leanAppstate $ do
|
else runLeanRUN leanAppstate $ do
|
||||||
toolchain <- resolveToolchain
|
toolchain <- resolveToolchain
|
||||||
tmp <- lift $ createTmpDir toolchain
|
tmp <- liftIO $ createTmpDir toolchain
|
||||||
liftE $ installToolChain toolchain tmp
|
liftE $ installToolChain toolchain tmp
|
||||||
pure tmp
|
pure tmp
|
||||||
case r of
|
case r of
|
||||||
@ -260,9 +248,7 @@ run RunOptions{..} runAppState leanAppstate runLogger = do
|
|||||||
liftIO $ putStr tmp
|
liftIO $ putStr tmp
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
(cmd:args) -> do
|
(cmd:args) -> do
|
||||||
newEnv <- liftIO $ addToPath [tmp] runAppendPATH
|
newEnv <- liftIO $ addToPath tmp
|
||||||
let pathVar = if isWindows then "Path" else "PATH"
|
|
||||||
forM_ (Map.lookup pathVar . Map.fromList $ newEnv) $ liftIO . setEnv pathVar
|
|
||||||
#ifndef IS_WINDOWS
|
#ifndef IS_WINDOWS
|
||||||
void $ liftIO $ SPP.executeFile cmd True args (Just newEnv)
|
void $ liftIO $ SPP.executeFile cmd True args (Just newEnv)
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
@ -273,15 +259,26 @@ run RunOptions{..} runAppState leanAppstate runLogger = do
|
|||||||
case r' of
|
case r' of
|
||||||
VRight _ -> pure ExitSuccess
|
VRight _ -> pure ExitSuccess
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger $ logError $ T.pack $ prettyHFError e
|
runLogger $ logError $ T.pack $ prettyShow e
|
||||||
pure $ ExitFailure 28
|
pure $ ExitFailure 28
|
||||||
#endif
|
#endif
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger $ logError $ T.pack $ prettyHFError e
|
runLogger $ logError $ T.pack $ prettyShow e
|
||||||
pure $ ExitFailure 27
|
pure $ ExitFailure 27
|
||||||
|
|
||||||
where
|
where
|
||||||
|
|
||||||
|
createTmpDir :: Toolchain -> IO FilePath
|
||||||
|
createTmpDir toolchain =
|
||||||
|
case runBinDir of
|
||||||
|
Just bindir -> do
|
||||||
|
createDirRecursive' bindir
|
||||||
|
canonicalizePath bindir
|
||||||
|
Nothing -> do
|
||||||
|
d <- predictableTmpDir toolchain
|
||||||
|
createDirRecursive' d
|
||||||
|
canonicalizePath d
|
||||||
|
|
||||||
-- TODO: doesn't work for cross
|
-- TODO: doesn't work for cross
|
||||||
resolveToolchainFull :: ( MonadFail m
|
resolveToolchainFull :: ( MonadFail m
|
||||||
, MonadThrow m
|
, MonadThrow m
|
||||||
@ -290,7 +287,6 @@ run RunOptions{..} runAppState leanAppstate runLogger = do
|
|||||||
)
|
)
|
||||||
=> Excepts
|
=> Excepts
|
||||||
'[ TagNotFound
|
'[ TagNotFound
|
||||||
, DayNotFound
|
|
||||||
, NextVerNotFound
|
, NextVerNotFound
|
||||||
, NoToolVersionSet
|
, NoToolVersionSet
|
||||||
] (ResourceT (ReaderT AppState m)) Toolchain
|
] (ResourceT (ReaderT AppState m)) Toolchain
|
||||||
@ -300,33 +296,29 @@ run RunOptions{..} runAppState leanAppstate runLogger = do
|
|||||||
pure v
|
pure v
|
||||||
cabalVer <- forM runCabalVer $ \ver -> do
|
cabalVer <- forM runCabalVer $ \ver -> do
|
||||||
(v, _) <- liftE $ fromVersion (Just ver) Cabal
|
(v, _) <- liftE $ fromVersion (Just ver) Cabal
|
||||||
pure (_tvVersion v)
|
pure v
|
||||||
hlsVer <- forM runHLSVer $ \ver -> do
|
hlsVer <- forM runHLSVer $ \ver -> do
|
||||||
(v, _) <- liftE $ fromVersion (Just ver) HLS
|
(v, _) <- liftE $ fromVersion (Just ver) HLS
|
||||||
pure (_tvVersion v)
|
pure v
|
||||||
stackVer <- forM runStackVer $ \ver -> do
|
stackVer <- forM runStackVer $ \ver -> do
|
||||||
(v, _) <- liftE $ fromVersion (Just ver) Stack
|
(v, _) <- liftE $ fromVersion (Just ver) Stack
|
||||||
pure (_tvVersion v)
|
pure v
|
||||||
pure Toolchain{..}
|
pure Toolchain{..}
|
||||||
|
|
||||||
resolveToolchain = do
|
resolveToolchain = do
|
||||||
ghcVer <- case runGHCVer of
|
ghcVer <- case runGHCVer of
|
||||||
Just (GHCVersion v) -> pure $ Just v
|
Just (ToolVersion v) -> pure $ Just v
|
||||||
Just (ToolVersion v) -> pure $ Just (mkTVer v)
|
|
||||||
Nothing -> pure Nothing
|
Nothing -> pure Nothing
|
||||||
_ -> fail "Internal error"
|
_ -> fail "Internal error"
|
||||||
cabalVer <- case runCabalVer of
|
cabalVer <- case runCabalVer of
|
||||||
Just (GHCVersion v) -> pure $ Just (_tvVersion v)
|
|
||||||
Just (ToolVersion v) -> pure $ Just v
|
Just (ToolVersion v) -> pure $ Just v
|
||||||
Nothing -> pure Nothing
|
Nothing -> pure Nothing
|
||||||
_ -> fail "Internal error"
|
_ -> fail "Internal error"
|
||||||
hlsVer <- case runHLSVer of
|
hlsVer <- case runHLSVer of
|
||||||
Just (GHCVersion v) -> pure $ Just (_tvVersion v)
|
|
||||||
Just (ToolVersion v) -> pure $ Just v
|
Just (ToolVersion v) -> pure $ Just v
|
||||||
Nothing -> pure Nothing
|
Nothing -> pure Nothing
|
||||||
_ -> fail "Internal error"
|
_ -> fail "Internal error"
|
||||||
stackVer <- case runStackVer of
|
stackVer <- case runStackVer of
|
||||||
Just (GHCVersion v) -> pure $ Just (_tvVersion v)
|
|
||||||
Just (ToolVersion v) -> pure $ Just v
|
Just (ToolVersion v) -> pure $ Just v
|
||||||
Nothing -> pure Nothing
|
Nothing -> pure Nothing
|
||||||
_ -> fail "Internal error"
|
_ -> fail "Internal error"
|
||||||
@ -336,13 +328,11 @@ run RunOptions{..} runAppState leanAppstate runLogger = do
|
|||||||
, MonadThrow m
|
, MonadThrow m
|
||||||
, MonadIO m
|
, MonadIO m
|
||||||
, MonadCatch m
|
, MonadCatch m
|
||||||
, Alternative m
|
|
||||||
)
|
)
|
||||||
=> Toolchain
|
=> Toolchain
|
||||||
-> FilePath
|
-> FilePath
|
||||||
-> Excepts
|
-> Excepts
|
||||||
'[ TagNotFound
|
'[ TagNotFound
|
||||||
, DayNotFound
|
|
||||||
, NextVerNotFound
|
, NextVerNotFound
|
||||||
, NoToolVersionSet
|
, NoToolVersionSet
|
||||||
, UnknownArchive
|
, UnknownArchive
|
||||||
@ -354,7 +344,6 @@ run RunOptions{..} runAppState leanAppstate runLogger = do
|
|||||||
, DownloadFailed
|
, DownloadFailed
|
||||||
, DirNotEmpty
|
, DirNotEmpty
|
||||||
, DigestError
|
, DigestError
|
||||||
, ContentLengthError
|
|
||||||
, BuildFailed
|
, BuildFailed
|
||||||
, ArchiveResult
|
, ArchiveResult
|
||||||
, AlreadyInstalled
|
, AlreadyInstalled
|
||||||
@ -362,50 +351,37 @@ run RunOptions{..} runAppState leanAppstate runLogger = do
|
|||||||
, CopyError
|
, CopyError
|
||||||
, UninstallFailed
|
, UninstallFailed
|
||||||
, MergeFileTreeError
|
, MergeFileTreeError
|
||||||
, NoCompatiblePlatform
|
|
||||||
, GHCup.Errors.ParseError
|
|
||||||
, UnsupportedSetupCombo
|
|
||||||
, DistroNotFound
|
|
||||||
, NoCompatibleArch
|
|
||||||
] (ResourceT (ReaderT AppState m)) ()
|
] (ResourceT (ReaderT AppState m)) ()
|
||||||
installToolChainFull Toolchain{..} tmp = do
|
installToolChainFull Toolchain{..} tmp = do
|
||||||
case ghcVer of
|
forM_ [(GHC,) <$> ghcVer, (Cabal,) <$> cabalVer, (HLS,) <$> hlsVer, (Stack,) <$> stackVer] $ \mt -> do
|
||||||
Just v -> do
|
isInstalled <- maybe (pure False) (\(tool, v) -> lift $ checkIfToolInstalled' tool v) mt
|
||||||
isInstalled <- lift $ checkIfToolInstalled' GHC v
|
case mt of
|
||||||
unless isInstalled $ when (runInstTool' && isNothing (_tvTarget v)) $ void $ liftE $ installGHCBin
|
Just (GHC, v) -> do
|
||||||
v
|
unless isInstalled $ when (runInstTool' && isNothing (_tvTarget v)) $ void $ liftE $ installGHCBin
|
||||||
GHCupInternal
|
(_tvVersion v)
|
||||||
False
|
GHCupInternal
|
||||||
[]
|
False
|
||||||
setGHC' v tmp
|
[]
|
||||||
_ -> pure ()
|
setTool GHC v tmp
|
||||||
case cabalVer of
|
Just (Cabal, v) -> do
|
||||||
Just v -> do
|
unless isInstalled $ when runInstTool' $ void $ liftE $ installCabalBin
|
||||||
isInstalled <- lift $ checkIfToolInstalled' Cabal (mkTVer v)
|
(_tvVersion v)
|
||||||
unless isInstalled $ when runInstTool' $ void $ liftE $ installCabalBin
|
GHCupInternal
|
||||||
v
|
False
|
||||||
GHCupInternal
|
setTool Cabal v tmp
|
||||||
False
|
Just (Stack, v) -> do
|
||||||
setCabal' v tmp
|
unless isInstalled $ when runInstTool' $ void $ liftE $ installStackBin
|
||||||
_ -> pure ()
|
(_tvVersion v)
|
||||||
case stackVer of
|
GHCupInternal
|
||||||
Just v -> do
|
False
|
||||||
isInstalled <- lift $ checkIfToolInstalled' Stack (mkTVer v)
|
setTool Stack v tmp
|
||||||
unless isInstalled $ when runInstTool' $ void $ liftE $ installStackBin
|
Just (HLS, v) -> do
|
||||||
v
|
unless isInstalled $ when runInstTool' $ void $ liftE $ installHLSBin
|
||||||
GHCupInternal
|
(_tvVersion v)
|
||||||
False
|
GHCupInternal
|
||||||
setStack' v tmp
|
False
|
||||||
_ -> pure ()
|
setTool HLS v tmp
|
||||||
case hlsVer of
|
_ -> pure ()
|
||||||
Just v -> do
|
|
||||||
isInstalled <- lift $ checkIfToolInstalled' HLS (mkTVer v)
|
|
||||||
unless isInstalled $ when runInstTool' $ void $ liftE $ installHLSBin
|
|
||||||
v
|
|
||||||
GHCupInternal
|
|
||||||
False
|
|
||||||
setHLS' v tmp
|
|
||||||
_ -> pure ()
|
|
||||||
|
|
||||||
installToolChain :: ( MonadFail m
|
installToolChain :: ( MonadFail m
|
||||||
, MonadThrow m
|
, MonadThrow m
|
||||||
@ -416,79 +392,67 @@ run RunOptions{..} runAppState leanAppstate runLogger = do
|
|||||||
-> FilePath
|
-> FilePath
|
||||||
-> Excepts '[NotInstalled] (ReaderT LeanAppState m) ()
|
-> Excepts '[NotInstalled] (ReaderT LeanAppState m) ()
|
||||||
installToolChain Toolchain{..} tmp = do
|
installToolChain Toolchain{..} tmp = do
|
||||||
case ghcVer of
|
forM_ [(GHC,) <$> ghcVer, (Cabal,) <$> cabalVer, (HLS,) <$> hlsVer, (Stack,) <$> stackVer] $ \mt -> do
|
||||||
Just v -> setGHC' v tmp
|
case mt of
|
||||||
_ -> pure ()
|
Just (GHC, v) -> setTool GHC v tmp
|
||||||
case cabalVer of
|
Just (Cabal, v) -> setTool Cabal v tmp
|
||||||
Just v -> setCabal' v tmp
|
Just (Stack, v) -> setTool Stack v tmp
|
||||||
_ -> pure ()
|
Just (HLS, v) -> setTool HLS v tmp
|
||||||
case stackVer of
|
_ -> pure ()
|
||||||
Just v -> setStack' v tmp
|
|
||||||
_ -> pure ()
|
|
||||||
case hlsVer of
|
|
||||||
Just v -> setHLS' v tmp
|
|
||||||
_ -> pure ()
|
|
||||||
|
|
||||||
setGHC' v tmp = do
|
setTool tool v tmp =
|
||||||
|
case tool of
|
||||||
|
GHC -> do
|
||||||
void $ liftE $ setGHC v SetGHC_XYZ (Just tmp)
|
void $ liftE $ setGHC v SetGHC_XYZ (Just tmp)
|
||||||
void $ liftE $ setGHC v SetGHCOnly (Just tmp)
|
void $ liftE $ setGHC v SetGHCOnly (Just tmp)
|
||||||
setCabal' v tmp = do
|
Cabal -> do
|
||||||
bin <- liftE $ whereIsTool Cabal (mkTVer v)
|
bin <- liftE $ whereIsTool Cabal v
|
||||||
cbin <- liftIO $ canonicalizePath bin
|
cbin <- liftIO $ canonicalizePath bin
|
||||||
lift $ createLink (relativeSymlink tmp cbin) (tmp </> ("cabal" <.> exeExt))
|
lift $ createLink (relativeSymlink tmp cbin) (tmp </> ("cabal" <.> exeExt))
|
||||||
setStack' v tmp = do
|
Stack -> do
|
||||||
bin <- liftE $ whereIsTool Stack (mkTVer v)
|
bin <- liftE $ whereIsTool Stack v
|
||||||
cbin <- liftIO $ canonicalizePath bin
|
cbin <- liftIO $ canonicalizePath bin
|
||||||
lift $ createLink (relativeSymlink tmp cbin) (tmp </> ("stack" <.> exeExt))
|
lift $ createLink (relativeSymlink tmp cbin) (tmp </> ("stack" <.> exeExt))
|
||||||
setHLS' v tmp = do
|
HLS -> do
|
||||||
Dirs {..} <- getDirs
|
Dirs {..} <- getDirs
|
||||||
legacy <- isLegacyHLS v
|
let v' = _tvVersion v
|
||||||
|
legacy <- isLegacyHLS v'
|
||||||
if legacy
|
if legacy
|
||||||
then do
|
then do
|
||||||
-- TODO: factor this out
|
-- TODO: factor this out
|
||||||
hlsWrapper <- liftE @_ @'[NotInstalled] $ hlsWrapperBinary v !? (NotInstalled HLS (mkTVer v))
|
hlsWrapper <- liftE @_ @'[NotInstalled] $ hlsWrapperBinary v' !? (NotInstalled HLS (mkTVer v'))
|
||||||
cw <- liftIO $ canonicalizePath (binDir </> hlsWrapper)
|
cw <- liftIO $ canonicalizePath (binDir </> hlsWrapper)
|
||||||
lift $ createLink (relativeSymlink tmp cw) (tmp </> takeFileName cw)
|
lift $ createLink (relativeSymlink tmp cw) (tmp </> takeFileName cw)
|
||||||
hlsBins <- hlsServerBinaries v Nothing >>= liftIO . traverse (canonicalizePath . (binDir </>))
|
hlsBins <- hlsServerBinaries v' Nothing >>= liftIO . traverse (canonicalizePath . (binDir </>))
|
||||||
forM_ hlsBins $ \bin ->
|
forM_ hlsBins $ \bin ->
|
||||||
lift $ createLink (relativeSymlink tmp bin) (tmp </> takeFileName bin)
|
lift $ createLink (relativeSymlink tmp bin) (tmp </> takeFileName bin)
|
||||||
liftE $ setHLS v SetHLSOnly (Just tmp)
|
liftE $ setHLS (_tvVersion v) SetHLSOnly (Just tmp)
|
||||||
else do
|
else do
|
||||||
liftE $ setHLS v SetHLS_XYZ (Just tmp)
|
liftE $ setHLS (_tvVersion v) SetHLS_XYZ (Just tmp)
|
||||||
liftE $ setHLS v SetHLSOnly (Just tmp)
|
liftE $ setHLS (_tvVersion v) SetHLSOnly (Just tmp)
|
||||||
|
GHCup -> pure ()
|
||||||
|
|
||||||
createTmpDir :: ( MonadUnliftIO m
|
addToPath path = do
|
||||||
, MonadCatch m
|
cEnv <- Map.fromList <$> getEnvironment
|
||||||
, MonadThrow m
|
let paths = ["PATH", "Path"]
|
||||||
, MonadMask m
|
curPaths = (\x -> maybe [] splitSearchPath (Map.lookup x cEnv)) =<< paths
|
||||||
, MonadIO m
|
newPath = intercalate [searchPathSeparator] (if runAppendPATH then (curPaths ++ [path]) else (path : curPaths))
|
||||||
)
|
envWithoutPath = foldr (\x y -> Map.delete x y) cEnv paths
|
||||||
=> Toolchain
|
pathVar = if isWindows then "Path" else "PATH"
|
||||||
-> ReaderT LeanAppState m FilePath
|
envWithNewPath = Map.toList $ Map.insert pathVar newPath envWithoutPath
|
||||||
createTmpDir toolchain =
|
liftIO $ setEnv pathVar newPath
|
||||||
case runBinDir of
|
return envWithNewPath
|
||||||
Just bindir -> do
|
|
||||||
liftIO $ createDirRecursive' bindir
|
|
||||||
liftIO $ canonicalizePath bindir
|
|
||||||
Nothing -> do
|
|
||||||
d <- predictableTmpDir toolchain
|
|
||||||
liftIO $ createDirRecursive' d
|
|
||||||
liftIO $ canonicalizePath d
|
|
||||||
|
|
||||||
predictableTmpDir :: Monad m
|
predictableTmpDir (Toolchain Nothing Nothing Nothing Nothing) =
|
||||||
=> Toolchain
|
liftIO (getTemporaryDirectory >>= \tmp -> pure (tmp </> "ghcup-none"))
|
||||||
-> ReaderT LeanAppState m FilePath
|
|
||||||
predictableTmpDir (Toolchain Nothing Nothing Nothing Nothing) = do
|
|
||||||
Dirs { tmpDir } <- getDirs
|
|
||||||
pure (fromGHCupPath tmpDir </> "ghcup-none")
|
|
||||||
predictableTmpDir Toolchain{..} = do
|
predictableTmpDir Toolchain{..} = do
|
||||||
Dirs { tmpDir } <- getDirs
|
tmp <- getTemporaryDirectory
|
||||||
pure $ fromGHCupPath tmpDir
|
pure $ tmp
|
||||||
</> ("ghcup-" <> intercalate "_"
|
</> ("ghcup-" <> intercalate "_"
|
||||||
( maybe [] ( (:[]) . ("ghc-" <>) . T.unpack . tVerToText) ghcVer
|
( maybe [] ( (:[]) . ("ghc-" <>) . T.unpack . tVerToText) ghcVer
|
||||||
<> maybe [] ( (:[]) . ("cabal-" <>) . T.unpack . prettyVer) cabalVer
|
<> maybe [] ( (:[]) . ("cabal-" <>) . T.unpack . tVerToText) cabalVer
|
||||||
<> maybe [] ( (:[]) . ("hls-" <>) . T.unpack . prettyVer) hlsVer
|
<> maybe [] ( (:[]) . ("hls-" <>) . T.unpack . tVerToText) hlsVer
|
||||||
<> maybe [] ( (:[]) . ("stack-" <>) . T.unpack . prettyVer) stackVer
|
<> maybe [] ( (:[]) . ("stack-" <>) . T.unpack . tVerToText) stackVer
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -502,7 +466,7 @@ run RunOptions{..} runAppState leanAppstate runLogger = do
|
|||||||
|
|
||||||
data Toolchain = Toolchain
|
data Toolchain = Toolchain
|
||||||
{ ghcVer :: Maybe GHCTargetVersion
|
{ ghcVer :: Maybe GHCTargetVersion
|
||||||
, cabalVer :: Maybe Version
|
, cabalVer :: Maybe GHCTargetVersion
|
||||||
, hlsVer :: Maybe Version
|
, hlsVer :: Maybe GHCTargetVersion
|
||||||
, stackVer :: Maybe Version
|
, stackVer :: Maybe GHCTargetVersion
|
||||||
} deriving Show
|
}
|
@ -28,13 +28,14 @@ import Control.Monad.Trans.Resource
|
|||||||
import Data.Either
|
import Data.Either
|
||||||
import Data.Functor
|
import Data.Functor
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import Data.Versions
|
import Data.Versions hiding ( str )
|
||||||
import GHC.Unicode
|
import GHC.Unicode
|
||||||
import Haskus.Utils.Variant.Excepts
|
import Haskus.Utils.Variant.Excepts
|
||||||
import Options.Applicative hiding ( style )
|
import Options.Applicative hiding ( style )
|
||||||
import Options.Applicative.Help.Pretty ( text )
|
import Options.Applicative.Help.Pretty ( text )
|
||||||
import Prelude hiding ( appendFile )
|
import Prelude hiding ( appendFile )
|
||||||
import System.Exit
|
import System.Exit
|
||||||
|
import Text.PrettyPrint.HughesPJClass ( prettyShow )
|
||||||
|
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import Data.Bifunctor (second)
|
import Data.Bifunctor (second)
|
||||||
@ -53,7 +54,6 @@ data SetCommand = SetGHC SetOptions
|
|||||||
| SetCabal SetOptions
|
| SetCabal SetOptions
|
||||||
| SetHLS SetOptions
|
| SetHLS SetOptions
|
||||||
| SetStack SetOptions
|
| SetStack SetOptions
|
||||||
deriving (Eq, Show)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -65,7 +65,7 @@ data SetCommand = SetGHC SetOptions
|
|||||||
|
|
||||||
data SetOptions = SetOptions
|
data SetOptions = SetOptions
|
||||||
{ sToolVer :: SetToolVersion
|
{ sToolVer :: SetToolVersion
|
||||||
} deriving (Eq, Show)
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -82,7 +82,7 @@ setParser =
|
|||||||
"ghc"
|
"ghc"
|
||||||
( SetGHC
|
( SetGHC
|
||||||
<$> info
|
<$> info
|
||||||
(setOpts GHC <**> helper)
|
(setOpts (Just GHC) <**> helper)
|
||||||
( progDesc "Set GHC version"
|
( progDesc "Set GHC version"
|
||||||
<> footerDoc (Just $ text setGHCFooter)
|
<> footerDoc (Just $ text setGHCFooter)
|
||||||
)
|
)
|
||||||
@ -91,7 +91,7 @@ setParser =
|
|||||||
"cabal"
|
"cabal"
|
||||||
( SetCabal
|
( SetCabal
|
||||||
<$> info
|
<$> info
|
||||||
(setOpts Cabal <**> helper)
|
(setOpts (Just Cabal) <**> helper)
|
||||||
( progDesc "Set Cabal version"
|
( progDesc "Set Cabal version"
|
||||||
<> footerDoc (Just $ text setCabalFooter)
|
<> footerDoc (Just $ text setCabalFooter)
|
||||||
)
|
)
|
||||||
@ -100,7 +100,7 @@ setParser =
|
|||||||
"hls"
|
"hls"
|
||||||
( SetHLS
|
( SetHLS
|
||||||
<$> info
|
<$> info
|
||||||
(setOpts HLS <**> helper)
|
(setOpts (Just HLS) <**> helper)
|
||||||
( progDesc "Set haskell-language-server version"
|
( progDesc "Set haskell-language-server version"
|
||||||
<> footerDoc (Just $ text setHLSFooter)
|
<> footerDoc (Just $ text setHLSFooter)
|
||||||
)
|
)
|
||||||
@ -109,14 +109,14 @@ setParser =
|
|||||||
"stack"
|
"stack"
|
||||||
( SetStack
|
( SetStack
|
||||||
<$> info
|
<$> info
|
||||||
(setOpts Stack <**> helper)
|
(setOpts (Just Stack) <**> helper)
|
||||||
( progDesc "Set stack version"
|
( progDesc "Set stack version"
|
||||||
<> footerDoc (Just $ text setStackFooter)
|
<> footerDoc (Just $ text setStackFooter)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
<|> (Right <$> setOpts GHC)
|
<|> (Right <$> setOpts Nothing)
|
||||||
where
|
where
|
||||||
setGHCFooter :: String
|
setGHCFooter :: String
|
||||||
setGHCFooter = [s|Discussion:
|
setGHCFooter = [s|Discussion:
|
||||||
@ -137,25 +137,22 @@ setParser =
|
|||||||
Sets the the current haskell-language-server version.|]
|
Sets the the current haskell-language-server version.|]
|
||||||
|
|
||||||
|
|
||||||
setOpts :: Tool -> Parser SetOptions
|
setOpts :: Maybe Tool -> Parser SetOptions
|
||||||
setOpts tool = SetOptions <$>
|
setOpts tool = SetOptions <$>
|
||||||
(fromMaybe SetRecommended <$>
|
(fromMaybe SetRecommended <$>
|
||||||
optional (setVersionArgument [ListInstalled True] tool))
|
optional (setVersionArgument (Just ListInstalled) tool))
|
||||||
|
|
||||||
setVersionArgument :: [ListCriteria] -> Tool -> Parser SetToolVersion
|
setVersionArgument :: Maybe ListCriteria -> Maybe Tool -> Parser SetToolVersion
|
||||||
setVersionArgument criteria tool =
|
setVersionArgument criteria tool =
|
||||||
argument (eitherReader setEither)
|
argument (eitherReader setEither)
|
||||||
(metavar "VERSION|TAG|next"
|
(metavar "VERSION|TAG|next"
|
||||||
<> completer (tagCompleter tool ["next"])
|
<> completer (tagCompleter (fromMaybe GHC tool) ["next"])
|
||||||
<> (completer . versionCompleter criteria) tool)
|
<> foldMap (completer . versionCompleter criteria) tool)
|
||||||
where
|
where
|
||||||
setEither s' =
|
setEither s' =
|
||||||
parseSet s'
|
parseSet s'
|
||||||
<|> second SetToolTag (tagEither s')
|
<|> second SetToolTag (tagEither s')
|
||||||
<|> se s'
|
<|> second SetToolVersion (tVersionEither s')
|
||||||
se s' = case tool of
|
|
||||||
GHC -> second SetGHCVersion (ghcVersionEither s')
|
|
||||||
_ -> second SetToolVersion (toolVersionEither s')
|
|
||||||
parseSet s' = case fmap toLower s' of
|
parseSet s' = case fmap toLower s' of
|
||||||
"next" -> Right SetNext
|
"next" -> Right SetNext
|
||||||
other -> Left $ "Unknown tag/version " <> other
|
other -> Left $ "Unknown tag/version " <> other
|
||||||
@ -185,7 +182,6 @@ setFooter = [s|Discussion:
|
|||||||
type SetGHCEffects = '[ FileDoesNotExistError
|
type SetGHCEffects = '[ FileDoesNotExistError
|
||||||
, NotInstalled
|
, NotInstalled
|
||||||
, TagNotFound
|
, TagNotFound
|
||||||
, DayNotFound
|
|
||||||
, NextVerNotFound
|
, NextVerNotFound
|
||||||
, NoToolVersionSet]
|
, NoToolVersionSet]
|
||||||
|
|
||||||
@ -200,7 +196,6 @@ runSetGHC runAppState =
|
|||||||
|
|
||||||
type SetCabalEffects = '[ NotInstalled
|
type SetCabalEffects = '[ NotInstalled
|
||||||
, TagNotFound
|
, TagNotFound
|
||||||
, DayNotFound
|
|
||||||
, NextVerNotFound
|
, NextVerNotFound
|
||||||
, NoToolVersionSet]
|
, NoToolVersionSet]
|
||||||
|
|
||||||
@ -215,7 +210,6 @@ runSetCabal runAppState =
|
|||||||
|
|
||||||
type SetHLSEffects = '[ NotInstalled
|
type SetHLSEffects = '[ NotInstalled
|
||||||
, TagNotFound
|
, TagNotFound
|
||||||
, DayNotFound
|
|
||||||
, NextVerNotFound
|
, NextVerNotFound
|
||||||
, NoToolVersionSet]
|
, NoToolVersionSet]
|
||||||
|
|
||||||
@ -230,7 +224,6 @@ runSetHLS runAppState =
|
|||||||
|
|
||||||
type SetStackEffects = '[ NotInstalled
|
type SetStackEffects = '[ NotInstalled
|
||||||
, TagNotFound
|
, TagNotFound
|
||||||
, DayNotFound
|
|
||||||
, NextVerNotFound
|
, NextVerNotFound
|
||||||
, NoToolVersionSet]
|
, NoToolVersionSet]
|
||||||
|
|
||||||
@ -264,19 +257,22 @@ set :: forall m env.
|
|||||||
-> m (VEither eff GHCTargetVersion))
|
-> m (VEither eff GHCTargetVersion))
|
||||||
-> (ReaderT LeanAppState m () -> m ())
|
-> (ReaderT LeanAppState m () -> m ())
|
||||||
-> m ExitCode
|
-> m ExitCode
|
||||||
set setCommand runAppState _ runLogger = case setCommand of
|
set setCommand runAppState runLeanAppState runLogger = case setCommand of
|
||||||
(Right sopts) -> do
|
(Right sopts) -> do
|
||||||
runLogger (logWarn "This is an old-style command for setting GHC. Use 'ghcup set ghc' instead.")
|
runLogger (logWarn "This is an old-style command for setting GHC. Use 'ghcup set ghc' instead.")
|
||||||
setGHC' sopts
|
setGHC' sopts
|
||||||
(Left (SetGHC sopts)) -> setGHC' sopts
|
(Left (SetGHC sopts)) -> setGHC' sopts
|
||||||
(Left (SetCabal sopts)) -> setCabal' sopts
|
(Left (SetCabal sopts)) -> setCabal' sopts
|
||||||
(Left (SetHLS sopts)) -> setHLS' sopts
|
(Left (SetHLS sopts)) -> setHLS' sopts
|
||||||
(Left (SetStack sopts)) -> setStack' sopts
|
(Left (SetStack sopts)) -> setStack' sopts
|
||||||
|
|
||||||
where
|
where
|
||||||
setGHC' :: SetOptions
|
setGHC' :: SetOptions
|
||||||
-> m ExitCode
|
-> m ExitCode
|
||||||
setGHC' SetOptions{ sToolVer } = runSetGHC runAppState (do
|
setGHC' SetOptions{ sToolVer } =
|
||||||
|
case sToolVer of
|
||||||
|
(SetToolVersion v) -> runSetGHC runLeanAppState (liftE $ setGHC v SetGHCOnly Nothing >> pure v)
|
||||||
|
_ -> runSetGHC runAppState (do
|
||||||
v <- liftE $ fst <$> fromVersion' sToolVer GHC
|
v <- liftE $ fst <$> fromVersion' sToolVer GHC
|
||||||
liftE $ setGHC v SetGHCOnly Nothing
|
liftE $ setGHC v SetGHCOnly Nothing
|
||||||
)
|
)
|
||||||
@ -287,58 +283,67 @@ set setCommand runAppState _ runLogger = case setCommand of
|
|||||||
"GHC " <> prettyVer _tvVersion <> " successfully set as default version" <> maybe "" (" for cross target " <>) _tvTarget
|
"GHC " <> prettyVer _tvVersion <> " successfully set as default version" <> maybe "" (" for cross target " <>) _tvTarget
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger $ logError $ T.pack $ prettyHFError e
|
runLogger $ logError $ T.pack $ prettyShow e
|
||||||
pure $ ExitFailure 5
|
pure $ ExitFailure 5
|
||||||
|
|
||||||
|
|
||||||
setCabal' :: SetOptions
|
setCabal' :: SetOptions
|
||||||
-> m ExitCode
|
-> m ExitCode
|
||||||
setCabal' SetOptions{ sToolVer } = runSetCabal runAppState (do
|
setCabal' SetOptions{ sToolVer } =
|
||||||
|
case sToolVer of
|
||||||
|
(SetToolVersion v) -> runSetCabal runLeanAppState (liftE $ setCabal (_tvVersion v) >> pure v)
|
||||||
|
_ -> runSetCabal runAppState (do
|
||||||
v <- liftE $ fst <$> fromVersion' sToolVer Cabal
|
v <- liftE $ fst <$> fromVersion' sToolVer Cabal
|
||||||
liftE $ setCabal (_tvVersion v)
|
liftE $ setCabal (_tvVersion v)
|
||||||
pure v
|
pure v
|
||||||
)
|
)
|
||||||
>>= \case
|
>>= \case
|
||||||
VRight v -> do
|
VRight GHCTargetVersion{..} -> do
|
||||||
runLogger
|
runLogger
|
||||||
$ logInfo $
|
$ logInfo $
|
||||||
"Cabal " <> prettyVer (_tvVersion v) <> " successfully set as default version"
|
"Cabal " <> prettyVer _tvVersion <> " successfully set as default version"
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger $ logError $ T.pack $ prettyHFError e
|
runLogger $ logError $ T.pack $ prettyShow e
|
||||||
pure $ ExitFailure 14
|
pure $ ExitFailure 14
|
||||||
|
|
||||||
setHLS' :: SetOptions
|
setHLS' :: SetOptions
|
||||||
-> m ExitCode
|
-> m ExitCode
|
||||||
setHLS' SetOptions{ sToolVer } = runSetHLS runAppState (do
|
setHLS' SetOptions{ sToolVer } =
|
||||||
|
case sToolVer of
|
||||||
|
(SetToolVersion v) -> runSetHLS runLeanAppState (liftE $ setHLS (_tvVersion v) SetHLSOnly Nothing >> pure v)
|
||||||
|
_ -> runSetHLS runAppState (do
|
||||||
v <- liftE $ fst <$> fromVersion' sToolVer HLS
|
v <- liftE $ fst <$> fromVersion' sToolVer HLS
|
||||||
liftE $ setHLS (_tvVersion v) SetHLSOnly Nothing
|
liftE $ setHLS (_tvVersion v) SetHLSOnly Nothing
|
||||||
pure v
|
pure v
|
||||||
)
|
)
|
||||||
>>= \case
|
>>= \case
|
||||||
VRight v -> do
|
VRight GHCTargetVersion{..} -> do
|
||||||
runLogger
|
runLogger
|
||||||
$ logInfo $
|
$ logInfo $
|
||||||
"HLS " <> prettyVer (_tvVersion v) <> " successfully set as default version"
|
"HLS " <> prettyVer _tvVersion <> " successfully set as default version"
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger $ logError $ T.pack $ prettyHFError e
|
runLogger $ logError $ T.pack $ prettyShow e
|
||||||
pure $ ExitFailure 14
|
pure $ ExitFailure 14
|
||||||
|
|
||||||
|
|
||||||
setStack' :: SetOptions
|
setStack' :: SetOptions
|
||||||
-> m ExitCode
|
-> m ExitCode
|
||||||
setStack' SetOptions{ sToolVer } = runSetStack runAppState (do
|
setStack' SetOptions{ sToolVer } =
|
||||||
|
case sToolVer of
|
||||||
|
(SetToolVersion v) -> runSetStack runLeanAppState (liftE $ setStack (_tvVersion v) >> pure v)
|
||||||
|
_ -> runSetStack runAppState (do
|
||||||
v <- liftE $ fst <$> fromVersion' sToolVer Stack
|
v <- liftE $ fst <$> fromVersion' sToolVer Stack
|
||||||
liftE $ setStack (_tvVersion v)
|
liftE $ setStack (_tvVersion v)
|
||||||
pure v
|
pure v
|
||||||
)
|
)
|
||||||
>>= \case
|
>>= \case
|
||||||
VRight v -> do
|
VRight GHCTargetVersion{..} -> do
|
||||||
runLogger
|
runLogger
|
||||||
$ logInfo $
|
$ logInfo $
|
||||||
"Stack " <> prettyVer (_tvVersion v) <> " successfully set as default version"
|
"Stack " <> prettyVer _tvVersion <> " successfully set as default version"
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger $ logError $ T.pack $ prettyHFError e
|
runLogger $ logError $ T.pack $ prettyShow e
|
||||||
pure $ ExitFailure 14
|
pure $ ExitFailure 14
|
@ -23,6 +23,7 @@ import Haskus.Utils.Variant.Excepts
|
|||||||
import Options.Applicative hiding ( style )
|
import Options.Applicative hiding ( style )
|
||||||
import Prelude hiding ( appendFile )
|
import Prelude hiding ( appendFile )
|
||||||
import System.Exit
|
import System.Exit
|
||||||
|
import Text.PrettyPrint.HughesPJClass ( prettyShow )
|
||||||
|
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import qualified Data.Text.IO as T
|
import qualified Data.Text.IO as T
|
||||||
@ -117,5 +118,5 @@ toolRequirements ToolReqOpts{..} runAppState runLogger = runToolRequirements run
|
|||||||
>>= \case
|
>>= \case
|
||||||
VRight _ -> pure ExitSuccess
|
VRight _ -> pure ExitSuccess
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger $ logError $ T.pack $ prettyHFError e
|
runLogger $ logError $ T.pack $ prettyShow e
|
||||||
pure $ ExitFailure 12
|
pure $ ExitFailure 12
|
@ -31,6 +31,7 @@ import Options.Applicative hiding ( style )
|
|||||||
import Options.Applicative.Help.Pretty ( text )
|
import Options.Applicative.Help.Pretty ( text )
|
||||||
import Prelude hiding ( appendFile )
|
import Prelude hiding ( appendFile )
|
||||||
import System.Exit
|
import System.Exit
|
||||||
|
import Text.PrettyPrint.HughesPJClass ( prettyShow )
|
||||||
|
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import Control.Exception.Safe (MonadMask)
|
import Control.Exception.Safe (MonadMask)
|
||||||
@ -48,7 +49,6 @@ data UnsetCommand = UnsetGHC UnsetOptions
|
|||||||
| UnsetCabal UnsetOptions
|
| UnsetCabal UnsetOptions
|
||||||
| UnsetHLS UnsetOptions
|
| UnsetHLS UnsetOptions
|
||||||
| UnsetStack UnsetOptions
|
| UnsetStack UnsetOptions
|
||||||
deriving (Eq, Show)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -60,7 +60,7 @@ data UnsetCommand = UnsetGHC UnsetOptions
|
|||||||
|
|
||||||
data UnsetOptions = UnsetOptions
|
data UnsetOptions = UnsetOptions
|
||||||
{ sToolVer :: Maybe T.Text -- target platform triple
|
{ sToolVer :: Maybe T.Text -- target platform triple
|
||||||
} deriving (Eq, Show)
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -114,14 +114,7 @@ unsetParser =
|
|||||||
unsetGHCFooter :: String
|
unsetGHCFooter :: String
|
||||||
unsetGHCFooter = [s|Discussion:
|
unsetGHCFooter = [s|Discussion:
|
||||||
Unsets the the current GHC version. That means there won't
|
Unsets the the current GHC version. That means there won't
|
||||||
be a ~/.ghcup/bin/ghc anymore.
|
be a ~/.ghcup/bin/ghc anymore.|]
|
||||||
|
|
||||||
Examples:
|
|
||||||
# unset ghc
|
|
||||||
ghcup unset ghc
|
|
||||||
|
|
||||||
# unset ghc for the target version
|
|
||||||
ghcup unset ghc armv7-unknown-linux-gnueabihf|]
|
|
||||||
|
|
||||||
unsetCabalFooter :: String
|
unsetCabalFooter :: String
|
||||||
unsetCabalFooter = [s|Discussion:
|
unsetCabalFooter = [s|Discussion:
|
||||||
@ -196,7 +189,7 @@ unset unsetCommand runLeanAppState runLogger = case unsetCommand of
|
|||||||
runLogger $ logInfo "GHC successfully unset"
|
runLogger $ logInfo "GHC successfully unset"
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger $ logError $ T.pack $ prettyHFError e
|
runLogger $ logError $ T.pack $ prettyShow e
|
||||||
pure $ ExitFailure 14
|
pure $ ExitFailure 14
|
||||||
(UnsetCabal (UnsetOptions _)) -> do
|
(UnsetCabal (UnsetOptions _)) -> do
|
||||||
void $ runLeanAppState (VRight <$> unsetCabal)
|
void $ runLeanAppState (VRight <$> unsetCabal)
|
@ -17,7 +17,6 @@ import GHCup.Types
|
|||||||
import GHCup.Prelude.File
|
import GHCup.Prelude.File
|
||||||
import GHCup.Prelude.Logger
|
import GHCup.Prelude.Logger
|
||||||
|
|
||||||
import Control.Concurrent (threadDelay)
|
|
||||||
#if !MIN_VERSION_base(4,13,0)
|
#if !MIN_VERSION_base(4,13,0)
|
||||||
import Control.Monad.Fail ( MonadFail )
|
import Control.Monad.Fail ( MonadFail )
|
||||||
#endif
|
#endif
|
||||||
@ -29,6 +28,7 @@ import Haskus.Utils.Variant.Excepts
|
|||||||
import Options.Applicative hiding ( style )
|
import Options.Applicative hiding ( style )
|
||||||
import Prelude hiding ( appendFile )
|
import Prelude hiding ( appendFile )
|
||||||
import System.Exit
|
import System.Exit
|
||||||
|
import Text.PrettyPrint.HughesPJClass ( prettyShow )
|
||||||
|
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import Control.Exception.Safe (MonadMask)
|
import Control.Exception.Safe (MonadMask)
|
||||||
@ -36,7 +36,7 @@ import System.Environment
|
|||||||
import GHCup.Utils
|
import GHCup.Utils
|
||||||
import System.FilePath
|
import System.FilePath
|
||||||
import GHCup.Types.Optics
|
import GHCup.Types.Optics
|
||||||
import Data.Versions
|
import Data.Versions hiding (str)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ import Data.Versions
|
|||||||
data UpgradeOpts = UpgradeInplace
|
data UpgradeOpts = UpgradeInplace
|
||||||
| UpgradeAt FilePath
|
| UpgradeAt FilePath
|
||||||
| UpgradeGHCupDir
|
| UpgradeGHCupDir
|
||||||
deriving (Eq, Show)
|
deriving Show
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -88,7 +88,6 @@ upgradeOptsP =
|
|||||||
|
|
||||||
|
|
||||||
type UpgradeEffects = '[ DigestError
|
type UpgradeEffects = '[ DigestError
|
||||||
, ContentLengthError
|
|
||||||
, GPGError
|
, GPGError
|
||||||
, NoDownload
|
, NoDownload
|
||||||
, NoUpdate
|
, NoUpdate
|
||||||
@ -136,15 +135,8 @@ upgrade uOpts force' fatal Dirs{..} runAppState runLogger = do
|
|||||||
UpgradeGHCupDir -> pure (Just (binDir </> "ghcup" <> exeExt))
|
UpgradeGHCupDir -> pure (Just (binDir </> "ghcup" <> exeExt))
|
||||||
|
|
||||||
runUpgrade runAppState (do
|
runUpgrade runAppState (do
|
||||||
|
v' <- liftE $ upgradeGHCup target force' fatal
|
||||||
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
GHCupInfo { _ghcupDownloads = dls } <- lift getGHCupInfo
|
||||||
Just (tver, vi) <- pure $ getLatest dls GHCup
|
|
||||||
let latestVer = _tvVersion tver
|
|
||||||
forM_ (_viPreInstall vi) $ \msg -> do
|
|
||||||
lift $ logWarn msg
|
|
||||||
lift $ logWarn
|
|
||||||
"...waiting for 5 seconds, you can still abort..."
|
|
||||||
liftIO $ threadDelay 5000000 -- give the user a sec to intervene
|
|
||||||
v' <- liftE $ upgradeGHCup' target force' fatal latestVer
|
|
||||||
pure (v', dls)
|
pure (v', dls)
|
||||||
) >>= \case
|
) >>= \case
|
||||||
VRight (v', dls) -> do
|
VRight (v', dls) -> do
|
||||||
@ -159,5 +151,5 @@ upgrade uOpts force' fatal Dirs{..} runAppState runLogger = do
|
|||||||
runLogger $ logWarn "No GHCup update available"
|
runLogger $ logWarn "No GHCup update available"
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger $ logError $ T.pack $ prettyHFError e
|
runLogger $ logError $ T.pack $ prettyShow e
|
||||||
pure $ ExitFailure 11
|
pure $ ExitFailure 11
|
@ -32,8 +32,8 @@ import Haskus.Utils.Variant.Excepts
|
|||||||
import Options.Applicative hiding ( style )
|
import Options.Applicative hiding ( style )
|
||||||
import Options.Applicative.Help.Pretty ( text )
|
import Options.Applicative.Help.Pretty ( text )
|
||||||
import Prelude hiding ( appendFile )
|
import Prelude hiding ( appendFile )
|
||||||
import System.Environment
|
|
||||||
import System.Exit
|
import System.Exit
|
||||||
|
import Text.PrettyPrint.HughesPJClass ( prettyShow )
|
||||||
|
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import Control.Exception.Safe (MonadMask)
|
import Control.Exception.Safe (MonadMask)
|
||||||
@ -54,7 +54,6 @@ data WhereisCommand = WhereisTool Tool (Maybe ToolVersion)
|
|||||||
| WhereisCacheDir
|
| WhereisCacheDir
|
||||||
| WhereisLogsDir
|
| WhereisLogsDir
|
||||||
| WhereisConfDir
|
| WhereisConfDir
|
||||||
deriving (Eq, Show)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -67,7 +66,7 @@ data WhereisCommand = WhereisTool Tool (Maybe ToolVersion)
|
|||||||
|
|
||||||
data WhereisOptions = WhereisOptions {
|
data WhereisOptions = WhereisOptions {
|
||||||
directory :: Bool
|
directory :: Bool
|
||||||
} deriving (Eq, Show)
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -83,7 +82,7 @@ whereisP = subparser
|
|||||||
command
|
command
|
||||||
"ghc"
|
"ghc"
|
||||||
(WhereisTool GHC <$> info
|
(WhereisTool GHC <$> info
|
||||||
( optional (toolVersionTagArgument [] (Just GHC)) <**> helper )
|
( optional (toolVersionArgument Nothing (Just GHC)) <**> helper )
|
||||||
( progDesc "Get GHC location"
|
( progDesc "Get GHC location"
|
||||||
<> footerDoc (Just $ text whereisGHCFooter ))
|
<> footerDoc (Just $ text whereisGHCFooter ))
|
||||||
)
|
)
|
||||||
@ -91,7 +90,7 @@ whereisP = subparser
|
|||||||
command
|
command
|
||||||
"cabal"
|
"cabal"
|
||||||
(WhereisTool Cabal <$> info
|
(WhereisTool Cabal <$> info
|
||||||
( optional (toolVersionTagArgument [] (Just Cabal)) <**> helper )
|
( optional (toolVersionArgument Nothing (Just Cabal)) <**> helper )
|
||||||
( progDesc "Get cabal location"
|
( progDesc "Get cabal location"
|
||||||
<> footerDoc (Just $ text whereisCabalFooter ))
|
<> footerDoc (Just $ text whereisCabalFooter ))
|
||||||
)
|
)
|
||||||
@ -99,7 +98,7 @@ whereisP = subparser
|
|||||||
command
|
command
|
||||||
"hls"
|
"hls"
|
||||||
(WhereisTool HLS <$> info
|
(WhereisTool HLS <$> info
|
||||||
( optional (toolVersionTagArgument [] (Just HLS)) <**> helper )
|
( optional (toolVersionArgument Nothing (Just HLS)) <**> helper )
|
||||||
( progDesc "Get HLS location"
|
( progDesc "Get HLS location"
|
||||||
<> footerDoc (Just $ text whereisHLSFooter ))
|
<> footerDoc (Just $ text whereisHLSFooter ))
|
||||||
)
|
)
|
||||||
@ -107,7 +106,7 @@ whereisP = subparser
|
|||||||
command
|
command
|
||||||
"stack"
|
"stack"
|
||||||
(WhereisTool Stack <$> info
|
(WhereisTool Stack <$> info
|
||||||
( optional (toolVersionTagArgument [] (Just Stack)) <**> helper )
|
( optional (toolVersionArgument Nothing (Just Stack)) <**> helper )
|
||||||
( progDesc "Get stack location"
|
( progDesc "Get stack location"
|
||||||
<> footerDoc (Just $ text whereisStackFooter ))
|
<> footerDoc (Just $ text whereisStackFooter ))
|
||||||
)
|
)
|
||||||
@ -223,7 +222,6 @@ type WhereisEffects = '[ NotInstalled
|
|||||||
, NoToolVersionSet
|
, NoToolVersionSet
|
||||||
, NextVerNotFound
|
, NextVerNotFound
|
||||||
, TagNotFound
|
, TagNotFound
|
||||||
, DayNotFound
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@ -270,14 +268,7 @@ whereis :: ( Monad m
|
|||||||
whereis whereisCommand whereisOptions runAppState leanAppstate runLogger = do
|
whereis whereisCommand whereisOptions runAppState leanAppstate runLogger = do
|
||||||
Dirs{ .. } <- runReaderT getDirs leanAppstate
|
Dirs{ .. } <- runReaderT getDirs leanAppstate
|
||||||
case (whereisCommand, whereisOptions) of
|
case (whereisCommand, whereisOptions) of
|
||||||
(WhereisTool GHCup _, WhereisOptions{..}) -> do
|
(WhereisTool tool (Just (ToolVersion v)), WhereisOptions{..}) ->
|
||||||
loc <- liftIO (getExecutablePath >>= canonicalizePath )
|
|
||||||
if directory
|
|
||||||
then liftIO $ putStr $ takeDirectory loc
|
|
||||||
else liftIO $ putStr loc
|
|
||||||
pure ExitSuccess
|
|
||||||
|
|
||||||
(WhereisTool tool (Just (GHCVersion v)), WhereisOptions{..}) ->
|
|
||||||
runLeanWhereIs leanAppstate (do
|
runLeanWhereIs leanAppstate (do
|
||||||
loc <- liftE $ whereIsTool tool v
|
loc <- liftE $ whereIsTool tool v
|
||||||
if directory
|
if directory
|
||||||
@ -289,21 +280,7 @@ whereis whereisCommand whereisOptions runAppState leanAppstate runLogger = do
|
|||||||
liftIO $ putStr r
|
liftIO $ putStr r
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger $ logError $ T.pack $ prettyHFError e
|
runLogger $ logError $ T.pack $ prettyShow e
|
||||||
pure $ ExitFailure 30
|
|
||||||
(WhereisTool tool (Just (ToolVersion v)), WhereisOptions{..}) ->
|
|
||||||
runLeanWhereIs leanAppstate (do
|
|
||||||
loc <- liftE $ whereIsTool tool (mkTVer v)
|
|
||||||
if directory
|
|
||||||
then pure $ takeDirectory loc
|
|
||||||
else pure loc
|
|
||||||
)
|
|
||||||
>>= \case
|
|
||||||
VRight r -> do
|
|
||||||
liftIO $ putStr r
|
|
||||||
pure ExitSuccess
|
|
||||||
VLeft e -> do
|
|
||||||
runLogger $ logError $ T.pack $ prettyHFError e
|
|
||||||
pure $ ExitFailure 30
|
pure $ ExitFailure 30
|
||||||
|
|
||||||
(WhereisTool tool whereVer, WhereisOptions{..}) -> do
|
(WhereisTool tool whereVer, WhereisOptions{..}) -> do
|
||||||
@ -319,7 +296,7 @@ whereis whereisCommand whereisOptions runAppState leanAppstate runLogger = do
|
|||||||
liftIO $ putStr r
|
liftIO $ putStr r
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger $ logError $ T.pack $ prettyHFError e
|
runLogger $ logError $ T.pack $ prettyShow e
|
||||||
pure $ ExitFailure 30
|
pure $ ExitFailure 30
|
||||||
|
|
||||||
(WhereisBaseDir, _) -> do
|
(WhereisBaseDir, _) -> do
|
@ -14,8 +14,6 @@ module Main where
|
|||||||
import BrickMain ( brickMain )
|
import BrickMain ( brickMain )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
import qualified GHCup.GHC as GHC
|
|
||||||
import qualified GHCup.HLS as HLS
|
|
||||||
import GHCup.OptParse
|
import GHCup.OptParse
|
||||||
|
|
||||||
import GHCup.Download
|
import GHCup.Download
|
||||||
@ -41,8 +39,8 @@ import Data.Aeson ( decodeStrict', Value )
|
|||||||
import Data.Aeson.Encode.Pretty ( encodePretty )
|
import Data.Aeson.Encode.Pretty ( encodePretty )
|
||||||
import Data.Either
|
import Data.Either
|
||||||
import Data.Functor
|
import Data.Functor
|
||||||
import Data.Versions (version)
|
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
|
import Data.Versions
|
||||||
import GHC.IO.Encoding
|
import GHC.IO.Encoding
|
||||||
import Haskus.Utils.Variant.Excepts
|
import Haskus.Utils.Variant.Excepts
|
||||||
import Language.Haskell.TH
|
import Language.Haskell.TH
|
||||||
@ -63,7 +61,7 @@ import qualified GHCup.Types as Types
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
toSettings :: Options -> IO (Settings, KeyBindings, UserSettings)
|
toSettings :: Options -> IO (Settings, KeyBindings)
|
||||||
toSettings options = do
|
toSettings options = do
|
||||||
noColor <- isJust <$> lookupEnv "NO_COLOR"
|
noColor <- isJust <$> lookupEnv "NO_COLOR"
|
||||||
userConf <- runE @'[ JSONError ] ghcupConfigFile >>= \case
|
userConf <- runE @'[ JSONError ] ghcupConfigFile >>= \case
|
||||||
@ -73,24 +71,20 @@ toSettings options = do
|
|||||||
pure defaultUserSettings
|
pure defaultUserSettings
|
||||||
_ -> do
|
_ -> do
|
||||||
die "Unexpected error!"
|
die "Unexpected error!"
|
||||||
pure $ (\(s', k) -> (s', k, userConf)) $ mergeConf options userConf noColor
|
pure $ mergeConf options userConf noColor
|
||||||
where
|
where
|
||||||
mergeConf :: Options -> UserSettings -> Bool -> (Settings, KeyBindings)
|
mergeConf :: Options -> UserSettings -> Bool -> (Settings, KeyBindings)
|
||||||
mergeConf Options{..} UserSettings{..} noColor =
|
mergeConf Options{..} UserSettings{..} noColor =
|
||||||
let cache = fromMaybe (fromMaybe (Types.cache defaultSettings) uCache) optCache
|
let cache = fromMaybe (fromMaybe (Types.cache defaultSettings) uCache) optCache
|
||||||
metaCache = fromMaybe (fromMaybe (Types.metaCache defaultSettings) uMetaCache) optMetaCache
|
metaCache = fromMaybe (fromMaybe (Types.metaCache defaultSettings) uMetaCache) optMetaCache
|
||||||
metaMode = fromMaybe (fromMaybe (Types.metaMode defaultSettings) uMetaMode) optMetaMode
|
|
||||||
noVerify = fromMaybe (fromMaybe (Types.noVerify defaultSettings) uNoVerify) optNoVerify
|
noVerify = fromMaybe (fromMaybe (Types.noVerify defaultSettings) uNoVerify) optNoVerify
|
||||||
verbose = fromMaybe (fromMaybe (Types.verbose defaultSettings) uVerbose) optVerbose
|
verbose = fromMaybe (fromMaybe (Types.verbose defaultSettings) uVerbose) optVerbose
|
||||||
keepDirs = fromMaybe (fromMaybe (Types.keepDirs defaultSettings) uKeepDirs) optKeepDirs
|
keepDirs = fromMaybe (fromMaybe (Types.keepDirs defaultSettings) uKeepDirs) optKeepDirs
|
||||||
downloader = fromMaybe (fromMaybe defaultDownloader uDownloader) optsDownloader
|
downloader = fromMaybe (fromMaybe defaultDownloader uDownloader) optsDownloader
|
||||||
keyBindings = maybe defaultKeyBindings mergeKeys uKeyBindings
|
keyBindings = maybe defaultKeyBindings mergeKeys uKeyBindings
|
||||||
urlSource = fromMaybe (fromMaybe (Types.urlSource defaultSettings) uUrlSource) optUrlSource
|
urlSource = maybe (fromMaybe (Types.urlSource defaultSettings) uUrlSource) (OwnSource . (:[]) . Right) optUrlSource
|
||||||
noNetwork = fromMaybe (fromMaybe (Types.noNetwork defaultSettings) uNoNetwork) optNoNetwork
|
noNetwork = fromMaybe (fromMaybe (Types.noNetwork defaultSettings) uNoNetwork) optNoNetwork
|
||||||
gpgSetting = fromMaybe (fromMaybe (Types.gpgSetting defaultSettings) uGPGSetting) optGpg
|
gpgSetting = fromMaybe (fromMaybe (Types.gpgSetting defaultSettings) uGPGSetting) optGpg
|
||||||
platformOverride = optPlatform <|> (uPlatformOverride <|> Types.platformOverride defaultSettings)
|
|
||||||
mirrors = fromMaybe (Types.mirrors defaultSettings) uMirrors
|
|
||||||
defGHCConfOptions = fromMaybe (Types.defGHCConfOptions defaultSettings) uDefGHCConfOptions
|
|
||||||
in (Settings {..}, keyBindings)
|
in (Settings {..}, keyBindings)
|
||||||
#if defined(INTERNAL_DOWNLOADER)
|
#if defined(INTERNAL_DOWNLOADER)
|
||||||
defaultDownloader = Internal
|
defaultDownloader = Internal
|
||||||
@ -109,6 +103,7 @@ toSettings options = do
|
|||||||
, bSet = fromMaybe bSet kSet
|
, bSet = fromMaybe bSet kSet
|
||||||
, bChangelog = fromMaybe bChangelog kChangelog
|
, bChangelog = fromMaybe bChangelog kChangelog
|
||||||
, bShowAllVersions = fromMaybe bShowAllVersions kShowAll
|
, bShowAllVersions = fromMaybe bShowAllVersions kShowAll
|
||||||
|
, bShowAllTools = fromMaybe bShowAllTools kShowAllTools
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -163,7 +158,7 @@ ENV variables:
|
|||||||
* GHCUP_INSTALL_BASE_PREFIX: the base of ghcup (default: $HOME)
|
* GHCUP_INSTALL_BASE_PREFIX: the base of ghcup (default: $HOME)
|
||||||
* GHCUP_USE_XDG_DIRS: set to anything to use XDG style directories
|
* GHCUP_USE_XDG_DIRS: set to anything to use XDG style directories
|
||||||
|
|
||||||
Report bugs at <https://github.com/haskell/ghcup-hs/issues>|]
|
Report bugs at <https://gitlab.haskell.org/haskell/ghcup-hs/issues>|]
|
||||||
|
|
||||||
customExecParser
|
customExecParser
|
||||||
(prefs showHelpOnError)
|
(prefs showHelpOnError)
|
||||||
@ -176,7 +171,7 @@ Report bugs at <https://github.com/haskell/ghcup-hs/issues>|]
|
|||||||
-- create ~/.ghcup dir
|
-- create ~/.ghcup dir
|
||||||
ensureDirectories dirs
|
ensureDirectories dirs
|
||||||
|
|
||||||
(settings, keybindings, userConf) <- toSettings opt
|
(settings, keybindings) <- toSettings opt
|
||||||
|
|
||||||
-- logger interpreter
|
-- logger interpreter
|
||||||
logfile <- runReaderT initGHCupFileLogging dirs
|
logfile <- runReaderT initGHCupFileLogging dirs
|
||||||
@ -201,24 +196,25 @@ Report bugs at <https://github.com/haskell/ghcup-hs/issues>|]
|
|||||||
|
|
||||||
|
|
||||||
let appState = do
|
let appState = do
|
||||||
pfreq <- case platformOverride settings of
|
pfreq <- (
|
||||||
Just pfreq' -> return pfreq'
|
runLogger . runE @'[NoCompatiblePlatform, NoCompatibleArch, DistroNotFound] . liftE $ platformRequest
|
||||||
Nothing -> (runLogger . runE @'[NoCompatiblePlatform, NoCompatibleArch, DistroNotFound] . liftE $ platformRequest) >>= \case
|
) >>= \case
|
||||||
VRight r -> pure r
|
VRight r -> pure r
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger
|
runLogger
|
||||||
(logError $ T.pack $ prettyHFError e)
|
(logError $ T.pack $ prettyShow e)
|
||||||
exitWith (ExitFailure 2)
|
exitWith (ExitFailure 2)
|
||||||
|
|
||||||
ghcupInfo <-
|
ghcupInfo <-
|
||||||
( flip runReaderT leanAppstate . runE @'[ContentLengthError, DigestError, DistroNotFound, DownloadFailed, FileDoesNotExistError, GPGError, JSONError, NoCompatibleArch, NoCompatiblePlatform, NoDownload, GHCup.Errors.ParseError, ProcessError, UnsupportedSetupCombo, StackPlatformDetectError] $ do
|
( flip runReaderT leanAppstate
|
||||||
liftE $ getDownloadsF pfreq
|
. runE @'[DigestError, GPGError, JSONError , DownloadFailed, FileDoesNotExistError]
|
||||||
)
|
$ liftE getDownloadsF
|
||||||
|
)
|
||||||
>>= \case
|
>>= \case
|
||||||
VRight r -> pure r
|
VRight r -> pure r
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger
|
runLogger
|
||||||
(logError $ T.pack $ prettyHFError e)
|
(logError $ T.pack $ prettyShow e)
|
||||||
exitWith (ExitFailure 2)
|
exitWith (ExitFailure 2)
|
||||||
let s' = AppState settings dirs keybindings ghcupInfo pfreq loggerConfig
|
let s' = AppState settings dirs keybindings ghcupInfo pfreq loggerConfig
|
||||||
|
|
||||||
@ -239,7 +235,7 @@ Report bugs at <https://github.com/haskell/ghcup-hs/issues>|]
|
|||||||
_
|
_
|
||||||
| Just False <- optVerbose -> pure ()
|
| Just False <- optVerbose -> pure ()
|
||||||
| otherwise -> lookupEnv "GHCUP_SKIP_UPDATE_CHECK" >>= \case
|
| otherwise -> lookupEnv "GHCUP_SKIP_UPDATE_CHECK" >>= \case
|
||||||
Nothing -> void . flip runReaderT s' . runE @'[TagNotFound, DayNotFound, NextVerNotFound, NoToolVersionSet] $ do
|
Nothing -> void . flip runReaderT s' . runE @'[TagNotFound, NextVerNotFound, NoToolVersionSet] $ do
|
||||||
newTools <- lift checkForUpdates
|
newTools <- lift checkForUpdates
|
||||||
forM_ newTools $ \newTool@(t, l) -> do
|
forM_ newTools $ \newTool@(t, l) -> do
|
||||||
-- https://gitlab.haskell.org/haskell/ghcup-hs/-/issues/283
|
-- https://gitlab.haskell.org/haskell/ghcup-hs/-/issues/283
|
||||||
@ -248,25 +244,25 @@ Report bugs at <https://github.com/haskell/ghcup-hs/issues>|]
|
|||||||
case t of
|
case t of
|
||||||
GHCup -> runLogger $
|
GHCup -> runLogger $
|
||||||
logWarn ("New GHCup version available: "
|
logWarn ("New GHCup version available: "
|
||||||
<> tVerToText l
|
<> prettyVer l
|
||||||
<> ". To upgrade, run 'ghcup upgrade'")
|
<> ". To upgrade, run 'ghcup upgrade'")
|
||||||
_ -> runLogger $
|
_ -> runLogger $
|
||||||
logWarn ("New "
|
logWarn ("New "
|
||||||
<> T.pack (prettyShow t)
|
<> T.pack (prettyShow t)
|
||||||
<> " version available. "
|
<> " version available. "
|
||||||
<> "If you want to install this latest version, run 'ghcup install "
|
<> "To upgrade, run 'ghcup install "
|
||||||
<> T.pack (prettyShow t)
|
<> T.pack (prettyShow t)
|
||||||
<> " "
|
<> " "
|
||||||
<> tVerToText l
|
<> prettyVer l
|
||||||
<> "'")
|
<> "'")
|
||||||
Just _ -> pure ()
|
Just _ -> pure ()
|
||||||
|
|
||||||
-- TODO: always run for windows
|
-- TODO: always run for windows
|
||||||
siletRunLogger (flip runReaderT s' $ runE ensureShimGen) >>= \case
|
siletRunLogger (flip runReaderT s' $ runE ensureGlobalTools) >>= \case
|
||||||
VRight _ -> pure ()
|
VRight _ -> pure ()
|
||||||
VLeft e -> do
|
VLeft e -> do
|
||||||
runLogger
|
runLogger
|
||||||
(logError $ T.pack $ prettyHFError e)
|
(logError $ T.pack $ prettyShow e)
|
||||||
exitWith (ExitFailure 30)
|
exitWith (ExitFailure 30)
|
||||||
pure s'
|
pure s'
|
||||||
|
|
||||||
@ -295,14 +291,13 @@ Report bugs at <https://github.com/haskell/ghcup-hs/issues>|]
|
|||||||
#endif
|
#endif
|
||||||
Install installCommand -> install installCommand settings appState runLogger
|
Install installCommand -> install installCommand settings appState runLogger
|
||||||
InstallCabalLegacy iopts -> install (Left (InstallCabal iopts)) settings appState runLogger
|
InstallCabalLegacy iopts -> install (Left (InstallCabal iopts)) settings appState runLogger
|
||||||
Test testCommand -> test testCommand settings appState runLogger
|
|
||||||
Set setCommand -> set setCommand runAppState runLeanAppState runLogger
|
Set setCommand -> set setCommand runAppState runLeanAppState runLogger
|
||||||
UnSet unsetCommand -> unset unsetCommand runLeanAppState runLogger
|
UnSet unsetCommand -> unset unsetCommand runLeanAppState runLogger
|
||||||
List lo -> list lo no_color runAppState
|
List lo -> list lo no_color runAppState
|
||||||
Rm rmCommand -> rm rmCommand runAppState runLogger
|
Rm rmCommand -> rm rmCommand runAppState runLogger
|
||||||
DInfo -> dinfo runAppState runLogger
|
DInfo -> dinfo runAppState runLogger
|
||||||
Compile compileCommand -> compile compileCommand settings dirs runAppState runLogger
|
Compile compileCommand -> compile compileCommand settings dirs runAppState runLogger
|
||||||
Config configCommand -> config configCommand settings userConf keybindings runLogger
|
Config configCommand -> config configCommand settings keybindings runLogger
|
||||||
Whereis whereisOptions
|
Whereis whereisOptions
|
||||||
whereisCommand -> whereis whereisCommand whereisOptions runAppState leanAppstate runLogger
|
whereisCommand -> whereis whereisCommand whereisOptions runAppState leanAppstate runLogger
|
||||||
Upgrade uOpts force' fatal -> upgrade uOpts force' fatal dirs runAppState runLogger
|
Upgrade uOpts force' fatal -> upgrade uOpts force' fatal dirs runAppState runLogger
|
||||||
@ -312,7 +307,6 @@ Report bugs at <https://github.com/haskell/ghcup-hs/issues>|]
|
|||||||
Prefetch pfCom -> prefetch pfCom runAppState runLogger
|
Prefetch pfCom -> prefetch pfCom runAppState runLogger
|
||||||
GC gcOpts -> gc gcOpts runAppState runLogger
|
GC gcOpts -> gc gcOpts runAppState runLogger
|
||||||
Run runCommand -> run runCommand appState leanAppstate runLogger
|
Run runCommand -> run runCommand appState leanAppstate runLogger
|
||||||
PrintAppErrors -> putStrLn allHFError >> pure ExitSuccess
|
|
||||||
|
|
||||||
case res of
|
case res of
|
||||||
ExitSuccess -> pure ()
|
ExitSuccess -> pure ()
|
||||||
@ -331,31 +325,26 @@ Report bugs at <https://github.com/haskell/ghcup-hs/issues>|]
|
|||||||
, MonadCatch m
|
, MonadCatch m
|
||||||
)
|
)
|
||||||
=> Command
|
=> Command
|
||||||
-> (Tool, GHCTargetVersion)
|
-> (Tool, Version)
|
||||||
-> Excepts
|
-> Excepts
|
||||||
'[ TagNotFound
|
'[ TagNotFound
|
||||||
, DayNotFound
|
|
||||||
, NextVerNotFound
|
, NextVerNotFound
|
||||||
, NoToolVersionSet
|
, NoToolVersionSet
|
||||||
] m Bool
|
] m Bool
|
||||||
alreadyInstalling (Install (Right InstallOptions{..})) (GHC, ver) = cmp' GHC instVer ver
|
alreadyInstalling (Install (Right InstallOptions{..})) (GHC, ver) = cmp' GHC instVer ver
|
||||||
alreadyInstalling (Install (Left (InstallGHC InstallOptions{..}))) (GHC, ver) = cmp' GHC instVer ver
|
alreadyInstalling (Install (Left (InstallGHC InstallOptions{..}))) (GHC, ver) = cmp' GHC instVer ver
|
||||||
alreadyInstalling (Install (Left (InstallCabal InstallOptions{..}))) (Cabal, ver) = cmp' Cabal instVer ver
|
alreadyInstalling (Install (Left (InstallCabal InstallOptions{..}))) (Cabal, ver) = cmp' Cabal instVer ver
|
||||||
alreadyInstalling (Install (Left (InstallHLS InstallOptions{..}))) (HLS, ver) = cmp' HLS instVer ver
|
alreadyInstalling (Install (Left (InstallHLS InstallOptions{..}))) (HLS, ver) = cmp' HLS instVer ver
|
||||||
alreadyInstalling (Install (Left (InstallStack InstallOptions{..}))) (Stack, ver) = cmp' Stack instVer ver
|
alreadyInstalling (Install (Left (InstallStack InstallOptions{..}))) (Stack, ver) = cmp' Stack instVer ver
|
||||||
alreadyInstalling (Compile (CompileGHC GHCCompileOptions{ overwriteVer = Just [S over] })) (GHC, ver)
|
alreadyInstalling (Compile (CompileGHC GHCCompileOptions{ ovewrwiteVer = Just over }))
|
||||||
| Right over' <- version (T.pack over) = cmp' GHC (Just $ GHCVersion (mkTVer over')) ver
|
(GHC, ver) = cmp' GHC (Just $ ToolVersion (mkTVer over)) ver
|
||||||
| otherwise = pure False
|
alreadyInstalling (Compile (CompileGHC GHCCompileOptions{ targetGhc = Left tver }))
|
||||||
alreadyInstalling (Compile (CompileGHC GHCCompileOptions{ targetGhc = GHC.SourceDist tver }))
|
(GHC, ver) = cmp' GHC (Just $ ToolVersion (mkTVer tver)) ver
|
||||||
(GHC, ver) = cmp' GHC (Just $ ToolVersion tver) ver
|
alreadyInstalling (Compile (CompileHLS HLSCompileOptions{ ovewrwiteVer = Right over }))
|
||||||
alreadyInstalling (Compile (CompileHLS HLSCompileOptions{ overwriteVer = Just [S over] })) (HLS, ver)
|
(HLS, ver) = cmp' HLS (Just $ ToolVersion (mkTVer over)) ver
|
||||||
| Right over' <- version (T.pack over) = cmp' HLS (Just $ ToolVersion over') ver
|
alreadyInstalling (Compile (CompileHLS HLSCompileOptions{ targetHLS = Left tver }))
|
||||||
| otherwise = pure False
|
(HLS, ver) = cmp' HLS (Just $ ToolVersion (mkTVer tver)) ver
|
||||||
alreadyInstalling (Compile (CompileHLS HLSCompileOptions{ targetHLS = HLS.SourceDist tver }))
|
alreadyInstalling (Upgrade _ _ _) (GHCup, _) = pure True
|
||||||
(HLS, ver) = cmp' HLS (Just $ ToolVersion tver) ver
|
|
||||||
alreadyInstalling (Compile (CompileHLS HLSCompileOptions{ targetHLS = HLS.HackageDist tver }))
|
|
||||||
(HLS, ver) = cmp' HLS (Just $ ToolVersion tver) ver
|
|
||||||
alreadyInstalling (Upgrade {}) (GHCup, _) = pure True
|
|
||||||
alreadyInstalling _ _ = pure False
|
alreadyInstalling _ _ = pure False
|
||||||
|
|
||||||
cmp' :: ( HasLog env
|
cmp' :: ( HasLog env
|
||||||
@ -369,14 +358,12 @@ Report bugs at <https://github.com/haskell/ghcup-hs/issues>|]
|
|||||||
)
|
)
|
||||||
=> Tool
|
=> Tool
|
||||||
-> Maybe ToolVersion
|
-> Maybe ToolVersion
|
||||||
-> GHCTargetVersion
|
-> Version
|
||||||
-> Excepts
|
-> Excepts
|
||||||
'[ TagNotFound
|
'[ TagNotFound
|
||||||
, DayNotFound
|
|
||||||
, NextVerNotFound
|
, NextVerNotFound
|
||||||
, NoToolVersionSet
|
, NoToolVersionSet
|
||||||
] m Bool
|
] m Bool
|
||||||
cmp' tool instVer ver = do
|
cmp' tool instVer ver = do
|
||||||
(v, _) <- liftE $ fromVersion instVer tool
|
(v, _) <- liftE $ fromVersion instVer tool
|
||||||
pure (v == ver)
|
pure (v == mkTVer ver)
|
||||||
|
|
||||||
|
@ -1,60 +0,0 @@
|
|||||||
packages: ./ghcup.cabal
|
|
||||||
|
|
||||||
optional-packages: ./vendored/*/*.cabal
|
|
||||||
|
|
||||||
if impl(ghc < 9.0)
|
|
||||||
package ghcup
|
|
||||||
flags: +tui -tar
|
|
||||||
else
|
|
||||||
package ghcup
|
|
||||||
flags: +tui +tar
|
|
||||||
|
|
||||||
constraints: http-io-streams -brotli,
|
|
||||||
any.aeson >= 2.0.1.0,
|
|
||||||
any.hsc2hs ==0.68.8,
|
|
||||||
bzlib-conduit >= 0.3.0.3,
|
|
||||||
bz2 >= 1.0.1.1,
|
|
||||||
bzlib >= 0.5.2.0,
|
|
||||||
directory >= 1.3.8.3,
|
|
||||||
filepath == 1.4.101.0 || == 1.4.300.1 || >= 1.5.2.0
|
|
||||||
|
|
||||||
if os(mingw32)
|
|
||||||
constraints: zlib +bundled-c-zlib,
|
|
||||||
lzma +static,
|
|
||||||
text -simdutf,
|
|
||||||
vty-windows >=0.2.0.2
|
|
||||||
|
|
||||||
if impl(ghc >= 9.4)
|
|
||||||
constraints: language-c >= 0.9.3
|
|
||||||
|
|
||||||
|
|
||||||
source-repository-package
|
|
||||||
type: git
|
|
||||||
location: https://github.com/haskell/tar.git
|
|
||||||
tag: d94a988be4311b830149a9f8fc16739927e5fc1c
|
|
||||||
|
|
||||||
source-repository-package
|
|
||||||
type: git
|
|
||||||
location: https://github.com/hasufell/uri-bytestring.git
|
|
||||||
tag: 4fb5ed14b500c192e6e7a97f6b2b1eb478806001
|
|
||||||
|
|
||||||
package libarchive
|
|
||||||
flags: -system-libarchive
|
|
||||||
|
|
||||||
package aeson-pretty
|
|
||||||
flags: +lib-only
|
|
||||||
|
|
||||||
package cabal-plan
|
|
||||||
flags: -exe
|
|
||||||
|
|
||||||
package aeson
|
|
||||||
flags: +ordered-keymap
|
|
||||||
|
|
||||||
package streamly
|
|
||||||
flags: +use-unliftio
|
|
||||||
|
|
||||||
package *
|
|
||||||
test-show-details: direct
|
|
||||||
|
|
||||||
allow-newer: cabal-install-parsers:tar, streamly:Win32
|
|
||||||
|
|
@ -1,60 +0,0 @@
|
|||||||
packages: ./ghcup.cabal
|
|
||||||
|
|
||||||
optional-packages: ./vendored/*/*.cabal
|
|
||||||
|
|
||||||
if impl(ghc < 9.0)
|
|
||||||
package ghcup
|
|
||||||
flags: +tui -tar
|
|
||||||
else
|
|
||||||
package ghcup
|
|
||||||
flags: +tui +tar
|
|
||||||
|
|
||||||
constraints: http-io-streams -brotli,
|
|
||||||
any.aeson >= 2.0.1.0,
|
|
||||||
any.hsc2hs ==0.68.8,
|
|
||||||
bzlib-conduit >= 0.3.0.3,
|
|
||||||
bz2 >= 1.0.1.1,
|
|
||||||
bzlib >= 0.5.2.0,
|
|
||||||
directory >= 1.3.8.3,
|
|
||||||
filepath == 1.4.101.0 || == 1.4.300.1 || >= 1.5.2.0
|
|
||||||
|
|
||||||
if os(mingw32)
|
|
||||||
constraints: zlib +bundled-c-zlib,
|
|
||||||
lzma +static,
|
|
||||||
text -simdutf,
|
|
||||||
vty-windows >=0.2.0.2
|
|
||||||
|
|
||||||
if impl(ghc >= 9.4)
|
|
||||||
constraints: language-c >= 0.9.3
|
|
||||||
|
|
||||||
|
|
||||||
source-repository-package
|
|
||||||
type: git
|
|
||||||
location: https://github.com/haskell/tar.git
|
|
||||||
tag: d94a988be4311b830149a9f8fc16739927e5fc1c
|
|
||||||
|
|
||||||
source-repository-package
|
|
||||||
type: git
|
|
||||||
location: https://github.com/hasufell/uri-bytestring.git
|
|
||||||
tag: 4fb5ed14b500c192e6e7a97f6b2b1eb478806001
|
|
||||||
|
|
||||||
package libarchive
|
|
||||||
flags: -system-libarchive
|
|
||||||
|
|
||||||
package aeson-pretty
|
|
||||||
flags: +lib-only
|
|
||||||
|
|
||||||
package cabal-plan
|
|
||||||
flags: -exe
|
|
||||||
|
|
||||||
package aeson
|
|
||||||
flags: +ordered-keymap
|
|
||||||
|
|
||||||
package streamly
|
|
||||||
flags: +use-unliftio
|
|
||||||
|
|
||||||
package *
|
|
||||||
test-show-details: direct
|
|
||||||
|
|
||||||
allow-newer: cabal-install-parsers:tar, streamly:Win32
|
|
||||||
|
|
@ -1,245 +0,0 @@
|
|||||||
active-repositories: hackage.haskell.org:merge
|
|
||||||
constraints: any.Cabal ==3.10.2.0 || ==3.10.2.1,
|
|
||||||
any.Cabal-syntax ==3.10.1.0 || ==3.10.2.0,
|
|
||||||
any.HUnit ==1.6.2.0,
|
|
||||||
any.OneTuple ==0.4.1.1,
|
|
||||||
any.QuickCheck ==2.14.3,
|
|
||||||
QuickCheck -old-random +templatehaskell,
|
|
||||||
any.StateVar ==1.2.2,
|
|
||||||
any.Win32 ==2.6.2.1 || ==2.13.4.0,
|
|
||||||
any.abstract-deque ==0.3,
|
|
||||||
abstract-deque -usecas,
|
|
||||||
any.aeson ==2.2.1.0,
|
|
||||||
aeson +ordered-keymap,
|
|
||||||
any.aeson-pretty ==0.8.10,
|
|
||||||
aeson-pretty +lib-only,
|
|
||||||
any.alex ==3.5.1.0,
|
|
||||||
any.ansi-terminal ==1.0.2,
|
|
||||||
ansi-terminal -example,
|
|
||||||
any.ansi-terminal-types ==0.11.5,
|
|
||||||
any.ansi-wl-pprint ==0.6.9,
|
|
||||||
ansi-wl-pprint -example,
|
|
||||||
any.array ==0.5.4.0,
|
|
||||||
any.assoc ==1.1,
|
|
||||||
assoc +tagged,
|
|
||||||
any.async ==2.2.5,
|
|
||||||
async -bench,
|
|
||||||
any.atomic-primops ==0.8.5,
|
|
||||||
atomic-primops -debug,
|
|
||||||
any.attoparsec ==0.14.4,
|
|
||||||
attoparsec -developer,
|
|
||||||
any.base ==4.14.3.0,
|
|
||||||
any.base-compat ==0.13.1,
|
|
||||||
any.base-orphans ==0.9.1,
|
|
||||||
any.base16-bytestring ==1.0.2.0,
|
|
||||||
any.bifunctors ==5.6.1,
|
|
||||||
bifunctors +tagged,
|
|
||||||
any.bimap ==0.5.0,
|
|
||||||
any.binary ==0.8.8.0 || ==0.8.9.1,
|
|
||||||
any.binary-instances ==1.0.4,
|
|
||||||
any.binary-orphans ==1.0.4.1,
|
|
||||||
any.blaze-builder ==0.4.2.3,
|
|
||||||
any.brick ==2.1.1,
|
|
||||||
brick -demos,
|
|
||||||
any.bytestring ==0.10.12.0 || ==0.11.5.3,
|
|
||||||
any.bz2 ==1.0.1.1,
|
|
||||||
bz2 -cross +with-bzlib,
|
|
||||||
any.bzip2-clib ==1.0.8,
|
|
||||||
any.c2hs ==0.28.8,
|
|
||||||
c2hs +base3 -regression,
|
|
||||||
any.cabal-install-parsers ==0.6.1.1,
|
|
||||||
any.cabal-plan ==0.7.3.0,
|
|
||||||
cabal-plan -_ -exe -license-report,
|
|
||||||
any.call-stack ==0.4.0,
|
|
||||||
any.case-insensitive ==1.2.1.0,
|
|
||||||
any.casing ==0.1.4.1,
|
|
||||||
any.chs-cabal ==0.1.1.1,
|
|
||||||
any.chs-deps ==0.1.0.0,
|
|
||||||
chs-deps -cross,
|
|
||||||
any.colour ==2.3.6,
|
|
||||||
any.comonad ==5.0.8,
|
|
||||||
comonad +containers +distributive +indexed-traversable,
|
|
||||||
any.composition-prelude ==3.0.0.2,
|
|
||||||
composition-prelude -development,
|
|
||||||
any.config-ini ==0.2.7.0,
|
|
||||||
config-ini -enable-doctests,
|
|
||||||
any.containers ==0.6.5.1,
|
|
||||||
any.contravariant ==1.5.5,
|
|
||||||
contravariant +semigroups +statevar +tagged,
|
|
||||||
any.cpphs ==1.20.9.1,
|
|
||||||
cpphs -old-locale,
|
|
||||||
any.cryptohash-sha256 ==0.11.102.1,
|
|
||||||
cryptohash-sha256 -exe +use-cbits,
|
|
||||||
any.data-array-byte ==0.1.0.1,
|
|
||||||
any.data-clist ==0.2,
|
|
||||||
any.data-fix ==0.3.2,
|
|
||||||
any.deepseq ==1.4.4.0,
|
|
||||||
any.directory ==1.3.6.0 || ==1.3.8.3,
|
|
||||||
directory -os-string,
|
|
||||||
any.disk-free-space ==0.1.0.1,
|
|
||||||
any.distributive ==0.6.2.1,
|
|
||||||
distributive +semigroups +tagged,
|
|
||||||
any.dlist ==1.0,
|
|
||||||
dlist -werror,
|
|
||||||
any.exceptions ==0.10.4,
|
|
||||||
any.file-uri ==0.1.0.0,
|
|
||||||
any.filepath ==1.4.2.1 || ==1.4.101.0,
|
|
||||||
filepath -cpphs,
|
|
||||||
any.foldable1-classes-compat ==0.1,
|
|
||||||
foldable1-classes-compat +tagged,
|
|
||||||
any.free ==5.2,
|
|
||||||
any.fusion-plugin-types ==0.1.0,
|
|
||||||
any.generic-arbitrary ==0.2.2,
|
|
||||||
any.generically ==0.1.1,
|
|
||||||
any.ghc-boot-th ==8.10.7,
|
|
||||||
any.ghc-prim ==0.6.1,
|
|
||||||
any.happy ==1.20.1.1,
|
|
||||||
any.hashable ==1.4.3.0,
|
|
||||||
hashable +integer-gmp -random-initial-seed,
|
|
||||||
any.haskell-lexer ==1.1.1,
|
|
||||||
any.haskus-utils-data ==1.4,
|
|
||||||
any.haskus-utils-types ==1.5.1,
|
|
||||||
any.haskus-utils-variant ==3.3,
|
|
||||||
any.heaps ==0.4,
|
|
||||||
any.hsc2hs ==0.68.8,
|
|
||||||
hsc2hs -in-ghc-tree,
|
|
||||||
any.hspec ==2.10.10,
|
|
||||||
any.hspec-core ==2.10.10,
|
|
||||||
any.hspec-discover ==2.10.10,
|
|
||||||
any.hspec-expectations ==0.8.2,
|
|
||||||
any.hspec-golden-aeson ==0.9.0.0,
|
|
||||||
any.indexed-profunctors ==0.1.1.1,
|
|
||||||
any.indexed-traversable ==0.1.3,
|
|
||||||
any.indexed-traversable-instances ==0.1.1.2,
|
|
||||||
any.integer-conversion ==0.1.0.1,
|
|
||||||
any.integer-gmp ==1.0.3.0,
|
|
||||||
any.integer-logarithms ==1.0.3.1,
|
|
||||||
integer-logarithms -check-bounds +integer-gmp,
|
|
||||||
any.language-c ==0.9.3,
|
|
||||||
language-c -allwarnings +iecfpextension +usebytestrings,
|
|
||||||
any.libarchive ==3.0.4.2,
|
|
||||||
libarchive -cross -low-memory +no-exe -system-libarchive,
|
|
||||||
any.libyaml-clib ==0.2.5,
|
|
||||||
any.libyaml-streamly ==0.2.2.1,
|
|
||||||
libyaml-streamly -no-unicode -system-libyaml,
|
|
||||||
any.lockfree-queue ==0.2.4,
|
|
||||||
any.lukko ==0.1.1.3,
|
|
||||||
lukko +ofd-locking,
|
|
||||||
any.lzma-static ==5.2.5.5,
|
|
||||||
any.megaparsec ==9.2.1,
|
|
||||||
megaparsec -dev,
|
|
||||||
any.microlens ==0.4.13.1,
|
|
||||||
any.microlens-mtl ==0.2.0.3,
|
|
||||||
any.microlens-th ==0.4.3.14,
|
|
||||||
any.mtl ==2.2.2,
|
|
||||||
any.mtl-compat ==0.2.2,
|
|
||||||
mtl-compat -two-point-one -two-point-two,
|
|
||||||
any.network ==3.1.4.0,
|
|
||||||
network -devel,
|
|
||||||
any.network-uri ==2.6.4.2,
|
|
||||||
any.optics ==0.4.2.1,
|
|
||||||
any.optics-core ==0.4.1.1,
|
|
||||||
optics-core -explicit-generic-labels,
|
|
||||||
any.optics-extra ==0.4.2.1,
|
|
||||||
any.optics-th ==0.4.1,
|
|
||||||
any.optparse-applicative ==0.17.1.0,
|
|
||||||
optparse-applicative +process,
|
|
||||||
any.os-release ==1.0.2.1,
|
|
||||||
os-release -devel,
|
|
||||||
any.parsec ==3.1.14.0 || ==3.1.17.0,
|
|
||||||
any.parser-combinators ==1.3.0,
|
|
||||||
parser-combinators -dev,
|
|
||||||
any.polyparse ==1.13,
|
|
||||||
any.pretty ==1.1.3.6,
|
|
||||||
any.pretty-terminal ==0.1.0.0,
|
|
||||||
any.primitive ==0.8.0.0,
|
|
||||||
any.process ==1.6.13.2 || ==1.6.18.0,
|
|
||||||
any.profunctors ==5.6.2,
|
|
||||||
any.quickcheck-arbitrary-adt ==0.3.1.0,
|
|
||||||
any.quickcheck-io ==0.2.0,
|
|
||||||
any.random ==1.2.1.2,
|
|
||||||
any.recursion-schemes ==5.2.2.5,
|
|
||||||
recursion-schemes +template-haskell,
|
|
||||||
any.regex-base ==0.94.0.2,
|
|
||||||
any.regex-posix ==0.96.0.1,
|
|
||||||
regex-posix -_regex-posix-clib,
|
|
||||||
any.regex-posix-clib ==2.7,
|
|
||||||
any.resourcet ==1.2.6,
|
|
||||||
any.retry ==0.9.3.1,
|
|
||||||
retry -lib-werror,
|
|
||||||
any.rts ==1.0.1,
|
|
||||||
any.safe ==0.3.21,
|
|
||||||
any.safe-exceptions ==0.1.7.4,
|
|
||||||
any.scientific ==0.3.7.0,
|
|
||||||
scientific -bytestring-builder -integer-simple,
|
|
||||||
any.semialign ==1.3,
|
|
||||||
semialign +semigroupoids,
|
|
||||||
any.semigroupoids ==6.0.0.1,
|
|
||||||
semigroupoids +comonad +containers +contravariant +distributive +tagged +unordered-containers,
|
|
||||||
any.setenv ==0.1.1.3,
|
|
||||||
any.split ==0.2.5,
|
|
||||||
any.splitmix ==0.1.0.5,
|
|
||||||
splitmix -optimised-mixer,
|
|
||||||
any.stm ==2.5.0.1,
|
|
||||||
any.streamly ==0.8.3,
|
|
||||||
streamly -debug -dev -fusion-plugin -has-llvm -inspection -limit-build-mem -no-fusion +opt -streamk -streamly-core -use-c-malloc +use-unliftio,
|
|
||||||
any.strict ==0.5,
|
|
||||||
any.strict-base ==0.4.0.0,
|
|
||||||
any.tagged ==0.8.8,
|
|
||||||
tagged +deepseq +transformers,
|
|
||||||
any.tagsoup ==0.14.8,
|
|
||||||
any.tar ==0.6.0.0,
|
|
||||||
any.tasty ==1.5,
|
|
||||||
tasty +unix,
|
|
||||||
any.tasty-hunit ==0.10.1,
|
|
||||||
any.template-haskell ==2.16.0.0,
|
|
||||||
any.temporary ==1.3,
|
|
||||||
any.text ==1.2.4.1 || ==2.0.2,
|
|
||||||
text -developer -simdutf,
|
|
||||||
any.text-binary ==0.2.1.1,
|
|
||||||
any.text-iso8601 ==0.1,
|
|
||||||
any.text-short ==0.1.5,
|
|
||||||
text-short -asserts,
|
|
||||||
any.text-zipper ==0.13,
|
|
||||||
any.tf-random ==0.5,
|
|
||||||
any.th-abstraction ==0.6.0.0,
|
|
||||||
any.th-compat ==0.1.4,
|
|
||||||
any.th-lift ==0.8.4,
|
|
||||||
any.th-lift-instances ==0.1.20,
|
|
||||||
any.these ==1.2,
|
|
||||||
any.time ==1.9.3 || ==1.11.1.2,
|
|
||||||
any.time-compat ==1.9.6.1,
|
|
||||||
time-compat -old-locale,
|
|
||||||
any.transformers ==0.5.6.2,
|
|
||||||
any.transformers-base ==0.4.6,
|
|
||||||
transformers-base +orphaninstances,
|
|
||||||
any.transformers-compat ==0.7.2,
|
|
||||||
transformers-compat -five +five-three -four +generic-deriving +mtl -three -two,
|
|
||||||
any.unicode-data ==0.3.1,
|
|
||||||
unicode-data -ucd2haskell,
|
|
||||||
any.unix-compat ==0.7.1,
|
|
||||||
unix-compat -old-time,
|
|
||||||
any.unliftio-core ==0.2.1.0,
|
|
||||||
any.unordered-containers ==0.2.20,
|
|
||||||
unordered-containers -debug,
|
|
||||||
any.uri-bytestring ==0.3.3.1,
|
|
||||||
uri-bytestring -lib-werror,
|
|
||||||
any.utf8-string ==1.0.2,
|
|
||||||
any.uuid-types ==1.0.5.1,
|
|
||||||
any.vector ==0.13.1.0,
|
|
||||||
vector +boundschecks -internalchecks -unsafechecks -wall,
|
|
||||||
any.vector-binary-instances ==0.2.5.2,
|
|
||||||
any.vector-stream ==0.1.0.1,
|
|
||||||
any.versions ==6.0.6,
|
|
||||||
any.vty ==6.2,
|
|
||||||
any.vty-crossplatform ==0.4.0.0,
|
|
||||||
vty-crossplatform -demos,
|
|
||||||
any.vty-windows ==0.2.0.2,
|
|
||||||
any.witherable ==0.4.2,
|
|
||||||
any.word-wrap ==0.5,
|
|
||||||
any.word8 ==0.1.3,
|
|
||||||
any.yaml-streamly ==0.12.4,
|
|
||||||
yaml-streamly +no-examples +no-exe,
|
|
||||||
any.zlib ==0.6.3.0,
|
|
||||||
zlib +bundled-c-zlib -non-blocking-ffi -pkg-config
|
|
||||||
index-state: hackage.haskell.org 2024-03-15T23:51:46Z
|
|
@ -1,8 +1,37 @@
|
|||||||
if os(mingw32)
|
packages: ./ghcup.cabal
|
||||||
import: cabal.ghc8107.Win32.project
|
|
||||||
import: cabal.ghc8107.Win32.project.freeze
|
optional-packages: ./vendored/*/*.cabal
|
||||||
else
|
|
||||||
import: cabal.ghc8107.Unix.project
|
optimization: 2
|
||||||
import: cabal.ghc8107.Unix.project.freeze
|
|
||||||
|
package ghcup
|
||||||
|
tests: True
|
||||||
|
flags: +tui
|
||||||
|
|
||||||
|
source-repository-package
|
||||||
|
type: git
|
||||||
|
location: https://github.com/bgamari/terminal-size.git
|
||||||
|
tag: 34ea816bd63f75f800eedac12c6908c6f3736036
|
||||||
|
|
||||||
|
constraints: http-io-streams -brotli,
|
||||||
|
any.Cabal ==3.6.2.0,
|
||||||
|
any.aeson >= 2.0.1.0,
|
||||||
|
|
||||||
|
package libarchive
|
||||||
|
flags: -system-libarchive
|
||||||
|
|
||||||
|
package aeson-pretty
|
||||||
|
flags: +lib-only
|
||||||
|
|
||||||
|
package cabal-plan
|
||||||
|
flags: -exe
|
||||||
|
|
||||||
|
package aeson
|
||||||
|
flags: +ordered-keymap
|
||||||
|
|
||||||
|
package streamly
|
||||||
|
flags: +use-unliftio
|
||||||
|
|
||||||
|
allow-newer: base, ghc-prim, template-haskell, language-c
|
||||||
|
|
||||||
with-compiler: ghc-8.10.7
|
with-compiler: ghc-8.10.7
|
||||||
|
@ -1,56 +1,50 @@
|
|||||||
active-repositories: hackage.haskell.org:merge
|
active-repositories: hackage.haskell.org:merge
|
||||||
constraints: any.Cabal ==3.10.2.1,
|
constraints: any.Cabal ==3.6.2.0,
|
||||||
any.Cabal-syntax ==3.10.2.0,
|
Cabal -bundled-binary-generic,
|
||||||
any.HUnit ==1.6.2.0,
|
any.HUnit ==1.6.2.0,
|
||||||
any.HsOpenSSL ==0.11.7.6,
|
any.HsOpenSSL ==0.11.7.2,
|
||||||
HsOpenSSL -fast-bignum -homebrew-openssl -macports-openssl -use-pkg-config,
|
HsOpenSSL -fast-bignum -homebrew-openssl -macports-openssl -use-pkg-config,
|
||||||
any.OneTuple ==0.4.1.1,
|
any.OneTuple ==0.3.1,
|
||||||
any.QuickCheck ==2.14.3,
|
any.QuickCheck ==2.14.2,
|
||||||
QuickCheck -old-random +templatehaskell,
|
QuickCheck -old-random +templatehaskell,
|
||||||
any.StateVar ==1.2.2,
|
any.StateVar ==1.2.2,
|
||||||
any.abstract-deque ==0.3,
|
any.abstract-deque ==0.3,
|
||||||
abstract-deque -usecas,
|
abstract-deque -usecas,
|
||||||
any.aeson ==2.2.1.0,
|
any.aeson ==2.0.3.0,
|
||||||
aeson +ordered-keymap,
|
aeson -cffi +ordered-keymap,
|
||||||
any.aeson-pretty ==0.8.10,
|
any.aeson-pretty ==0.8.9,
|
||||||
aeson-pretty +lib-only,
|
aeson-pretty +lib-only,
|
||||||
any.alex ==3.5.1.0,
|
any.alex ==3.2.7.1,
|
||||||
any.ansi-terminal ==1.0.2,
|
any.ansi-terminal ==0.11.3,
|
||||||
ansi-terminal -example,
|
ansi-terminal -example,
|
||||||
any.ansi-terminal-types ==0.11.5,
|
|
||||||
any.ansi-wl-pprint ==0.6.9,
|
any.ansi-wl-pprint ==0.6.9,
|
||||||
ansi-wl-pprint -example,
|
ansi-wl-pprint -example,
|
||||||
any.array ==0.5.4.0,
|
any.array ==0.5.4.0,
|
||||||
any.assoc ==1.1,
|
any.assoc ==1.0.2,
|
||||||
assoc +tagged,
|
any.async ==2.2.4,
|
||||||
any.async ==2.2.5,
|
|
||||||
async -bench,
|
async -bench,
|
||||||
any.atomic-primops ==0.8.5,
|
any.atomic-primops ==0.8.4,
|
||||||
atomic-primops -debug,
|
atomic-primops -debug,
|
||||||
any.attoparsec ==0.14.4,
|
any.attoparsec ==0.14.4,
|
||||||
attoparsec -developer,
|
attoparsec -developer,
|
||||||
any.base ==4.14.3.0,
|
any.base ==4.14.3.0,
|
||||||
any.base-compat ==0.13.1,
|
any.base-compat ==0.12.1,
|
||||||
any.base-orphans ==0.9.1,
|
any.base-compat-batteries ==0.12.1,
|
||||||
|
any.base-orphans ==0.8.6,
|
||||||
any.base16-bytestring ==1.0.2.0,
|
any.base16-bytestring ==1.0.2.0,
|
||||||
any.base64-bytestring ==1.2.1.0,
|
any.base64-bytestring ==1.2.1.0,
|
||||||
any.bifunctors ==5.6.1,
|
any.bifunctors ==5.5.12,
|
||||||
bifunctors +tagged,
|
bifunctors +semigroups +tagged,
|
||||||
any.bimap ==0.5.0,
|
any.binary ==0.8.8.0,
|
||||||
any.binary ==0.8.9.1,
|
any.blaze-builder ==0.4.2.2,
|
||||||
any.binary-instances ==1.0.4,
|
any.brick ==0.64.2,
|
||||||
any.binary-orphans ==1.0.4.1,
|
|
||||||
any.blaze-builder ==0.4.2.3,
|
|
||||||
any.brick ==2.1.1,
|
|
||||||
brick -demos,
|
brick -demos,
|
||||||
any.bytestring ==0.11.5.3,
|
any.bytestring ==0.10.12.0,
|
||||||
any.bz2 ==1.0.1.1,
|
any.bz2 ==1.0.1.0,
|
||||||
bz2 -cross +with-bzlib,
|
bz2 -cross +with-bzlib,
|
||||||
any.bzip2-clib ==1.0.8,
|
|
||||||
any.c2hs ==0.28.8,
|
any.c2hs ==0.28.8,
|
||||||
c2hs +base3 -regression,
|
c2hs +base3 -regression,
|
||||||
any.cabal-install-parsers ==0.6.1.1,
|
any.cabal-plan ==0.7.2.1,
|
||||||
any.cabal-plan ==0.7.3.0,
|
|
||||||
cabal-plan -_ -exe -license-report,
|
cabal-plan -_ -exe -license-report,
|
||||||
any.call-stack ==0.4.0,
|
any.call-stack ==0.4.0,
|
||||||
any.case-insensitive ==1.2.1.0,
|
any.case-insensitive ==1.2.1.0,
|
||||||
@ -58,12 +52,14 @@ constraints: any.Cabal ==3.10.2.1,
|
|||||||
any.chs-cabal ==0.1.1.1,
|
any.chs-cabal ==0.1.1.1,
|
||||||
any.chs-deps ==0.1.0.0,
|
any.chs-deps ==0.1.0.0,
|
||||||
chs-deps -cross,
|
chs-deps -cross,
|
||||||
|
any.clock ==0.8.3,
|
||||||
|
clock -llvm,
|
||||||
any.colour ==2.3.6,
|
any.colour ==2.3.6,
|
||||||
any.comonad ==5.0.8,
|
any.comonad ==5.0.8,
|
||||||
comonad +containers +distributive +indexed-traversable,
|
comonad +containers +distributive +indexed-traversable,
|
||||||
any.composition-prelude ==3.0.0.2,
|
any.composition-prelude ==3.0.0.2,
|
||||||
composition-prelude -development,
|
composition-prelude -development,
|
||||||
any.config-ini ==0.2.7.0,
|
any.config-ini ==0.2.4.0,
|
||||||
config-ini -enable-doctests,
|
config-ini -enable-doctests,
|
||||||
any.containers ==0.6.5.1,
|
any.containers ==0.6.5.1,
|
||||||
any.contravariant ==1.5.5,
|
any.contravariant ==1.5.5,
|
||||||
@ -73,188 +69,170 @@ constraints: any.Cabal ==3.10.2.1,
|
|||||||
any.cryptohash-sha1 ==0.11.101.0,
|
any.cryptohash-sha1 ==0.11.101.0,
|
||||||
any.cryptohash-sha256 ==0.11.102.1,
|
any.cryptohash-sha256 ==0.11.102.1,
|
||||||
cryptohash-sha256 -exe +use-cbits,
|
cryptohash-sha256 -exe +use-cbits,
|
||||||
any.data-array-byte ==0.1.0.1,
|
|
||||||
any.data-clist ==0.2,
|
any.data-clist ==0.2,
|
||||||
any.data-fix ==0.3.2,
|
any.data-fix ==0.3.2,
|
||||||
any.deepseq ==1.4.4.0,
|
any.deepseq ==1.4.4.0,
|
||||||
any.directory ==1.3.8.3,
|
any.directory ==1.3.6.0,
|
||||||
directory -os-string,
|
|
||||||
any.disk-free-space ==0.1.0.1,
|
any.disk-free-space ==0.1.0.1,
|
||||||
any.distributive ==0.6.2.1,
|
any.distributive ==0.6.2.1,
|
||||||
distributive +semigroups +tagged,
|
distributive +semigroups +tagged,
|
||||||
any.dlist ==1.0,
|
any.dlist ==1.0,
|
||||||
dlist -werror,
|
dlist -werror,
|
||||||
any.exceptions ==0.10.4,
|
any.exceptions ==0.10.4,
|
||||||
any.file-uri ==0.1.0.0,
|
any.filepath ==1.4.2.1,
|
||||||
any.filepath ==1.4.101.0,
|
any.free ==5.1.8,
|
||||||
filepath -cpphs,
|
|
||||||
any.foldable1-classes-compat ==0.1,
|
|
||||||
foldable1-classes-compat +tagged,
|
|
||||||
any.free ==5.2,
|
|
||||||
any.fusion-plugin-types ==0.1.0,
|
any.fusion-plugin-types ==0.1.0,
|
||||||
any.generic-arbitrary ==0.2.2,
|
any.generic-arbitrary ==0.2.2,
|
||||||
any.generically ==0.1.1,
|
any.ghc ==8.10.7,
|
||||||
|
any.ghc-boot ==8.10.7,
|
||||||
any.ghc-boot-th ==8.10.7,
|
any.ghc-boot-th ==8.10.7,
|
||||||
any.ghc-byteorder ==4.11.0.0.10,
|
any.ghc-byteorder ==4.11.0.0.10,
|
||||||
|
any.ghc-heap ==8.10.7,
|
||||||
any.ghc-prim ==0.6.1,
|
any.ghc-prim ==0.6.1,
|
||||||
any.happy ==1.20.1.1,
|
any.ghci ==8.10.7,
|
||||||
any.hashable ==1.4.3.0,
|
any.happy ==1.20.0,
|
||||||
hashable +integer-gmp -random-initial-seed,
|
any.hashable ==1.4.0.2,
|
||||||
any.haskell-lexer ==1.1.1,
|
hashable +containers +integer-gmp -random-initial-seed,
|
||||||
any.haskus-utils-data ==1.4,
|
any.haskus-utils-data ==1.4,
|
||||||
any.haskus-utils-types ==1.5.1,
|
any.haskus-utils-types ==1.5.1,
|
||||||
any.haskus-utils-variant ==3.3,
|
any.haskus-utils-variant ==3.2.1,
|
||||||
any.heaps ==0.4,
|
any.heaps ==0.4,
|
||||||
|
any.hpc ==0.6.1.0,
|
||||||
any.hsc2hs ==0.68.8,
|
any.hsc2hs ==0.68.8,
|
||||||
hsc2hs -in-ghc-tree,
|
hsc2hs -in-ghc-tree,
|
||||||
any.hspec ==2.10.10,
|
any.hspec ==2.9.7,
|
||||||
any.hspec-core ==2.10.10,
|
any.hspec-core ==2.9.7,
|
||||||
any.hspec-discover ==2.10.10,
|
any.hspec-discover ==2.9.7,
|
||||||
any.hspec-expectations ==0.8.2,
|
any.hspec-expectations ==0.8.2,
|
||||||
any.hspec-golden-aeson ==0.9.0.0,
|
any.hspec-golden-aeson ==0.9.0.0,
|
||||||
any.http-io-streams ==0.1.7.0,
|
any.http-io-streams ==0.1.6.1,
|
||||||
http-io-streams -brotli +fast-xor,
|
http-io-streams -brotli +fast-xor,
|
||||||
any.indexed-profunctors ==0.1.1.1,
|
any.indexed-profunctors ==0.1.1,
|
||||||
any.indexed-traversable ==0.1.3,
|
any.indexed-traversable ==0.1.2,
|
||||||
any.indexed-traversable-instances ==0.1.1.2,
|
any.indexed-traversable-instances ==0.1.1,
|
||||||
any.integer-conversion ==0.1.0.1,
|
|
||||||
any.integer-gmp ==1.0.3.0,
|
any.integer-gmp ==1.0.3.0,
|
||||||
any.integer-logarithms ==1.0.3.1,
|
any.integer-logarithms ==1.0.3.1,
|
||||||
integer-logarithms -check-bounds +integer-gmp,
|
integer-logarithms -check-bounds +integer-gmp,
|
||||||
any.io-streams ==1.5.2.2,
|
any.io-streams ==1.5.2.1,
|
||||||
io-streams +network -nointeractivetests +zlib,
|
io-streams +network -nointeractivetests +zlib,
|
||||||
any.language-c ==0.9.3,
|
any.language-c ==0.9.1,
|
||||||
language-c -allwarnings +iecfpextension +usebytestrings,
|
language-c -allwarnings +iecfpextension +usebytestrings,
|
||||||
any.libarchive ==3.0.4.2,
|
any.libarchive ==3.0.3.2,
|
||||||
libarchive -cross -low-memory +no-exe -system-libarchive,
|
libarchive -cross -low-memory +no-exe -system-libarchive,
|
||||||
any.libyaml-streamly ==0.2.2.1,
|
any.libyaml-streamly ==0.2.1,
|
||||||
libyaml-streamly -no-unicode +system-libyaml,
|
libyaml-streamly -no-unicode -system-libyaml,
|
||||||
any.lockfree-queue ==0.2.4,
|
any.lockfree-queue ==0.2.3.1,
|
||||||
any.lukko ==0.1.1.3,
|
any.lzma-static ==5.2.5.4,
|
||||||
lukko +ofd-locking,
|
|
||||||
any.lzma-static ==5.2.5.5,
|
|
||||||
any.megaparsec ==9.2.1,
|
any.megaparsec ==9.2.1,
|
||||||
megaparsec -dev,
|
megaparsec -dev,
|
||||||
any.microlens ==0.4.13.1,
|
any.microlens ==0.4.12.0,
|
||||||
any.microlens-mtl ==0.2.0.3,
|
any.microlens-mtl ==0.2.0.2,
|
||||||
any.microlens-th ==0.4.3.14,
|
any.microlens-th ==0.4.3.10,
|
||||||
any.mtl ==2.2.2,
|
any.mtl ==2.2.2,
|
||||||
any.mtl-compat ==0.2.2,
|
any.network ==3.1.2.7,
|
||||||
mtl-compat -two-point-one -two-point-two,
|
|
||||||
any.network ==3.1.4.0,
|
|
||||||
network -devel,
|
network -devel,
|
||||||
any.network-uri ==2.6.4.2,
|
any.network-uri ==2.6.4.1,
|
||||||
any.openssl-streams ==1.2.3.0,
|
any.openssl-streams ==1.2.3.0,
|
||||||
any.optics ==0.4.2.1,
|
any.optics ==0.4.2,
|
||||||
any.optics-core ==0.4.1.1,
|
any.optics-core ==0.4.1,
|
||||||
optics-core -explicit-generic-labels,
|
optics-core -explicit-generic-labels,
|
||||||
any.optics-extra ==0.4.2.1,
|
any.optics-extra ==0.4.2.1,
|
||||||
any.optics-th ==0.4.1,
|
any.optics-th ==0.4.1,
|
||||||
any.optparse-applicative ==0.17.1.0,
|
any.optparse-applicative ==0.17.0.0,
|
||||||
optparse-applicative +process,
|
optparse-applicative +process,
|
||||||
any.os-release ==1.0.2.1,
|
any.os-release ==1.0.2.1,
|
||||||
os-release -devel,
|
os-release -devel,
|
||||||
any.parsec ==3.1.17.0,
|
any.parallel ==3.2.2.0,
|
||||||
|
any.parsec ==3.1.14.0,
|
||||||
any.parser-combinators ==1.3.0,
|
any.parser-combinators ==1.3.0,
|
||||||
parser-combinators -dev,
|
parser-combinators -dev,
|
||||||
any.polyparse ==1.13,
|
any.polyparse ==1.13,
|
||||||
any.pretty ==1.1.3.6,
|
any.pretty ==1.1.3.6,
|
||||||
any.pretty-terminal ==0.1.0.0,
|
any.pretty-terminal ==0.1.0.0,
|
||||||
any.primitive ==0.8.0.0,
|
any.primitive ==0.7.4.0,
|
||||||
any.process ==1.6.18.0,
|
any.process ==1.6.13.2,
|
||||||
any.profunctors ==5.6.2,
|
any.profunctors ==5.6.2,
|
||||||
any.quickcheck-arbitrary-adt ==0.3.1.0,
|
any.quickcheck-arbitrary-adt ==0.3.1.0,
|
||||||
any.quickcheck-io ==0.2.0,
|
any.quickcheck-io ==0.2.0,
|
||||||
any.random ==1.2.1.2,
|
any.random ==1.2.1.1,
|
||||||
any.recursion-schemes ==5.2.2.5,
|
any.recursion-schemes ==5.2.2.2,
|
||||||
recursion-schemes +template-haskell,
|
recursion-schemes +template-haskell,
|
||||||
any.regex-base ==0.94.0.2,
|
any.regex-base ==0.94.0.2,
|
||||||
any.regex-posix ==0.96.0.1,
|
any.regex-posix ==0.96.0.1,
|
||||||
regex-posix -_regex-posix-clib,
|
regex-posix -_regex-posix-clib,
|
||||||
any.resourcet ==1.2.6,
|
any.resourcet ==1.2.5,
|
||||||
any.retry ==0.9.3.1,
|
any.retry ==0.8.1.2,
|
||||||
retry -lib-werror,
|
retry -lib-werror,
|
||||||
any.rts ==1.0.1,
|
any.rts ==1.0.1,
|
||||||
any.safe ==0.3.21,
|
any.safe ==0.3.19,
|
||||||
any.safe-exceptions ==0.1.7.4,
|
any.safe-exceptions ==0.1.7.3,
|
||||||
any.scientific ==0.3.7.0,
|
any.scientific ==0.3.7.0,
|
||||||
scientific -bytestring-builder -integer-simple,
|
scientific -bytestring-builder -integer-simple,
|
||||||
any.semialign ==1.3,
|
any.semialign ==1.2.0.1,
|
||||||
semialign +semigroupoids,
|
semialign +semigroupoids,
|
||||||
any.semigroupoids ==6.0.0.1,
|
any.semigroupoids ==5.3.7,
|
||||||
semigroupoids +comonad +containers +contravariant +distributive +tagged +unordered-containers,
|
semigroupoids +comonad +containers +contravariant +distributive +tagged +unordered-containers,
|
||||||
any.setenv ==0.1.1.3,
|
any.setenv ==0.1.1.3,
|
||||||
any.split ==0.2.5,
|
any.split ==0.2.3.4,
|
||||||
any.splitmix ==0.1.0.5,
|
any.splitmix ==0.1.0.4,
|
||||||
splitmix -optimised-mixer,
|
splitmix -optimised-mixer,
|
||||||
any.stm ==2.5.0.1,
|
any.stm ==2.5.0.1,
|
||||||
any.streamly ==0.8.3,
|
any.streamly ==0.8.2,
|
||||||
streamly -debug -dev -fusion-plugin -has-llvm -inspection -limit-build-mem -no-fusion +opt -streamk -streamly-core -use-c-malloc +use-unliftio,
|
streamly -debug -dev -fusion-plugin -has-llvm -inspection -limit-build-mem -no-fusion +opt -streamk -streamly-core -use-c-malloc +use-unliftio,
|
||||||
any.strict ==0.5,
|
any.strict ==0.4.0.1,
|
||||||
|
strict +assoc,
|
||||||
any.strict-base ==0.4.0.0,
|
any.strict-base ==0.4.0.0,
|
||||||
any.tagged ==0.8.8,
|
any.tagged ==0.8.6.1,
|
||||||
tagged +deepseq +transformers,
|
tagged +deepseq +transformers,
|
||||||
any.tagsoup ==0.14.8,
|
any.tagsoup ==0.14.8,
|
||||||
any.tar ==0.6.0.0,
|
|
||||||
any.tasty ==1.5,
|
|
||||||
tasty +unix,
|
|
||||||
any.tasty-hunit ==0.10.1,
|
|
||||||
any.template-haskell ==2.16.0.0,
|
any.template-haskell ==2.16.0.0,
|
||||||
any.temporary ==1.3,
|
any.temporary ==1.3,
|
||||||
any.terminal-progress-bar ==0.4.2,
|
any.terminal-progress-bar ==0.4.1,
|
||||||
any.terminal-size ==0.3.4,
|
any.terminal-size ==0.3.2.1,
|
||||||
any.terminfo ==0.4.1.4,
|
any.terminfo ==0.4.1.4,
|
||||||
any.text ==2.0.2,
|
any.text ==1.2.4.1,
|
||||||
text -developer +simdutf,
|
|
||||||
any.text-binary ==0.2.1.1,
|
|
||||||
any.text-iso8601 ==0.1,
|
|
||||||
any.text-short ==0.1.5,
|
any.text-short ==0.1.5,
|
||||||
text-short -asserts,
|
text-short -asserts,
|
||||||
any.text-zipper ==0.13,
|
any.text-zipper ==0.11,
|
||||||
any.tf-random ==0.5,
|
any.tf-random ==0.5,
|
||||||
any.th-abstraction ==0.6.0.0,
|
any.th-abstraction ==0.4.3.0,
|
||||||
any.th-compat ==0.1.4,
|
any.th-compat ==0.1.3,
|
||||||
any.th-lift ==0.8.4,
|
any.th-lift ==0.8.2,
|
||||||
any.th-lift-instances ==0.1.20,
|
any.th-lift-instances ==0.1.19,
|
||||||
any.these ==1.2,
|
any.these ==1.1.1.1,
|
||||||
|
these +assoc,
|
||||||
any.time ==1.9.3,
|
any.time ==1.9.3,
|
||||||
any.time-compat ==1.9.6.1,
|
any.time-compat ==1.9.6.1,
|
||||||
time-compat -old-locale,
|
time-compat -old-locale,
|
||||||
any.transformers ==0.5.6.2,
|
any.transformers ==0.5.6.2,
|
||||||
any.transformers-base ==0.4.6,
|
any.transformers-base ==0.4.6,
|
||||||
transformers-base +orphaninstances,
|
transformers-base +orphaninstances,
|
||||||
any.transformers-compat ==0.7.2,
|
any.transformers-compat ==0.7.1,
|
||||||
transformers-compat -five +five-three -four +generic-deriving +mtl -three -two,
|
transformers-compat -five +five-three -four +generic-deriving +mtl -three -two,
|
||||||
any.unicode-data ==0.3.1,
|
any.unicode-data ==0.3.0,
|
||||||
unicode-data -ucd2haskell,
|
unicode-data -ucd2haskell,
|
||||||
any.unix ==2.8.5.0,
|
any.unix ==2.7.2.2,
|
||||||
unix -os-string,
|
any.unix-bytestring ==0.3.7.7,
|
||||||
any.unix-bytestring ==0.3.7.8,
|
any.unix-compat ==0.6,
|
||||||
any.unix-compat ==0.7.1,
|
|
||||||
unix-compat -old-time,
|
unix-compat -old-time,
|
||||||
any.unliftio-core ==0.2.1.0,
|
any.unliftio-core ==0.2.0.1,
|
||||||
any.unordered-containers ==0.2.20,
|
any.unordered-containers ==0.2.19.1,
|
||||||
unordered-containers -debug,
|
unordered-containers -debug,
|
||||||
any.uri-bytestring ==0.3.3.1,
|
any.uri-bytestring ==0.3.3.1,
|
||||||
uri-bytestring -lib-werror,
|
uri-bytestring -lib-werror,
|
||||||
any.utf8-string ==1.0.2,
|
any.utf8-string ==1.0.2,
|
||||||
any.uuid-types ==1.0.5.1,
|
any.uuid-types ==1.0.5,
|
||||||
any.vector ==0.13.1.0,
|
any.vector ==0.12.3.1,
|
||||||
vector +boundschecks -internalchecks -unsafechecks -wall,
|
vector +boundschecks -internalchecks -unsafechecks -wall,
|
||||||
any.vector-binary-instances ==0.2.5.2,
|
any.versions ==5.0.3,
|
||||||
any.vector-stream ==0.1.0.1,
|
any.vty ==5.33,
|
||||||
any.versions ==6.0.6,
|
|
||||||
any.vty ==6.2,
|
|
||||||
any.vty-crossplatform ==0.4.0.0,
|
|
||||||
vty-crossplatform -demos,
|
|
||||||
any.vty-unix ==0.2.0.0,
|
|
||||||
any.witherable ==0.4.2,
|
any.witherable ==0.4.2,
|
||||||
any.word-wrap ==0.5,
|
any.word-wrap ==0.5,
|
||||||
any.word8 ==0.1.3,
|
any.word8 ==0.1.3,
|
||||||
any.xor ==0.0.1.2,
|
any.xor ==0.0.1.1,
|
||||||
any.yaml-streamly ==0.12.4,
|
any.yaml-streamly ==0.12.1,
|
||||||
yaml-streamly +no-examples +no-exe,
|
yaml-streamly +no-examples +no-exe,
|
||||||
any.zlib ==0.6.3.0,
|
any.zlib ==0.6.3.0,
|
||||||
zlib -bundled-c-zlib -non-blocking-ffi -pkg-config,
|
zlib -bundled-c-zlib -non-blocking-ffi -pkg-config,
|
||||||
any.zlib-bindings ==0.1.1.5
|
any.zlib-bindings ==0.1.1.5
|
||||||
index-state: hackage.haskell.org 2024-03-13T09:43:35Z
|
index-state: hackage.haskell.org 2022-06-04T19:47:01Z
|
@ -1,60 +0,0 @@
|
|||||||
packages: ./ghcup.cabal
|
|
||||||
|
|
||||||
optional-packages: ./vendored/*/*.cabal
|
|
||||||
|
|
||||||
if impl(ghc < 9.0)
|
|
||||||
package ghcup
|
|
||||||
flags: +tui -tar
|
|
||||||
else
|
|
||||||
package ghcup
|
|
||||||
flags: +tui +tar
|
|
||||||
|
|
||||||
constraints: http-io-streams -brotli,
|
|
||||||
any.aeson >= 2.0.1.0,
|
|
||||||
any.hsc2hs ==0.68.8,
|
|
||||||
bzlib-conduit >= 0.3.0.3,
|
|
||||||
bz2 >= 1.0.1.1,
|
|
||||||
bzlib >= 0.5.2.0,
|
|
||||||
directory >= 1.3.8.3,
|
|
||||||
filepath == 1.4.101.0 || == 1.4.300.1 || >= 1.5.2.0
|
|
||||||
|
|
||||||
if os(mingw32)
|
|
||||||
constraints: zlib +bundled-c-zlib,
|
|
||||||
lzma +static,
|
|
||||||
text -simdutf,
|
|
||||||
vty-windows >=0.2.0.2
|
|
||||||
|
|
||||||
if impl(ghc >= 9.4)
|
|
||||||
constraints: language-c >= 0.9.3
|
|
||||||
|
|
||||||
|
|
||||||
source-repository-package
|
|
||||||
type: git
|
|
||||||
location: https://github.com/haskell/tar.git
|
|
||||||
tag: d94a988be4311b830149a9f8fc16739927e5fc1c
|
|
||||||
|
|
||||||
source-repository-package
|
|
||||||
type: git
|
|
||||||
location: https://github.com/hasufell/uri-bytestring.git
|
|
||||||
tag: 4fb5ed14b500c192e6e7a97f6b2b1eb478806001
|
|
||||||
|
|
||||||
package libarchive
|
|
||||||
flags: -system-libarchive
|
|
||||||
|
|
||||||
package aeson-pretty
|
|
||||||
flags: +lib-only
|
|
||||||
|
|
||||||
package cabal-plan
|
|
||||||
flags: -exe
|
|
||||||
|
|
||||||
package aeson
|
|
||||||
flags: +ordered-keymap
|
|
||||||
|
|
||||||
package streamly
|
|
||||||
flags: +use-unliftio
|
|
||||||
|
|
||||||
package *
|
|
||||||
test-show-details: direct
|
|
||||||
|
|
||||||
allow-newer: cabal-install-parsers:tar, streamly:Win32
|
|
||||||
|
|
@ -1,273 +0,0 @@
|
|||||||
active-repositories: hackage.haskell.org:merge
|
|
||||||
constraints: any.Cabal ==3.10.2.1,
|
|
||||||
any.Cabal-syntax ==3.10.2.0,
|
|
||||||
any.HUnit ==1.6.2.0,
|
|
||||||
any.HsOpenSSL ==0.11.7.6,
|
|
||||||
HsOpenSSL -fast-bignum -homebrew-openssl -macports-openssl -use-pkg-config,
|
|
||||||
any.OneTuple ==0.4.1.1,
|
|
||||||
any.QuickCheck ==2.14.3,
|
|
||||||
QuickCheck -old-random +templatehaskell,
|
|
||||||
any.StateVar ==1.2.2,
|
|
||||||
any.abstract-deque ==0.3,
|
|
||||||
abstract-deque -usecas,
|
|
||||||
any.aeson ==2.2.1.0,
|
|
||||||
aeson +ordered-keymap,
|
|
||||||
any.aeson-pretty ==0.8.10,
|
|
||||||
aeson-pretty +lib-only,
|
|
||||||
any.alex ==3.5.1.0,
|
|
||||||
any.ansi-terminal ==1.0.2,
|
|
||||||
ansi-terminal -example,
|
|
||||||
any.ansi-terminal-types ==0.11.5,
|
|
||||||
any.ansi-wl-pprint ==0.6.9,
|
|
||||||
ansi-wl-pprint -example,
|
|
||||||
any.array ==0.5.4.0,
|
|
||||||
any.assoc ==1.1,
|
|
||||||
assoc +tagged,
|
|
||||||
any.async ==2.2.5,
|
|
||||||
async -bench,
|
|
||||||
any.atomic-primops ==0.8.5,
|
|
||||||
atomic-primops -debug,
|
|
||||||
any.attoparsec ==0.14.4,
|
|
||||||
attoparsec -developer,
|
|
||||||
any.base ==4.15.1.0,
|
|
||||||
any.base-compat ==0.13.1,
|
|
||||||
any.base-orphans ==0.9.1,
|
|
||||||
any.base16-bytestring ==1.0.2.0,
|
|
||||||
any.base64-bytestring ==1.2.1.0,
|
|
||||||
any.bifunctors ==5.6.1,
|
|
||||||
bifunctors +tagged,
|
|
||||||
any.bimap ==0.5.0,
|
|
||||||
any.binary ==0.8.9.1,
|
|
||||||
any.binary-instances ==1.0.4,
|
|
||||||
any.binary-orphans ==1.0.4.1,
|
|
||||||
any.bindings-DSL ==1.0.25,
|
|
||||||
any.bitvec ==1.1.5.0,
|
|
||||||
bitvec +simd,
|
|
||||||
any.blaze-builder ==0.4.2.3,
|
|
||||||
any.brick ==2.1.1,
|
|
||||||
brick -demos,
|
|
||||||
any.bytestring ==0.11.5.3,
|
|
||||||
any.bz2 ==1.0.1.1,
|
|
||||||
bz2 -cross +with-bzlib,
|
|
||||||
any.bzip2-clib ==1.0.8,
|
|
||||||
any.bzlib-conduit ==0.3.0.3,
|
|
||||||
any.c2hs ==0.28.8,
|
|
||||||
c2hs +base3 -regression,
|
|
||||||
any.cabal-install-parsers ==0.6.1.1,
|
|
||||||
any.cabal-plan ==0.7.3.0,
|
|
||||||
cabal-plan -_ -exe -license-report,
|
|
||||||
any.call-stack ==0.4.0,
|
|
||||||
any.case-insensitive ==1.2.1.0,
|
|
||||||
any.casing ==0.1.4.1,
|
|
||||||
any.cereal ==0.5.8.3,
|
|
||||||
cereal -bytestring-builder,
|
|
||||||
any.colour ==2.3.6,
|
|
||||||
any.comonad ==5.0.8,
|
|
||||||
comonad +containers +distributive +indexed-traversable,
|
|
||||||
any.conduit ==1.3.5,
|
|
||||||
any.conduit-extra ==1.3.6,
|
|
||||||
any.conduit-zstd ==0.0.2.0,
|
|
||||||
any.config-ini ==0.2.7.0,
|
|
||||||
config-ini -enable-doctests,
|
|
||||||
any.containers ==0.6.4.1,
|
|
||||||
any.contravariant ==1.5.5,
|
|
||||||
contravariant +semigroups +statevar +tagged,
|
|
||||||
any.cryptohash-sha1 ==0.11.101.0,
|
|
||||||
any.cryptohash-sha256 ==0.11.102.1,
|
|
||||||
cryptohash-sha256 -exe +use-cbits,
|
|
||||||
any.data-array-byte ==0.1.0.1,
|
|
||||||
any.data-clist ==0.2,
|
|
||||||
any.data-default-class ==0.1.2.0,
|
|
||||||
any.data-fix ==0.3.2,
|
|
||||||
any.deepseq ==1.4.5.0,
|
|
||||||
any.digest ==0.0.2.1,
|
|
||||||
digest -have_arm64_crc32c -have_builtin_prefetch -have_mm_prefetch -have_sse42 -have_strong_getauxval -have_weak_getauxval +pkg-config,
|
|
||||||
any.directory ==1.3.8.3,
|
|
||||||
directory -os-string,
|
|
||||||
any.disk-free-space ==0.1.0.1,
|
|
||||||
any.distributive ==0.6.2.1,
|
|
||||||
distributive +semigroups +tagged,
|
|
||||||
any.dlist ==1.0,
|
|
||||||
dlist -werror,
|
|
||||||
any.exceptions ==0.10.4,
|
|
||||||
any.file-uri ==0.1.0.0,
|
|
||||||
any.filepath ==1.4.101.0,
|
|
||||||
filepath -cpphs,
|
|
||||||
any.foldable1-classes-compat ==0.1,
|
|
||||||
foldable1-classes-compat +tagged,
|
|
||||||
any.free ==5.2,
|
|
||||||
any.fusion-plugin-types ==0.1.0,
|
|
||||||
any.generic-arbitrary ==0.2.2,
|
|
||||||
any.generically ==0.1.1,
|
|
||||||
any.ghc-bignum ==1.1,
|
|
||||||
any.ghc-boot-th ==9.0.2,
|
|
||||||
any.ghc-byteorder ==4.11.0.0.10,
|
|
||||||
any.ghc-prim ==0.7.0,
|
|
||||||
any.happy ==1.20.1.1,
|
|
||||||
any.hashable ==1.4.3.0,
|
|
||||||
hashable +integer-gmp -random-initial-seed,
|
|
||||||
any.haskell-lexer ==1.1.1,
|
|
||||||
any.haskus-utils-data ==1.4,
|
|
||||||
any.haskus-utils-types ==1.5.1,
|
|
||||||
any.haskus-utils-variant ==3.3,
|
|
||||||
any.heaps ==0.4,
|
|
||||||
any.hsc2hs ==0.68.8,
|
|
||||||
hsc2hs -in-ghc-tree,
|
|
||||||
any.hspec ==2.10.10,
|
|
||||||
any.hspec-core ==2.10.10,
|
|
||||||
any.hspec-discover ==2.10.10,
|
|
||||||
any.hspec-expectations ==0.8.2,
|
|
||||||
any.hspec-golden-aeson ==0.9.0.0,
|
|
||||||
any.http-io-streams ==0.1.7.0,
|
|
||||||
http-io-streams -brotli +fast-xor,
|
|
||||||
any.indexed-profunctors ==0.1.1.1,
|
|
||||||
any.indexed-traversable ==0.1.3,
|
|
||||||
any.indexed-traversable-instances ==0.1.1.2,
|
|
||||||
any.integer-conversion ==0.1.0.1,
|
|
||||||
any.integer-logarithms ==1.0.3.1,
|
|
||||||
integer-logarithms -check-bounds +integer-gmp,
|
|
||||||
any.io-streams ==1.5.2.2,
|
|
||||||
io-streams +network -nointeractivetests +zlib,
|
|
||||||
any.language-c ==0.9.3,
|
|
||||||
language-c -allwarnings +iecfpextension +usebytestrings,
|
|
||||||
any.libyaml-streamly ==0.2.2.1,
|
|
||||||
libyaml-streamly -no-unicode +system-libyaml,
|
|
||||||
any.lockfree-queue ==0.2.4,
|
|
||||||
any.lukko ==0.1.1.3,
|
|
||||||
lukko +ofd-locking,
|
|
||||||
any.lzma-static ==5.2.5.5,
|
|
||||||
any.megaparsec ==9.2.2,
|
|
||||||
megaparsec -dev,
|
|
||||||
any.microlens ==0.4.13.1,
|
|
||||||
any.microlens-mtl ==0.2.0.3,
|
|
||||||
any.microlens-th ==0.4.3.14,
|
|
||||||
any.monad-control ==1.0.3.1,
|
|
||||||
any.mono-traversable ==1.0.17.0,
|
|
||||||
any.mtl ==2.2.2,
|
|
||||||
any.mtl-compat ==0.2.2,
|
|
||||||
mtl-compat -two-point-one -two-point-two,
|
|
||||||
any.network ==3.1.4.0,
|
|
||||||
network -devel,
|
|
||||||
any.network-uri ==2.6.4.2,
|
|
||||||
any.openssl-streams ==1.2.3.0,
|
|
||||||
any.optics ==0.4.2.1,
|
|
||||||
any.optics-core ==0.4.1.1,
|
|
||||||
optics-core -explicit-generic-labels,
|
|
||||||
any.optics-extra ==0.4.2.1,
|
|
||||||
any.optics-th ==0.4.1,
|
|
||||||
any.optparse-applicative ==0.17.1.0,
|
|
||||||
optparse-applicative +process,
|
|
||||||
any.os-release ==1.0.2.1,
|
|
||||||
os-release -devel,
|
|
||||||
any.parsec ==3.1.17.0,
|
|
||||||
any.parser-combinators ==1.3.0,
|
|
||||||
parser-combinators -dev,
|
|
||||||
any.pretty ==1.1.3.6,
|
|
||||||
any.pretty-terminal ==0.1.0.0,
|
|
||||||
any.primitive ==0.8.0.0,
|
|
||||||
any.process ==1.6.18.0,
|
|
||||||
any.profunctors ==5.6.2,
|
|
||||||
any.quickcheck-arbitrary-adt ==0.3.1.0,
|
|
||||||
any.quickcheck-io ==0.2.0,
|
|
||||||
any.random ==1.2.1.2,
|
|
||||||
any.recursion-schemes ==5.2.2.5,
|
|
||||||
recursion-schemes +template-haskell,
|
|
||||||
any.regex-base ==0.94.0.2,
|
|
||||||
any.regex-posix ==0.96.0.1,
|
|
||||||
regex-posix -_regex-posix-clib,
|
|
||||||
any.resourcet ==1.2.6,
|
|
||||||
any.retry ==0.9.3.1,
|
|
||||||
retry -lib-werror,
|
|
||||||
any.rts ==1.0.2,
|
|
||||||
any.safe ==0.3.21,
|
|
||||||
any.safe-exceptions ==0.1.7.4,
|
|
||||||
any.scientific ==0.3.7.0,
|
|
||||||
scientific -bytestring-builder -integer-simple,
|
|
||||||
any.semialign ==1.3,
|
|
||||||
semialign +semigroupoids,
|
|
||||||
any.semigroupoids ==6.0.0.1,
|
|
||||||
semigroupoids +comonad +containers +contravariant +distributive +tagged +unordered-containers,
|
|
||||||
any.setenv ==0.1.1.3,
|
|
||||||
any.split ==0.2.5,
|
|
||||||
any.splitmix ==0.1.0.5,
|
|
||||||
splitmix -optimised-mixer,
|
|
||||||
any.stm ==2.5.0.0,
|
|
||||||
any.streaming-commons ==0.2.2.6,
|
|
||||||
streaming-commons -use-bytestring-builder,
|
|
||||||
any.streamly ==0.8.3,
|
|
||||||
streamly -debug -dev -fusion-plugin -has-llvm -inspection -limit-build-mem -no-fusion +opt -streamk -streamly-core -use-c-malloc +use-unliftio,
|
|
||||||
any.strict ==0.5,
|
|
||||||
any.strict-base ==0.4.0.0,
|
|
||||||
any.tagged ==0.8.8,
|
|
||||||
tagged +deepseq +transformers,
|
|
||||||
any.tagsoup ==0.14.8,
|
|
||||||
any.tar ==0.6.0.0,
|
|
||||||
any.tasty ==1.5,
|
|
||||||
tasty +unix,
|
|
||||||
any.tasty-hunit ==0.10.1,
|
|
||||||
any.template-haskell ==2.17.0.0,
|
|
||||||
any.temporary ==1.3,
|
|
||||||
any.terminal-progress-bar ==0.4.2,
|
|
||||||
any.terminal-size ==0.3.4,
|
|
||||||
any.terminfo ==0.4.1.5,
|
|
||||||
any.text ==2.0.2,
|
|
||||||
text -developer +simdutf,
|
|
||||||
any.text-binary ==0.2.1.1,
|
|
||||||
any.text-iso8601 ==0.1,
|
|
||||||
any.text-short ==0.1.5,
|
|
||||||
text-short -asserts,
|
|
||||||
any.text-zipper ==0.13,
|
|
||||||
any.tf-random ==0.5,
|
|
||||||
any.th-abstraction ==0.6.0.0,
|
|
||||||
any.th-compat ==0.1.4,
|
|
||||||
any.th-lift ==0.8.4,
|
|
||||||
any.th-lift-instances ==0.1.20,
|
|
||||||
any.these ==1.2,
|
|
||||||
any.time ==1.9.3,
|
|
||||||
any.time-compat ==1.9.6.1,
|
|
||||||
time-compat -old-locale,
|
|
||||||
any.transformers ==0.5.6.2,
|
|
||||||
any.transformers-base ==0.4.6,
|
|
||||||
transformers-base +orphaninstances,
|
|
||||||
any.transformers-compat ==0.7.2,
|
|
||||||
transformers-compat -five +five-three -four +generic-deriving +mtl -three -two,
|
|
||||||
any.typed-process ==0.2.11.1,
|
|
||||||
any.unicode-data ==0.3.1,
|
|
||||||
unicode-data -ucd2haskell,
|
|
||||||
any.unix ==2.8.5.0,
|
|
||||||
unix -os-string,
|
|
||||||
any.unix-bytestring ==0.3.7.8,
|
|
||||||
any.unix-compat ==0.7.1,
|
|
||||||
unix-compat -old-time,
|
|
||||||
any.unliftio-core ==0.2.1.0,
|
|
||||||
any.unordered-containers ==0.2.20,
|
|
||||||
unordered-containers -debug,
|
|
||||||
any.uri-bytestring ==0.3.3.1,
|
|
||||||
uri-bytestring -lib-werror,
|
|
||||||
any.utf8-string ==1.0.2,
|
|
||||||
any.uuid-types ==1.0.5.1,
|
|
||||||
any.vector ==0.13.1.0,
|
|
||||||
vector +boundschecks -internalchecks -unsafechecks -wall,
|
|
||||||
any.vector-algorithms ==0.9.0.1,
|
|
||||||
vector-algorithms +bench +boundschecks -internalchecks -llvm +properties -unsafechecks,
|
|
||||||
any.vector-binary-instances ==0.2.5.2,
|
|
||||||
any.vector-stream ==0.1.0.1,
|
|
||||||
any.versions ==6.0.6,
|
|
||||||
any.vty ==6.2,
|
|
||||||
any.vty-crossplatform ==0.4.0.0,
|
|
||||||
vty-crossplatform -demos,
|
|
||||||
any.vty-unix ==0.2.0.0,
|
|
||||||
any.witherable ==0.4.2,
|
|
||||||
any.word-wrap ==0.5,
|
|
||||||
any.word8 ==0.1.3,
|
|
||||||
any.xor ==0.0.1.2,
|
|
||||||
any.yaml-streamly ==0.12.4,
|
|
||||||
yaml-streamly +no-examples +no-exe,
|
|
||||||
any.zip ==2.0.0,
|
|
||||||
zip -dev -disable-bzip2 -disable-zstd,
|
|
||||||
any.zlib ==0.6.3.0,
|
|
||||||
zlib -bundled-c-zlib -non-blocking-ffi -pkg-config,
|
|
||||||
any.zlib-bindings ==0.1.1.5,
|
|
||||||
any.zstd ==0.1.3.0,
|
|
||||||
zstd +standalone
|
|
||||||
index-state: hackage.haskell.org 2024-03-13T09:43:35Z
|
|
@ -1,61 +0,0 @@
|
|||||||
packages: ./ghcup.cabal
|
|
||||||
|
|
||||||
optional-packages: ./vendored/*/*.cabal
|
|
||||||
|
|
||||||
if impl(ghc < 9.0)
|
|
||||||
package ghcup
|
|
||||||
flags: +tui -tar
|
|
||||||
else
|
|
||||||
package ghcup
|
|
||||||
flags: +tui +tar
|
|
||||||
|
|
||||||
constraints: http-io-streams -brotli,
|
|
||||||
any.aeson >= 2.0.1.0,
|
|
||||||
any.hsc2hs ==0.68.8,
|
|
||||||
bzlib-conduit >= 0.3.0.3,
|
|
||||||
bz2 >= 1.0.1.1,
|
|
||||||
bzlib >= 0.5.2.0,
|
|
||||||
directory >= 1.3.8.3,
|
|
||||||
filepath == 1.4.101.0 || == 1.4.300.1 || >= 1.5.2.0
|
|
||||||
|
|
||||||
if os(mingw32)
|
|
||||||
constraints: zlib +bundled-c-zlib,
|
|
||||||
lzma +static,
|
|
||||||
text -simdutf,
|
|
||||||
vty-windows >=0.2.0.2
|
|
||||||
|
|
||||||
if impl(ghc >= 9.4)
|
|
||||||
constraints: language-c >= 0.9.3
|
|
||||||
|
|
||||||
|
|
||||||
source-repository-package
|
|
||||||
type: git
|
|
||||||
location: https://github.com/haskell/tar.git
|
|
||||||
tag: d94a988be4311b830149a9f8fc16739927e5fc1c
|
|
||||||
|
|
||||||
source-repository-package
|
|
||||||
type: git
|
|
||||||
location: https://github.com/hasufell/uri-bytestring.git
|
|
||||||
tag: 4fb5ed14b500c192e6e7a97f6b2b1eb478806001
|
|
||||||
|
|
||||||
package libarchive
|
|
||||||
flags: -system-libarchive
|
|
||||||
|
|
||||||
package aeson-pretty
|
|
||||||
flags: +lib-only
|
|
||||||
|
|
||||||
package cabal-plan
|
|
||||||
flags: -exe
|
|
||||||
|
|
||||||
package aeson
|
|
||||||
flags: +ordered-keymap
|
|
||||||
|
|
||||||
package streamly
|
|
||||||
flags: +use-unliftio
|
|
||||||
|
|
||||||
package *
|
|
||||||
test-show-details: direct
|
|
||||||
|
|
||||||
allow-newer: cabal-install-parsers:tar, streamly:Win32
|
|
||||||
|
|
||||||
|
|
@ -1,258 +0,0 @@
|
|||||||
active-repositories: hackage.haskell.org:merge
|
|
||||||
constraints: any.Cabal ==3.10.2.1,
|
|
||||||
any.Cabal-syntax ==3.10.2.0,
|
|
||||||
any.HUnit ==1.6.2.0,
|
|
||||||
any.OneTuple ==0.4.1.1,
|
|
||||||
any.QuickCheck ==2.14.3,
|
|
||||||
QuickCheck -old-random +templatehaskell,
|
|
||||||
any.StateVar ==1.2.2,
|
|
||||||
any.Win32 ==2.12.0.1 || ==2.13.4.0,
|
|
||||||
any.abstract-deque ==0.3,
|
|
||||||
abstract-deque -usecas,
|
|
||||||
any.aeson ==2.2.1.0,
|
|
||||||
aeson +ordered-keymap,
|
|
||||||
any.aeson-pretty ==0.8.10,
|
|
||||||
aeson-pretty +lib-only,
|
|
||||||
any.alex ==3.5.1.0,
|
|
||||||
any.ansi-terminal ==1.0.2,
|
|
||||||
ansi-terminal -example,
|
|
||||||
any.ansi-terminal-types ==0.11.5,
|
|
||||||
any.ansi-wl-pprint ==0.6.9,
|
|
||||||
ansi-wl-pprint -example,
|
|
||||||
any.array ==0.5.4.0,
|
|
||||||
any.assoc ==1.1,
|
|
||||||
assoc +tagged,
|
|
||||||
any.async ==2.2.5,
|
|
||||||
async -bench,
|
|
||||||
any.atomic-primops ==0.8.5,
|
|
||||||
atomic-primops -debug,
|
|
||||||
any.attoparsec ==0.14.4,
|
|
||||||
attoparsec -developer,
|
|
||||||
any.base ==4.15.1.0,
|
|
||||||
any.base-compat ==0.13.1,
|
|
||||||
any.base-orphans ==0.9.1,
|
|
||||||
any.base16-bytestring ==1.0.2.0,
|
|
||||||
any.bifunctors ==5.6.1,
|
|
||||||
bifunctors +tagged,
|
|
||||||
any.bimap ==0.5.0,
|
|
||||||
any.binary ==0.8.9.1,
|
|
||||||
any.binary-instances ==1.0.4,
|
|
||||||
any.binary-orphans ==1.0.4.1,
|
|
||||||
any.bindings-DSL ==1.0.25,
|
|
||||||
any.bitvec ==1.1.5.0,
|
|
||||||
bitvec +simd,
|
|
||||||
any.blaze-builder ==0.4.2.3,
|
|
||||||
any.brick ==2.1.1,
|
|
||||||
brick -demos,
|
|
||||||
any.bytestring ==0.11.5.3,
|
|
||||||
any.bz2 ==1.0.1.1,
|
|
||||||
bz2 -cross +with-bzlib,
|
|
||||||
any.bzip2-clib ==1.0.8,
|
|
||||||
any.bzlib-conduit ==0.3.0.3,
|
|
||||||
any.c2hs ==0.28.8,
|
|
||||||
c2hs +base3 -regression,
|
|
||||||
any.cabal-install-parsers ==0.6.1.1,
|
|
||||||
any.cabal-plan ==0.7.3.0,
|
|
||||||
cabal-plan -_ -exe -license-report,
|
|
||||||
any.call-stack ==0.4.0,
|
|
||||||
any.case-insensitive ==1.2.1.0,
|
|
||||||
any.casing ==0.1.4.1,
|
|
||||||
any.cereal ==0.5.8.3,
|
|
||||||
cereal -bytestring-builder,
|
|
||||||
any.colour ==2.3.6,
|
|
||||||
any.comonad ==5.0.8,
|
|
||||||
comonad +containers +distributive +indexed-traversable,
|
|
||||||
any.conduit ==1.3.5,
|
|
||||||
any.conduit-extra ==1.3.6,
|
|
||||||
any.conduit-zstd ==0.0.2.0,
|
|
||||||
any.config-ini ==0.2.7.0,
|
|
||||||
config-ini -enable-doctests,
|
|
||||||
any.containers ==0.6.4.1,
|
|
||||||
any.contravariant ==1.5.5,
|
|
||||||
contravariant +semigroups +statevar +tagged,
|
|
||||||
any.cryptohash-sha256 ==0.11.102.1,
|
|
||||||
cryptohash-sha256 -exe +use-cbits,
|
|
||||||
any.data-array-byte ==0.1.0.1,
|
|
||||||
any.data-clist ==0.2,
|
|
||||||
any.data-default-class ==0.1.2.0,
|
|
||||||
any.data-fix ==0.3.2,
|
|
||||||
any.deepseq ==1.4.5.0,
|
|
||||||
any.digest ==0.0.2.1,
|
|
||||||
digest -have_arm64_crc32c -have_builtin_prefetch -have_mm_prefetch -have_sse42 -have_strong_getauxval -have_weak_getauxval +pkg-config,
|
|
||||||
any.directory ==1.3.6.2 || ==1.3.8.3,
|
|
||||||
directory -os-string,
|
|
||||||
any.disk-free-space ==0.1.0.1,
|
|
||||||
any.distributive ==0.6.2.1,
|
|
||||||
distributive +semigroups +tagged,
|
|
||||||
any.dlist ==1.0,
|
|
||||||
dlist -werror,
|
|
||||||
any.exceptions ==0.10.4,
|
|
||||||
any.file-uri ==0.1.0.0,
|
|
||||||
any.filepath ==1.4.2.1 || ==1.4.101.0,
|
|
||||||
filepath -cpphs,
|
|
||||||
any.foldable1-classes-compat ==0.1,
|
|
||||||
foldable1-classes-compat +tagged,
|
|
||||||
any.free ==5.2,
|
|
||||||
any.fusion-plugin-types ==0.1.0,
|
|
||||||
any.generic-arbitrary ==0.2.2,
|
|
||||||
any.generically ==0.1.1,
|
|
||||||
any.ghc-bignum ==1.1,
|
|
||||||
any.ghc-boot-th ==9.0.2,
|
|
||||||
any.ghc-prim ==0.7.0,
|
|
||||||
any.happy ==1.20.1.1,
|
|
||||||
any.hashable ==1.4.3.0,
|
|
||||||
hashable +integer-gmp -random-initial-seed,
|
|
||||||
any.haskell-lexer ==1.1.1,
|
|
||||||
any.haskus-utils-data ==1.4,
|
|
||||||
any.haskus-utils-types ==1.5.1,
|
|
||||||
any.haskus-utils-variant ==3.3,
|
|
||||||
any.heaps ==0.4,
|
|
||||||
any.hsc2hs ==0.68.8,
|
|
||||||
hsc2hs -in-ghc-tree,
|
|
||||||
any.hspec ==2.10.10,
|
|
||||||
any.hspec-core ==2.10.10,
|
|
||||||
any.hspec-discover ==2.10.10,
|
|
||||||
any.hspec-expectations ==0.8.2,
|
|
||||||
any.hspec-golden-aeson ==0.9.0.0,
|
|
||||||
any.indexed-profunctors ==0.1.1.1,
|
|
||||||
any.indexed-traversable ==0.1.3,
|
|
||||||
any.indexed-traversable-instances ==0.1.1.2,
|
|
||||||
any.integer-conversion ==0.1.0.1,
|
|
||||||
any.integer-logarithms ==1.0.3.1,
|
|
||||||
integer-logarithms -check-bounds +integer-gmp,
|
|
||||||
any.language-c ==0.9.3,
|
|
||||||
language-c -allwarnings +iecfpextension +usebytestrings,
|
|
||||||
any.libyaml-clib ==0.2.5,
|
|
||||||
any.libyaml-streamly ==0.2.2.1,
|
|
||||||
libyaml-streamly -no-unicode -system-libyaml,
|
|
||||||
any.lockfree-queue ==0.2.4,
|
|
||||||
any.lukko ==0.1.1.3,
|
|
||||||
lukko +ofd-locking,
|
|
||||||
any.lzma-static ==5.2.5.5,
|
|
||||||
any.megaparsec ==9.2.2,
|
|
||||||
megaparsec -dev,
|
|
||||||
any.microlens ==0.4.13.1,
|
|
||||||
any.microlens-mtl ==0.2.0.3,
|
|
||||||
any.microlens-th ==0.4.3.14,
|
|
||||||
any.monad-control ==1.0.3.1,
|
|
||||||
any.mono-traversable ==1.0.17.0,
|
|
||||||
any.mtl ==2.2.2,
|
|
||||||
any.mtl-compat ==0.2.2,
|
|
||||||
mtl-compat -two-point-one -two-point-two,
|
|
||||||
any.network ==3.1.4.0,
|
|
||||||
network -devel,
|
|
||||||
any.network-uri ==2.6.4.2,
|
|
||||||
any.optics ==0.4.2.1,
|
|
||||||
any.optics-core ==0.4.1.1,
|
|
||||||
optics-core -explicit-generic-labels,
|
|
||||||
any.optics-extra ==0.4.2.1,
|
|
||||||
any.optics-th ==0.4.1,
|
|
||||||
any.optparse-applicative ==0.17.1.0,
|
|
||||||
optparse-applicative +process,
|
|
||||||
any.os-release ==1.0.2.1,
|
|
||||||
os-release -devel,
|
|
||||||
any.parsec ==3.1.17.0,
|
|
||||||
any.parser-combinators ==1.3.0,
|
|
||||||
parser-combinators -dev,
|
|
||||||
any.pretty ==1.1.3.6,
|
|
||||||
any.pretty-terminal ==0.1.0.0,
|
|
||||||
any.primitive ==0.8.0.0,
|
|
||||||
any.process ==1.6.13.2 || ==1.6.18.0,
|
|
||||||
any.profunctors ==5.6.2,
|
|
||||||
any.quickcheck-arbitrary-adt ==0.3.1.0,
|
|
||||||
any.quickcheck-io ==0.2.0,
|
|
||||||
any.random ==1.2.1.2,
|
|
||||||
any.recursion-schemes ==5.2.2.5,
|
|
||||||
recursion-schemes +template-haskell,
|
|
||||||
any.regex-base ==0.94.0.2,
|
|
||||||
any.regex-posix ==0.96.0.1,
|
|
||||||
regex-posix -_regex-posix-clib,
|
|
||||||
any.regex-posix-clib ==2.7,
|
|
||||||
any.resourcet ==1.2.6,
|
|
||||||
any.retry ==0.9.3.1,
|
|
||||||
retry -lib-werror,
|
|
||||||
any.rts ==1.0.2,
|
|
||||||
any.safe ==0.3.21,
|
|
||||||
any.safe-exceptions ==0.1.7.4,
|
|
||||||
any.scientific ==0.3.7.0,
|
|
||||||
scientific -bytestring-builder -integer-simple,
|
|
||||||
any.semialign ==1.3,
|
|
||||||
semialign +semigroupoids,
|
|
||||||
any.semigroupoids ==6.0.0.1,
|
|
||||||
semigroupoids +comonad +containers +contravariant +distributive +tagged +unordered-containers,
|
|
||||||
any.setenv ==0.1.1.3,
|
|
||||||
any.split ==0.2.5,
|
|
||||||
any.splitmix ==0.1.0.5,
|
|
||||||
splitmix -optimised-mixer,
|
|
||||||
any.stm ==2.5.0.0,
|
|
||||||
any.streaming-commons ==0.2.2.6,
|
|
||||||
streaming-commons -use-bytestring-builder,
|
|
||||||
any.streamly ==0.8.3,
|
|
||||||
streamly -debug -dev -fusion-plugin -has-llvm -inspection -limit-build-mem -no-fusion +opt -streamk -streamly-core -use-c-malloc +use-unliftio,
|
|
||||||
any.strict ==0.5,
|
|
||||||
any.strict-base ==0.4.0.0,
|
|
||||||
any.tagged ==0.8.8,
|
|
||||||
tagged +deepseq +transformers,
|
|
||||||
any.tagsoup ==0.14.8,
|
|
||||||
any.tar ==0.6.0.0,
|
|
||||||
any.tasty ==1.5,
|
|
||||||
tasty +unix,
|
|
||||||
any.tasty-hunit ==0.10.1,
|
|
||||||
any.template-haskell ==2.17.0.0,
|
|
||||||
any.temporary ==1.3,
|
|
||||||
any.text ==2.0.2,
|
|
||||||
text -developer -simdutf,
|
|
||||||
any.text-binary ==0.2.1.1,
|
|
||||||
any.text-iso8601 ==0.1,
|
|
||||||
any.text-short ==0.1.5,
|
|
||||||
text-short -asserts,
|
|
||||||
any.text-zipper ==0.13,
|
|
||||||
any.tf-random ==0.5,
|
|
||||||
any.th-abstraction ==0.6.0.0,
|
|
||||||
any.th-compat ==0.1.4,
|
|
||||||
any.th-lift ==0.8.4,
|
|
||||||
any.th-lift-instances ==0.1.20,
|
|
||||||
any.these ==1.2,
|
|
||||||
any.time ==1.9.3 || ==1.11.1.2,
|
|
||||||
any.time-compat ==1.9.6.1,
|
|
||||||
time-compat -old-locale,
|
|
||||||
any.transformers ==0.5.6.2,
|
|
||||||
any.transformers-base ==0.4.6,
|
|
||||||
transformers-base +orphaninstances,
|
|
||||||
any.transformers-compat ==0.7.2,
|
|
||||||
transformers-compat -five +five-three -four +generic-deriving +mtl -three -two,
|
|
||||||
any.typed-process ==0.2.11.1,
|
|
||||||
any.unicode-data ==0.3.1,
|
|
||||||
unicode-data -ucd2haskell,
|
|
||||||
any.unix-compat ==0.7.1,
|
|
||||||
unix-compat -old-time,
|
|
||||||
any.unliftio-core ==0.2.1.0,
|
|
||||||
any.unordered-containers ==0.2.20,
|
|
||||||
unordered-containers -debug,
|
|
||||||
any.uri-bytestring ==0.3.3.1,
|
|
||||||
uri-bytestring -lib-werror,
|
|
||||||
any.utf8-string ==1.0.2,
|
|
||||||
any.uuid-types ==1.0.5.1,
|
|
||||||
any.vector ==0.13.1.0,
|
|
||||||
vector +boundschecks -internalchecks -unsafechecks -wall,
|
|
||||||
any.vector-algorithms ==0.9.0.1,
|
|
||||||
vector-algorithms +bench +boundschecks -internalchecks -llvm +properties -unsafechecks,
|
|
||||||
any.vector-binary-instances ==0.2.5.2,
|
|
||||||
any.vector-stream ==0.1.0.1,
|
|
||||||
any.versions ==6.0.6,
|
|
||||||
any.vty ==6.2,
|
|
||||||
any.vty-crossplatform ==0.4.0.0,
|
|
||||||
vty-crossplatform -demos,
|
|
||||||
any.vty-windows ==0.2.0.2,
|
|
||||||
any.witherable ==0.4.2,
|
|
||||||
any.word-wrap ==0.5,
|
|
||||||
any.word8 ==0.1.3,
|
|
||||||
any.yaml-streamly ==0.12.4,
|
|
||||||
yaml-streamly +no-examples +no-exe,
|
|
||||||
any.zip ==2.0.0,
|
|
||||||
zip -dev -disable-bzip2 -disable-zstd,
|
|
||||||
any.zlib ==0.6.3.0,
|
|
||||||
zlib +bundled-c-zlib -non-blocking-ffi -pkg-config,
|
|
||||||
any.zstd ==0.1.3.0,
|
|
||||||
zstd +standalone
|
|
||||||
index-state: hackage.haskell.org 2024-03-15T23:51:46Z
|
|
@ -1,8 +1,37 @@
|
|||||||
if os(mingw32)
|
packages: ./ghcup.cabal
|
||||||
import: cabal.ghc902.Win32.project
|
|
||||||
import: cabal.ghc902.Win32.project.freeze
|
optional-packages: ./vendored/*/*.cabal
|
||||||
else
|
|
||||||
import: cabal.ghc902.Unix.project
|
optimization: 2
|
||||||
import: cabal.ghc902.Unix.project.freeze
|
|
||||||
|
package ghcup
|
||||||
|
tests: True
|
||||||
|
flags: +tui
|
||||||
|
|
||||||
|
source-repository-package
|
||||||
|
type: git
|
||||||
|
location: https://github.com/bgamari/terminal-size.git
|
||||||
|
tag: 34ea816bd63f75f800eedac12c6908c6f3736036
|
||||||
|
|
||||||
|
constraints: http-io-streams -brotli,
|
||||||
|
any.Cabal ==3.6.2.0,
|
||||||
|
any.aeson >= 2.0.1.0,
|
||||||
|
|
||||||
|
package libarchive
|
||||||
|
flags: -system-libarchive
|
||||||
|
|
||||||
|
package aeson-pretty
|
||||||
|
flags: +lib-only
|
||||||
|
|
||||||
|
package cabal-plan
|
||||||
|
flags: -exe
|
||||||
|
|
||||||
|
package aeson
|
||||||
|
flags: +ordered-keymap
|
||||||
|
|
||||||
|
package streamly
|
||||||
|
flags: +use-unliftio
|
||||||
|
|
||||||
|
allow-newer: base, ghc-prim, template-haskell, language-c
|
||||||
|
|
||||||
with-compiler: ghc-9.0.2
|
with-compiler: ghc-9.0.2
|
||||||
|
238
cabal.ghc902.project.freeze
Normal file
238
cabal.ghc902.project.freeze
Normal file
@ -0,0 +1,238 @@
|
|||||||
|
active-repositories: hackage.haskell.org:merge
|
||||||
|
constraints: any.Cabal ==3.6.2.0,
|
||||||
|
Cabal -bundled-binary-generic,
|
||||||
|
any.HUnit ==1.6.2.0,
|
||||||
|
any.HsOpenSSL ==0.11.7.2,
|
||||||
|
HsOpenSSL -fast-bignum -homebrew-openssl -macports-openssl -use-pkg-config,
|
||||||
|
any.OneTuple ==0.3.1,
|
||||||
|
any.QuickCheck ==2.14.2,
|
||||||
|
QuickCheck -old-random +templatehaskell,
|
||||||
|
any.StateVar ==1.2.2,
|
||||||
|
any.abstract-deque ==0.3,
|
||||||
|
abstract-deque -usecas,
|
||||||
|
any.aeson ==2.0.3.0,
|
||||||
|
aeson -cffi +ordered-keymap,
|
||||||
|
any.aeson-pretty ==0.8.9,
|
||||||
|
aeson-pretty +lib-only,
|
||||||
|
any.alex ==3.2.7.1,
|
||||||
|
any.ansi-terminal ==0.11.3,
|
||||||
|
ansi-terminal -example,
|
||||||
|
any.ansi-wl-pprint ==0.6.9,
|
||||||
|
ansi-wl-pprint -example,
|
||||||
|
any.array ==0.5.4.0,
|
||||||
|
any.assoc ==1.0.2,
|
||||||
|
any.async ==2.2.4,
|
||||||
|
async -bench,
|
||||||
|
any.atomic-primops ==0.8.4,
|
||||||
|
atomic-primops -debug,
|
||||||
|
any.attoparsec ==0.14.4,
|
||||||
|
attoparsec -developer,
|
||||||
|
any.base ==4.15.1.0,
|
||||||
|
any.base-compat ==0.12.1,
|
||||||
|
any.base-compat-batteries ==0.12.1,
|
||||||
|
any.base-orphans ==0.8.6,
|
||||||
|
any.base16-bytestring ==1.0.2.0,
|
||||||
|
any.base64-bytestring ==1.2.1.0,
|
||||||
|
any.bifunctors ==5.5.12,
|
||||||
|
bifunctors +semigroups +tagged,
|
||||||
|
any.binary ==0.8.8.0,
|
||||||
|
any.blaze-builder ==0.4.2.2,
|
||||||
|
any.brick ==0.64.2,
|
||||||
|
brick -demos,
|
||||||
|
any.bytestring ==0.10.12.1,
|
||||||
|
any.bz2 ==1.0.1.0,
|
||||||
|
bz2 -cross +with-bzlib,
|
||||||
|
any.c2hs ==0.28.8,
|
||||||
|
c2hs +base3 -regression,
|
||||||
|
any.cabal-plan ==0.7.2.1,
|
||||||
|
cabal-plan -_ -exe -license-report,
|
||||||
|
any.call-stack ==0.4.0,
|
||||||
|
any.case-insensitive ==1.2.1.0,
|
||||||
|
any.casing ==0.1.4.1,
|
||||||
|
any.chs-cabal ==0.1.1.1,
|
||||||
|
any.chs-deps ==0.1.0.0,
|
||||||
|
chs-deps -cross,
|
||||||
|
any.clock ==0.8.3,
|
||||||
|
clock -llvm,
|
||||||
|
any.colour ==2.3.6,
|
||||||
|
any.comonad ==5.0.8,
|
||||||
|
comonad +containers +distributive +indexed-traversable,
|
||||||
|
any.composition-prelude ==3.0.0.2,
|
||||||
|
composition-prelude -development,
|
||||||
|
any.config-ini ==0.2.4.0,
|
||||||
|
config-ini -enable-doctests,
|
||||||
|
any.containers ==0.6.4.1,
|
||||||
|
any.contravariant ==1.5.5,
|
||||||
|
contravariant +semigroups +statevar +tagged,
|
||||||
|
any.cpphs ==1.20.9.1,
|
||||||
|
cpphs -old-locale,
|
||||||
|
any.cryptohash-sha1 ==0.11.101.0,
|
||||||
|
any.cryptohash-sha256 ==0.11.102.1,
|
||||||
|
cryptohash-sha256 -exe +use-cbits,
|
||||||
|
any.data-clist ==0.2,
|
||||||
|
any.data-fix ==0.3.2,
|
||||||
|
any.deepseq ==1.4.5.0,
|
||||||
|
any.directory ==1.3.6.2,
|
||||||
|
any.disk-free-space ==0.1.0.1,
|
||||||
|
any.distributive ==0.6.2.1,
|
||||||
|
distributive +semigroups +tagged,
|
||||||
|
any.dlist ==1.0,
|
||||||
|
dlist -werror,
|
||||||
|
any.exceptions ==0.10.4,
|
||||||
|
any.filepath ==1.4.2.1,
|
||||||
|
any.free ==5.1.8,
|
||||||
|
any.fusion-plugin-types ==0.1.0,
|
||||||
|
any.generic-arbitrary ==0.2.2,
|
||||||
|
any.ghc ==9.0.2,
|
||||||
|
any.ghc-bignum ==1.1,
|
||||||
|
any.ghc-boot ==9.0.2,
|
||||||
|
any.ghc-boot-th ==9.0.2,
|
||||||
|
any.ghc-byteorder ==4.11.0.0.10,
|
||||||
|
any.ghc-heap ==9.0.2,
|
||||||
|
any.ghc-prim ==0.7.0,
|
||||||
|
any.ghci ==9.0.2,
|
||||||
|
any.happy ==1.20.0,
|
||||||
|
any.hashable ==1.4.0.2,
|
||||||
|
hashable +containers +integer-gmp -random-initial-seed,
|
||||||
|
any.haskus-utils-data ==1.4,
|
||||||
|
any.haskus-utils-types ==1.5.1,
|
||||||
|
any.haskus-utils-variant ==3.2.1,
|
||||||
|
any.heaps ==0.4,
|
||||||
|
any.hpc ==0.6.1.0,
|
||||||
|
any.hsc2hs ==0.68.8,
|
||||||
|
hsc2hs -in-ghc-tree,
|
||||||
|
any.hspec ==2.9.7,
|
||||||
|
any.hspec-core ==2.9.7,
|
||||||
|
any.hspec-discover ==2.9.7,
|
||||||
|
any.hspec-expectations ==0.8.2,
|
||||||
|
any.hspec-golden-aeson ==0.9.0.0,
|
||||||
|
any.http-io-streams ==0.1.6.1,
|
||||||
|
http-io-streams -brotli +fast-xor,
|
||||||
|
any.indexed-profunctors ==0.1.1,
|
||||||
|
any.indexed-traversable ==0.1.2,
|
||||||
|
any.indexed-traversable-instances ==0.1.1,
|
||||||
|
any.integer-logarithms ==1.0.3.1,
|
||||||
|
integer-logarithms -check-bounds +integer-gmp,
|
||||||
|
any.io-streams ==1.5.2.1,
|
||||||
|
io-streams +network -nointeractivetests +zlib,
|
||||||
|
any.language-c ==0.9.1,
|
||||||
|
language-c -allwarnings +iecfpextension +usebytestrings,
|
||||||
|
any.libarchive ==3.0.3.2,
|
||||||
|
libarchive -cross -low-memory +no-exe -system-libarchive,
|
||||||
|
any.libyaml-streamly ==0.2.1,
|
||||||
|
libyaml-streamly -no-unicode -system-libyaml,
|
||||||
|
any.lockfree-queue ==0.2.3.1,
|
||||||
|
any.lzma-static ==5.2.5.4,
|
||||||
|
any.megaparsec ==9.2.1,
|
||||||
|
megaparsec -dev,
|
||||||
|
any.microlens ==0.4.12.0,
|
||||||
|
any.microlens-mtl ==0.2.0.2,
|
||||||
|
any.microlens-th ==0.4.3.10,
|
||||||
|
any.mtl ==2.2.2,
|
||||||
|
any.network ==3.1.2.7,
|
||||||
|
network -devel,
|
||||||
|
any.network-uri ==2.6.4.1,
|
||||||
|
any.openssl-streams ==1.2.3.0,
|
||||||
|
any.optics ==0.4.2,
|
||||||
|
any.optics-core ==0.4.1,
|
||||||
|
optics-core -explicit-generic-labels,
|
||||||
|
any.optics-extra ==0.4.2.1,
|
||||||
|
any.optics-th ==0.4.1,
|
||||||
|
any.optparse-applicative ==0.17.0.0,
|
||||||
|
optparse-applicative +process,
|
||||||
|
any.os-release ==1.0.2.1,
|
||||||
|
os-release -devel,
|
||||||
|
any.parallel ==3.2.2.0,
|
||||||
|
any.parsec ==3.1.14.0,
|
||||||
|
any.parser-combinators ==1.3.0,
|
||||||
|
parser-combinators -dev,
|
||||||
|
any.polyparse ==1.13,
|
||||||
|
any.pretty ==1.1.3.6,
|
||||||
|
any.pretty-terminal ==0.1.0.0,
|
||||||
|
any.primitive ==0.7.4.0,
|
||||||
|
any.process ==1.6.13.2,
|
||||||
|
any.profunctors ==5.6.2,
|
||||||
|
any.quickcheck-arbitrary-adt ==0.3.1.0,
|
||||||
|
any.quickcheck-io ==0.2.0,
|
||||||
|
any.random ==1.2.1.1,
|
||||||
|
any.recursion-schemes ==5.2.2.2,
|
||||||
|
recursion-schemes +template-haskell,
|
||||||
|
any.regex-base ==0.94.0.2,
|
||||||
|
any.regex-posix ==0.96.0.1,
|
||||||
|
regex-posix -_regex-posix-clib,
|
||||||
|
any.resourcet ==1.2.5,
|
||||||
|
any.retry ==0.8.1.2,
|
||||||
|
retry -lib-werror,
|
||||||
|
any.rts ==1.0.2,
|
||||||
|
any.safe ==0.3.19,
|
||||||
|
any.safe-exceptions ==0.1.7.3,
|
||||||
|
any.scientific ==0.3.7.0,
|
||||||
|
scientific -bytestring-builder -integer-simple,
|
||||||
|
any.semialign ==1.2.0.1,
|
||||||
|
semialign +semigroupoids,
|
||||||
|
any.semigroupoids ==5.3.7,
|
||||||
|
semigroupoids +comonad +containers +contravariant +distributive +tagged +unordered-containers,
|
||||||
|
any.setenv ==0.1.1.3,
|
||||||
|
any.split ==0.2.3.4,
|
||||||
|
any.splitmix ==0.1.0.4,
|
||||||
|
splitmix -optimised-mixer,
|
||||||
|
any.stm ==2.5.0.0,
|
||||||
|
any.streamly ==0.8.2,
|
||||||
|
streamly -debug -dev -fusion-plugin -has-llvm -inspection -limit-build-mem -no-fusion +opt -streamk -streamly-core -use-c-malloc +use-unliftio,
|
||||||
|
any.strict ==0.4.0.1,
|
||||||
|
strict +assoc,
|
||||||
|
any.strict-base ==0.4.0.0,
|
||||||
|
any.tagged ==0.8.6.1,
|
||||||
|
tagged +deepseq +transformers,
|
||||||
|
any.tagsoup ==0.14.8,
|
||||||
|
any.template-haskell ==2.17.0.0,
|
||||||
|
any.temporary ==1.3,
|
||||||
|
any.terminal-progress-bar ==0.4.1,
|
||||||
|
any.terminal-size ==0.3.2.1,
|
||||||
|
any.terminfo ==0.4.1.5,
|
||||||
|
any.text ==1.2.5.0,
|
||||||
|
any.text-short ==0.1.5,
|
||||||
|
text-short -asserts,
|
||||||
|
any.text-zipper ==0.11,
|
||||||
|
any.tf-random ==0.5,
|
||||||
|
any.th-abstraction ==0.4.3.0,
|
||||||
|
any.th-compat ==0.1.3,
|
||||||
|
any.th-lift ==0.8.2,
|
||||||
|
any.th-lift-instances ==0.1.19,
|
||||||
|
any.these ==1.1.1.1,
|
||||||
|
these +assoc,
|
||||||
|
any.time ==1.9.3,
|
||||||
|
any.time-compat ==1.9.6.1,
|
||||||
|
time-compat -old-locale,
|
||||||
|
any.transformers ==0.5.6.2,
|
||||||
|
any.transformers-base ==0.4.6,
|
||||||
|
transformers-base +orphaninstances,
|
||||||
|
any.transformers-compat ==0.7.1,
|
||||||
|
transformers-compat -five +five-three -four +generic-deriving +mtl -three -two,
|
||||||
|
any.unicode-data ==0.3.0,
|
||||||
|
unicode-data -ucd2haskell,
|
||||||
|
any.unix ==2.7.2.2,
|
||||||
|
any.unix-bytestring ==0.3.7.7,
|
||||||
|
any.unix-compat ==0.6,
|
||||||
|
unix-compat -old-time,
|
||||||
|
any.unliftio-core ==0.2.0.1,
|
||||||
|
any.unordered-containers ==0.2.19.1,
|
||||||
|
unordered-containers -debug,
|
||||||
|
any.uri-bytestring ==0.3.3.1,
|
||||||
|
uri-bytestring -lib-werror,
|
||||||
|
any.utf8-string ==1.0.2,
|
||||||
|
any.uuid-types ==1.0.5,
|
||||||
|
any.vector ==0.12.3.1,
|
||||||
|
vector +boundschecks -internalchecks -unsafechecks -wall,
|
||||||
|
any.versions ==5.0.3,
|
||||||
|
any.vty ==5.33,
|
||||||
|
any.witherable ==0.4.2,
|
||||||
|
any.word-wrap ==0.5,
|
||||||
|
any.word8 ==0.1.3,
|
||||||
|
any.xor ==0.0.1.1,
|
||||||
|
any.yaml-streamly ==0.12.1,
|
||||||
|
yaml-streamly +no-examples +no-exe,
|
||||||
|
any.zlib ==0.6.3.0,
|
||||||
|
zlib -bundled-c-zlib -non-blocking-ffi -pkg-config,
|
||||||
|
any.zlib-bindings ==0.1.1.5
|
||||||
|
index-state: hackage.haskell.org 2022-06-04T19:47:01Z
|
37
cabal.ghc923.project
Normal file
37
cabal.ghc923.project
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
packages: ./ghcup.cabal
|
||||||
|
|
||||||
|
optional-packages: ./vendored/*/*.cabal
|
||||||
|
|
||||||
|
optimization: 2
|
||||||
|
|
||||||
|
package ghcup
|
||||||
|
tests: True
|
||||||
|
flags: +tui
|
||||||
|
|
||||||
|
source-repository-package
|
||||||
|
type: git
|
||||||
|
location: https://github.com/bgamari/terminal-size.git
|
||||||
|
tag: 34ea816bd63f75f800eedac12c6908c6f3736036
|
||||||
|
|
||||||
|
constraints: http-io-streams -brotli,
|
||||||
|
any.Cabal ==3.6.2.0,
|
||||||
|
any.aeson >= 2.0.1.0,
|
||||||
|
|
||||||
|
package libarchive
|
||||||
|
flags: -system-libarchive
|
||||||
|
|
||||||
|
package aeson-pretty
|
||||||
|
flags: +lib-only
|
||||||
|
|
||||||
|
package cabal-plan
|
||||||
|
flags: -exe
|
||||||
|
|
||||||
|
package aeson
|
||||||
|
flags: +ordered-keymap
|
||||||
|
|
||||||
|
package streamly
|
||||||
|
flags: +use-unliftio
|
||||||
|
|
||||||
|
allow-newer: base, ghc-prim, template-haskell, language-c
|
||||||
|
|
||||||
|
with-compiler: ghc-9.2.3
|
233
cabal.ghc923.project.freeze
Normal file
233
cabal.ghc923.project.freeze
Normal file
@ -0,0 +1,233 @@
|
|||||||
|
active-repositories: hackage.haskell.org:merge
|
||||||
|
constraints: any.Cabal ==3.6.2.0,
|
||||||
|
Cabal -bundled-binary-generic,
|
||||||
|
any.HUnit ==1.6.2.0,
|
||||||
|
any.HsOpenSSL ==0.11.7.2,
|
||||||
|
HsOpenSSL -fast-bignum -homebrew-openssl -macports-openssl -use-pkg-config,
|
||||||
|
any.OneTuple ==0.3.1,
|
||||||
|
any.QuickCheck ==2.14.2,
|
||||||
|
QuickCheck -old-random +templatehaskell,
|
||||||
|
any.StateVar ==1.2.2,
|
||||||
|
any.abstract-deque ==0.3,
|
||||||
|
abstract-deque -usecas,
|
||||||
|
any.aeson ==2.0.3.0,
|
||||||
|
aeson -cffi +ordered-keymap,
|
||||||
|
any.aeson-pretty ==0.8.9,
|
||||||
|
aeson-pretty +lib-only,
|
||||||
|
any.alex ==3.2.7.1,
|
||||||
|
any.ansi-terminal ==0.11.3,
|
||||||
|
ansi-terminal -example,
|
||||||
|
any.ansi-wl-pprint ==0.6.9,
|
||||||
|
ansi-wl-pprint -example,
|
||||||
|
any.array ==0.5.4.0,
|
||||||
|
any.assoc ==1.0.2,
|
||||||
|
any.async ==2.2.4,
|
||||||
|
async -bench,
|
||||||
|
any.atomic-primops ==0.8.4,
|
||||||
|
atomic-primops -debug,
|
||||||
|
any.attoparsec ==0.14.4,
|
||||||
|
attoparsec -developer,
|
||||||
|
any.base ==4.16.2.0,
|
||||||
|
any.base-compat ==0.12.1,
|
||||||
|
any.base-compat-batteries ==0.12.1,
|
||||||
|
any.base-orphans ==0.8.6,
|
||||||
|
any.base16-bytestring ==1.0.2.0,
|
||||||
|
any.base64-bytestring ==1.2.1.0,
|
||||||
|
any.bifunctors ==5.5.12,
|
||||||
|
bifunctors +semigroups +tagged,
|
||||||
|
any.binary ==0.8.9.0,
|
||||||
|
any.blaze-builder ==0.4.2.2,
|
||||||
|
any.brick ==0.64.2,
|
||||||
|
brick -demos,
|
||||||
|
any.bytestring ==0.11.3.1,
|
||||||
|
any.bz2 ==1.0.1.0,
|
||||||
|
bz2 -cross +with-bzlib,
|
||||||
|
any.c2hs ==0.28.8,
|
||||||
|
c2hs +base3 -regression,
|
||||||
|
any.cabal-plan ==0.7.2.1,
|
||||||
|
cabal-plan -_ -exe -license-report,
|
||||||
|
any.call-stack ==0.4.0,
|
||||||
|
any.case-insensitive ==1.2.1.0,
|
||||||
|
any.casing ==0.1.4.1,
|
||||||
|
any.chs-cabal ==0.1.1.1,
|
||||||
|
any.chs-deps ==0.1.0.0,
|
||||||
|
chs-deps -cross,
|
||||||
|
any.clock ==0.8.3,
|
||||||
|
clock -llvm,
|
||||||
|
any.colour ==2.3.6,
|
||||||
|
any.comonad ==5.0.8,
|
||||||
|
comonad +containers +distributive +indexed-traversable,
|
||||||
|
any.composition-prelude ==3.0.0.2,
|
||||||
|
composition-prelude -development,
|
||||||
|
any.config-ini ==0.2.4.0,
|
||||||
|
config-ini -enable-doctests,
|
||||||
|
any.containers ==0.6.5.1,
|
||||||
|
any.contravariant ==1.5.5,
|
||||||
|
contravariant +semigroups +statevar +tagged,
|
||||||
|
any.cpphs ==1.20.9.1,
|
||||||
|
cpphs -old-locale,
|
||||||
|
any.cryptohash-sha1 ==0.11.101.0,
|
||||||
|
any.cryptohash-sha256 ==0.11.102.1,
|
||||||
|
cryptohash-sha256 -exe +use-cbits,
|
||||||
|
any.data-clist ==0.2,
|
||||||
|
any.data-fix ==0.3.2,
|
||||||
|
any.deepseq ==1.4.6.1,
|
||||||
|
any.directory ==1.3.7.0,
|
||||||
|
any.disk-free-space ==0.1.0.1,
|
||||||
|
any.distributive ==0.6.2.1,
|
||||||
|
distributive +semigroups +tagged,
|
||||||
|
any.dlist ==1.0,
|
||||||
|
dlist -werror,
|
||||||
|
any.exceptions ==0.10.4,
|
||||||
|
any.filepath ==1.4.2.2,
|
||||||
|
any.free ==5.1.8,
|
||||||
|
any.fusion-plugin-types ==0.1.0,
|
||||||
|
any.generic-arbitrary ==0.2.2,
|
||||||
|
any.ghc-bignum ==1.2,
|
||||||
|
any.ghc-boot-th ==9.2.3,
|
||||||
|
any.ghc-byteorder ==4.11.0.0.10,
|
||||||
|
any.ghc-prim ==0.8.0,
|
||||||
|
any.happy ==1.20.0,
|
||||||
|
any.hashable ==1.4.0.2,
|
||||||
|
hashable +containers +integer-gmp -random-initial-seed,
|
||||||
|
any.haskus-utils-data ==1.4,
|
||||||
|
any.haskus-utils-types ==1.5.1,
|
||||||
|
any.haskus-utils-variant ==3.2.1,
|
||||||
|
any.heaps ==0.4,
|
||||||
|
any.hsc2hs ==0.68.8,
|
||||||
|
hsc2hs -in-ghc-tree,
|
||||||
|
any.hspec ==2.9.2,
|
||||||
|
any.hspec-core ==2.9.2,
|
||||||
|
any.hspec-discover ==2.9.2,
|
||||||
|
any.hspec-expectations ==0.8.2,
|
||||||
|
any.hspec-golden-aeson ==0.9.0.0,
|
||||||
|
any.http-io-streams ==0.1.6.1,
|
||||||
|
http-io-streams -brotli +fast-xor,
|
||||||
|
any.indexed-profunctors ==0.1.1,
|
||||||
|
any.indexed-traversable ==0.1.2,
|
||||||
|
any.indexed-traversable-instances ==0.1.1,
|
||||||
|
any.integer-logarithms ==1.0.3.1,
|
||||||
|
integer-logarithms -check-bounds +integer-gmp,
|
||||||
|
any.io-streams ==1.5.2.1,
|
||||||
|
io-streams +network -nointeractivetests +zlib,
|
||||||
|
any.language-c ==0.9.1,
|
||||||
|
language-c -allwarnings +iecfpextension +usebytestrings,
|
||||||
|
any.libarchive ==3.0.3.2,
|
||||||
|
libarchive -cross -low-memory +no-exe -system-libarchive,
|
||||||
|
any.libyaml-streamly ==0.2.1,
|
||||||
|
libyaml-streamly -no-unicode -system-libyaml,
|
||||||
|
any.lockfree-queue ==0.2.3.1,
|
||||||
|
any.lzma-static ==5.2.5.4,
|
||||||
|
any.megaparsec ==9.2.1,
|
||||||
|
megaparsec -dev,
|
||||||
|
any.microlens ==0.4.12.0,
|
||||||
|
any.microlens-mtl ==0.2.0.2,
|
||||||
|
any.microlens-th ==0.4.3.10,
|
||||||
|
any.mtl ==2.2.2,
|
||||||
|
any.network ==3.1.2.7,
|
||||||
|
network -devel,
|
||||||
|
any.network-uri ==2.6.4.1,
|
||||||
|
any.openssl-streams ==1.2.3.0,
|
||||||
|
any.optics ==0.4.2,
|
||||||
|
any.optics-core ==0.4.1,
|
||||||
|
optics-core -explicit-generic-labels,
|
||||||
|
any.optics-extra ==0.4.2.1,
|
||||||
|
any.optics-th ==0.4.1,
|
||||||
|
any.optparse-applicative ==0.17.0.0,
|
||||||
|
optparse-applicative +process,
|
||||||
|
any.os-release ==1.0.2.1,
|
||||||
|
os-release -devel,
|
||||||
|
any.parallel ==3.2.2.0,
|
||||||
|
any.parsec ==3.1.15.0,
|
||||||
|
any.parser-combinators ==1.3.0,
|
||||||
|
parser-combinators -dev,
|
||||||
|
any.polyparse ==1.13,
|
||||||
|
any.pretty ==1.1.3.6,
|
||||||
|
any.pretty-terminal ==0.1.0.0,
|
||||||
|
any.primitive ==0.7.4.0,
|
||||||
|
any.process ==1.6.14.0,
|
||||||
|
any.profunctors ==5.6.2,
|
||||||
|
any.quickcheck-arbitrary-adt ==0.3.1.0,
|
||||||
|
any.quickcheck-io ==0.2.0,
|
||||||
|
any.random ==1.2.1.1,
|
||||||
|
any.recursion-schemes ==5.2.2.2,
|
||||||
|
recursion-schemes +template-haskell,
|
||||||
|
any.regex-base ==0.94.0.2,
|
||||||
|
any.regex-posix ==0.96.0.1,
|
||||||
|
regex-posix -_regex-posix-clib,
|
||||||
|
any.resourcet ==1.2.5,
|
||||||
|
any.retry ==0.8.1.2,
|
||||||
|
retry -lib-werror,
|
||||||
|
any.rts ==1.0.2,
|
||||||
|
any.safe ==0.3.19,
|
||||||
|
any.safe-exceptions ==0.1.7.3,
|
||||||
|
any.scientific ==0.3.7.0,
|
||||||
|
scientific -bytestring-builder -integer-simple,
|
||||||
|
any.semialign ==1.2.0.1,
|
||||||
|
semialign +semigroupoids,
|
||||||
|
any.semigroupoids ==5.3.7,
|
||||||
|
semigroupoids +comonad +containers +contravariant +distributive +tagged +unordered-containers,
|
||||||
|
any.setenv ==0.1.1.3,
|
||||||
|
any.split ==0.2.3.4,
|
||||||
|
any.splitmix ==0.1.0.4,
|
||||||
|
splitmix -optimised-mixer,
|
||||||
|
any.stm ==2.5.0.2,
|
||||||
|
any.streamly ==0.8.2,
|
||||||
|
streamly -debug -dev -fusion-plugin -has-llvm -inspection -limit-build-mem -no-fusion +opt -streamk -streamly-core -use-c-malloc +use-unliftio,
|
||||||
|
any.strict ==0.4.0.1,
|
||||||
|
strict +assoc,
|
||||||
|
any.strict-base ==0.4.0.0,
|
||||||
|
any.tagged ==0.8.6.1,
|
||||||
|
tagged +deepseq +transformers,
|
||||||
|
any.tagsoup ==0.14.8,
|
||||||
|
any.template-haskell ==2.18.0.0,
|
||||||
|
any.temporary ==1.3,
|
||||||
|
any.terminal-progress-bar ==0.4.1,
|
||||||
|
any.terminal-size ==0.3.2.1,
|
||||||
|
any.terminfo ==0.4.1.5,
|
||||||
|
any.text ==1.2.5.0,
|
||||||
|
any.text-short ==0.1.5,
|
||||||
|
text-short -asserts,
|
||||||
|
any.text-zipper ==0.11,
|
||||||
|
any.tf-random ==0.5,
|
||||||
|
any.th-abstraction ==0.4.3.0,
|
||||||
|
any.th-compat ==0.1.3,
|
||||||
|
any.th-lift ==0.8.2,
|
||||||
|
any.th-lift-instances ==0.1.19,
|
||||||
|
any.these ==1.1.1.1,
|
||||||
|
these +assoc,
|
||||||
|
any.time ==1.9.3,
|
||||||
|
any.time-compat ==1.9.6.1,
|
||||||
|
time-compat -old-locale,
|
||||||
|
any.transformers ==0.5.6.2,
|
||||||
|
any.transformers-base ==0.4.6,
|
||||||
|
transformers-base +orphaninstances,
|
||||||
|
any.transformers-compat ==0.7.1,
|
||||||
|
transformers-compat -five +five-three -four +generic-deriving +mtl -three -two,
|
||||||
|
any.unicode-data ==0.3.0,
|
||||||
|
unicode-data -ucd2haskell,
|
||||||
|
any.unix ==2.7.2.2,
|
||||||
|
any.unix-bytestring ==0.3.7.7,
|
||||||
|
any.unix-compat ==0.6,
|
||||||
|
unix-compat -old-time,
|
||||||
|
any.unliftio-core ==0.2.0.1,
|
||||||
|
any.unordered-containers ==0.2.19.1,
|
||||||
|
unordered-containers -debug,
|
||||||
|
any.uri-bytestring ==0.3.3.1,
|
||||||
|
uri-bytestring -lib-werror,
|
||||||
|
any.utf8-string ==1.0.2,
|
||||||
|
any.uuid-types ==1.0.5,
|
||||||
|
any.vector ==0.12.3.1,
|
||||||
|
vector +boundschecks -internalchecks -unsafechecks -wall,
|
||||||
|
any.versions ==5.0.3,
|
||||||
|
any.vty ==5.33,
|
||||||
|
any.witherable ==0.4.2,
|
||||||
|
any.word-wrap ==0.5,
|
||||||
|
any.word8 ==0.1.3,
|
||||||
|
any.xor ==0.0.1.1,
|
||||||
|
any.yaml-streamly ==0.12.1,
|
||||||
|
yaml-streamly +no-examples +no-exe,
|
||||||
|
any.zlib ==0.6.3.0,
|
||||||
|
zlib -bundled-c-zlib -non-blocking-ffi -pkg-config,
|
||||||
|
any.zlib-bindings ==0.1.1.5
|
||||||
|
index-state: hackage.haskell.org 2022-06-04T19:47:01Z
|
@ -1,60 +0,0 @@
|
|||||||
packages: ./ghcup.cabal
|
|
||||||
|
|
||||||
optional-packages: ./vendored/*/*.cabal
|
|
||||||
|
|
||||||
if impl(ghc < 9.0)
|
|
||||||
package ghcup
|
|
||||||
flags: +tui -tar
|
|
||||||
else
|
|
||||||
package ghcup
|
|
||||||
flags: +tui +tar
|
|
||||||
|
|
||||||
constraints: http-io-streams -brotli,
|
|
||||||
any.aeson >= 2.0.1.0,
|
|
||||||
any.hsc2hs ==0.68.8,
|
|
||||||
bzlib-conduit >= 0.3.0.3,
|
|
||||||
bz2 >= 1.0.1.1,
|
|
||||||
bzlib >= 0.5.2.0,
|
|
||||||
directory >= 1.3.8.3,
|
|
||||||
filepath == 1.4.101.0 || == 1.4.300.1 || >= 1.5.2.0
|
|
||||||
|
|
||||||
if os(mingw32)
|
|
||||||
constraints: zlib +bundled-c-zlib,
|
|
||||||
lzma +static,
|
|
||||||
text -simdutf,
|
|
||||||
vty-windows >=0.2.0.2
|
|
||||||
|
|
||||||
if impl(ghc >= 9.4)
|
|
||||||
constraints: language-c >= 0.9.3
|
|
||||||
|
|
||||||
|
|
||||||
source-repository-package
|
|
||||||
type: git
|
|
||||||
location: https://github.com/haskell/tar.git
|
|
||||||
tag: d94a988be4311b830149a9f8fc16739927e5fc1c
|
|
||||||
|
|
||||||
source-repository-package
|
|
||||||
type: git
|
|
||||||
location: https://github.com/hasufell/uri-bytestring.git
|
|
||||||
tag: 4fb5ed14b500c192e6e7a97f6b2b1eb478806001
|
|
||||||
|
|
||||||
package libarchive
|
|
||||||
flags: -system-libarchive
|
|
||||||
|
|
||||||
package aeson-pretty
|
|
||||||
flags: +lib-only
|
|
||||||
|
|
||||||
package cabal-plan
|
|
||||||
flags: -exe
|
|
||||||
|
|
||||||
package aeson
|
|
||||||
flags: +ordered-keymap
|
|
||||||
|
|
||||||
package streamly
|
|
||||||
flags: +use-unliftio
|
|
||||||
|
|
||||||
package *
|
|
||||||
test-show-details: direct
|
|
||||||
|
|
||||||
allow-newer: cabal-install-parsers:tar, streamly:Win32
|
|
||||||
|
|
@ -1,273 +0,0 @@
|
|||||||
active-repositories: hackage.haskell.org:merge
|
|
||||||
constraints: any.Cabal ==3.10.2.1,
|
|
||||||
any.Cabal-syntax ==3.10.2.0,
|
|
||||||
any.HUnit ==1.6.2.0,
|
|
||||||
any.HsOpenSSL ==0.11.7.6,
|
|
||||||
HsOpenSSL -fast-bignum -homebrew-openssl -macports-openssl -use-pkg-config,
|
|
||||||
any.OneTuple ==0.4.1.1,
|
|
||||||
any.QuickCheck ==2.14.3,
|
|
||||||
QuickCheck -old-random +templatehaskell,
|
|
||||||
any.StateVar ==1.2.2,
|
|
||||||
any.abstract-deque ==0.3,
|
|
||||||
abstract-deque -usecas,
|
|
||||||
any.aeson ==2.2.1.0,
|
|
||||||
aeson +ordered-keymap,
|
|
||||||
any.aeson-pretty ==0.8.10,
|
|
||||||
aeson-pretty +lib-only,
|
|
||||||
any.alex ==3.5.1.0,
|
|
||||||
any.ansi-terminal ==1.0.2,
|
|
||||||
ansi-terminal -example,
|
|
||||||
any.ansi-terminal-types ==0.11.5,
|
|
||||||
any.ansi-wl-pprint ==0.6.9,
|
|
||||||
ansi-wl-pprint -example,
|
|
||||||
any.array ==0.5.4.0,
|
|
||||||
any.assoc ==1.1,
|
|
||||||
assoc +tagged,
|
|
||||||
any.async ==2.2.5,
|
|
||||||
async -bench,
|
|
||||||
any.atomic-primops ==0.8.5,
|
|
||||||
atomic-primops -debug,
|
|
||||||
any.attoparsec ==0.14.4,
|
|
||||||
attoparsec -developer,
|
|
||||||
any.base ==4.16.4.0,
|
|
||||||
any.base-compat ==0.13.1,
|
|
||||||
any.base-orphans ==0.9.1,
|
|
||||||
any.base16-bytestring ==1.0.2.0,
|
|
||||||
any.base64-bytestring ==1.2.1.0,
|
|
||||||
any.bifunctors ==5.6.1,
|
|
||||||
bifunctors +tagged,
|
|
||||||
any.bimap ==0.5.0,
|
|
||||||
any.binary ==0.8.9.0,
|
|
||||||
any.binary-instances ==1.0.4,
|
|
||||||
any.binary-orphans ==1.0.4.1,
|
|
||||||
any.bindings-DSL ==1.0.25,
|
|
||||||
any.bitvec ==1.1.5.0,
|
|
||||||
bitvec +simd,
|
|
||||||
any.blaze-builder ==0.4.2.3,
|
|
||||||
any.brick ==2.1.1,
|
|
||||||
brick -demos,
|
|
||||||
any.bytestring ==0.11.4.0,
|
|
||||||
any.bz2 ==1.0.1.1,
|
|
||||||
bz2 -cross +with-bzlib,
|
|
||||||
any.bzip2-clib ==1.0.8,
|
|
||||||
any.bzlib-conduit ==0.3.0.3,
|
|
||||||
any.c2hs ==0.28.8,
|
|
||||||
c2hs +base3 -regression,
|
|
||||||
any.cabal-install-parsers ==0.6.1.1,
|
|
||||||
any.cabal-plan ==0.7.3.0,
|
|
||||||
cabal-plan -_ -exe -license-report,
|
|
||||||
any.call-stack ==0.4.0,
|
|
||||||
any.case-insensitive ==1.2.1.0,
|
|
||||||
any.casing ==0.1.4.1,
|
|
||||||
any.cereal ==0.5.8.3,
|
|
||||||
cereal -bytestring-builder,
|
|
||||||
any.colour ==2.3.6,
|
|
||||||
any.comonad ==5.0.8,
|
|
||||||
comonad +containers +distributive +indexed-traversable,
|
|
||||||
any.conduit ==1.3.5,
|
|
||||||
any.conduit-extra ==1.3.6,
|
|
||||||
any.conduit-zstd ==0.0.2.0,
|
|
||||||
any.config-ini ==0.2.7.0,
|
|
||||||
config-ini -enable-doctests,
|
|
||||||
any.containers ==0.6.5.1,
|
|
||||||
any.contravariant ==1.5.5,
|
|
||||||
contravariant +semigroups +statevar +tagged,
|
|
||||||
any.cryptohash-sha1 ==0.11.101.0,
|
|
||||||
any.cryptohash-sha256 ==0.11.102.1,
|
|
||||||
cryptohash-sha256 -exe +use-cbits,
|
|
||||||
any.data-array-byte ==0.1.0.1,
|
|
||||||
any.data-clist ==0.2,
|
|
||||||
any.data-default-class ==0.1.2.0,
|
|
||||||
any.data-fix ==0.3.2,
|
|
||||||
any.deepseq ==1.4.6.1,
|
|
||||||
any.digest ==0.0.2.1,
|
|
||||||
digest -have_arm64_crc32c -have_builtin_prefetch -have_mm_prefetch -have_sse42 -have_strong_getauxval -have_weak_getauxval +pkg-config,
|
|
||||||
any.directory ==1.3.8.3,
|
|
||||||
directory -os-string,
|
|
||||||
any.disk-free-space ==0.1.0.1,
|
|
||||||
any.distributive ==0.6.2.1,
|
|
||||||
distributive +semigroups +tagged,
|
|
||||||
any.dlist ==1.0,
|
|
||||||
dlist -werror,
|
|
||||||
any.exceptions ==0.10.4,
|
|
||||||
any.file-uri ==0.1.0.0,
|
|
||||||
any.filepath ==1.4.101.0,
|
|
||||||
filepath -cpphs,
|
|
||||||
any.foldable1-classes-compat ==0.1,
|
|
||||||
foldable1-classes-compat +tagged,
|
|
||||||
any.free ==5.2,
|
|
||||||
any.fusion-plugin-types ==0.1.0,
|
|
||||||
any.generic-arbitrary ==0.2.2,
|
|
||||||
any.generically ==0.1.1,
|
|
||||||
any.ghc-bignum ==1.2,
|
|
||||||
any.ghc-boot-th ==9.2.8,
|
|
||||||
any.ghc-byteorder ==4.11.0.0.10,
|
|
||||||
any.ghc-prim ==0.8.0,
|
|
||||||
any.happy ==1.20.1.1,
|
|
||||||
any.hashable ==1.4.3.0,
|
|
||||||
hashable +integer-gmp -random-initial-seed,
|
|
||||||
any.haskell-lexer ==1.1.1,
|
|
||||||
any.haskus-utils-data ==1.4,
|
|
||||||
any.haskus-utils-types ==1.5.1,
|
|
||||||
any.haskus-utils-variant ==3.3,
|
|
||||||
any.heaps ==0.4,
|
|
||||||
any.hsc2hs ==0.68.8,
|
|
||||||
hsc2hs -in-ghc-tree,
|
|
||||||
any.hspec ==2.10.10,
|
|
||||||
any.hspec-core ==2.10.10,
|
|
||||||
any.hspec-discover ==2.10.10,
|
|
||||||
any.hspec-expectations ==0.8.2,
|
|
||||||
any.hspec-golden-aeson ==0.9.0.0,
|
|
||||||
any.http-io-streams ==0.1.7.0,
|
|
||||||
http-io-streams -brotli +fast-xor,
|
|
||||||
any.indexed-profunctors ==0.1.1.1,
|
|
||||||
any.indexed-traversable ==0.1.3,
|
|
||||||
any.indexed-traversable-instances ==0.1.1.2,
|
|
||||||
any.integer-conversion ==0.1.0.1,
|
|
||||||
any.integer-logarithms ==1.0.3.1,
|
|
||||||
integer-logarithms -check-bounds +integer-gmp,
|
|
||||||
any.io-streams ==1.5.2.2,
|
|
||||||
io-streams +network -nointeractivetests +zlib,
|
|
||||||
any.language-c ==0.9.3,
|
|
||||||
language-c -allwarnings +iecfpextension +usebytestrings,
|
|
||||||
any.libyaml-streamly ==0.2.2.1,
|
|
||||||
libyaml-streamly -no-unicode +system-libyaml,
|
|
||||||
any.lockfree-queue ==0.2.4,
|
|
||||||
any.lukko ==0.1.1.3,
|
|
||||||
lukko +ofd-locking,
|
|
||||||
any.lzma-static ==5.2.5.5,
|
|
||||||
any.megaparsec ==9.2.2,
|
|
||||||
megaparsec -dev,
|
|
||||||
any.microlens ==0.4.13.1,
|
|
||||||
any.microlens-mtl ==0.2.0.3,
|
|
||||||
any.microlens-th ==0.4.3.14,
|
|
||||||
any.monad-control ==1.0.3.1,
|
|
||||||
any.mono-traversable ==1.0.17.0,
|
|
||||||
any.mtl ==2.2.2,
|
|
||||||
any.mtl-compat ==0.2.2,
|
|
||||||
mtl-compat -two-point-one -two-point-two,
|
|
||||||
any.network ==3.1.4.0,
|
|
||||||
network -devel,
|
|
||||||
any.network-uri ==2.6.4.2,
|
|
||||||
any.openssl-streams ==1.2.3.0,
|
|
||||||
any.optics ==0.4.2.1,
|
|
||||||
any.optics-core ==0.4.1.1,
|
|
||||||
optics-core -explicit-generic-labels,
|
|
||||||
any.optics-extra ==0.4.2.1,
|
|
||||||
any.optics-th ==0.4.1,
|
|
||||||
any.optparse-applicative ==0.17.1.0,
|
|
||||||
optparse-applicative +process,
|
|
||||||
any.os-release ==1.0.2.1,
|
|
||||||
os-release -devel,
|
|
||||||
any.parsec ==3.1.17.0,
|
|
||||||
any.parser-combinators ==1.3.0,
|
|
||||||
parser-combinators -dev,
|
|
||||||
any.pretty ==1.1.3.6,
|
|
||||||
any.pretty-terminal ==0.1.0.0,
|
|
||||||
any.primitive ==0.8.0.0,
|
|
||||||
any.process ==1.6.18.0,
|
|
||||||
any.profunctors ==5.6.2,
|
|
||||||
any.quickcheck-arbitrary-adt ==0.3.1.0,
|
|
||||||
any.quickcheck-io ==0.2.0,
|
|
||||||
any.random ==1.2.1.2,
|
|
||||||
any.recursion-schemes ==5.2.2.5,
|
|
||||||
recursion-schemes +template-haskell,
|
|
||||||
any.regex-base ==0.94.0.2,
|
|
||||||
any.regex-posix ==0.96.0.1,
|
|
||||||
regex-posix -_regex-posix-clib,
|
|
||||||
any.resourcet ==1.2.6,
|
|
||||||
any.retry ==0.9.3.1,
|
|
||||||
retry -lib-werror,
|
|
||||||
any.rts ==1.0.2,
|
|
||||||
any.safe ==0.3.21,
|
|
||||||
any.safe-exceptions ==0.1.7.4,
|
|
||||||
any.scientific ==0.3.7.0,
|
|
||||||
scientific -bytestring-builder -integer-simple,
|
|
||||||
any.semialign ==1.3,
|
|
||||||
semialign +semigroupoids,
|
|
||||||
any.semigroupoids ==6.0.0.1,
|
|
||||||
semigroupoids +comonad +containers +contravariant +distributive +tagged +unordered-containers,
|
|
||||||
any.setenv ==0.1.1.3,
|
|
||||||
any.split ==0.2.5,
|
|
||||||
any.splitmix ==0.1.0.5,
|
|
||||||
splitmix -optimised-mixer,
|
|
||||||
any.stm ==2.5.0.2,
|
|
||||||
any.streaming-commons ==0.2.2.6,
|
|
||||||
streaming-commons -use-bytestring-builder,
|
|
||||||
any.streamly ==0.8.3,
|
|
||||||
streamly -debug -dev -fusion-plugin -has-llvm -inspection -limit-build-mem -no-fusion +opt -streamk -streamly-core -use-c-malloc +use-unliftio,
|
|
||||||
any.strict ==0.5,
|
|
||||||
any.strict-base ==0.4.0.0,
|
|
||||||
any.tagged ==0.8.8,
|
|
||||||
tagged +deepseq +transformers,
|
|
||||||
any.tagsoup ==0.14.8,
|
|
||||||
any.tar ==0.6.0.0,
|
|
||||||
any.tasty ==1.5,
|
|
||||||
tasty +unix,
|
|
||||||
any.tasty-hunit ==0.10.1,
|
|
||||||
any.template-haskell ==2.18.0.0,
|
|
||||||
any.temporary ==1.3,
|
|
||||||
any.terminal-progress-bar ==0.4.2,
|
|
||||||
any.terminal-size ==0.3.4,
|
|
||||||
any.terminfo ==0.4.1.5,
|
|
||||||
any.text ==2.0.2,
|
|
||||||
text -developer +simdutf,
|
|
||||||
any.text-binary ==0.2.1.1,
|
|
||||||
any.text-iso8601 ==0.1,
|
|
||||||
any.text-short ==0.1.5,
|
|
||||||
text-short -asserts,
|
|
||||||
any.text-zipper ==0.13,
|
|
||||||
any.tf-random ==0.5,
|
|
||||||
any.th-abstraction ==0.6.0.0,
|
|
||||||
any.th-compat ==0.1.4,
|
|
||||||
any.th-lift ==0.8.4,
|
|
||||||
any.th-lift-instances ==0.1.20,
|
|
||||||
any.these ==1.2,
|
|
||||||
any.time ==1.11.1.1,
|
|
||||||
any.time-compat ==1.9.6.1,
|
|
||||||
time-compat -old-locale,
|
|
||||||
any.transformers ==0.5.6.2,
|
|
||||||
any.transformers-base ==0.4.6,
|
|
||||||
transformers-base +orphaninstances,
|
|
||||||
any.transformers-compat ==0.7.2,
|
|
||||||
transformers-compat -five +five-three -four +generic-deriving +mtl -three -two,
|
|
||||||
any.typed-process ==0.2.11.1,
|
|
||||||
any.unicode-data ==0.3.1,
|
|
||||||
unicode-data -ucd2haskell,
|
|
||||||
any.unix ==2.8.5.0,
|
|
||||||
unix -os-string,
|
|
||||||
any.unix-bytestring ==0.3.7.8,
|
|
||||||
any.unix-compat ==0.7.1,
|
|
||||||
unix-compat -old-time,
|
|
||||||
any.unliftio-core ==0.2.1.0,
|
|
||||||
any.unordered-containers ==0.2.20,
|
|
||||||
unordered-containers -debug,
|
|
||||||
any.uri-bytestring ==0.3.3.1,
|
|
||||||
uri-bytestring -lib-werror,
|
|
||||||
any.utf8-string ==1.0.2,
|
|
||||||
any.uuid-types ==1.0.5.1,
|
|
||||||
any.vector ==0.13.1.0,
|
|
||||||
vector +boundschecks -internalchecks -unsafechecks -wall,
|
|
||||||
any.vector-algorithms ==0.9.0.1,
|
|
||||||
vector-algorithms +bench +boundschecks -internalchecks -llvm +properties -unsafechecks,
|
|
||||||
any.vector-binary-instances ==0.2.5.2,
|
|
||||||
any.vector-stream ==0.1.0.1,
|
|
||||||
any.versions ==6.0.6,
|
|
||||||
any.vty ==6.2,
|
|
||||||
any.vty-crossplatform ==0.4.0.0,
|
|
||||||
vty-crossplatform -demos,
|
|
||||||
any.vty-unix ==0.2.0.0,
|
|
||||||
any.witherable ==0.4.2,
|
|
||||||
any.word-wrap ==0.5,
|
|
||||||
any.word8 ==0.1.3,
|
|
||||||
any.xor ==0.0.1.2,
|
|
||||||
any.yaml-streamly ==0.12.4,
|
|
||||||
yaml-streamly +no-examples +no-exe,
|
|
||||||
any.zip ==2.0.0,
|
|
||||||
zip -dev -disable-bzip2 -disable-zstd,
|
|
||||||
any.zlib ==0.6.3.0,
|
|
||||||
zlib -bundled-c-zlib -non-blocking-ffi -pkg-config,
|
|
||||||
any.zlib-bindings ==0.1.1.5,
|
|
||||||
any.zstd ==0.1.3.0,
|
|
||||||
zstd +standalone
|
|
||||||
index-state: hackage.haskell.org 2024-03-13T09:43:35Z
|
|
@ -1,60 +0,0 @@
|
|||||||
packages: ./ghcup.cabal
|
|
||||||
|
|
||||||
optional-packages: ./vendored/*/*.cabal
|
|
||||||
|
|
||||||
if impl(ghc < 9.0)
|
|
||||||
package ghcup
|
|
||||||
flags: +tui -tar
|
|
||||||
else
|
|
||||||
package ghcup
|
|
||||||
flags: +tui +tar
|
|
||||||
|
|
||||||
constraints: http-io-streams -brotli,
|
|
||||||
any.aeson >= 2.0.1.0,
|
|
||||||
any.hsc2hs ==0.68.8,
|
|
||||||
bzlib-conduit >= 0.3.0.3,
|
|
||||||
bz2 >= 1.0.1.1,
|
|
||||||
bzlib >= 0.5.2.0,
|
|
||||||
directory >= 1.3.8.3,
|
|
||||||
filepath == 1.4.101.0 || == 1.4.300.1 || >= 1.5.2.0
|
|
||||||
|
|
||||||
if os(mingw32)
|
|
||||||
constraints: zlib +bundled-c-zlib,
|
|
||||||
lzma +static,
|
|
||||||
text -simdutf,
|
|
||||||
vty-windows >=0.2.0.2
|
|
||||||
|
|
||||||
if impl(ghc >= 9.4)
|
|
||||||
constraints: language-c >= 0.9.3
|
|
||||||
|
|
||||||
|
|
||||||
source-repository-package
|
|
||||||
type: git
|
|
||||||
location: https://github.com/haskell/tar.git
|
|
||||||
tag: d94a988be4311b830149a9f8fc16739927e5fc1c
|
|
||||||
|
|
||||||
source-repository-package
|
|
||||||
type: git
|
|
||||||
location: https://github.com/hasufell/uri-bytestring.git
|
|
||||||
tag: 4fb5ed14b500c192e6e7a97f6b2b1eb478806001
|
|
||||||
|
|
||||||
package libarchive
|
|
||||||
flags: -system-libarchive
|
|
||||||
|
|
||||||
package aeson-pretty
|
|
||||||
flags: +lib-only
|
|
||||||
|
|
||||||
package cabal-plan
|
|
||||||
flags: -exe
|
|
||||||
|
|
||||||
package aeson
|
|
||||||
flags: +ordered-keymap
|
|
||||||
|
|
||||||
package streamly
|
|
||||||
flags: +use-unliftio
|
|
||||||
|
|
||||||
package *
|
|
||||||
test-show-details: direct
|
|
||||||
|
|
||||||
allow-newer: cabal-install-parsers:tar, streamly:Win32
|
|
||||||
|
|
@ -1,258 +0,0 @@
|
|||||||
active-repositories: hackage.haskell.org:merge
|
|
||||||
constraints: any.Cabal ==3.10.2.1,
|
|
||||||
any.Cabal-syntax ==3.10.2.0,
|
|
||||||
any.HUnit ==1.6.2.0,
|
|
||||||
any.OneTuple ==0.4.1.1,
|
|
||||||
any.QuickCheck ==2.14.3,
|
|
||||||
QuickCheck -old-random +templatehaskell,
|
|
||||||
any.StateVar ==1.2.2,
|
|
||||||
any.Win32 ==2.12.0.1 || ==2.13.4.0,
|
|
||||||
any.abstract-deque ==0.3,
|
|
||||||
abstract-deque -usecas,
|
|
||||||
any.aeson ==2.2.1.0,
|
|
||||||
aeson +ordered-keymap,
|
|
||||||
any.aeson-pretty ==0.8.10,
|
|
||||||
aeson-pretty +lib-only,
|
|
||||||
any.alex ==3.5.1.0,
|
|
||||||
any.ansi-terminal ==1.0.2,
|
|
||||||
ansi-terminal -example,
|
|
||||||
any.ansi-terminal-types ==0.11.5,
|
|
||||||
any.ansi-wl-pprint ==0.6.9,
|
|
||||||
ansi-wl-pprint -example,
|
|
||||||
any.array ==0.5.4.0,
|
|
||||||
any.assoc ==1.1,
|
|
||||||
assoc +tagged,
|
|
||||||
any.async ==2.2.5,
|
|
||||||
async -bench,
|
|
||||||
any.atomic-primops ==0.8.5,
|
|
||||||
atomic-primops -debug,
|
|
||||||
any.attoparsec ==0.14.4,
|
|
||||||
attoparsec -developer,
|
|
||||||
any.base ==4.16.4.0,
|
|
||||||
any.base-compat ==0.13.1,
|
|
||||||
any.base-orphans ==0.9.1,
|
|
||||||
any.base16-bytestring ==1.0.2.0,
|
|
||||||
any.bifunctors ==5.6.1,
|
|
||||||
bifunctors +tagged,
|
|
||||||
any.bimap ==0.5.0,
|
|
||||||
any.binary ==0.8.9.0,
|
|
||||||
any.binary-instances ==1.0.4,
|
|
||||||
any.binary-orphans ==1.0.4.1,
|
|
||||||
any.bindings-DSL ==1.0.25,
|
|
||||||
any.bitvec ==1.1.5.0,
|
|
||||||
bitvec +simd,
|
|
||||||
any.blaze-builder ==0.4.2.3,
|
|
||||||
any.brick ==2.1.1,
|
|
||||||
brick -demos,
|
|
||||||
any.bytestring ==0.11.4.0,
|
|
||||||
any.bz2 ==1.0.1.1,
|
|
||||||
bz2 -cross +with-bzlib,
|
|
||||||
any.bzip2-clib ==1.0.8,
|
|
||||||
any.bzlib-conduit ==0.3.0.3,
|
|
||||||
any.c2hs ==0.28.8,
|
|
||||||
c2hs +base3 -regression,
|
|
||||||
any.cabal-install-parsers ==0.6.1.1,
|
|
||||||
any.cabal-plan ==0.7.3.0,
|
|
||||||
cabal-plan -_ -exe -license-report,
|
|
||||||
any.call-stack ==0.4.0,
|
|
||||||
any.case-insensitive ==1.2.1.0,
|
|
||||||
any.casing ==0.1.4.1,
|
|
||||||
any.cereal ==0.5.8.3,
|
|
||||||
cereal -bytestring-builder,
|
|
||||||
any.colour ==2.3.6,
|
|
||||||
any.comonad ==5.0.8,
|
|
||||||
comonad +containers +distributive +indexed-traversable,
|
|
||||||
any.conduit ==1.3.5,
|
|
||||||
any.conduit-extra ==1.3.6,
|
|
||||||
any.conduit-zstd ==0.0.2.0,
|
|
||||||
any.config-ini ==0.2.7.0,
|
|
||||||
config-ini -enable-doctests,
|
|
||||||
any.containers ==0.6.5.1,
|
|
||||||
any.contravariant ==1.5.5,
|
|
||||||
contravariant +semigroups +statevar +tagged,
|
|
||||||
any.cryptohash-sha256 ==0.11.102.1,
|
|
||||||
cryptohash-sha256 -exe +use-cbits,
|
|
||||||
any.data-array-byte ==0.1.0.1,
|
|
||||||
any.data-clist ==0.2,
|
|
||||||
any.data-default-class ==0.1.2.0,
|
|
||||||
any.data-fix ==0.3.2,
|
|
||||||
any.deepseq ==1.4.6.1,
|
|
||||||
any.digest ==0.0.2.1,
|
|
||||||
digest -have_arm64_crc32c -have_builtin_prefetch -have_mm_prefetch -have_sse42 -have_strong_getauxval -have_weak_getauxval +pkg-config,
|
|
||||||
any.directory ==1.3.6.2 || ==1.3.8.3,
|
|
||||||
directory -os-string,
|
|
||||||
any.disk-free-space ==0.1.0.1,
|
|
||||||
any.distributive ==0.6.2.1,
|
|
||||||
distributive +semigroups +tagged,
|
|
||||||
any.dlist ==1.0,
|
|
||||||
dlist -werror,
|
|
||||||
any.exceptions ==0.10.4,
|
|
||||||
any.file-uri ==0.1.0.0,
|
|
||||||
any.filepath ==1.4.2.2 || ==1.4.101.0,
|
|
||||||
filepath -cpphs,
|
|
||||||
any.foldable1-classes-compat ==0.1,
|
|
||||||
foldable1-classes-compat +tagged,
|
|
||||||
any.free ==5.2,
|
|
||||||
any.fusion-plugin-types ==0.1.0,
|
|
||||||
any.generic-arbitrary ==0.2.2,
|
|
||||||
any.generically ==0.1.1,
|
|
||||||
any.ghc-bignum ==1.2,
|
|
||||||
any.ghc-boot-th ==9.2.8,
|
|
||||||
any.ghc-prim ==0.8.0,
|
|
||||||
any.happy ==1.20.1.1,
|
|
||||||
any.hashable ==1.4.3.0,
|
|
||||||
hashable +integer-gmp -random-initial-seed,
|
|
||||||
any.haskell-lexer ==1.1.1,
|
|
||||||
any.haskus-utils-data ==1.4,
|
|
||||||
any.haskus-utils-types ==1.5.1,
|
|
||||||
any.haskus-utils-variant ==3.3,
|
|
||||||
any.heaps ==0.4,
|
|
||||||
any.hsc2hs ==0.68.8,
|
|
||||||
hsc2hs -in-ghc-tree,
|
|
||||||
any.hspec ==2.10.10,
|
|
||||||
any.hspec-core ==2.10.10,
|
|
||||||
any.hspec-discover ==2.10.10,
|
|
||||||
any.hspec-expectations ==0.8.2,
|
|
||||||
any.hspec-golden-aeson ==0.9.0.0,
|
|
||||||
any.indexed-profunctors ==0.1.1.1,
|
|
||||||
any.indexed-traversable ==0.1.3,
|
|
||||||
any.indexed-traversable-instances ==0.1.1.2,
|
|
||||||
any.integer-conversion ==0.1.0.1,
|
|
||||||
any.integer-logarithms ==1.0.3.1,
|
|
||||||
integer-logarithms -check-bounds +integer-gmp,
|
|
||||||
any.language-c ==0.9.3,
|
|
||||||
language-c -allwarnings +iecfpextension +usebytestrings,
|
|
||||||
any.libyaml-clib ==0.2.5,
|
|
||||||
any.libyaml-streamly ==0.2.2.1,
|
|
||||||
libyaml-streamly -no-unicode -system-libyaml,
|
|
||||||
any.lockfree-queue ==0.2.4,
|
|
||||||
any.lukko ==0.1.1.3,
|
|
||||||
lukko +ofd-locking,
|
|
||||||
any.lzma-static ==5.2.5.5,
|
|
||||||
any.megaparsec ==9.2.2,
|
|
||||||
megaparsec -dev,
|
|
||||||
any.microlens ==0.4.13.1,
|
|
||||||
any.microlens-mtl ==0.2.0.3,
|
|
||||||
any.microlens-th ==0.4.3.14,
|
|
||||||
any.monad-control ==1.0.3.1,
|
|
||||||
any.mono-traversable ==1.0.17.0,
|
|
||||||
any.mtl ==2.2.2,
|
|
||||||
any.mtl-compat ==0.2.2,
|
|
||||||
mtl-compat -two-point-one -two-point-two,
|
|
||||||
any.network ==3.1.4.0,
|
|
||||||
network -devel,
|
|
||||||
any.network-uri ==2.6.4.2,
|
|
||||||
any.optics ==0.4.2.1,
|
|
||||||
any.optics-core ==0.4.1.1,
|
|
||||||
optics-core -explicit-generic-labels,
|
|
||||||
any.optics-extra ==0.4.2.1,
|
|
||||||
any.optics-th ==0.4.1,
|
|
||||||
any.optparse-applicative ==0.17.1.0,
|
|
||||||
optparse-applicative +process,
|
|
||||||
any.os-release ==1.0.2.1,
|
|
||||||
os-release -devel,
|
|
||||||
any.parsec ==3.1.17.0,
|
|
||||||
any.parser-combinators ==1.3.0,
|
|
||||||
parser-combinators -dev,
|
|
||||||
any.pretty ==1.1.3.6,
|
|
||||||
any.pretty-terminal ==0.1.0.0,
|
|
||||||
any.primitive ==0.8.0.0,
|
|
||||||
any.process ==1.6.16.0 || ==1.6.18.0,
|
|
||||||
any.profunctors ==5.6.2,
|
|
||||||
any.quickcheck-arbitrary-adt ==0.3.1.0,
|
|
||||||
any.quickcheck-io ==0.2.0,
|
|
||||||
any.random ==1.2.1.2,
|
|
||||||
any.recursion-schemes ==5.2.2.5,
|
|
||||||
recursion-schemes +template-haskell,
|
|
||||||
any.regex-base ==0.94.0.2,
|
|
||||||
any.regex-posix ==0.96.0.1,
|
|
||||||
regex-posix -_regex-posix-clib,
|
|
||||||
any.regex-posix-clib ==2.7,
|
|
||||||
any.resourcet ==1.2.6,
|
|
||||||
any.retry ==0.9.3.1,
|
|
||||||
retry -lib-werror,
|
|
||||||
any.rts ==1.0.2,
|
|
||||||
any.safe ==0.3.21,
|
|
||||||
any.safe-exceptions ==0.1.7.4,
|
|
||||||
any.scientific ==0.3.7.0,
|
|
||||||
scientific -bytestring-builder -integer-simple,
|
|
||||||
any.semialign ==1.3,
|
|
||||||
semialign +semigroupoids,
|
|
||||||
any.semigroupoids ==6.0.0.1,
|
|
||||||
semigroupoids +comonad +containers +contravariant +distributive +tagged +unordered-containers,
|
|
||||||
any.setenv ==0.1.1.3,
|
|
||||||
any.split ==0.2.5,
|
|
||||||
any.splitmix ==0.1.0.5,
|
|
||||||
splitmix -optimised-mixer,
|
|
||||||
any.stm ==2.5.0.2,
|
|
||||||
any.streaming-commons ==0.2.2.6,
|
|
||||||
streaming-commons -use-bytestring-builder,
|
|
||||||
any.streamly ==0.8.3,
|
|
||||||
streamly -debug -dev -fusion-plugin -has-llvm -inspection -limit-build-mem -no-fusion +opt -streamk -streamly-core -use-c-malloc +use-unliftio,
|
|
||||||
any.strict ==0.5,
|
|
||||||
any.strict-base ==0.4.0.0,
|
|
||||||
any.tagged ==0.8.8,
|
|
||||||
tagged +deepseq +transformers,
|
|
||||||
any.tagsoup ==0.14.8,
|
|
||||||
any.tar ==0.6.0.0,
|
|
||||||
any.tasty ==1.5,
|
|
||||||
tasty +unix,
|
|
||||||
any.tasty-hunit ==0.10.1,
|
|
||||||
any.template-haskell ==2.18.0.0,
|
|
||||||
any.temporary ==1.3,
|
|
||||||
any.text ==2.0.2,
|
|
||||||
text -developer -simdutf,
|
|
||||||
any.text-binary ==0.2.1.1,
|
|
||||||
any.text-iso8601 ==0.1,
|
|
||||||
any.text-short ==0.1.5,
|
|
||||||
text-short -asserts,
|
|
||||||
any.text-zipper ==0.13,
|
|
||||||
any.tf-random ==0.5,
|
|
||||||
any.th-abstraction ==0.6.0.0,
|
|
||||||
any.th-compat ==0.1.4,
|
|
||||||
any.th-lift ==0.8.4,
|
|
||||||
any.th-lift-instances ==0.1.20,
|
|
||||||
any.these ==1.2,
|
|
||||||
any.time ==1.11.1.1 || ==1.11.1.2,
|
|
||||||
any.time-compat ==1.9.6.1,
|
|
||||||
time-compat -old-locale,
|
|
||||||
any.transformers ==0.5.6.2,
|
|
||||||
any.transformers-base ==0.4.6,
|
|
||||||
transformers-base +orphaninstances,
|
|
||||||
any.transformers-compat ==0.7.2,
|
|
||||||
transformers-compat -five +five-three -four +generic-deriving +mtl -three -two,
|
|
||||||
any.typed-process ==0.2.11.1,
|
|
||||||
any.unicode-data ==0.3.1,
|
|
||||||
unicode-data -ucd2haskell,
|
|
||||||
any.unix-compat ==0.7.1,
|
|
||||||
unix-compat -old-time,
|
|
||||||
any.unliftio-core ==0.2.1.0,
|
|
||||||
any.unordered-containers ==0.2.20,
|
|
||||||
unordered-containers -debug,
|
|
||||||
any.uri-bytestring ==0.3.3.1,
|
|
||||||
uri-bytestring -lib-werror,
|
|
||||||
any.utf8-string ==1.0.2,
|
|
||||||
any.uuid-types ==1.0.5.1,
|
|
||||||
any.vector ==0.13.1.0,
|
|
||||||
vector +boundschecks -internalchecks -unsafechecks -wall,
|
|
||||||
any.vector-algorithms ==0.9.0.1,
|
|
||||||
vector-algorithms +bench +boundschecks -internalchecks -llvm +properties -unsafechecks,
|
|
||||||
any.vector-binary-instances ==0.2.5.2,
|
|
||||||
any.vector-stream ==0.1.0.1,
|
|
||||||
any.versions ==6.0.6,
|
|
||||||
any.vty ==6.2,
|
|
||||||
any.vty-crossplatform ==0.4.0.0,
|
|
||||||
vty-crossplatform -demos,
|
|
||||||
any.vty-windows ==0.2.0.2,
|
|
||||||
any.witherable ==0.4.2,
|
|
||||||
any.word-wrap ==0.5,
|
|
||||||
any.word8 ==0.1.3,
|
|
||||||
any.yaml-streamly ==0.12.4,
|
|
||||||
yaml-streamly +no-examples +no-exe,
|
|
||||||
any.zip ==2.0.0,
|
|
||||||
zip -dev -disable-bzip2 -disable-zstd,
|
|
||||||
any.zlib ==0.6.3.0,
|
|
||||||
zlib +bundled-c-zlib -non-blocking-ffi -pkg-config,
|
|
||||||
any.zstd ==0.1.3.0,
|
|
||||||
zstd +standalone
|
|
||||||
index-state: hackage.haskell.org 2024-03-15T23:51:46Z
|
|
@ -1,8 +0,0 @@
|
|||||||
if os(mingw32)
|
|
||||||
import: cabal.ghc928.Win32.project
|
|
||||||
import: cabal.ghc928.Win32.project.freeze
|
|
||||||
else
|
|
||||||
import: cabal.ghc928.Unix.project
|
|
||||||
import: cabal.ghc928.Unix.project.freeze
|
|
||||||
|
|
||||||
with-compiler: ghc-9.2.8
|
|
@ -1,60 +0,0 @@
|
|||||||
packages: ./ghcup.cabal
|
|
||||||
|
|
||||||
optional-packages: ./vendored/*/*.cabal
|
|
||||||
|
|
||||||
if impl(ghc < 9.0)
|
|
||||||
package ghcup
|
|
||||||
flags: +tui -tar
|
|
||||||
else
|
|
||||||
package ghcup
|
|
||||||
flags: +tui +tar
|
|
||||||
|
|
||||||
constraints: http-io-streams -brotli,
|
|
||||||
any.aeson >= 2.0.1.0,
|
|
||||||
any.hsc2hs ==0.68.8,
|
|
||||||
bzlib-conduit >= 0.3.0.3,
|
|
||||||
bz2 >= 1.0.1.1,
|
|
||||||
bzlib >= 0.5.2.0,
|
|
||||||
directory >= 1.3.8.3,
|
|
||||||
filepath == 1.4.101.0 || == 1.4.300.1 || >= 1.5.2.0
|
|
||||||
|
|
||||||
if os(mingw32)
|
|
||||||
constraints: zlib +bundled-c-zlib,
|
|
||||||
lzma +static,
|
|
||||||
text -simdutf,
|
|
||||||
vty-windows >=0.2.0.2
|
|
||||||
|
|
||||||
if impl(ghc >= 9.4)
|
|
||||||
constraints: language-c >= 0.9.3
|
|
||||||
|
|
||||||
|
|
||||||
source-repository-package
|
|
||||||
type: git
|
|
||||||
location: https://github.com/haskell/tar.git
|
|
||||||
tag: d94a988be4311b830149a9f8fc16739927e5fc1c
|
|
||||||
|
|
||||||
source-repository-package
|
|
||||||
type: git
|
|
||||||
location: https://github.com/hasufell/uri-bytestring.git
|
|
||||||
tag: 4fb5ed14b500c192e6e7a97f6b2b1eb478806001
|
|
||||||
|
|
||||||
package libarchive
|
|
||||||
flags: -system-libarchive
|
|
||||||
|
|
||||||
package aeson-pretty
|
|
||||||
flags: +lib-only
|
|
||||||
|
|
||||||
package cabal-plan
|
|
||||||
flags: -exe
|
|
||||||
|
|
||||||
package aeson
|
|
||||||
flags: +ordered-keymap
|
|
||||||
|
|
||||||
package streamly
|
|
||||||
flags: +use-unliftio
|
|
||||||
|
|
||||||
package *
|
|
||||||
test-show-details: direct
|
|
||||||
|
|
||||||
allow-newer: cabal-install-parsers:tar, streamly:Win32
|
|
||||||
|
|
@ -1,271 +0,0 @@
|
|||||||
active-repositories: hackage.haskell.org:merge
|
|
||||||
constraints: any.Cabal ==3.10.2.1,
|
|
||||||
any.Cabal-syntax ==3.10.2.0,
|
|
||||||
any.HUnit ==1.6.2.0,
|
|
||||||
any.HsOpenSSL ==0.11.7.6,
|
|
||||||
HsOpenSSL -fast-bignum -homebrew-openssl -macports-openssl -use-pkg-config,
|
|
||||||
any.OneTuple ==0.4.1.1,
|
|
||||||
any.QuickCheck ==2.14.3,
|
|
||||||
QuickCheck -old-random +templatehaskell,
|
|
||||||
any.StateVar ==1.2.2,
|
|
||||||
any.abstract-deque ==0.3,
|
|
||||||
abstract-deque -usecas,
|
|
||||||
any.aeson ==2.2.1.0,
|
|
||||||
aeson +ordered-keymap,
|
|
||||||
any.aeson-pretty ==0.8.10,
|
|
||||||
aeson-pretty +lib-only,
|
|
||||||
any.alex ==3.5.1.0,
|
|
||||||
any.ansi-terminal ==1.0.2,
|
|
||||||
ansi-terminal -example,
|
|
||||||
any.ansi-terminal-types ==0.11.5,
|
|
||||||
any.ansi-wl-pprint ==0.6.9,
|
|
||||||
ansi-wl-pprint -example,
|
|
||||||
any.array ==0.5.4.0,
|
|
||||||
any.assoc ==1.1,
|
|
||||||
assoc +tagged,
|
|
||||||
any.async ==2.2.5,
|
|
||||||
async -bench,
|
|
||||||
any.atomic-primops ==0.8.5,
|
|
||||||
atomic-primops -debug,
|
|
||||||
any.attoparsec ==0.14.4,
|
|
||||||
attoparsec -developer,
|
|
||||||
any.base ==4.17.2.1,
|
|
||||||
any.base-compat ==0.13.1,
|
|
||||||
any.base-orphans ==0.9.1,
|
|
||||||
any.base16-bytestring ==1.0.2.0,
|
|
||||||
any.base64-bytestring ==1.2.1.0,
|
|
||||||
any.bifunctors ==5.6.1,
|
|
||||||
bifunctors +tagged,
|
|
||||||
any.bimap ==0.5.0,
|
|
||||||
any.binary ==0.8.9.1,
|
|
||||||
any.binary-instances ==1.0.4,
|
|
||||||
any.binary-orphans ==1.0.4.1,
|
|
||||||
any.bindings-DSL ==1.0.25,
|
|
||||||
any.bitvec ==1.1.5.0,
|
|
||||||
bitvec +simd,
|
|
||||||
any.blaze-builder ==0.4.2.3,
|
|
||||||
any.brick ==2.1.1,
|
|
||||||
brick -demos,
|
|
||||||
any.bytestring ==0.11.5.3,
|
|
||||||
any.bz2 ==1.0.1.1,
|
|
||||||
bz2 -cross +with-bzlib,
|
|
||||||
any.bzip2-clib ==1.0.8,
|
|
||||||
any.bzlib-conduit ==0.3.0.3,
|
|
||||||
any.c2hs ==0.28.8,
|
|
||||||
c2hs +base3 -regression,
|
|
||||||
any.cabal-install-parsers ==0.6.1.1,
|
|
||||||
any.cabal-plan ==0.7.3.0,
|
|
||||||
cabal-plan -_ -exe -license-report,
|
|
||||||
any.call-stack ==0.4.0,
|
|
||||||
any.case-insensitive ==1.2.1.0,
|
|
||||||
any.casing ==0.1.4.1,
|
|
||||||
any.cereal ==0.5.8.3,
|
|
||||||
cereal -bytestring-builder,
|
|
||||||
any.colour ==2.3.6,
|
|
||||||
any.comonad ==5.0.8,
|
|
||||||
comonad +containers +distributive +indexed-traversable,
|
|
||||||
any.conduit ==1.3.5,
|
|
||||||
any.conduit-extra ==1.3.6,
|
|
||||||
any.conduit-zstd ==0.0.2.0,
|
|
||||||
any.config-ini ==0.2.7.0,
|
|
||||||
config-ini -enable-doctests,
|
|
||||||
any.containers ==0.6.7,
|
|
||||||
any.contravariant ==1.5.5,
|
|
||||||
contravariant +semigroups +statevar +tagged,
|
|
||||||
any.cryptohash-sha1 ==0.11.101.0,
|
|
||||||
any.cryptohash-sha256 ==0.11.102.1,
|
|
||||||
cryptohash-sha256 -exe +use-cbits,
|
|
||||||
any.data-clist ==0.2,
|
|
||||||
any.data-default-class ==0.1.2.0,
|
|
||||||
any.data-fix ==0.3.2,
|
|
||||||
any.deepseq ==1.4.8.0,
|
|
||||||
any.digest ==0.0.2.1,
|
|
||||||
digest -have_arm64_crc32c -have_builtin_prefetch -have_mm_prefetch -have_sse42 -have_strong_getauxval -have_weak_getauxval +pkg-config,
|
|
||||||
any.directory ==1.3.8.3,
|
|
||||||
directory -os-string,
|
|
||||||
any.disk-free-space ==0.1.0.1,
|
|
||||||
any.distributive ==0.6.2.1,
|
|
||||||
distributive +semigroups +tagged,
|
|
||||||
any.dlist ==1.0,
|
|
||||||
dlist -werror,
|
|
||||||
any.exceptions ==0.10.5,
|
|
||||||
any.file-uri ==0.1.0.0,
|
|
||||||
any.filepath ==1.4.101.0,
|
|
||||||
filepath -cpphs,
|
|
||||||
any.foldable1-classes-compat ==0.1,
|
|
||||||
foldable1-classes-compat +tagged,
|
|
||||||
any.free ==5.2,
|
|
||||||
any.fusion-plugin-types ==0.1.0,
|
|
||||||
any.generic-arbitrary ==0.2.2,
|
|
||||||
any.generically ==0.1.1,
|
|
||||||
any.ghc-bignum ==1.3,
|
|
||||||
any.ghc-boot-th ==9.4.8,
|
|
||||||
any.ghc-byteorder ==4.11.0.0.10,
|
|
||||||
any.ghc-prim ==0.9.1,
|
|
||||||
any.happy ==1.20.1.1,
|
|
||||||
any.hashable ==1.4.3.0,
|
|
||||||
hashable +integer-gmp -random-initial-seed,
|
|
||||||
any.haskell-lexer ==1.1.1,
|
|
||||||
any.haskus-utils-data ==1.4,
|
|
||||||
any.haskus-utils-types ==1.5.1,
|
|
||||||
any.haskus-utils-variant ==3.3,
|
|
||||||
any.heaps ==0.4,
|
|
||||||
any.hsc2hs ==0.68.8,
|
|
||||||
hsc2hs -in-ghc-tree,
|
|
||||||
any.hspec ==2.10.10,
|
|
||||||
any.hspec-core ==2.10.10,
|
|
||||||
any.hspec-discover ==2.10.10,
|
|
||||||
any.hspec-expectations ==0.8.2,
|
|
||||||
any.hspec-golden-aeson ==0.9.0.0,
|
|
||||||
any.http-io-streams ==0.1.7.0,
|
|
||||||
http-io-streams -brotli +fast-xor,
|
|
||||||
any.indexed-profunctors ==0.1.1.1,
|
|
||||||
any.indexed-traversable ==0.1.3,
|
|
||||||
any.indexed-traversable-instances ==0.1.1.2,
|
|
||||||
any.integer-conversion ==0.1.0.1,
|
|
||||||
any.integer-logarithms ==1.0.3.1,
|
|
||||||
integer-logarithms -check-bounds +integer-gmp,
|
|
||||||
any.io-streams ==1.5.2.2,
|
|
||||||
io-streams +network -nointeractivetests +zlib,
|
|
||||||
any.language-c ==0.9.3,
|
|
||||||
language-c -allwarnings +iecfpextension +usebytestrings,
|
|
||||||
any.libyaml-streamly ==0.2.2.1,
|
|
||||||
libyaml-streamly -no-unicode +system-libyaml,
|
|
||||||
any.lockfree-queue ==0.2.4,
|
|
||||||
any.lukko ==0.1.1.3,
|
|
||||||
lukko +ofd-locking,
|
|
||||||
any.lzma-static ==5.2.5.5,
|
|
||||||
any.megaparsec ==9.2.2,
|
|
||||||
megaparsec -dev,
|
|
||||||
any.microlens ==0.4.13.1,
|
|
||||||
any.microlens-mtl ==0.2.0.3,
|
|
||||||
any.microlens-th ==0.4.3.14,
|
|
||||||
any.monad-control ==1.0.3.1,
|
|
||||||
any.mono-traversable ==1.0.17.0,
|
|
||||||
any.mtl ==2.2.2,
|
|
||||||
any.mtl-compat ==0.2.2,
|
|
||||||
mtl-compat -two-point-one -two-point-two,
|
|
||||||
any.network ==3.1.4.0,
|
|
||||||
network -devel,
|
|
||||||
any.network-uri ==2.6.4.2,
|
|
||||||
any.openssl-streams ==1.2.3.0,
|
|
||||||
any.optics ==0.4.2.1,
|
|
||||||
any.optics-core ==0.4.1.1,
|
|
||||||
optics-core -explicit-generic-labels,
|
|
||||||
any.optics-extra ==0.4.2.1,
|
|
||||||
any.optics-th ==0.4.1,
|
|
||||||
any.optparse-applicative ==0.17.1.0,
|
|
||||||
optparse-applicative +process,
|
|
||||||
any.os-release ==1.0.2.1,
|
|
||||||
os-release -devel,
|
|
||||||
any.parsec ==3.1.16.1,
|
|
||||||
any.parser-combinators ==1.3.0,
|
|
||||||
parser-combinators -dev,
|
|
||||||
any.pretty ==1.1.3.6,
|
|
||||||
any.pretty-terminal ==0.1.0.0,
|
|
||||||
any.primitive ==0.8.0.0,
|
|
||||||
any.process ==1.6.18.0,
|
|
||||||
any.profunctors ==5.6.2,
|
|
||||||
any.quickcheck-arbitrary-adt ==0.3.1.0,
|
|
||||||
any.quickcheck-io ==0.2.0,
|
|
||||||
any.random ==1.2.1.2,
|
|
||||||
any.recursion-schemes ==5.2.2.5,
|
|
||||||
recursion-schemes +template-haskell,
|
|
||||||
any.regex-base ==0.94.0.2,
|
|
||||||
any.regex-posix ==0.96.0.1,
|
|
||||||
regex-posix -_regex-posix-clib,
|
|
||||||
any.resourcet ==1.2.6,
|
|
||||||
any.retry ==0.9.3.1,
|
|
||||||
retry -lib-werror,
|
|
||||||
any.rts ==1.0.2,
|
|
||||||
any.safe ==0.3.21,
|
|
||||||
any.safe-exceptions ==0.1.7.4,
|
|
||||||
any.scientific ==0.3.7.0,
|
|
||||||
scientific -bytestring-builder -integer-simple,
|
|
||||||
any.semialign ==1.3,
|
|
||||||
semialign +semigroupoids,
|
|
||||||
any.semigroupoids ==6.0.0.1,
|
|
||||||
semigroupoids +comonad +containers +contravariant +distributive +tagged +unordered-containers,
|
|
||||||
any.setenv ==0.1.1.3,
|
|
||||||
any.split ==0.2.5,
|
|
||||||
any.splitmix ==0.1.0.5,
|
|
||||||
splitmix -optimised-mixer,
|
|
||||||
any.stm ==2.5.1.0,
|
|
||||||
any.streaming-commons ==0.2.2.6,
|
|
||||||
streaming-commons -use-bytestring-builder,
|
|
||||||
any.streamly ==0.8.3,
|
|
||||||
streamly -debug -dev -fusion-plugin -has-llvm -inspection -limit-build-mem -no-fusion +opt -streamk -streamly-core -use-c-malloc +use-unliftio,
|
|
||||||
any.strict ==0.5,
|
|
||||||
any.strict-base ==0.4.0.0,
|
|
||||||
any.tagged ==0.8.8,
|
|
||||||
tagged +deepseq +transformers,
|
|
||||||
any.tagsoup ==0.14.8,
|
|
||||||
any.tar ==0.6.0.0,
|
|
||||||
any.tasty ==1.5,
|
|
||||||
tasty +unix,
|
|
||||||
any.tasty-hunit ==0.10.1,
|
|
||||||
any.template-haskell ==2.19.0.0,
|
|
||||||
any.temporary ==1.3,
|
|
||||||
any.terminal-progress-bar ==0.4.2,
|
|
||||||
any.terminal-size ==0.3.4,
|
|
||||||
any.terminfo ==0.4.1.5,
|
|
||||||
any.text ==2.0.2,
|
|
||||||
any.text-binary ==0.2.1.1,
|
|
||||||
any.text-iso8601 ==0.1,
|
|
||||||
any.text-short ==0.1.5,
|
|
||||||
text-short -asserts,
|
|
||||||
any.text-zipper ==0.13,
|
|
||||||
any.tf-random ==0.5,
|
|
||||||
any.th-abstraction ==0.6.0.0,
|
|
||||||
any.th-compat ==0.1.4,
|
|
||||||
any.th-lift ==0.8.4,
|
|
||||||
any.th-lift-instances ==0.1.20,
|
|
||||||
any.these ==1.2,
|
|
||||||
any.time ==1.11.1.2,
|
|
||||||
any.time-compat ==1.9.6.1,
|
|
||||||
time-compat -old-locale,
|
|
||||||
any.transformers ==0.5.6.2,
|
|
||||||
any.transformers-base ==0.4.6,
|
|
||||||
transformers-base +orphaninstances,
|
|
||||||
any.transformers-compat ==0.7.2,
|
|
||||||
transformers-compat -five +five-three -four +generic-deriving +mtl -three -two,
|
|
||||||
any.typed-process ==0.2.11.1,
|
|
||||||
any.unicode-data ==0.3.1,
|
|
||||||
unicode-data -ucd2haskell,
|
|
||||||
any.unix ==2.8.5.0,
|
|
||||||
unix -os-string,
|
|
||||||
any.unix-bytestring ==0.3.7.8,
|
|
||||||
any.unix-compat ==0.7.1,
|
|
||||||
unix-compat -old-time,
|
|
||||||
any.unliftio-core ==0.2.1.0,
|
|
||||||
any.unordered-containers ==0.2.20,
|
|
||||||
unordered-containers -debug,
|
|
||||||
any.uri-bytestring ==0.3.3.1,
|
|
||||||
uri-bytestring -lib-werror,
|
|
||||||
any.utf8-string ==1.0.2,
|
|
||||||
any.uuid-types ==1.0.5.1,
|
|
||||||
any.vector ==0.13.1.0,
|
|
||||||
vector +boundschecks -internalchecks -unsafechecks -wall,
|
|
||||||
any.vector-algorithms ==0.9.0.1,
|
|
||||||
vector-algorithms +bench +boundschecks -internalchecks -llvm +properties -unsafechecks,
|
|
||||||
any.vector-binary-instances ==0.2.5.2,
|
|
||||||
any.vector-stream ==0.1.0.1,
|
|
||||||
any.versions ==6.0.6,
|
|
||||||
any.vty ==6.2,
|
|
||||||
any.vty-crossplatform ==0.4.0.0,
|
|
||||||
vty-crossplatform -demos,
|
|
||||||
any.vty-unix ==0.2.0.0,
|
|
||||||
any.witherable ==0.4.2,
|
|
||||||
any.word-wrap ==0.5,
|
|
||||||
any.word8 ==0.1.3,
|
|
||||||
any.xor ==0.0.1.2,
|
|
||||||
any.yaml-streamly ==0.12.4,
|
|
||||||
yaml-streamly +no-examples +no-exe,
|
|
||||||
any.zip ==2.0.0,
|
|
||||||
zip -dev -disable-bzip2 -disable-zstd,
|
|
||||||
any.zlib ==0.6.3.0,
|
|
||||||
zlib -bundled-c-zlib -non-blocking-ffi -pkg-config,
|
|
||||||
any.zlib-bindings ==0.1.1.5,
|
|
||||||
any.zstd ==0.1.3.0,
|
|
||||||
zstd +standalone
|
|
||||||
index-state: hackage.haskell.org 2024-03-13T09:43:35Z
|
|
@ -1,61 +0,0 @@
|
|||||||
packages: ./ghcup.cabal
|
|
||||||
|
|
||||||
optional-packages: ./vendored/*/*.cabal
|
|
||||||
|
|
||||||
if impl(ghc < 9.0)
|
|
||||||
package ghcup
|
|
||||||
flags: +tui -tar
|
|
||||||
else
|
|
||||||
package ghcup
|
|
||||||
flags: +tui +tar
|
|
||||||
|
|
||||||
constraints: http-io-streams -brotli,
|
|
||||||
any.aeson >= 2.0.1.0,
|
|
||||||
any.hsc2hs ==0.68.8,
|
|
||||||
bzlib-conduit >= 0.3.0.3,
|
|
||||||
bz2 >= 1.0.1.1,
|
|
||||||
bzlib >= 0.5.2.0,
|
|
||||||
directory >= 1.3.8.3,
|
|
||||||
filepath == 1.4.101.0 || == 1.4.300.1 || >= 1.5.2.0
|
|
||||||
|
|
||||||
if os(mingw32)
|
|
||||||
constraints: zlib +bundled-c-zlib,
|
|
||||||
lzma +static,
|
|
||||||
text -simdutf,
|
|
||||||
vty-windows >=0.2.0.2
|
|
||||||
|
|
||||||
if impl(ghc >= 9.4)
|
|
||||||
constraints: language-c >= 0.9.3
|
|
||||||
|
|
||||||
|
|
||||||
source-repository-package
|
|
||||||
type: git
|
|
||||||
location: https://github.com/haskell/tar.git
|
|
||||||
tag: d94a988be4311b830149a9f8fc16739927e5fc1c
|
|
||||||
|
|
||||||
source-repository-package
|
|
||||||
type: git
|
|
||||||
location: https://github.com/hasufell/uri-bytestring.git
|
|
||||||
tag: 4fb5ed14b500c192e6e7a97f6b2b1eb478806001
|
|
||||||
|
|
||||||
package libarchive
|
|
||||||
flags: -system-libarchive
|
|
||||||
|
|
||||||
package aeson-pretty
|
|
||||||
flags: +lib-only
|
|
||||||
|
|
||||||
package cabal-plan
|
|
||||||
flags: -exe
|
|
||||||
|
|
||||||
package aeson
|
|
||||||
flags: +ordered-keymap
|
|
||||||
|
|
||||||
package streamly
|
|
||||||
flags: +use-unliftio
|
|
||||||
|
|
||||||
package *
|
|
||||||
test-show-details: direct
|
|
||||||
|
|
||||||
allow-newer: cabal-install-parsers:tar, streamly:Win32
|
|
||||||
|
|
||||||
|
|
@ -1,256 +0,0 @@
|
|||||||
active-repositories: hackage.haskell.org:merge
|
|
||||||
constraints: any.Cabal ==3.10.2.1,
|
|
||||||
any.Cabal-syntax ==3.10.2.0,
|
|
||||||
any.HUnit ==1.6.2.0,
|
|
||||||
any.OneTuple ==0.4.1.1,
|
|
||||||
any.QuickCheck ==2.14.3,
|
|
||||||
QuickCheck -old-random +templatehaskell,
|
|
||||||
any.StateVar ==1.2.2,
|
|
||||||
any.Win32 ==2.12.0.1 || ==2.13.4.0,
|
|
||||||
any.abstract-deque ==0.3,
|
|
||||||
abstract-deque -usecas,
|
|
||||||
any.aeson ==2.2.1.0,
|
|
||||||
aeson +ordered-keymap,
|
|
||||||
any.aeson-pretty ==0.8.10,
|
|
||||||
aeson-pretty +lib-only,
|
|
||||||
any.alex ==3.5.1.0,
|
|
||||||
any.ansi-terminal ==1.0.2,
|
|
||||||
ansi-terminal -example,
|
|
||||||
any.ansi-terminal-types ==0.11.5,
|
|
||||||
any.ansi-wl-pprint ==0.6.9,
|
|
||||||
ansi-wl-pprint -example,
|
|
||||||
any.array ==0.5.4.0,
|
|
||||||
any.assoc ==1.1,
|
|
||||||
assoc +tagged,
|
|
||||||
any.async ==2.2.5,
|
|
||||||
async -bench,
|
|
||||||
any.atomic-primops ==0.8.5,
|
|
||||||
atomic-primops -debug,
|
|
||||||
any.attoparsec ==0.14.4,
|
|
||||||
attoparsec -developer,
|
|
||||||
any.base ==4.17.2.1,
|
|
||||||
any.base-compat ==0.13.1,
|
|
||||||
any.base-orphans ==0.9.1,
|
|
||||||
any.base16-bytestring ==1.0.2.0,
|
|
||||||
any.bifunctors ==5.6.1,
|
|
||||||
bifunctors +tagged,
|
|
||||||
any.bimap ==0.5.0,
|
|
||||||
any.binary ==0.8.9.1,
|
|
||||||
any.binary-instances ==1.0.4,
|
|
||||||
any.binary-orphans ==1.0.4.1,
|
|
||||||
any.bindings-DSL ==1.0.25,
|
|
||||||
any.bitvec ==1.1.5.0,
|
|
||||||
bitvec +simd,
|
|
||||||
any.blaze-builder ==0.4.2.3,
|
|
||||||
any.brick ==2.1.1,
|
|
||||||
brick -demos,
|
|
||||||
any.bytestring ==0.11.5.3,
|
|
||||||
any.bz2 ==1.0.1.1,
|
|
||||||
bz2 -cross +with-bzlib,
|
|
||||||
any.bzip2-clib ==1.0.8,
|
|
||||||
any.bzlib-conduit ==0.3.0.3,
|
|
||||||
any.c2hs ==0.28.8,
|
|
||||||
c2hs +base3 -regression,
|
|
||||||
any.cabal-install-parsers ==0.6.1.1,
|
|
||||||
any.cabal-plan ==0.7.3.0,
|
|
||||||
cabal-plan -_ -exe -license-report,
|
|
||||||
any.call-stack ==0.4.0,
|
|
||||||
any.case-insensitive ==1.2.1.0,
|
|
||||||
any.casing ==0.1.4.1,
|
|
||||||
any.cereal ==0.5.8.3,
|
|
||||||
cereal -bytestring-builder,
|
|
||||||
any.colour ==2.3.6,
|
|
||||||
any.comonad ==5.0.8,
|
|
||||||
comonad +containers +distributive +indexed-traversable,
|
|
||||||
any.conduit ==1.3.5,
|
|
||||||
any.conduit-extra ==1.3.6,
|
|
||||||
any.conduit-zstd ==0.0.2.0,
|
|
||||||
any.config-ini ==0.2.7.0,
|
|
||||||
config-ini -enable-doctests,
|
|
||||||
any.containers ==0.6.7,
|
|
||||||
any.contravariant ==1.5.5,
|
|
||||||
contravariant +semigroups +statevar +tagged,
|
|
||||||
any.cryptohash-sha256 ==0.11.102.1,
|
|
||||||
cryptohash-sha256 -exe +use-cbits,
|
|
||||||
any.data-clist ==0.2,
|
|
||||||
any.data-default-class ==0.1.2.0,
|
|
||||||
any.data-fix ==0.3.2,
|
|
||||||
any.deepseq ==1.4.8.0,
|
|
||||||
any.digest ==0.0.2.1,
|
|
||||||
digest -have_arm64_crc32c -have_builtin_prefetch -have_mm_prefetch -have_sse42 -have_strong_getauxval -have_weak_getauxval +pkg-config,
|
|
||||||
any.directory ==1.3.7.1 || ==1.3.8.3,
|
|
||||||
directory -os-string,
|
|
||||||
any.disk-free-space ==0.1.0.1,
|
|
||||||
any.distributive ==0.6.2.1,
|
|
||||||
distributive +semigroups +tagged,
|
|
||||||
any.dlist ==1.0,
|
|
||||||
dlist -werror,
|
|
||||||
any.exceptions ==0.10.5,
|
|
||||||
any.file-uri ==0.1.0.0,
|
|
||||||
any.filepath ==1.4.2.2 || ==1.4.101.0,
|
|
||||||
filepath -cpphs,
|
|
||||||
any.foldable1-classes-compat ==0.1,
|
|
||||||
foldable1-classes-compat +tagged,
|
|
||||||
any.free ==5.2,
|
|
||||||
any.fusion-plugin-types ==0.1.0,
|
|
||||||
any.generic-arbitrary ==0.2.2,
|
|
||||||
any.generically ==0.1.1,
|
|
||||||
any.ghc-bignum ==1.3,
|
|
||||||
any.ghc-boot-th ==9.4.8,
|
|
||||||
any.ghc-prim ==0.9.1,
|
|
||||||
any.happy ==1.20.1.1,
|
|
||||||
any.hashable ==1.4.3.0,
|
|
||||||
hashable +integer-gmp -random-initial-seed,
|
|
||||||
any.haskell-lexer ==1.1.1,
|
|
||||||
any.haskus-utils-data ==1.4,
|
|
||||||
any.haskus-utils-types ==1.5.1,
|
|
||||||
any.haskus-utils-variant ==3.3,
|
|
||||||
any.heaps ==0.4,
|
|
||||||
any.hsc2hs ==0.68.8,
|
|
||||||
hsc2hs -in-ghc-tree,
|
|
||||||
any.hspec ==2.10.10,
|
|
||||||
any.hspec-core ==2.10.10,
|
|
||||||
any.hspec-discover ==2.10.10,
|
|
||||||
any.hspec-expectations ==0.8.2,
|
|
||||||
any.hspec-golden-aeson ==0.9.0.0,
|
|
||||||
any.indexed-profunctors ==0.1.1.1,
|
|
||||||
any.indexed-traversable ==0.1.3,
|
|
||||||
any.indexed-traversable-instances ==0.1.1.2,
|
|
||||||
any.integer-conversion ==0.1.0.1,
|
|
||||||
any.integer-logarithms ==1.0.3.1,
|
|
||||||
integer-logarithms -check-bounds +integer-gmp,
|
|
||||||
any.language-c ==0.9.3,
|
|
||||||
language-c -allwarnings +iecfpextension +usebytestrings,
|
|
||||||
any.libyaml-clib ==0.2.5,
|
|
||||||
any.libyaml-streamly ==0.2.2.1,
|
|
||||||
libyaml-streamly -no-unicode -system-libyaml,
|
|
||||||
any.lockfree-queue ==0.2.4,
|
|
||||||
any.lukko ==0.1.1.3,
|
|
||||||
lukko +ofd-locking,
|
|
||||||
any.lzma-static ==5.2.5.5,
|
|
||||||
any.megaparsec ==9.2.2,
|
|
||||||
megaparsec -dev,
|
|
||||||
any.microlens ==0.4.13.1,
|
|
||||||
any.microlens-mtl ==0.2.0.3,
|
|
||||||
any.microlens-th ==0.4.3.14,
|
|
||||||
any.monad-control ==1.0.3.1,
|
|
||||||
any.mono-traversable ==1.0.17.0,
|
|
||||||
any.mtl ==2.2.2,
|
|
||||||
any.mtl-compat ==0.2.2,
|
|
||||||
mtl-compat -two-point-one -two-point-two,
|
|
||||||
any.network ==3.1.4.0,
|
|
||||||
network -devel,
|
|
||||||
any.network-uri ==2.6.4.2,
|
|
||||||
any.optics ==0.4.2.1,
|
|
||||||
any.optics-core ==0.4.1.1,
|
|
||||||
optics-core -explicit-generic-labels,
|
|
||||||
any.optics-extra ==0.4.2.1,
|
|
||||||
any.optics-th ==0.4.1,
|
|
||||||
any.optparse-applicative ==0.17.1.0,
|
|
||||||
optparse-applicative +process,
|
|
||||||
any.os-release ==1.0.2.1,
|
|
||||||
os-release -devel,
|
|
||||||
any.parsec ==3.1.16.1,
|
|
||||||
any.parser-combinators ==1.3.0,
|
|
||||||
parser-combinators -dev,
|
|
||||||
any.pretty ==1.1.3.6,
|
|
||||||
any.pretty-terminal ==0.1.0.0,
|
|
||||||
any.primitive ==0.8.0.0,
|
|
||||||
any.process ==1.6.18.0,
|
|
||||||
any.profunctors ==5.6.2,
|
|
||||||
any.quickcheck-arbitrary-adt ==0.3.1.0,
|
|
||||||
any.quickcheck-io ==0.2.0,
|
|
||||||
any.random ==1.2.1.2,
|
|
||||||
any.recursion-schemes ==5.2.2.5,
|
|
||||||
recursion-schemes +template-haskell,
|
|
||||||
any.regex-base ==0.94.0.2,
|
|
||||||
any.regex-posix ==0.96.0.1,
|
|
||||||
regex-posix -_regex-posix-clib,
|
|
||||||
any.regex-posix-clib ==2.7,
|
|
||||||
any.resourcet ==1.2.6,
|
|
||||||
any.retry ==0.9.3.1,
|
|
||||||
retry -lib-werror,
|
|
||||||
any.rts ==1.0.2,
|
|
||||||
any.safe ==0.3.21,
|
|
||||||
any.safe-exceptions ==0.1.7.4,
|
|
||||||
any.scientific ==0.3.7.0,
|
|
||||||
scientific -bytestring-builder -integer-simple,
|
|
||||||
any.semialign ==1.3,
|
|
||||||
semialign +semigroupoids,
|
|
||||||
any.semigroupoids ==6.0.0.1,
|
|
||||||
semigroupoids +comonad +containers +contravariant +distributive +tagged +unordered-containers,
|
|
||||||
any.setenv ==0.1.1.3,
|
|
||||||
any.split ==0.2.5,
|
|
||||||
any.splitmix ==0.1.0.5,
|
|
||||||
splitmix -optimised-mixer,
|
|
||||||
any.stm ==2.5.1.0,
|
|
||||||
any.streaming-commons ==0.2.2.6,
|
|
||||||
streaming-commons -use-bytestring-builder,
|
|
||||||
any.streamly ==0.8.3,
|
|
||||||
streamly -debug -dev -fusion-plugin -has-llvm -inspection -limit-build-mem -no-fusion +opt -streamk -streamly-core -use-c-malloc +use-unliftio,
|
|
||||||
any.strict ==0.5,
|
|
||||||
any.strict-base ==0.4.0.0,
|
|
||||||
any.tagged ==0.8.8,
|
|
||||||
tagged +deepseq +transformers,
|
|
||||||
any.tagsoup ==0.14.8,
|
|
||||||
any.tar ==0.6.0.0,
|
|
||||||
any.tasty ==1.5,
|
|
||||||
tasty +unix,
|
|
||||||
any.tasty-hunit ==0.10.1,
|
|
||||||
any.template-haskell ==2.19.0.0,
|
|
||||||
any.temporary ==1.3,
|
|
||||||
any.text ==2.0.2,
|
|
||||||
any.text-binary ==0.2.1.1,
|
|
||||||
any.text-iso8601 ==0.1,
|
|
||||||
any.text-short ==0.1.5,
|
|
||||||
text-short -asserts,
|
|
||||||
any.text-zipper ==0.13,
|
|
||||||
any.tf-random ==0.5,
|
|
||||||
any.th-abstraction ==0.6.0.0,
|
|
||||||
any.th-compat ==0.1.4,
|
|
||||||
any.th-lift ==0.8.4,
|
|
||||||
any.th-lift-instances ==0.1.20,
|
|
||||||
any.these ==1.2,
|
|
||||||
any.time ==1.11.1.2 || ==1.12.2,
|
|
||||||
any.time-compat ==1.9.6.1,
|
|
||||||
time-compat -old-locale,
|
|
||||||
any.transformers ==0.5.6.2,
|
|
||||||
any.transformers-base ==0.4.6,
|
|
||||||
transformers-base +orphaninstances,
|
|
||||||
any.transformers-compat ==0.7.2,
|
|
||||||
transformers-compat -five +five-three -four +generic-deriving +mtl -three -two,
|
|
||||||
any.typed-process ==0.2.11.1,
|
|
||||||
any.unicode-data ==0.3.1,
|
|
||||||
unicode-data -ucd2haskell,
|
|
||||||
any.unix-compat ==0.7.1,
|
|
||||||
unix-compat -old-time,
|
|
||||||
any.unliftio-core ==0.2.1.0,
|
|
||||||
any.unordered-containers ==0.2.20,
|
|
||||||
unordered-containers -debug,
|
|
||||||
any.uri-bytestring ==0.3.3.1,
|
|
||||||
uri-bytestring -lib-werror,
|
|
||||||
any.utf8-string ==1.0.2,
|
|
||||||
any.uuid-types ==1.0.5.1,
|
|
||||||
any.vector ==0.13.1.0,
|
|
||||||
vector +boundschecks -internalchecks -unsafechecks -wall,
|
|
||||||
any.vector-algorithms ==0.9.0.1,
|
|
||||||
vector-algorithms +bench +boundschecks -internalchecks -llvm +properties -unsafechecks,
|
|
||||||
any.vector-binary-instances ==0.2.5.2,
|
|
||||||
any.vector-stream ==0.1.0.1,
|
|
||||||
any.versions ==6.0.6,
|
|
||||||
any.vty ==6.2,
|
|
||||||
any.vty-crossplatform ==0.4.0.0,
|
|
||||||
vty-crossplatform -demos,
|
|
||||||
any.vty-windows ==0.2.0.2,
|
|
||||||
any.witherable ==0.4.2,
|
|
||||||
any.word-wrap ==0.5,
|
|
||||||
any.word8 ==0.1.3,
|
|
||||||
any.yaml-streamly ==0.12.4,
|
|
||||||
yaml-streamly +no-examples +no-exe,
|
|
||||||
any.zip ==2.0.0,
|
|
||||||
zip -dev -disable-bzip2 -disable-zstd,
|
|
||||||
any.zlib ==0.6.3.0,
|
|
||||||
zlib +bundled-c-zlib -non-blocking-ffi -pkg-config,
|
|
||||||
any.zstd ==0.1.3.0,
|
|
||||||
zstd +standalone
|
|
||||||
index-state: hackage.haskell.org 2024-03-15T23:51:46Z
|
|
@ -1,8 +0,0 @@
|
|||||||
if os(mingw32)
|
|
||||||
import: cabal.ghc948.Win32.project
|
|
||||||
import: cabal.ghc948.Win32.project.freeze
|
|
||||||
else
|
|
||||||
import: cabal.ghc948.Unix.project
|
|
||||||
import: cabal.ghc948.Unix.project.freeze
|
|
||||||
|
|
||||||
with-compiler: ghc-9.4.8
|
|
@ -2,41 +2,20 @@ packages: ./ghcup.cabal
|
|||||||
|
|
||||||
optional-packages: ./vendored/*/*.cabal
|
optional-packages: ./vendored/*/*.cabal
|
||||||
|
|
||||||
if impl(ghc < 9.0)
|
optimization: 2
|
||||||
package ghcup
|
|
||||||
flags: +tui -tar
|
package ghcup
|
||||||
else
|
tests: True
|
||||||
package ghcup
|
flags: +tui
|
||||||
flags: +tui +tar
|
|
||||||
|
source-repository-package
|
||||||
|
type: git
|
||||||
|
location: https://github.com/bgamari/terminal-size.git
|
||||||
|
tag: 34ea816bd63f75f800eedac12c6908c6f3736036
|
||||||
|
|
||||||
constraints: http-io-streams -brotli,
|
constraints: http-io-streams -brotli,
|
||||||
|
any.Cabal ==3.6.2.0,
|
||||||
any.aeson >= 2.0.1.0,
|
any.aeson >= 2.0.1.0,
|
||||||
any.hsc2hs ==0.68.8,
|
|
||||||
bzlib-conduit >= 0.3.0.3,
|
|
||||||
bz2 >= 1.0.1.1,
|
|
||||||
bzlib >= 0.5.2.0,
|
|
||||||
directory >= 1.3.8.3,
|
|
||||||
filepath == 1.4.101.0 || == 1.4.300.1 || >= 1.5.2.0
|
|
||||||
|
|
||||||
if os(mingw32)
|
|
||||||
constraints: zlib +bundled-c-zlib,
|
|
||||||
lzma +static,
|
|
||||||
text -simdutf,
|
|
||||||
vty-windows >=0.2.0.2
|
|
||||||
|
|
||||||
if impl(ghc >= 9.4)
|
|
||||||
constraints: language-c >= 0.9.3
|
|
||||||
|
|
||||||
|
|
||||||
source-repository-package
|
|
||||||
type: git
|
|
||||||
location: https://github.com/haskell/tar.git
|
|
||||||
tag: d94a988be4311b830149a9f8fc16739927e5fc1c
|
|
||||||
|
|
||||||
source-repository-package
|
|
||||||
type: git
|
|
||||||
location: https://github.com/hasufell/uri-bytestring.git
|
|
||||||
tag: 4fb5ed14b500c192e6e7a97f6b2b1eb478806001
|
|
||||||
|
|
||||||
package libarchive
|
package libarchive
|
||||||
flags: -system-libarchive
|
flags: -system-libarchive
|
||||||
@ -53,8 +32,4 @@ package aeson
|
|||||||
package streamly
|
package streamly
|
||||||
flags: +use-unliftio
|
flags: +use-unliftio
|
||||||
|
|
||||||
package *
|
allow-newer: base, ghc-prim, template-haskell, language-c
|
||||||
test-show-details: direct
|
|
||||||
|
|
||||||
allow-newer: cabal-install-parsers:tar, streamly:Win32
|
|
||||||
|
|
||||||
|
2
cabal.project.freeze
Normal file
2
cabal.project.freeze
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
-- windows picks weird version
|
||||||
|
constraints: any.hsc2hs ==0.68.7
|
@ -1,68 +0,0 @@
|
|||||||
packages: ./ghcup.cabal
|
|
||||||
|
|
||||||
optional-packages: ./vendored/*/*.cabal
|
|
||||||
|
|
||||||
optimization: 2
|
|
||||||
|
|
||||||
package ghcup
|
|
||||||
flags: +tui -tar
|
|
||||||
|
|
||||||
if os(linux)
|
|
||||||
if arch(x86_64) || arch(i386)
|
|
||||||
package *
|
|
||||||
ghc-options: -split-sections -optl-static
|
|
||||||
elif os(darwin)
|
|
||||||
constraints: zlib +bundled-c-zlib,
|
|
||||||
lzma +static
|
|
||||||
elif os(mingw32)
|
|
||||||
constraints: zlib +bundled-c-zlib,
|
|
||||||
lzma +static,
|
|
||||||
text -simdutf,
|
|
||||||
vty-windows >=0.2.0.2
|
|
||||||
if impl(ghc >= 9.4)
|
|
||||||
constraints: language-c >= 0.9.3
|
|
||||||
elif os(freebsd)
|
|
||||||
constraints: zlib +bundled-c-zlib,
|
|
||||||
zip +disable-zstd
|
|
||||||
package *
|
|
||||||
ghc-options: -split-sections
|
|
||||||
|
|
||||||
constraints: http-io-streams -brotli,
|
|
||||||
any.aeson >= 2.0.1.0,
|
|
||||||
any.hsc2hs ==0.68.8,
|
|
||||||
bzlib-conduit >= 0.3.0.3,
|
|
||||||
bz2 >= 1.0.1.1,
|
|
||||||
bzlib >= 0.5.2.0,
|
|
||||||
directory >= 1.3.8.3,
|
|
||||||
filepath == 1.4.101.0 || == 1.4.300.1 || >= 1.5.2.0
|
|
||||||
|
|
||||||
package libarchive
|
|
||||||
flags: -system-libarchive
|
|
||||||
|
|
||||||
package libyaml-streamly
|
|
||||||
flags: -system-libyaml
|
|
||||||
|
|
||||||
package aeson-pretty
|
|
||||||
flags: +lib-only
|
|
||||||
|
|
||||||
package cabal-plan
|
|
||||||
flags: -exe
|
|
||||||
|
|
||||||
package aeson
|
|
||||||
flags: +ordered-keymap
|
|
||||||
|
|
||||||
package streamly
|
|
||||||
flags: +use-unliftio
|
|
||||||
|
|
||||||
source-repository-package
|
|
||||||
type: git
|
|
||||||
location: https://github.com/haskell/tar.git
|
|
||||||
tag: d94a988be4311b830149a9f8fc16739927e5fc1c
|
|
||||||
|
|
||||||
source-repository-package
|
|
||||||
type: git
|
|
||||||
location: https://github.com/hasufell/uri-bytestring.git
|
|
||||||
tag: 4fb5ed14b500c192e6e7a97f6b2b1eb478806001
|
|
||||||
|
|
||||||
allow-newer: cabal-install-parsers:tar, streamly:Win32
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
|||||||
#ifndef POSIXPATHS_CBITS_DIRUTILS_H
|
#ifndef POSIXPATHS_CBITS_DIRUTILS_H
|
||||||
#define POSIXPATHS_CBITS_DIRUTILS_H
|
#define POSIXPATHS_CBITS_DIRUTILS_H
|
||||||
|
|
||||||
#include <HsFFI.h>
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
122
data/config.yaml
122
data/config.yaml
@ -16,11 +16,6 @@ gpg-setting: GPGNone # GPGStrict | GPGLax | GPGNone
|
|||||||
# TUI key bindings,
|
# TUI key bindings,
|
||||||
# see https://hackage.haskell.org/package/vty-5.31/docs/Graphics-Vty-Input-Events.html#t:Key
|
# see https://hackage.haskell.org/package/vty-5.31/docs/Graphics-Vty-Input-Events.html#t:Key
|
||||||
# for possible values.
|
# for possible values.
|
||||||
# It's also possible to define key+modifier, e.g.:
|
|
||||||
# quit:
|
|
||||||
# Key:
|
|
||||||
# KChar: c
|
|
||||||
# Mods: [MCtrl]
|
|
||||||
key-bindings:
|
key-bindings:
|
||||||
up:
|
up:
|
||||||
KUp: []
|
KUp: []
|
||||||
@ -45,95 +40,38 @@ key-bindings:
|
|||||||
# of the file. These usually are in '~/.ghcup/cache/ghcup-<ver>.yaml'.
|
# of the file. These usually are in '~/.ghcup/cache/ghcup-<ver>.yaml'.
|
||||||
meta-cache: 300 # in seconds
|
meta-cache: 300 # in seconds
|
||||||
|
|
||||||
# When trying to download ghcup metadata, this option decides what to do
|
# Where to get GHC/cabal/hls download info/versions from. For more detailed explanation
|
||||||
# when the download fails:
|
# check the 'URLSource' type in the code.
|
||||||
# 1. Lax: use existing ~/.ghcup/cache/ghcup-<ver>.yaml as fallback (default)
|
|
||||||
# 2. Strict: fail hard
|
|
||||||
meta-mode: Lax # Strict | Lax
|
|
||||||
|
|
||||||
# Where to get GHC/cabal/hls download info/versions from. This is a list that performs
|
|
||||||
# union over tool versions, preferring the later entries.
|
|
||||||
url-source:
|
url-source:
|
||||||
## Use the internal download uri, this is the default
|
## Use the internal download uri, this is the default
|
||||||
- GHCupURL
|
GHCupURL: []
|
||||||
|
|
||||||
## Prefer stack supplied metadata (will still use GHCup metadata for versions not existing in stack metadata)
|
## Example 1: Read download info from this location instead
|
||||||
# - StackSetupURL
|
## Accepts file/http/https scheme
|
||||||
|
## Can also be an array of URLs or an array of 'Either GHCupInfo URL', in
|
||||||
|
## which case they are merged right-biased (overwriting duplicate versions).
|
||||||
|
# OwnSource: "file:///home/jule/git/ghcup-hs/ghcup-0.0.3.yaml"
|
||||||
|
|
||||||
## Add pre-release channel
|
## Example 2: Add custom tarballs to the default downloads, overwriting duplicate versions.
|
||||||
# - https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-prereleases-0.0.7.yaml
|
## Can also be an array of 'Either GHCupInfo URL', also see Example 3.
|
||||||
## Add nightly channel
|
# AddSource:
|
||||||
# - https://ghc.gitlab.haskell.org/ghcup-metadata/ghcup-nightlies-0.0.7.yaml
|
# Left:
|
||||||
## Add cross compiler channel
|
# globalTools: {}
|
||||||
# - https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-cross-0.0.8.yaml
|
# toolRequirements: {}
|
||||||
|
# ghcupDownloads:
|
||||||
## Use dwarf bindist for 9.4.7 for ghcup metadata
|
# GHC:
|
||||||
# - ghcup-info:
|
# 9.10.2:
|
||||||
# ghcupDownloads:
|
# viTags: []
|
||||||
# GHC:
|
# viArch:
|
||||||
# 9.4.7:
|
# A_64:
|
||||||
# viTags: []
|
# Linux_UnknownLinux:
|
||||||
# viArch:
|
# unknown_versioning:
|
||||||
# A_64:
|
# dlUri: https://downloads.haskell.org/~ghc/7.10.3/ghc-7.10.3-x86_64-deb8-linux.tar.bz2
|
||||||
# Linux_UnknownLinux:
|
# dlSubdir: ghc-7.10.3
|
||||||
# unknown_versioning:
|
# dlHash: 01cfbad8dff1e8b34a5fdca8caeaf843b56e36af919e29cd68870d2588563db5
|
||||||
# dlUri: https://downloads.haskell.org/ghc/9.4.7/ghc-9.4.7-x86_64-deb10-linux-dwarf.tar.xz
|
|
||||||
# dlSubdir:
|
|
||||||
# RegexDir: "ghc-.*"
|
|
||||||
# dlHash: b261b3438ba455e3cf757f9c8dc3a06fdc061ea8ec287a65b7809e25fe18bad4
|
|
||||||
|
|
||||||
## for stack metadata and the linux64-tinfo6 bindists, use static alpine for 9.8.1
|
|
||||||
# - setup-info:
|
|
||||||
# ghc:
|
|
||||||
# linux64-tinfo6:
|
|
||||||
# 9.8.1:
|
|
||||||
# url: "https://downloads.haskell.org/~ghc/9.8.1/ghc-9.8.1-x86_64-alpine3_12-linux-static.tar.xz"
|
|
||||||
# content-length: 229037440
|
|
||||||
# sha256: b48f3d3a508d0c140d1c801e04afc65e80c0d25e7e939a8a41edb387b26b81b3
|
|
||||||
|
|
||||||
# This is a way to override platform detection, e.g. when you're running
|
|
||||||
# a Ubuntu derivative based on 18.04, you could do:
|
|
||||||
#
|
|
||||||
# platform-override:
|
|
||||||
# arch: A_64
|
|
||||||
# platform:
|
|
||||||
# contents: Ubuntu
|
|
||||||
# tag: Linux
|
|
||||||
# version: '18.04'
|
|
||||||
platform-override: null
|
|
||||||
|
|
||||||
# Support for mirrors. Currently there are 3 hosts you can mirror:
|
|
||||||
# - github.com (for stack and some older HLS versions)
|
|
||||||
# - raw.githubusercontent.com (for the yaml metadata)
|
|
||||||
# - downloads.haskell.org (for everything else)
|
|
||||||
#
|
|
||||||
# E.g. when we have 'https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-0.0.7.yaml'
|
|
||||||
# and the following mirror config
|
|
||||||
#
|
|
||||||
# "raw.githubusercontent.com":
|
|
||||||
# authority:
|
|
||||||
# host: "mirror.sjtu.edu.cn"
|
|
||||||
# pathPrefix: "ghcup/yaml"
|
|
||||||
#
|
|
||||||
# Then the resulting url will be 'https://mirror.sjtu.edu.cn/ghcup/yaml/haskell/ghcup-metadata/master/ghcup-0.0.7.yaml'
|
|
||||||
mirrors:
|
|
||||||
"github.com":
|
|
||||||
authority:
|
|
||||||
host: "mirror.sjtu.edu.cn"
|
|
||||||
"raw.githubusercontent.com":
|
|
||||||
authority:
|
|
||||||
host: "mirror.sjtu.edu.cn"
|
|
||||||
pathPrefix: "ghcup/yaml"
|
|
||||||
"downloads.haskell.org":
|
|
||||||
authority:
|
|
||||||
host: "mirror.sjtu.edu.cn"
|
|
||||||
|
|
||||||
# Arguments to pass to the configure script of the prebuilt bindist.
|
|
||||||
#
|
|
||||||
# Do not pass '--prefix' here.
|
|
||||||
#
|
|
||||||
# GHCup by default passes '--disable-ld-override', so if you want to enable
|
|
||||||
# the vanilla way, which aggressively favors 'ld.gold' linker, add the following:
|
|
||||||
def-ghc-conf-options:
|
|
||||||
- "--enable-ld-override"
|
|
||||||
|
|
||||||
|
## Example 3: Add multiple custom download files to the default downloads via right-biased merge (overwriting duplicate
|
||||||
|
## versions).
|
||||||
|
# AddSource:
|
||||||
|
# - Right: "file:///home/jule/git/ghcup-hs/ghcup-prereleases.yaml"
|
||||||
|
# - Right: "file:///home/jule/git/ghcup-hs/ghcup-custom.yaml"
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit c9dae0c58799854823e8c41858ca4cc172ef4c8b
|
Subproject commit 7d8f7eaf665ca158c41cfdce357f0222b82777fd
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user