[Nix-dev] GNUpdate, an automatic update tool for GNU packages

Ludovic Courtès ludo at gnu.org
Tue Apr 13 14:41:25 CEST 2010


Hello!

Nixpkgs now has a Guile script under maintainers/scripts/gnu/gnupdate
that can be used to automatically update GNU packages in Nixpkgs.
Here’s what it does:

  1. Parse the output of “nix-instantiate --xml --strict --eval-only” on
     Nixpkgs (35 MiB worth of XML...) as SXML.

  2. Turn SXML into “SNix”, a form that is more easily processable from
     Scheme (e.g., <string> items are converted to Scheme strings).

  3. Traverse that SXML tree to identify GNU packages based on the
     contents of ‘meta.description’ and ‘meta.homepage’.

  4. For each GNU package, find out the latest release by looking for it
     on ftp.gnu.org or similar.

  5. When a new version is available, download it with
     ‘nix-prefetch-url’, using the same archive type as currently used
     by the Nix expression (e.g., if the Nix expression uses a tar.bz2
     file, get a tar.bz2 file, not a tar.gz).

  6. Check the GPG signature on that file (this assumes that the
     caller’s GPG keyring contains the public key).

  7. Run sed(1) on the file containing the Nix expression to replace the
     version number and hash.  (Current SVN trunk of Nix provides the
     necessary source location information in the XML output.)

After that one still needs to build the modified packages to make sure
they actually build before committing.

Items #1 and #2 are serious bottlenecks in terms of performance and
memory consumption.  Ideally, Eelco would provide us with a simple C API
to the evaluator that people could easily wrap in their favorite
language.  :-)  Nevertheless, it doesn’t matter so much if it’s slow.

Future work includes:

  * Adding support for projects that store releases in version-dependent
    sub-directories (this includes Gnash, IceCat, and MyServer).

  * Using SSAX to avoid the SXML phase altogether.

  * Possibly running ‘nix-build’ automatically for packages not in
    ‘stdenv’ and committing automatically if the build passes.

A bit of a sledgehammer, but lots of fun.  :-)

Thanks,
Ludo’.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: not available
Url : http://lists.science.uu.nl/pipermail/nix-dev/attachments/20100413/399ff02b/attachment.bin 


More information about the nix-dev mailing list