Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Revert version change if nix-prefetch fails - or - dont commit if version doesn't change #45

Open
06kellyjac opened this issue Feb 24, 2021 · 2 comments

Comments

@06kellyjac
Copy link

If nix-prefetch fails the version bump stays saved in the file
Then if you run nix-update --build --commit again it'll just build the "new version" with the old shas and then commit like so:
nerdctl: 0.6.1 -> 0.6.1

I've opened the nix-prefetch issue separately:

Some potential solutions would be:

  • Revert the version change if nix-prefetch fails
  • Don't commit a change if "Not updating version, already 0.6.1" (might be nice if it aborted the build too?)

(either or both)


Config ~/.config/nixpkgs/config.nix:

{
  packageOverrides = pkgs: {
    nur = import (builtins.fetchTarball "https://github.com/nix-community/NUR/archive/master.tar.gz") {
      inherit pkgs;
    };
  };
}

Should be nothing in there that causes issues

Logs:

nix-update --build --commit nerdctl
$ nix eval --json --impure --experimental-features nix-command --expr (with import ./. {};
    let
      pkg = nerdctl;
      raw_version_position = builtins.unsafeGetAttrPos "version" pkg;

      position = if pkg ? isRubyGem then
        raw_version_position
      else
        builtins.unsafeGetAttrPos "src" pkg;
    in {
      name = pkg.name;
      old_version = (builtins.parseDrvName pkg.name).version;
      inherit raw_version_position;
      filename = position.file;
      line = position.line;
      urls = pkg.src.urls or null;
      url = pkg.src.url or null;
      rev = pkg.src.url.rev or null;
      hash = pkg.src.outputHash;
      mod_sha256 = pkg.modSha256 or null;
      vendor_sha256 = pkg.vendorSha256 or null;
      cargo_sha256 = pkg.cargoSha256 or null;
      tests = pkg.passthru.tests or null;
    })
fetch https://github.com/AkihiroSuda/nerdctl/releases.atom
Update 0.6.0 -> 0.6.1 in /home/jk/projects/personal/nixpkgs/pkgs/applications/networking/cluster/nerdctl/default.nix
$ nix-prefetch (import ./. {}).nerdctl
warning: unknown setting 'experimental-features'
warning: unknown setting 'experimental-features'
The package nerdctl-0.6.1 will be fetched as follows:
> fetchFromGitHub {
>   owner = "AkihiroSuda";
>   repo = "nerdctl";
>   rev = "v0.6.1";
>   sha256 = "sha256-QhAN30ge0dbC9dGT1yP4o0VgrcS9+g+r6YJ07ZjPJtg=";
> }

A probably-wrong output hash of zeroes has been used, yet it somehow still succeeded in building.
Please report an issue at: https://github.com/msteen/nix-prefetch/issues
Traceback (most recent call last):
  File "/nix/store/lagdrmaal96m49fh9p012g58mlyvzqa4-nix-update-0.3.2/bin/.nix-update-wrapped", line 9, in <module>
    sys.exit(main())
  File "/nix/store/lagdrmaal96m49fh9p012g58mlyvzqa4-nix-update-0.3.2/lib/python3.8/site-packages/nix_update/__init__.py", line 172, in main
    package = update(options)
  File "/nix/store/lagdrmaal96m49fh9p012g58mlyvzqa4-nix-update-0.3.2/lib/python3.8/site-packages/nix_update/update.py", line 139, in update
    update_src_hash(opts, package.filename, package.hash)
  File "/nix/store/lagdrmaal96m49fh9p012g58mlyvzqa4-nix-update-0.3.2/lib/python3.8/site-packages/nix_update/update.py", line 84, in update_src_hash
    target_hash = nix_prefetch([f"(import {opts.import_path} {{}}).{opts.attribute}"])
  File "/nix/store/lagdrmaal96m49fh9p012g58mlyvzqa4-nix-update-0.3.2/lib/python3.8/site-packages/nix_update/update.py", line 76, in nix_prefetch
    res = run(["nix-prefetch"] + cmd, extra_env=extra_env)
  File "/nix/store/lagdrmaal96m49fh9p012g58mlyvzqa4-nix-update-0.3.2/lib/python3.8/site-packages/nix_update/utils.py", line 36, in run
    return subprocess.run(
  File "/nix/store/papbnjfxwrdkmz6xfp7v2q7nxyvgcr5l-python3-3.8.6/lib/python3.8/subprocess.py", line 512, in run
    raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['nix-prefetch', '(import ./. {}).nerdctl']' returned non-zero exit status 1.

# ----------- run again ----------------

nix-update --build --commit nerdctl
$ git -C ./. diff --staged
$ nix eval --json --impure --experimental-features nix-command --expr (with import ./. {};
    let
      pkg = nerdctl;
      raw_version_position = builtins.unsafeGetAttrPos "version" pkg;

      position = if pkg ? isRubyGem then
        raw_version_position
      else
        builtins.unsafeGetAttrPos "src" pkg;
    in {
      name = pkg.name;
      old_version = (builtins.parseDrvName pkg.name).version;
      inherit raw_version_position;
      filename = position.file;
      line = position.line;
      urls = pkg.src.urls or null;
      url = pkg.src.url or null;
      rev = pkg.src.url.rev or null;
      hash = pkg.src.outputHash;
      mod_sha256 = pkg.modSha256 or null;
      vendor_sha256 = pkg.vendorSha256 or null;
      cargo_sha256 = pkg.cargoSha256 or null;
      tests = pkg.passthru.tests or null;
    })
fetch https://github.com/AkihiroSuda/nerdctl/releases.atom
Not updating version, already 0.6.1
$ nix build --experimental-features nix-command -f ./. nerdctl
$ git -C ./. add /home/jk/projects/personal/nixpkgs/pkgs/applications/networking/cluster/nerdctl/default.nix
$ git -C ./. diff --staged
$ git -C ./. commit --verbose --message nerdctl: 0.6.1 -> 0.6.1
[nerdctl 2e91fd64ff8] nerdctl: 0.6.1 -> 0.6.1
 1 file changed, 1 insertion(+), 1 deletion(-)
@06kellyjac
Copy link
Author

As a note the nix-prefetch error was resolved by updating so it'd be using nix-prefetch @ 0.4.0 instead of 0.3.1
But in the event of future nix-prefetch errors this would be useful.

@Mic92
Copy link
Owner

Mic92 commented Mar 13, 2021

Since https://github.com/Mic92/nix-update/releases/tag/0.3 we actually get also version diffs from this git history.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants