35c00c639a
This update adds support for $CABAL_DIR as well as the new $XDG_CACHE_HOME location of the hackage db. Since we maintain hackage-db, having the latest version always is nice even though it has more reverse dependencies than the other libraries we maintain.
83 lines
2.7 KiB
Bash
Executable file
83 lines
2.7 KiB
Bash
Executable file
#! /usr/bin/env nix-shell
|
|
#! nix-shell -i bash -p nix curl jq nix-prefetch-github git gnused gnugrep -I nixpkgs=.
|
|
# shellcheck shell=bash
|
|
|
|
set -eu -o pipefail
|
|
|
|
# Stackage solver to use, LTS or Nightly
|
|
# (should be capitalized like the display name)
|
|
SOLVER=LTS
|
|
TMP_TEMPLATE=update-stackage.XXXXXXX
|
|
readonly SOLVER
|
|
readonly TMP_TEMPLATE
|
|
|
|
toLower() {
|
|
printf "%s" "$1" | tr '[:upper:]' '[:lower:]'
|
|
}
|
|
|
|
tmpfile=$(mktemp "$TMP_TEMPLATE")
|
|
tmpfile_new=$(mktemp "$TMP_TEMPLATE")
|
|
|
|
stackage_config="pkgs/development/haskell-modules/configuration-hackage2nix/stackage.yaml"
|
|
|
|
trap 'rm "${tmpfile}" "${tmpfile_new}"' 0
|
|
touch "$tmpfile" "$tmpfile_new" # Creating files here so that trap creates no errors.
|
|
|
|
curl -L -s "https://stackage.org/$(toLower "$SOLVER")/cabal.config" >"$tmpfile"
|
|
old_version=$(grep '^# Stackage' $stackage_config | sed -e 's/.\+ \([A-Za-z]\+ [0-9.-]\+\)$/\1/g')
|
|
version="$SOLVER $(sed -rn "s/^--.*http:..(www.)?stackage.org.snapshot.$(toLower "$SOLVER")-//p" "$tmpfile")"
|
|
|
|
if [[ "$old_version" == "$version" ]]; then
|
|
echo "No new stackage version"
|
|
exit 0 # Nothing to do
|
|
fi
|
|
|
|
echo "Updating Stackage from $old_version to $version."
|
|
|
|
# Create a simple yaml version of the file.
|
|
sed -r \
|
|
-e '/^--/d' \
|
|
-e 's|^constraints:||' \
|
|
-e 's|^ +| - |' \
|
|
-e 's|,$||' \
|
|
-e '/^with-compiler:/d' \
|
|
-e '/installed$/d' \
|
|
-e '/^$/d' \
|
|
< "${tmpfile}" | sort --ignore-case >"${tmpfile_new}"
|
|
|
|
cat > $stackage_config << EOF
|
|
# Stackage $version
|
|
# This file is auto-generated by
|
|
# maintainers/scripts/haskell/update-stackage.sh
|
|
default-package-overrides:
|
|
EOF
|
|
|
|
# Drop restrictions on some tools where we always want the latest version.
|
|
sed -r \
|
|
-e '/ cabal2nix /d' \
|
|
-e '/ distribution-nixpkgs /d' \
|
|
-e '/ jailbreak-cabal /d' \
|
|
-e '/ language-nix /d' \
|
|
-e '/ hackage-db /d' \
|
|
-e '/ cabal-install /d' \
|
|
-e '/ lsp /d' \
|
|
-e '/ lsp-types /d' \
|
|
-e '/ lsp-test /d' \
|
|
-e '/ hie-bios /d' \
|
|
-e '/ ShellCheck /d' \
|
|
-e '/ Agda /d' \
|
|
< "${tmpfile_new}" >> $stackage_config
|
|
# Explanations:
|
|
# cabal2nix, distribution-nixpkgs, jailbreak-cabal, language-nix: These are our packages and we know what we are doing.
|
|
# lsp, lsp-types, lsp-test, hie-bios: These are tightly coupled to hls which is not in stackage. They have no rdeps in stackage.
|
|
# ShellCheck: latest version of command-line dev tool.
|
|
# Agda: The Agda community is fast-moving; we strive to always include the newest versions of Agda and the Agda packages in nixpkgs.
|
|
|
|
if [[ "${1:-}" == "--do-commit" ]]; then
|
|
git add $stackage_config
|
|
git commit -F - << EOF
|
|
haskellPackages: stackage $old_version -> $version
|
|
|
|
This commit has been generated by maintainers/scripts/haskell/update-stackage.sh
|
|
EOF
|
|
fi
|