feat(tools/depot-nixpkgs-update): tool to update our pin

Very simplistic tool to aid with updating our nixpkgs channel pins:
This tool prints the correct two `*Hashes` sets to stdout, so you can
easily delete the appropriate lines in `third_party/nixpkgs/default.nix`,
run

    ./bin/depot-nixpkgs-update | wl-copy

and paste it into your editor.

Doing this fully automatically would be possible, but would either
a) require changing `default.nix`, so it is regex-able more easily,
b) touching something like rnix-parser which I have no motivation to
at the moment or
c) searching for the old hashes and replacing them with the new
ones. This may be a simple and worthwhile improvement in the future.

Change-Id: I4df44e3827ce9ff6e4fe2d336c08016d799e21a7
Reviewed-on: https://cl.tvl.fyi/c/depot/+/3252
Tested-by: BuildkiteCI
Reviewed-by: tazjin <mail@tazj.in>
This commit is contained in:
sterni 2021-07-16 21:07:31 +02:00
parent 6b88df04c1
commit 5a3a495956
3 changed files with 48 additions and 0 deletions

View file

@ -19,6 +19,9 @@ case "${TARGET_TOOL}" in
depot-build) depot-build)
attr="tools.depot-build" attr="tools.depot-build"
;; ;;
depot-nixpkgs-update)
attr="tools.depot-nixpkgs-update"
;;
gerrit) gerrit)
attr="tools.gerrit-cli" attr="tools.gerrit-cli"
;; ;;

1
bin/depot-nixpkgs-update Symbolic link
View file

@ -0,0 +1 @@
__dispatch.sh

View file

@ -0,0 +1,44 @@
{ pkgs, depot, ... }:
let
inherit (depot.nix)
getBins
;
stableRelease = "21.05";
channelsUrl = "https://channels.nixos.org";
archiveUrl = "https://github.com/NixOS/nixpkgs/archive/";
bins = getBins pkgs.nix [ "nix-prefetch-url" ]
// getBins pkgs.curl [ "curl" ]
;
in
pkgs.writers.writeDashBin "depot-nixpkgs-update" ''
set -e
printSet() {
setname="$1"
shift
channel="$1"
shift
commit="$(${bins.curl} -L "${channelsUrl}/$channel/git-revision")"
date="$(curl -i -L "${channelsUrl}/$channel/git-revision" \
| grep ^last-modified \
| sed 's/^last-modified: \(.\+\)\r/\1/')"
hash="$(${bins.nix-prefetch-url} --unpack --type sha256 "${archiveUrl}/$commit.tar.gz")"
printf '%s\n' "
# Tracking $channel as of $(date --rfc-3339=date --date="$date").
$setname = {
commit = \"$commit\";
sha256 = \"$hash\";
};"
}
printSet unstableHashes nixos-unstable
printSet stableHashes nixos-${stableRelease}
''