Nixpkgs/Automatic Updates: Difference between revisions
Mdaniels5757 (talk | contribs) copy edit lede |
SarahClark (talk | contribs) m →A special note for Python Monorepos: fix case |
||
| (9 intermediate revisions by 3 users not shown) | |||
| Line 1: | Line 1: | ||
[https://github.com/nix-community/nixpkgs-update nixpkgs-update] is used by [[r-ryantm]] for automated updates (through creating [https://github.com/NixOS/nixpkgs/issues?q=is%3Apr%20author%3Ar-ryantm update pull requests]).<br /> | |||
It uses package repository information from Repology.org (though that requires other projects to detect the update), the GitHub releases API, and, if available, the package <code>passthru.updateScript</code>. For more information, see the [https://nix-community.github.io/nixpkgs-update/ official documentation]. | |||
If you're wondering why your package isn't receiving automated updates, it can be useful to check the [https://r.ryantm.com/log/ r-ryantm logs]. | |||
== Disabling nixpkgs-update for individual packages == | |||
Put the following comment somewhere in the package file: | |||
<syntaxhighlight lang="nix"> | |||
# nixpkgs-update: no auto update | |||
</syntaxhighlight> | |||
== Update Scripts == | == Update Scripts == | ||
List of prepackaged update scripts | |||
Update Scripts can be added to packages by setting <code><nowiki>passthru.updateScript</nowiki></code>. This is then executed by [[r-ryantm]] to create an update pull request. It can be manually invoked via <code>nix-shell maintainers/scripts/update.nix --argstr package <packagename></code>. | |||
List of prepackaged update scripts: | |||
=== nix-update by Mic92 === | === nix-update by Mic92 === | ||
[https://github.com/Mic92/nix-update nix-update] works for a range of different sources and will do the right thing most of the time. | [https://github.com/Mic92/nix-update nix-update] works for a range of different sources and will do the right thing most of the time. | ||
| Line 13: | Line 28: | ||
If you want functionality similar to that of unstableGitUpdater but with the additional handlers offered by nix-update, use: | If you want functionality similar to that of unstableGitUpdater but with the additional handlers offered by nix-update, use: | ||
<syntaxhighlight lang="nix"> | <syntaxhighlight lang="nix">passthru.updateScript = nix-update-script { extraArgs = [ "--version=branch" ]; };</syntaxhighlight> | ||
passthru.updateScript = nix-update-script { extraArgs = [ "--version= | |||
</syntaxhighlight> | ==== Setting a custom for prefixed releases ==== | ||
<code>nix-updater</code> expects an all-numeric version such as <code>1.2.3</code> and fails when there's a prefix (<code>v1.2.3</code>). When that happens, you'll need to set a custom regex:<syntaxhighlight lang="nix"> | |||
passthru.updateScript = nix-update-script { | |||
extraArgs = [ "--version-regex=v([\\d.]+)" ]; | |||
}; | |||
</syntaxhighlight>Note there's only one capturing group (in parentheses). Due to a quirk in the updater, nesting capturing groups won't give the results you expect. The regex implicitly matches the whole line. | |||
=== Git Updater === | === Git Updater === | ||
| Line 48: | Line 69: | ||
</syntaxhighlight>Source: https://github.com/NixOS/nixpkgs/blob/master/pkgs/common-updater/unstable-updater.nix | </syntaxhighlight>Source: https://github.com/NixOS/nixpkgs/blob/master/pkgs/common-updater/unstable-updater.nix | ||
== | == Working with Monorepos == | ||
A monorepo contains multiple packages that are released individually. You will need to define <code>passthru.updateScript</code> and add a version regex (<code>nix-update-script</code>) or a prefix (git updaters). | |||
=== When automatic updates fail === | |||
Updates can fail with "no matching tag found" when the repo pushes out a large number of packages. <code>nix-update-script</code> examines approximately the last 20 releases. In this case, you can switch to the git updater with <code>rev-prefix</code>. | |||
The git updaters also look at a limited window of changes. You still need to verify periodically that your package has updated to the latest version and make the edits by hand if it's behind. | |||
=== A special note for Python monorepos === | |||
The committers run a fast bulk python update script several times a year. This script ignores <code>passthru.updateScript</code> and use the latest git tag. That often breaks monorepo-based packages by setting the wrong <code>src.version</code> expression and/or version number. | |||
< | Set <code>passthru.skipBulkUpdate = true;</code> to have the special updater skip your package. | ||
</ | |||
== Additional Resources == | == Additional Resources == | ||
* [https://github.com/NixOS/nixpkgs/blob/master/pkgs/README.md#automatic-package-updates Contributing to nixpkgs - Automatic Package Updates (github.com/nixos/nixpkgs)] | * [https://github.com/NixOS/nixpkgs/blob/master/pkgs/README.md#automatic-package-updates Contributing to nixpkgs - Automatic Package Updates (github.com/nixos/nixpkgs)] | ||
* [https://nix-community.org/update-bot/ R. RyanTM nixpkgs-update bot information] | |||
[[Category:Nixpkgs]] | [[Category:Nixpkgs]] | ||