e780435d09
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>
160 lines
4.8 KiB
Nix
160 lines
4.8 KiB
Nix
{ depot, pkgs, ... }:
|
|
|
|
let
|
|
detzip = depot.nix.buildGo.program {
|
|
name = "detzip";
|
|
srcs = [ ./detzip.go ];
|
|
};
|
|
bazelRunScript = pkgs.writeShellScriptBin "bazel-run" ''
|
|
yarn config set cache-folder "$bazelOut/external/yarn_cache"
|
|
export HOME="$bazelOut/external/home"
|
|
mkdir -p "$bazelOut/external/home"
|
|
exec /bin/bazel "$@"
|
|
'';
|
|
bazelTop = pkgs.buildFHSUserEnv {
|
|
name = "bazel";
|
|
targetPkgs = pkgs: [
|
|
(pkgs.bazel.override { enableNixHacks = true; })
|
|
detzip
|
|
pkgs.jdk
|
|
pkgs.zlib
|
|
pkgs.python
|
|
pkgs.curl
|
|
pkgs.nodejs
|
|
pkgs.yarn
|
|
pkgs.git
|
|
bazelRunScript
|
|
];
|
|
runScript = "/bin/bazel-run";
|
|
};
|
|
bazel = bazelTop // { override = x: bazelTop; };
|
|
version = "3.2.2-1002-gea26b5ee7a";
|
|
in
|
|
pkgs.lib.makeOverridable pkgs.buildBazelPackage {
|
|
name = "gerrit-${version}";
|
|
|
|
src = pkgs.fetchgit {
|
|
url = "https://gerrit.googlesource.com/gerrit";
|
|
rev = "ea26b5ee7a1c1e4042525d308678570101d4d4d6";
|
|
sha256 = "1bndmk7namb81zkscmpvf8ygwrj0wh842xbj0irgbm5w2xwdzkch";
|
|
fetchSubmodules = true;
|
|
deepClone = true;
|
|
leaveDotGit = true;
|
|
};
|
|
patches = [
|
|
./0001-Use-detzip-in-download_bower.py.patch
|
|
./0002-Syntax-highlight-nix.patch
|
|
./0003-Syntax-highlight-rules.pl.patch
|
|
./0004-Add-titles-to-CLs-over-HTTP.patch
|
|
./0005-When-using-local-fonts-always-assume-Gerrit-is-mount.patch
|
|
./0006-Always-use-Google-Fonts.patch
|
|
./0007-Fix-gr-hovercard-behavior-under-Firefox.patch
|
|
];
|
|
|
|
bazelTarget = "release";
|
|
inherit bazel;
|
|
|
|
bazelFlags = [
|
|
"--repository_cache="
|
|
"--disk_cache="
|
|
];
|
|
removeRulesCC = false;
|
|
|
|
fetchAttrs = {
|
|
sha256 = "0jhvcpzkpcanxm99grgk6giv8yf2j0zix5z91wbnz6hb0isps5hs";
|
|
preBuild = ''
|
|
rm .bazelversion
|
|
'';
|
|
buildPhase = ''
|
|
runHook preBuild
|
|
|
|
BAZEL_USE_CPP_ONLY_TOOLCHAIN=1 \
|
|
USER=homeless-shelter \
|
|
bazel \
|
|
--output_base="$bazelOut" \
|
|
--output_user_root="$bazelUserRoot" \
|
|
build --nobuild \
|
|
--loading_phase_threads=1 \
|
|
$bazelFlags \
|
|
$bazelFetchFlags \
|
|
$bazelTarget
|
|
|
|
runHook postBuild
|
|
'';
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
# Remove all built in external workspaces, Bazel will recreate them when building
|
|
rm -rf $bazelOut/external/{bazel_tools,\@bazel_tools.marker}
|
|
rm -rf $bazelOut/external/{embedded_jdk,\@embedded_jdk.marker}
|
|
rm -rf $bazelOut/external/{local_config_cc,\@local_config_cc.marker}
|
|
rm -rf $bazelOut/external/{local_*,\@local_*.marker}
|
|
|
|
# Clear markers
|
|
find $bazelOut/external -name '@*\.marker' -exec sh -c 'echo > {}' \;
|
|
|
|
# Remove all vcs files
|
|
rm -rf $(find $bazelOut/external -type d -name .git)
|
|
rm -rf $(find $bazelOut/external -type d -name .svn)
|
|
rm -rf $(find $bazelOut/external -type d -name .hg)
|
|
|
|
# Removing top-level symlinks along with their markers.
|
|
# This is needed because they sometimes point to temporary paths (?).
|
|
# For example, in Tensorflow-gpu build:
|
|
# platforms -> NIX_BUILD_TOP/tmp/install/35282f5123611afa742331368e9ae529/_embedded_binaries/platforms
|
|
find $bazelOut/external -maxdepth 1 -type l | while read symlink; do
|
|
name="$(basename "$symlink")"
|
|
rm -rf "$symlink" "$bazelOut/external/@$name.marker"
|
|
done
|
|
|
|
# Patching symlinks to remove build directory reference
|
|
find $bazelOut/external -type l | while read symlink; do
|
|
new_target="$(readlink "$symlink" | sed "s,$NIX_BUILD_TOP,NIX_BUILD_TOP,")"
|
|
rm "$symlink"
|
|
ln -sf "$new_target" "$symlink"
|
|
done
|
|
|
|
echo '${bazel.name}' > $bazelOut/external/.nix-bazel-version
|
|
|
|
# Gerrit fixups:
|
|
# Remove polymer-bridges and ba-linkify, they're in-repo
|
|
rm -rf $bazelOut/external/yarn_cache/v6/npm-polymer-bridges-*
|
|
rm -rf $bazelOut/external/yarn_cache/v6/npm-ba-linkify-*
|
|
# Normalize permissions on .yarn-{tarball,metadata} files
|
|
find $bazelOut/external/yarn_cache \( -name .yarn-tarball.tgz -or -name .yarn-metadata.json \) -exec chmod 644 {} +
|
|
|
|
(cd $bazelOut/ && tar czf $out --sort=name --mtime='@1' --owner=0 --group=0 --numeric-owner external/)
|
|
|
|
runHook postInstall
|
|
'';
|
|
};
|
|
|
|
buildAttrs = {
|
|
preConfigure = ''
|
|
rm .bazelversion
|
|
'';
|
|
installPhase = ''
|
|
mkdir -p "$out"/webapps/
|
|
cp bazel-bin/release.war "$out"/webapps/gerrit-${version}.war
|
|
'';
|
|
};
|
|
|
|
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"
|
|
];
|
|
};
|
|
}
|