add helper/update-flake.sh
This greatly simplifies updating nixpkgs. See the comment at the top of update-flake.sh for a description.
This commit is contained in:
parent
f7c2133250
commit
87df809a88
77
helper/update-flake.nix
Normal file
77
helper/update-flake.nix
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
{ prevVersions ? null }:
|
||||||
|
let
|
||||||
|
flake = builtins.getFlake (toString ../.);
|
||||||
|
inherit (flake.inputs.nixpkgs) lib;
|
||||||
|
in rec {
|
||||||
|
# Convert the list of pinned pkgs to an attrset with form
|
||||||
|
# {
|
||||||
|
# stable = { bitcoind = "0.21.1"; ... };
|
||||||
|
# unstable = { btcpayserver = "1.2.1"; ... };
|
||||||
|
# }
|
||||||
|
# A pinned pkg is added to `stable` if the stable and unstable pkg versions
|
||||||
|
# are identical.
|
||||||
|
versions = let
|
||||||
|
pinned = flake.nbPkgs.x86_64-linux.pinned;
|
||||||
|
pinnedPkgs = lib.filterAttrs (n: v: lib.isDerivation v) pinned;
|
||||||
|
stable = pinned.pkgs;
|
||||||
|
unstable = pinned.pkgsUnstable;
|
||||||
|
isStable = builtins.partition (pkgName:
|
||||||
|
!(unstable ? "${pkgName}") ||
|
||||||
|
((stable ? "${pkgName}") && stable.${pkgName}.version == unstable.${pkgName}.version)
|
||||||
|
) (builtins.attrNames pinnedPkgs);
|
||||||
|
in {
|
||||||
|
stable = lib.genAttrs isStable.right (pkgName: stable.${pkgName}.version);
|
||||||
|
unstable = lib.genAttrs isStable.wrong (pkgName: unstable.${pkgName}.version);
|
||||||
|
};
|
||||||
|
|
||||||
|
showUpdates = let
|
||||||
|
prev = builtins.fromJSON prevVersions;
|
||||||
|
prevPkgs = prev.stable // prev.unstable;
|
||||||
|
mapFilter = f: xs: lib.remove null (map f xs);
|
||||||
|
|
||||||
|
mkChanges = title: pkgs:
|
||||||
|
let
|
||||||
|
lines = mapFilter (pkgName:
|
||||||
|
let
|
||||||
|
version = pkgs.${pkgName};
|
||||||
|
prevVersion = prevPkgs.${pkgName};
|
||||||
|
in
|
||||||
|
if version != prevVersion then
|
||||||
|
"${pkgName}: ${prevVersion} -> ${version}"
|
||||||
|
else
|
||||||
|
null
|
||||||
|
) (builtins.attrNames pkgs);
|
||||||
|
in
|
||||||
|
if lines == [] then
|
||||||
|
null
|
||||||
|
else
|
||||||
|
builtins.concatStringsSep "\n" ([title] ++ lines);
|
||||||
|
|
||||||
|
changes = [
|
||||||
|
(mkChanges "Pkg updates in nixpkgs stable:" versions.stable)
|
||||||
|
(mkChanges "Pkg updates in nixpkgs unstable:" versions.unstable)
|
||||||
|
];
|
||||||
|
|
||||||
|
allChanges = builtins.concatStringsSep "\n\n" (lib.remove null changes);
|
||||||
|
in
|
||||||
|
if allChanges == "" then
|
||||||
|
"No pkg version updates."
|
||||||
|
else
|
||||||
|
allChanges;
|
||||||
|
|
||||||
|
pinnedFile = let
|
||||||
|
toLines = pkgs: builtins.concatStringsSep "\n " (builtins.attrNames pkgs);
|
||||||
|
in ''
|
||||||
|
# This file is generated by ../helper/update-flake.nix
|
||||||
|
pkgs: pkgsUnstable:
|
||||||
|
{
|
||||||
|
inherit (pkgs)
|
||||||
|
${toLines versions.stable};
|
||||||
|
|
||||||
|
inherit (pkgsUnstable)
|
||||||
|
${toLines versions.unstable};
|
||||||
|
|
||||||
|
inherit pkgs pkgsUnstable;
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
}
|
45
helper/update-flake.sh
Executable file
45
helper/update-flake.sh
Executable file
@ -0,0 +1,45 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
# This script does the following:
|
||||||
|
# - Update all flake inputs, including nixpkgs
|
||||||
|
# - Print version updates of pinned pkgs like so:
|
||||||
|
# Pkg updates in nixpkgs unstable:
|
||||||
|
# bitcoin: 0.20.0 -> 0.21.1
|
||||||
|
# btcpayserver: 1.1.0 -> 1.1.2
|
||||||
|
# - Write ../pkgs/pinned.nix:
|
||||||
|
# Packages for which the stable und unstable versions are identical are
|
||||||
|
# pinned to stable.
|
||||||
|
# All other pkgs are pinned to unstable.
|
||||||
|
|
||||||
|
# cd to script dir
|
||||||
|
cd "${BASH_SOURCE[0]%/*}"
|
||||||
|
|
||||||
|
if [[ $(nix flake 2>&1) != *"requires a sub-command"* ]]; then
|
||||||
|
echo "Error. This script requires nix flake support."
|
||||||
|
echo "https://nixos.wiki/wiki/Flakes#Installing_flakes"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ${1:-} != -f ]] && ! git diff --quiet ../flake.{nix,lock}; then
|
||||||
|
echo "error: flake.nix/flake.lock have changes. Run with option -f to ignore."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
versions=$(nix eval --json -f update-flake.nix versions)
|
||||||
|
|
||||||
|
## Uncomment the following to generate a version change message for testing
|
||||||
|
# versions=$(echo "$versions" | sed 's|1|0|g')
|
||||||
|
|
||||||
|
nix flake update ..
|
||||||
|
|
||||||
|
echo
|
||||||
|
nix eval --raw -f update-flake.nix --argstr prevVersions "$versions" showUpdates; echo
|
||||||
|
|
||||||
|
pinned=../pkgs/pinned.nix
|
||||||
|
pinnedSrc=$(nix eval --raw -f update-flake.nix --argstr prevVersions "$versions" pinnedFile)
|
||||||
|
if [[ $pinnedSrc != $(cat "$pinned") ]]; then
|
||||||
|
echo "$pinnedSrc" > "$pinned"
|
||||||
|
echo
|
||||||
|
echo "Updated pinned.nix"
|
||||||
|
fi
|
Loading…
Reference in New Issue
Block a user