chore(3p/gerrit_plugins): add machinery for compiling Gerrit plugins from source

This looks particularly obnoxious for the owners plugin, because it's
actually two plugins with a common library in the same repo. Other
plugins are much cleaner to deal with (hence the default for
overlayPluginCmd).

Change-Id: Ibb9588c8a29b63e8509436fcbb70054e89349712
Reviewed-on: https://cl.tvl.fyi/c/depot/+/1461
Tested-by: BuildkiteCI
Reviewed-by: glittershark <grfn@gws.fyi>
This commit is contained in:
Luke Granger-Brown 2020-07-26 13:51:49 +01:00 committed by lukegb
parent 2b7fe6f957
commit e780435d09
4 changed files with 58 additions and 10 deletions

View file

@ -68,6 +68,11 @@ in lib.fix (self: {
rapidcheck rapidcheck
] ++ builtins.attrValues lisp; ] ++ builtins.attrValues lisp;
gerrit = with depot.third_party.gerrit_plugins; [
depot.third_party.gerrit
owners
];
lisp = with depot.lisp; [ lisp = with depot.lisp; [
dns dns
klatre klatre

View file

@ -30,17 +30,17 @@ let
bazel = bazelTop // { override = x: bazelTop; }; bazel = bazelTop // { override = x: bazelTop; };
version = "3.2.2-1002-gea26b5ee7a"; version = "3.2.2-1002-gea26b5ee7a";
in in
pkgs.buildBazelPackage { pkgs.lib.makeOverridable pkgs.buildBazelPackage {
name = "gerrit-${version}"; name = "gerrit-${version}";
src = (pkgs.fetchgit { src = pkgs.fetchgit {
url = "https://gerrit.googlesource.com/gerrit"; url = "https://gerrit.googlesource.com/gerrit";
rev = "ea26b5ee7a1c1e4042525d308678570101d4d4d6"; rev = "ea26b5ee7a1c1e4042525d308678570101d4d4d6";
sha256 = "1bndmk7namb81zkscmpvf8ygwrj0wh842xbj0irgbm5w2xwdzkch"; sha256 = "1bndmk7namb81zkscmpvf8ygwrj0wh842xbj0irgbm5w2xwdzkch";
fetchSubmodules = true; fetchSubmodules = true;
deepClone = true; deepClone = true;
leaveDotGit = true; leaveDotGit = true;
}); };
patches = [ patches = [
./0001-Use-detzip-in-download_bower.py.patch ./0001-Use-detzip-in-download_bower.py.patch
./0002-Syntax-highlight-nix.patch ./0002-Syntax-highlight-nix.patch

28
third_party/gerrit_plugins/builder.nix vendored Normal file
View file

@ -0,0 +1,28 @@
{ depot, pkgs, ... }:
{
buildGerritBazelPlugin = {
name,
src,
depsOutputHash,
overlayPluginCmd ? ''
cp -R "${src}" "$out/plugins/${name}"
'',
}: ((depot.third_party.gerrit.override {
name = "${name}.jar";
src = pkgs.runCommandLocal "${name}-src" {} ''
cp -R "${depot.third_party.gerrit.src}" "$out"
chmod +w "$out/plugins"
${overlayPluginCmd}
'';
bazelTarget = "//plugins/${name}";
}).overrideAttrs (super: {
deps = super.deps.overrideAttrs (superDeps: {
outputHash = depsOutputHash;
});
installPhase = ''
cp "bazel-bin/plugins/${name}/${name}.jar" "$out"
'';
}));
}

View file

@ -1,10 +1,25 @@
{ pkgs, ... }: { depot, pkgs, ... }@args:
let inherit (pkgs) fetchurl; let
in { inherit (import ./builder.nix args) buildGerritBazelPlugin;
in
{
# https://gerrit.googlesource.com/plugins/owners # https://gerrit.googlesource.com/plugins/owners
owners = fetchurl { owners = buildGerritBazelPlugin rec {
url = "https://storage.googleapis.com/tazjins-data/tvl/owners_3.2.jar"; name = "owners";
sha256 = "1xw1q3g0353aw5jqxp69n85f8y57l2p51np37n8r34kzbn5r4iz7"; depsOutputHash = "0j60yn65kn27s7cjkj3z6irymq7j7rj3q5h3n6xfrs5inm4md2ad";
} // { name = "owners"; }; src = pkgs.fetchgit {
url = "https://gerrit.googlesource.com/plugins/owners";
rev = "17817c9e319073c03513f9d5177b6142b8fd567b";
sha256 = "1p089shybp50svckcq51d0hfisjvbggndmvmhh8pvzvi6w8n9d89";
deepClone = true;
leaveDotGit = true;
};
overlayPluginCmd = ''
chmod +w "$out" "$out/plugins/external_plugin_deps.bzl"
cp -R "${src}/owners" "$out/plugins/owners"
cp "${src}/external_plugin_deps.bzl" "$out/plugins/external_plugin_deps.bzl"
cp -R "${src}/owners-common" "$out/owners-common"
'';
};
} }