forked from mirrors/nixpkgs
22ced213c0
Accept either Nightly or LTS as the solver configuration variable in the script. The Stackage version is now considered a tuple of solver and version, allowing the script to handle updates and switches between solvers gracefully. Tested updating Nightly and updating from Nightly to LTS.
68 lines
1.9 KiB
Bash
Executable file
68 lines
1.9 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=.
|
|
|
|
set -eu -o pipefail
|
|
|
|
# Stackage solver to use, LTS or Nightly
|
|
# (should be capitalized like the display name)
|
|
SOLVER=Nightly
|
|
readonly SOLVER
|
|
|
|
toLower() {
|
|
printf "%s" "$1" | tr '[:upper:]' '[:lower:]'
|
|
}
|
|
|
|
tmpfile=$(mktemp "update-stackage.XXXXXXX")
|
|
# shellcheck disable=SC2064
|
|
|
|
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 '/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 '/ cabal-install /d' \
|
|
< "${tmpfile}.new" >> $stackage_config
|
|
|
|
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
|