mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-17 03:03:37 +00:00
3435f469ec
This changes the update script to be compatible with the maintainer script in `./maintainers/scripts/update.nix`, which will hopefully make sure r-ryantm can update these packages automatically for us. The script now also automatically updates the compatibility list, as @Docteh pointed out a mirror is available on Github. The call in `all-packages.nix` is changed as well to avoid a double `callPackage`, which can make overriding quite a pain. `QT_QPA_PLATFORM` is automatically set to `xcb` to avoid a crash on wayland, thanks to @sbruder for the suggestion!
106 lines
4.4 KiB
Bash
Executable File
106 lines
4.4 KiB
Bash
Executable File
#! /usr/bin/env nix-shell
|
|
#! nix-shell -I nixpkgs=./. -i bash -p nix nix-prefetch-git coreutils curl jq gnused
|
|
|
|
set -euo pipefail
|
|
|
|
# Will be replaced with the actual branch when running this from passthru.updateScript
|
|
BRANCH="@branch@"
|
|
DEFAULT_NIX="$(dirname "${BASH_SOURCE[@]}")/default.nix"
|
|
|
|
if [[ "$(basename "$PWD")" = "yuzu" ]]; then
|
|
echo "error: Script must be ran from nixpkgs's root directory for compatibility with the maintainer script"
|
|
exit 1
|
|
fi
|
|
|
|
updateBranch() {
|
|
local branch attribute oldVersion oldHash newVersion newHash
|
|
branch="$1"
|
|
attribute="yuzu-$branch"
|
|
[[ "$branch" = "early-access" ]] && attribute="yuzu-ea" # Attribute path doesnt match the branch name
|
|
oldVersion="$(nix eval --raw -f "./default.nix" "$attribute".version)"
|
|
oldHash="$(nix eval --raw -f "./default.nix" "$attribute".src.drvAttrs.outputHash)"
|
|
|
|
if [[ "$branch" = "mainline" ]]; then
|
|
newVersion="$(curl -s ${GITHUB_TOKEN:+"-u \":$GITHUB_TOKEN\""} "https://api.github.com/repos/yuzu-emu/yuzu-mainline/releases?per_page=1" \
|
|
| jq -r '.[0].name' | cut -d" " -f2)"
|
|
elif [[ "$branch" = "early-access" ]]; then
|
|
newVersion="$(curl -s ${GITHUB_TOKEN:+"-u \":$GITHUB_TOKEN\""} "https://api.github.com/repos/pineappleEA/pineapple-src/releases?per_page=2" \
|
|
| jq -r '.[].tag_name' | grep '^EA-[0-9]*' | head -n1 | cut -d"-" -f2 | cut -d" " -f1)"
|
|
fi
|
|
|
|
if [[ "${oldVersion}" = "${newVersion}" ]]; then
|
|
echo "$attribute is already up to date."
|
|
return
|
|
else
|
|
echo "$attribute: ${oldVersion} -> ${newVersion}"
|
|
fi
|
|
|
|
echo " fetching source code to generate hash..."
|
|
if [[ "$branch" = "mainline" ]]; then
|
|
newHash="$(nix-prefetch-git --quiet --fetch-submodules --rev "mainline-0-${newVersion}" "https://github.com/yuzu-emu/yuzu-mainline" | jq -r '.sha256')"
|
|
elif [[ "$branch" = "early-access" ]]; then
|
|
newHash="$(nix-prefetch-git --quiet --fetch-submodules --rev "EA-${newVersion}" "https://github.com/pineappleEA/pineapple-src" | jq -r '.sha256')"
|
|
fi
|
|
newHash="$(nix hash to-sri --type sha256 "${newHash}")"
|
|
|
|
sed -i "s,${oldVersion},${newVersion}," "$DEFAULT_NIX"
|
|
sed -i "s,${oldHash},${newHash},g" "$DEFAULT_NIX"
|
|
echo " succesfully updated $attribute. new hash: $newHash"
|
|
}
|
|
|
|
updateCompatibilityList() {
|
|
local latestRevision oldUrl newUrl oldHash newHash oldDate newDate
|
|
latestRevision="$(curl -s ${GITHUB_TOKEN:+"-u \":$GITHUB_TOKEN\""} "https://api.github.com/repos/flathub/org.yuzu_emu.yuzu/commits/master" | jq -r '.sha')"
|
|
|
|
oldUrl="$(sed -n '/yuzu-compat-list/,/url/p' "$DEFAULT_NIX" | tail -n1 | cut -d'"' -f2)"
|
|
newUrl="https://raw.githubusercontent.com/flathub/org.yuzu_emu.yuzu/${latestRevision}/compatibility_list.json"
|
|
|
|
oldDate="$(sed -n '/last updated.*/p' "$DEFAULT_NIX" | rev | cut -d' ' -f1 | rev)"
|
|
newDate="$(curl -s ${GITHUB_TOKEN:+"-u \":$GITHUB_TOKEN\""} "https://api.github.com/repos/flathub/org.yuzu_emu.yuzu/commits/${latestRevision}" \
|
|
| jq -r '.commit.committer.date' | cut -d'T' -f1)"
|
|
|
|
oldHash="$(sed -n '/yuzu-compat-list/,/sha256/p' "$DEFAULT_NIX" | tail -n1 | cut -d'"' -f2)"
|
|
newHash="$(nix hash to-sri --type sha256 "$(nix-prefetch-url --quiet "$newUrl")")"
|
|
|
|
if [[ "$oldHash" = "$newHash" ]]; then
|
|
echo "compatibility_list is already up to date."
|
|
return
|
|
else
|
|
echo "compatibility_list: $oldDate -> $newDate"
|
|
fi
|
|
|
|
sed -i "s,${oldUrl},${newUrl},g" "$DEFAULT_NIX"
|
|
sed -i "s,${oldHash},${newHash},g" "$DEFAULT_NIX"
|
|
sed -i "s,${oldDate},${newDate},g" "$DEFAULT_NIX"
|
|
echo " succesfully updated compatibility_list. new hash: $newHash"
|
|
}
|
|
|
|
if [[ "$BRANCH" = "mainline" ]] || [[ "$BRANCH" = "early-access" ]]; then
|
|
updateBranch "$BRANCH"
|
|
updateCompatibilityList
|
|
else # Script is not ran from passthru.updateScript
|
|
if (( $# == 0 )); then
|
|
updateBranch "mainline"
|
|
updateBranch "early-access"
|
|
fi
|
|
|
|
while (( "$#" > 0 )); do
|
|
case "$1" in
|
|
mainline|yuzu-mainline)
|
|
updateBranch "mainline"
|
|
;;
|
|
early-access|yuzu-early-access|ea|yuzu-ea)
|
|
updateBranch "early-access"
|
|
;;
|
|
*)
|
|
echo "error: invalid branch: $1."
|
|
echo "usage: $(basename "$0") [mainline|early-access]"
|
|
exit 1
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
updateCompatibilityList
|
|
fi
|