forked from hswaw/hscloud
Piotr Dobrowolski
9c5d866105
Change-Id: I4f7102b4c4ddd9d0f085653ad08e071f172f289d Reviewed-on: https://gerrit.hackerspace.pl/c/hscloud/+/1307 Reviewed-by: vuko <vuko@hackerspace.pl>
82 lines
3.2 KiB
Nix
82 lines
3.2 KiB
Nix
{ hscloud, lib, pkgs, ... }:
|
|
|
|
# This supports building laserproxy in nix, which is used for deploying it to customs.
|
|
# This is mildly hacky and should be reworked to function for any hscloud bazel target
|
|
# in a more generic fashion.
|
|
#
|
|
# To build:
|
|
# ~/hscloud $ nix-build -A hswaw.laserproxy
|
|
|
|
pkgs.buildBazelPackage rec {
|
|
name = "laserproxy";
|
|
|
|
# Cleanup source tree to limit impact of unrelated changes to hscloud source
|
|
# tree on nix build cache. This should only pass over:
|
|
# //BUILD, //WORKSPACE, //.bazelrc
|
|
# //hscloud/go/**
|
|
# //hscloud/third_party/**
|
|
# //hscloud/devtools/gerrit/** (WORKSPACE reference)
|
|
# //hswaw/laserproxy/** (our build target)
|
|
src = lib.cleanSourceWith {
|
|
filter = name: type: (
|
|
lib.strings.hasInfix "/go" name ||
|
|
lib.strings.hasInfix "/third_party" name ||
|
|
|
|
lib.strings.hasSuffix "/devtools" name ||
|
|
lib.strings.hasInfix "/devtools/gerrit" name ||
|
|
|
|
lib.strings.hasSuffix "/hswaw" name ||
|
|
lib.strings.hasInfix "/hswaw/site" name ||
|
|
lib.strings.hasInfix "/hswaw/laserproxy" name ||
|
|
lib.strings.hasInfix "/hswaw/site" name ||
|
|
|
|
lib.strings.hasSuffix "/BUILD" name ||
|
|
lib.strings.hasSuffix "/WORKSPACE" name ||
|
|
lib.strings.hasSuffix "/.bazelrc" name
|
|
);
|
|
src = hscloud.root;
|
|
};
|
|
|
|
bazelTarget = "//hswaw/laserproxy";
|
|
nativeBuildInputs = with pkgs; [
|
|
git python3 postgresql go
|
|
];
|
|
patches = [
|
|
./nix-use-system-go.patch
|
|
./nix-disable-workspace-status.patch
|
|
];
|
|
|
|
removeRulesCC = false;
|
|
fetchConfigured = true;
|
|
fetchAttrs = {
|
|
# Nicked from nixpkgs' usages of buildBazelPackage in bazel_watcher.
|
|
preInstall = ''
|
|
# Remove the go_sdk (it's just a copy of the go derivation) and all
|
|
# references to it from the marker files. Bazel does not need to download
|
|
# this sdk because we have patched the WORKSPACE file to point to the one
|
|
# currently present in PATH. Without removing the go_sdk from the marker
|
|
# file, the hash of it will change anytime the Go derivation changes and
|
|
# that would lead to impurities in the marker files which would result in
|
|
# a different sha256 for the fetch phase.
|
|
rm -rf $bazelOut/external/{go_sdk,\@go_sdk.marker}
|
|
sed -e '/^FILE:@go_sdk.*/d' -i $bazelOut/external/\@*.marker
|
|
|
|
# Retains go build input markers
|
|
chmod -R 755 $bazelOut/external/{bazel_gazelle_go_repository_cache,@\bazel_gazelle_go_repository_cache.marker}
|
|
rm -rf $bazelOut/external/{bazel_gazelle_go_repository_cache,@\bazel_gazelle_go_repository_cache.marker}
|
|
|
|
# Remove the gazelle tools, they contain go binaries that are built
|
|
# non-deterministically. As long as the gazelle version matches the tools
|
|
# should be equivalent.
|
|
rm -rf $bazelOut/external/{bazel_gazelle_go_repository_tools,\@bazel_gazelle_go_repository_tools.marker}
|
|
sed -e '/^FILE:@bazel_gazelle_go_repository_tools.*/d' -i $bazelOut/external/\@*.marker
|
|
'';
|
|
sha256 = "sha256-WbM9+9Pt//21MCwb/zVro29uKVdNXHnWpuh7kILUbco=";
|
|
};
|
|
buildAttrs = {
|
|
inherit patches;
|
|
installPhase = ''
|
|
install -Dm755 bazel-bin/hswaw/laserproxy/*/laserproxy $out/bin/laserproxy
|
|
'';
|
|
};
|
|
}
|