feat: introduce Gerrit 3.11

Gerrit-version specific plugin hashes were introduced.

Signed-off-by: Raito Bezarius <masterancpp@gmail.com>
This commit is contained in:
raito 2024-12-14 16:26:24 +01:00
parent 2657389c59
commit 6af71d0c52
7 changed files with 307 additions and 134 deletions

View file

@ -5,22 +5,68 @@
, pkgs ? import nixpkgs { } , pkgs ? import nixpkgs { }
, lib ? pkgs.lib , lib ? pkgs.lib
}: }:
let
depsHashes = {
"3_10" = {
"oauth" = "sha256-mWR7hGl0c2lBH1YvUv6vAJohAwqhvDJohv559ms6Mkw=";
"metric-reporter-prometheus" = "sha256-+X3d9KL3gR0RucJU4M8cq9Tnw9zyeVNdDWjzT6AndGM=";
};
"3_11" = {
"oauth" = "sha256-Xx607OSqlRMr8mlkVhfXiqM9hWcJqx4dmpf+cm10uSA=";
"metric-reporter-prometheus" = "sha256-CzhpAN9Jh9E6GV+/UzVnNn56bOld8evdWcpkr/eFtag=";
};
};
mkPluginSet = { self, depsHashes, buildGerritBazelPlugin }: {
code-owners = self.callPackage ./plugins/code-owners {
inherit buildGerritBazelPlugin;
};
oauth = self.callPackage ./plugins/oauth {
inherit buildGerritBazelPlugin;
depsHash = depsHashes.oauth;
};
metrics-reporter-prometheus = self.callPackage ./plugins/metrics-reporter-prometheus {
inherit buildGerritBazelPlugin;
depsHash = depsHashes.metric-reporter-prometheus;
};
};
in
lib.makeScope pkgs.newScope (self: { lib.makeScope pkgs.newScope (self: {
buildBazelPackageNG = self.callPackage ./buildBazelPackageNG { }; buildBazelPackageNG = self.callPackage ./buildBazelPackageNG { };
gerrit = self.callPackage ./gerrit { }; inherit (self.callPackage ./gerrit { }) gerrit_3_10 gerrit_3_11;
buildGerritBazelPlugin = self.callPackage ./plugins/builder.nix { }; buildGerrit310BazelPlugin = self.callPackage ./plugins/builder.nix {
plugins = { gerrit = self.gerrit_3_10;
code-owners = self.callPackage ./plugins/code-owners { }; };
oauth = self.callPackage ./plugins/oauth { }; buildGerrit311BazelPlugin = self.callPackage ./plugins/builder.nix {
metrics-reporter-prometheus = self.callPackage ./plugins/metrics-reporter-prometheus { }; gerrit = self.gerrit_3_11;
}; };
ci = pkgs.linkFarm "gerrit-ci" [ plugins_3_10 = mkPluginSet {
inherit self;
depsHashes = depsHashes."3_10";
buildGerritBazelPlugin = self.buildGerrit310BazelPlugin;
};
plugins_3_11 = mkPluginSet {
inherit self;
depsHashes = depsHashes."3_11";
buildGerritBazelPlugin = self.buildGerrit311BazelPlugin;
};
buildGerritBazelPlugin = self.buildGerrit310BazelPlugin;
gerrit = self.gerrit_3_10;
plugins = self.plugins_3_10;
ci = pkgs.linkFarm "gerrit-${self.gerrit.version}-ci" [
{ name = "gerrit"; path = self.gerrit; } { name = "gerrit"; path = self.gerrit; }
{ name = "code-owners.jar"; path = self.plugins.code-owners; } { name = "code-owners.jar"; path = self.plugins.code-owners; }
{ name = "oauth.jar"; path = self.plugins.oauth; } { name = "oauth.jar"; path = self.plugins.oauth; }
{ name = "metrics-reporter-prometheus.jar"; path = self.plugins.metrics-reporter-prometheus; } { name = "metrics-reporter-prometheus.jar"; path = self.plugins.metrics-reporter-prometheus; }
]; ];
ci-next = pkgs.linkFarm "gerrit-${self.gerrit_3_11.version}-ci" [
{ name = "gerrit"; path = self.gerrit_3_11; }
{ name = "code-owners.jar"; path = self.plugins_3_11.code-owners; }
{ name = "oauth.jar"; path = self.plugins_3_11.oauth; }
{ name = "metrics-reporter-prometheus.jar"; path = self.plugins_3_11.metrics-reporter-prometheus; }
];
}) })

View file

@ -16,8 +16,9 @@
pkgSet = import ./default.nix { pkgs = nixpkgs.legacyPackages."${system}"; }; pkgSet = import ./default.nix { pkgs = nixpkgs.legacyPackages."${system}"; };
in { in {
default = pkgSet.gerrit; default = pkgSet.gerrit;
inherit (pkgSet) gerrit; inherit (pkgSet) gerrit gerrit_3_11;
inherit (pkgSet.plugins) oauth code-owners metrics-reporter-prometheus; inherit (pkgSet.plugins) oauth code-owners metrics-reporter-prometheus;
inherit (pkgSet) plugins_3_11;
}); });
devShells = forAllSystems (system: { devShells = forAllSystems (system: {

123
gerrit/3_10.nix Normal file
View file

@ -0,0 +1,123 @@
# SPDX-FileCopyrightText: 2024 The nix-gerrit Authors <git@lukegb.com>
# SPDX-License-Identifier: MIT
{ buildBazelPackageNG
, lib
, fetchgit
, bazel_7
, python3
, openjdk21_headless
, curl
, unzip
, extraBazelPackageAttrs ? {}
}:
let
inherit (buildBazelPackageNG) bazelRulesJavaHook bazelRulesNodeJS5Hook;
in
(buildBazelPackageNG rec {
pname = "gerrit";
version = "3.10.0";
bazel = bazel_7;
src = (fetchgit {
url = "https://gerrit.googlesource.com/gerrit";
rev = "v${version}";
fetchSubmodules = true;
deepClone = true;
hash = "sha256-FpKuzityHuHNYBIOL8YUjCLlkuVBfxjvHECb26NsZNE=";
}).overrideAttrs (_: {
env.NIX_PREFETCH_GIT_CHECKOUT_HOOK = ''
pushd "$dir" >/dev/null
${python3}/bin/python tools/workspace_status_release.py | sort > .version
popd >/dev/null
# delete all the .git; we can't do this using fetchgit if deepClone is on,
# but our mischief has already been achieved by the python command above :)
find "$dir" -name .git -print0 | xargs -0 rm -rf
'';
});
depsHash = "sha256-eX26Bjm7GvzywYeew3705dIwM1ducJw3LsjEYPLn6AM=";
patches = [
./0001-Syntax-highlight-nix.patch
./0002-Syntax-highlight-rules.pl.patch
./0003-Add-titles-to-CLs-over-HTTP.patch
./gerrit-cl-431977-bump-sshd.patch
./gerrit-cl-431977-part-2-bump-bouncycastle.patch
];
nativeBuildInputs = [
bazelRulesJavaHook
bazelRulesNodeJS5Hook
curl
openjdk21_headless
python3
unzip
];
shellHook = ''
bazelFlagsArray+=(
'--javacopt="-XepDisableAllChecks"'
)
'';
prePatch = ''
rm .bazelversion
ln -sf ${./bazelrc} user.bazelrc
ln -sf ${./workspace_overrides.bzl} workspace_overrides.bzl
substituteInPlace WORKSPACE \
--replace-fail 'load("@io_bazel_rules_webtesting//web:repositories.bzl"' 'load("//:workspace_overrides.bzl"' \
--replace-fail 'load("@io_bazel_rules_webtesting//web/versioned:browsers-0.3.3.bzl"' 'load("//:workspace_overrides.bzl"'
patchShebangs Documentation/replace_macros.py
'';
postPatch = ''
sed -Ei 's,^(STABLE_BUILD_GERRIT_LABEL.*)$,\1-dirty-nix,' .version
'';
preBuild = ''
export GERRIT_CACHE_HOME=$NIXBAZEL_CACHE_ROOT/gerrit-cache
'';
extraCacheInstall = ''
cp -R $GERRIT_CACHE_HOME $out/gerrit-cache
'';
extraBuildSetup = ''
ln -sf $deps/gerrit-cache $GERRIT_CACHE_HOME
'';
extraBuildInstall = ''
mkdir -p "$out"/share/api/
unzip bazel-bin/api-skip-javadoc.zip -d "$out"/share/api
'';
bazelTargets = {
"//:release" = "$out/webapps/gerrit-${version}.war";
"//:api-skip-javadoc" = null;
};
passthru = {
# A list of plugins that are part of the gerrit.war file.
# Use `java -jar gerrit.war ls | grep -Po '(?<=plugins/)[^.]+' | sed -e 's,^,",' -e 's,$,",' | sort` to generate that list.
plugins = [
"codemirror-editor"
"commit-message-length-validator"
"delete-project"
"download-commands"
"gitiles"
"hooks"
"plugin-manager"
"replication"
"reviewnotes"
"singleusergroup"
"webhooks"
];
};
}).override extraBazelPackageAttrs

119
gerrit/3_11.nix Normal file
View file

@ -0,0 +1,119 @@
# SPDX-FileCopyrightText: 2024 The nix-gerrit Authors <git@lukegb.com>
# SPDX-License-Identifier: MIT
{ buildBazelPackageNG
, lib
, fetchgit
, bazel_7
, python3
, openjdk21_headless
, curl
, unzip
, extraBazelPackageAttrs ? {}
}:
let
inherit (buildBazelPackageNG) bazelRulesJavaHook bazelRulesNodeJS5Hook;
in
(buildBazelPackageNG rec {
pname = "gerrit";
version = "3.11.0";
bazel = bazel_7;
src = (fetchgit {
url = "https://gerrit.googlesource.com/gerrit";
rev = "v${version}";
fetchSubmodules = true;
deepClone = true;
hash = "sha256-lnoVx0x3ssa4q/+nVtUSHQJP3NzsEyk8SFhwqgdvEbY=";
}).overrideAttrs (_: {
env.NIX_PREFETCH_GIT_CHECKOUT_HOOK = ''
pushd "$dir" >/dev/null
${python3}/bin/python tools/workspace_status_release.py | sort > .version
popd >/dev/null
# delete all the .git; we can't do this using fetchgit if deepClone is on,
# but our mischief has already been achieved by the python command above :)
find "$dir" -name .git -print0 | xargs -0 rm -rf
'';
});
depsHash = "sha256-pi4bgY1V3mw3rQ91/MchA+Uh8aI9H3gExNPdxMSe2J0=";
patches = [
./0002-Syntax-highlight-rules.pl.patch
./0003-Add-titles-to-CLs-over-HTTP.patch
];
nativeBuildInputs = [
bazelRulesJavaHook
bazelRulesNodeJS5Hook
curl
openjdk21_headless
python3
unzip
];
shellHook = ''
bazelFlagsArray+=(
'--javacopt="-XepDisableAllChecks"'
)
'';
prePatch = ''
rm .bazelversion
ln -sf ${./bazelrc} user.bazelrc
ln -sf ${./workspace_overrides.bzl} workspace_overrides.bzl
substituteInPlace WORKSPACE \
--replace-fail 'load("@io_bazel_rules_webtesting//web:repositories.bzl"' 'load("//:workspace_overrides.bzl"' \
--replace-fail 'load("@io_bazel_rules_webtesting//web/versioned:browsers-0.3.3.bzl"' 'load("//:workspace_overrides.bzl"'
patchShebangs Documentation/replace_macros.py
'';
postPatch = ''
sed -Ei 's,^(STABLE_BUILD_GERRIT_LABEL.*)$,\1-dirty-nix,' .version
'';
preBuild = ''
export GERRIT_CACHE_HOME=$NIXBAZEL_CACHE_ROOT/gerrit-cache
'';
extraCacheInstall = ''
cp -R $GERRIT_CACHE_HOME $out/gerrit-cache
'';
extraBuildSetup = ''
ln -sf $deps/gerrit-cache $GERRIT_CACHE_HOME
'';
extraBuildInstall = ''
mkdir -p "$out"/share/api/
unzip bazel-bin/api-skip-javadoc.zip -d "$out"/share/api
'';
bazelTargets = {
"//:release" = "$out/webapps/gerrit-${version}.war";
"//:api-skip-javadoc" = null;
};
passthru = {
# A list of plugins that are part of the gerrit.war file.
# Use `java -jar gerrit.war ls | grep -Po '(?<=plugins/)[^.]+' | sed -e 's,^,",' -e 's,$,",' | sort` to generate that list.
plugins = [
"codemirror-editor"
"commit-message-length-validator"
"delete-project"
"download-commands"
"gitiles"
"hooks"
"plugin-manager"
"replication"
"reviewnotes"
"singleusergroup"
"webhooks"
];
};
}).override extraBazelPackageAttrs

View file

@ -1,123 +1,7 @@
# SPDX-FileCopyrightText: 2024 The nix-gerrit Authors <git@lukegb.com> # SPDX-FileCopyrightText: 2024 The nix-gerrit Authors <git@lukegb.com>
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT
{ callPackage }:
{ buildBazelPackageNG {
, lib gerrit_3_10 = callPackage ./3_10.nix { };
, fetchgit gerrit_3_11 = callPackage ./3_11.nix { };
, bazel_7 }
, python3
, openjdk21_headless
, curl
, unzip
, extraBazelPackageAttrs ? {}
}:
let
inherit (buildBazelPackageNG) bazelRulesJavaHook bazelRulesNodeJS5Hook;
in
(buildBazelPackageNG rec {
pname = "gerrit";
version = "3.10.0";
bazel = bazel_7;
src = (fetchgit {
url = "https://gerrit.googlesource.com/gerrit";
rev = "v${version}";
fetchSubmodules = true;
deepClone = true;
hash = "sha256-FpKuzityHuHNYBIOL8YUjCLlkuVBfxjvHECb26NsZNE=";
}).overrideAttrs (_: {
env.NIX_PREFETCH_GIT_CHECKOUT_HOOK = ''
pushd "$dir" >/dev/null
${python3}/bin/python tools/workspace_status_release.py | sort > .version
popd >/dev/null
# delete all the .git; we can't do this using fetchgit if deepClone is on,
# but our mischief has already been achieved by the python command above :)
find "$dir" -name .git -print0 | xargs -0 rm -rf
'';
});
depsHash = "sha256-eX26Bjm7GvzywYeew3705dIwM1ducJw3LsjEYPLn6AM=";
patches = [
./0001-Syntax-highlight-nix.patch
./0002-Syntax-highlight-rules.pl.patch
./0003-Add-titles-to-CLs-over-HTTP.patch
./gerrit-cl-431977-bump-sshd.patch
./gerrit-cl-431977-part-2-bump-bouncycastle.patch
];
nativeBuildInputs = [
bazelRulesJavaHook
bazelRulesNodeJS5Hook
curl
openjdk21_headless
python3
unzip
];
shellHook = ''
bazelFlagsArray+=(
'--javacopt="-XepDisableAllChecks"'
)
'';
prePatch = ''
rm .bazelversion
ln -sf ${./bazelrc} user.bazelrc
ln -sf ${./workspace_overrides.bzl} workspace_overrides.bzl
substituteInPlace WORKSPACE \
--replace-fail 'load("@io_bazel_rules_webtesting//web:repositories.bzl"' 'load("//:workspace_overrides.bzl"' \
--replace-fail 'load("@io_bazel_rules_webtesting//web/versioned:browsers-0.3.3.bzl"' 'load("//:workspace_overrides.bzl"'
patchShebangs Documentation/replace_macros.py
'';
postPatch = ''
sed -Ei 's,^(STABLE_BUILD_GERRIT_LABEL.*)$,\1-dirty-nix,' .version
'';
preBuild = ''
export GERRIT_CACHE_HOME=$NIXBAZEL_CACHE_ROOT/gerrit-cache
'';
extraCacheInstall = ''
cp -R $GERRIT_CACHE_HOME $out/gerrit-cache
'';
extraBuildSetup = ''
ln -sf $deps/gerrit-cache $GERRIT_CACHE_HOME
'';
extraBuildInstall = ''
mkdir -p "$out"/share/api/
unzip bazel-bin/api-skip-javadoc.zip -d "$out"/share/api
'';
bazelTargets = {
"//:release" = "$out/webapps/gerrit-${version}.war";
"//:api-skip-javadoc" = null;
};
passthru = {
# A list of plugins that are part of the gerrit.war file.
# Use `java -jar gerrit.war ls | grep -Po '(?<=plugins/)[^.]+' | sed -e 's,^,",' -e 's,$,",' | sort` to generate that list.
plugins = [
"codemirror-editor"
"commit-message-length-validator"
"delete-project"
"download-commands"
"gitiles"
"hooks"
"plugin-manager"
"replication"
"reviewnotes"
"singleusergroup"
"webhooks"
];
};
}).override extraBazelPackageAttrs

View file

@ -1,7 +1,7 @@
# SPDX-FileCopyrightText: 2024 The nix-gerrit Authors <git@lukegb.com> # SPDX-FileCopyrightText: 2024 The nix-gerrit Authors <git@lukegb.com>
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT
{ buildGerritBazelPlugin, fetchgit }: { buildGerritBazelPlugin, fetchgit, depsHash }:
buildGerritBazelPlugin rec { buildGerritBazelPlugin rec {
name = "metrics-reporter-prometheus"; name = "metrics-reporter-prometheus";
@ -11,7 +11,7 @@ buildGerritBazelPlugin rec {
rev = "f2ee1de665281596ae300144243fcf94bf6f1f7d"; rev = "f2ee1de665281596ae300144243fcf94bf6f1f7d";
hash = "sha256-iUFzSXKIKBdZBZMpZiejkEEXXI20wTJQRYkufc/YjOM="; hash = "sha256-iUFzSXKIKBdZBZMpZiejkEEXXI20wTJQRYkufc/YjOM=";
}; };
depsHash = "sha256-+X3d9KL3gR0RucJU4M8cq9Tnw9zyeVNdDWjzT6AndGM="; inherit depsHash;
postOverlayPlugin = '' postOverlayPlugin = ''
cp "${src}/external_plugin_deps.bzl" "$out/plugins/external_plugin_deps.bzl" cp "${src}/external_plugin_deps.bzl" "$out/plugins/external_plugin_deps.bzl"
''; '';

View file

@ -1,7 +1,7 @@
# SPDX-FileCopyrightText: 2024 The nix-gerrit Authors <git@lukegb.com> # SPDX-FileCopyrightText: 2024 The nix-gerrit Authors <git@lukegb.com>
# SPDX-License-Identifier: MIT # SPDX-License-Identifier: MIT
{ buildGerritBazelPlugin, fetchgit }: { buildGerritBazelPlugin, fetchgit, depsHash }:
buildGerritBazelPlugin rec { buildGerritBazelPlugin rec {
name = "oauth"; name = "oauth";
@ -11,7 +11,7 @@ buildGerritBazelPlugin rec {
rev = "98231604d60788bb43490f1a301d792817ac8008"; rev = "98231604d60788bb43490f1a301d792817ac8008";
hash = "sha256-AuVO1Yys8BYqGHZI/adszCUg0JM2v4Td4fe26LdOPLM="; hash = "sha256-AuVO1Yys8BYqGHZI/adszCUg0JM2v4Td4fe26LdOPLM=";
}; };
depsHash = "sha256-mWR7hGl0c2lBH1YvUv6vAJohAwqhvDJohv559ms6Mkw="; inherit depsHash;
postOverlayPlugin = '' postOverlayPlugin = ''
cp "${src}/external_plugin_deps.bzl" "$out/plugins/external_plugin_deps.bzl" cp "${src}/external_plugin_deps.bzl" "$out/plugins/external_plugin_deps.bzl"
''; '';