From 3b2ec62f1876a7aec8e70d29c8e4fa5378f4051d Mon Sep 17 00:00:00 2001 From: Felix Singer Date: Wed, 29 Jul 2026 03:28:17 +0200 Subject: [PATCH 1/5] gerrit: Replace gitUpdater with nix-update-script The gitUpdater does not allow configuring a custom path pointing to the Nix file containing the version and hash strings, which will be needed in a later commit. nix-update-script does. Use it. Note that customizing the path is not needed in this commit, but making a dedicated commit reduces the diff later. The following command was used to verify that updating still works: nix-shell maintainers/scripts/update.nix --argstr package gerrit Signed-off-by: Felix Singer --- pkgs/by-name/ge/gerrit/package.nix | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/pkgs/by-name/ge/gerrit/package.nix b/pkgs/by-name/ge/gerrit/package.nix index 4d7c87408399..b2e3c059ecc6 100644 --- a/pkgs/by-name/ge/gerrit/package.nix +++ b/pkgs/by-name/ge/gerrit/package.nix @@ -2,7 +2,7 @@ lib, stdenvNoCC, fetchurl, - gitUpdater, + nix-update-script, nixosTests, }: @@ -21,10 +21,11 @@ stdenvNoCC.mkDerivation (finalAttrs: { ''; passthru = { - updateScript = gitUpdater { - url = "https://gerrit.googlesource.com/gerrit"; - rev-prefix = "v"; - allowedVersions = "^[0-9\\.]+$"; + updateScript = nix-update-script { + extraArgs = [ + "--url=https://github.com/GerritCodeReview/gerrit" + "--version-regex=v([0-9\\.]+)" + ]; }; # A list of plugins that are part of the gerrit.war file. # Use `java -jar gerrit.war ls | grep plugins/` to generate that list. From 3bccf21969d56534666c6a9e5d4672be0617a8f7 Mon Sep 17 00:00:00 2001 From: Felix Singer Date: Wed, 31 Dec 2025 23:04:59 +0100 Subject: [PATCH 2/5] gerrit: Make package definition generic The Gerrit project usually maintains the last 3 minor releases and there might be reasons for not using the most recent one, like a breaking change or a bug. NixOS has only the most recent version packaged at the moment. To give people using the NixOS package and module infrastructure some more flexibility, allow adding multiple Gerrit packages by making the package definition generic, which takes the hash and the version as additional arguments, and move the bits specific to version 3.14 to `3_14.nix`. Versioned package names follow the scheme `gerrit_y_xx`, e.g. `gerrit_3_14`, while `gerrit` points to the most recent version managed by package.nix. To make sure `passthru.tests` uses the appropriate package, set `services.gerrit.package` to `finalAttrs.finalPackage` in the generic package definition. Use majorMinor version as base string to be matched in the update script, so that only point releases are considered. Customize the path to the Nix file containing the version and hash strings which should be patched. Otherwise it tries to patch generic.nix. The following command was used to verify new versions are detected and patched correctly. nix-shell maintainers/scripts/update.nix --argstr package gerrit_3_14 Signed-off-by: Felix Singer --- pkgs/by-name/ge/gerrit/3_14.nix | 6 +++ pkgs/by-name/ge/gerrit/generic.nix | 68 ++++++++++++++++++++++++++++++ pkgs/by-name/ge/gerrit/package.nix | 64 +--------------------------- pkgs/top-level/all-packages.nix | 2 + 4 files changed, 78 insertions(+), 62 deletions(-) create mode 100644 pkgs/by-name/ge/gerrit/3_14.nix create mode 100644 pkgs/by-name/ge/gerrit/generic.nix diff --git a/pkgs/by-name/ge/gerrit/3_14.nix b/pkgs/by-name/ge/gerrit/3_14.nix new file mode 100644 index 000000000000..def281e86922 --- /dev/null +++ b/pkgs/by-name/ge/gerrit/3_14.nix @@ -0,0 +1,6 @@ +{ callPackage }: + +callPackage ./generic.nix { + version = "3.14.2"; + hash = "sha256-OuM96W9++2QKD2O2IwkzDjmBaC9Ej/6ReHY/Rwujuno="; +} diff --git a/pkgs/by-name/ge/gerrit/generic.nix b/pkgs/by-name/ge/gerrit/generic.nix new file mode 100644 index 000000000000..a49511c84c43 --- /dev/null +++ b/pkgs/by-name/ge/gerrit/generic.nix @@ -0,0 +1,68 @@ +{ + fetchurl, + nix-update-script, + hash, + lib, + nixosTests, + stdenvNoCC, + version, +}: + +stdenvNoCC.mkDerivation (finalAttrs: { + pname = "gerrit"; + inherit version; + + src = fetchurl { + url = "https://gerrit-releases.storage.googleapis.com/gerrit-${finalAttrs.version}.war"; + inherit hash; + }; + + buildCommand = '' + mkdir -p "$out"/webapps/ + ln -s ${finalAttrs.src} "$out"/webapps/gerrit-${finalAttrs.version}.war + ''; + + passthru = { + updateScript = nix-update-script { + extraArgs = [ + "--url=https://github.com/GerritCodeReview/gerrit" + "--version-regex=v(${lib.versions.majorMinor finalAttrs.version}\\.[0-9]+)" + "--override-filename=pkgs/by-name/ge/gerrit/${lib.versions.major finalAttrs.version}_${lib.versions.minor finalAttrs.version}.nix" + ]; + }; + # A list of plugins that are part of the gerrit.war file. + # Use `java -jar gerrit.war ls | grep plugins/` to generate that list. + plugins = [ + "codemirror-editor" + "commit-message-length-validator" + "delete-project" + "download-commands" + "gitiles" + "hooks" + "plugin-manager" + "replication" + "reviewnotes" + "singleusergroup" + "webhooks" + ]; + tests.gerrit = nixosTests.gerrit.extendNixOS { + module = { + services.gerrit.package = finalAttrs.finalPackage; + }; + }; + }; + + meta = { + homepage = "https://www.gerritcodereview.com/index.md"; + license = lib.licenses.asl20; + description = "Web based code review and repository management for the git version control system"; + changelog = "https://www.gerritcodereview.com/${lib.versions.majorMinor finalAttrs.version}.html"; + sourceProvenance = with lib.sourceTypes; [ binaryBytecode ]; + maintainers = with lib.maintainers; [ + flokli + zimbatm + felixsinger + ]; + platforms = lib.platforms.unix; + }; +}) diff --git a/pkgs/by-name/ge/gerrit/package.nix b/pkgs/by-name/ge/gerrit/package.nix index b2e3c059ecc6..011b6d0b64d3 100644 --- a/pkgs/by-name/ge/gerrit/package.nix +++ b/pkgs/by-name/ge/gerrit/package.nix @@ -1,63 +1,3 @@ -{ - lib, - stdenvNoCC, - fetchurl, - nix-update-script, - nixosTests, -}: +{ callPackage }: -stdenvNoCC.mkDerivation (finalAttrs: { - pname = "gerrit"; - version = "3.14.2"; - - src = fetchurl { - url = "https://gerrit-releases.storage.googleapis.com/gerrit-${finalAttrs.version}.war"; - hash = "sha256-OuM96W9++2QKD2O2IwkzDjmBaC9Ej/6ReHY/Rwujuno="; - }; - - buildCommand = '' - mkdir -p "$out"/webapps/ - ln -s ${finalAttrs.src} "$out"/webapps/gerrit-${finalAttrs.version}.war - ''; - - passthru = { - updateScript = nix-update-script { - extraArgs = [ - "--url=https://github.com/GerritCodeReview/gerrit" - "--version-regex=v([0-9\\.]+)" - ]; - }; - # A list of plugins that are part of the gerrit.war file. - # Use `java -jar gerrit.war ls | grep plugins/` to generate that list. - plugins = [ - "codemirror-editor" - "commit-message-length-validator" - "delete-project" - "download-commands" - "gitiles" - "hooks" - "plugin-manager" - "replication" - "reviewnotes" - "singleusergroup" - "webhooks" - ]; - tests = { - inherit (nixosTests) gerrit; - }; - }; - - meta = { - homepage = "https://www.gerritcodereview.com/index.md"; - license = lib.licenses.asl20; - description = "Web based code review and repository management for the git version control system"; - changelog = "https://www.gerritcodereview.com/${lib.versions.majorMinor finalAttrs.version}.html"; - sourceProvenance = with lib.sourceTypes; [ binaryBytecode ]; - maintainers = with lib.maintainers; [ - flokli - zimbatm - felixsinger - ]; - platforms = lib.platforms.unix; - }; -}) +callPackage ./3_14.nix { } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 43d8564f9e2a..144423e86ea5 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1078,6 +1078,8 @@ with pkgs; forgejo-lts = callPackage ../by-name/fo/forgejo/lts.nix { }; + gerrit_3_14 = callPackage ../by-name/ge/gerrit/3_14.nix { }; + github-cli = gh; git-credential-aol = callPackage ../by-name/gi/git-credential-email/git-credential-aol { }; From f39398d120d054a0b378f542950f06f09e9c9823 Mon Sep 17 00:00:00 2001 From: Felix Singer Date: Wed, 31 Dec 2025 23:08:15 +0100 Subject: [PATCH 3/5] gerrit_3_12: init at 3.12.9 Signed-off-by: Felix Singer --- pkgs/by-name/ge/gerrit/3_12.nix | 6 ++++++ pkgs/top-level/all-packages.nix | 2 ++ 2 files changed, 8 insertions(+) create mode 100644 pkgs/by-name/ge/gerrit/3_12.nix diff --git a/pkgs/by-name/ge/gerrit/3_12.nix b/pkgs/by-name/ge/gerrit/3_12.nix new file mode 100644 index 000000000000..ba29a8965a1c --- /dev/null +++ b/pkgs/by-name/ge/gerrit/3_12.nix @@ -0,0 +1,6 @@ +{ callPackage }: + +callPackage ./generic.nix { + version = "3.12.9"; + hash = "sha256-iSMxBrJ+M3/I+X3dxBOUHmcEQ0VqLjq38mUJuII3hUY="; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 144423e86ea5..3129cce135fd 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1078,6 +1078,8 @@ with pkgs; forgejo-lts = callPackage ../by-name/fo/forgejo/lts.nix { }; + gerrit_3_12 = callPackage ../by-name/ge/gerrit/3_12.nix { }; + gerrit_3_14 = callPackage ../by-name/ge/gerrit/3_14.nix { }; github-cli = gh; From 711a0ca6ceab63e69233d7f79429d82d988ff191 Mon Sep 17 00:00:00 2001 From: Felix Singer Date: Mon, 20 Jul 2026 01:47:06 +0200 Subject: [PATCH 4/5] gerrit_3_13: init at 3.13.8 Signed-off-by: Felix Singer --- pkgs/by-name/ge/gerrit/3_13.nix | 6 ++++++ pkgs/top-level/all-packages.nix | 2 ++ 2 files changed, 8 insertions(+) create mode 100644 pkgs/by-name/ge/gerrit/3_13.nix diff --git a/pkgs/by-name/ge/gerrit/3_13.nix b/pkgs/by-name/ge/gerrit/3_13.nix new file mode 100644 index 000000000000..05fc0e9f8b0d --- /dev/null +++ b/pkgs/by-name/ge/gerrit/3_13.nix @@ -0,0 +1,6 @@ +{ callPackage }: + +callPackage ./generic.nix { + version = "3.13.8"; + hash = "sha256-7/S+SuXItnBabW0e5h/n9tezhW5sV/Ix8CmEOdx9EYA="; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 3129cce135fd..4e1b74ad0cdb 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1080,6 +1080,8 @@ with pkgs; gerrit_3_12 = callPackage ../by-name/ge/gerrit/3_12.nix { }; + gerrit_3_13 = callPackage ../by-name/ge/gerrit/3_13.nix { }; + gerrit_3_14 = callPackage ../by-name/ge/gerrit/3_14.nix { }; github-cli = gh; From 08eac1bc2b2380bf853f38a4fb45c856717d7c38 Mon Sep 17 00:00:00 2001 From: Felix Singer Date: Mon, 20 Jul 2026 04:00:35 +0200 Subject: [PATCH 5/5] gerrit: Enable strictDeps and structuredAttrs Signed-off-by: Felix Singer --- pkgs/by-name/ge/gerrit/generic.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkgs/by-name/ge/gerrit/generic.nix b/pkgs/by-name/ge/gerrit/generic.nix index a49511c84c43..3dac7c181b80 100644 --- a/pkgs/by-name/ge/gerrit/generic.nix +++ b/pkgs/by-name/ge/gerrit/generic.nix @@ -12,6 +12,9 @@ stdenvNoCC.mkDerivation (finalAttrs: { pname = "gerrit"; inherit version; + strictDeps = true; + __structuredAttrs = true; + src = fetchurl { url = "https://gerrit-releases.storage.googleapis.com/gerrit-${finalAttrs.version}.war"; inherit hash;