Nixpkgs/Automatic Updates: Difference between revisions

copy edit lede
 
(9 intermediate revisions by 3 users not shown)
Line 1: Line 1:
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 updated pull request. It can be manually invoked via <code>nix-shell maintainers/scripts/update.nix --argstr package <packagename></code>.
[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=branch" ]; };
 
</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


== Automatic updates with r-ryantm ==
== Working with Monorepos ==
=== nixpkgs-update ===
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).
[https://github.com/nix-community/nixpkgs-update nixpkgs-update] is used by [[r-ryantm]] for automated updates, if the package does not specify an <code>updateScript</code>. For more info, 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].
=== 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>.


=== Disabling nixpkgs-update for individual packages ===
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.


Put the following comment somewhere in the package file:
=== 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.


<syntaxhighlight lang="nix">
Set  <code>passthru.skipBulkUpdate = true;</code> to have the special updater skip your package.
# nixpkgs-update: no auto update
</syntaxhighlight>


== 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]]