Hi Tomas,
I have some custom updaters (e.g. a generic ftp-updater that is just a
reskinned gnu-ftp updater but accepting any package with a ftp url and
ftp-server/ftp-directory property and one that parses an rss feed)
The way to do that is a bit unconventional and relies on how guix uses
the guile module system. I guess it is undocumented for this reason
because it feels not intended to be extended by channels. however it
works if you accept quirks.
On 29/10/2026 20:47, Tomas Volf wrote:
Hello,
for software packaged in my channel (legacy node versions in this case),
I want to write an updater, so that I can handle all necessary updates
just by running `guix refresh -u'. However I did not manage to find any
documentation pertaining to this topic.
Would anyone be able to advice on how to:
1. Write new updater.
2. Hook it into `guix refresh' so that it can be selected by -t?
2: There is the %updaters variable which looks at all (public)
upstream-updaters? variables in the (guix import) module hierachy.
Probably using that guix "namespace" is slightly abusing the guile
module system and how guix uses it for channels.
Note that it currently uses the guix/import modules from the current
profile so for testing it is easier to have it in your guix checkout to
get it to do what you want and then copy it into your channel once you
are happy with it. This is another indicator that is is a bit of a hack.
For a bit less of a hack there is package-latest-release in (guix
upstream) which you can pass your own custom updaters list but then you
need to add the logic from (guix scripts refresh) to update the package
inplace yourself.
1:
An updater has a predicate that will get the package in question and
determines whether it knows how to update that "kind" of package
(usually based on url and/or pacakge-properties)
Second thing is the import procedure that will get passed the old
package (and potential target version and partial-version?) arguments
and either returns #f or a upstream-source record of the found version.
For inspiration look at gnu-maintenance.scm where the hmtl and gnu
updaters are defined which are somewhat understandable.
If you fetch data look at (guix http-client) and http-fetch/cached and
then extract what you want but that depends on how the package provides
the info.
Thanks,
Tomas
I hope this is useful,
Dariqq