blob: 45d5ae69328dce95ad51bb8c7133b87d2ec2c60c [file] [log] [blame]
Piotr Dobrowolski20c6bcb2021-10-16 23:07:29 +02001{ hscloud, lib, pkgs, ... }:
Serge Bazanskib1de7572020-10-29 00:43:43 +01002
3# This supports building laserproxy in nix, which is used for deploying it to customs.
4# This is mildly hacky and should be reworked to function for any hscloud bazel target
5# in a more generic fashion.
6#
7# To build:
8# ~/hscloud $ nix-build -A hswaw.laserproxy
9
10pkgs.buildBazelPackage rec {
11 name = "laserproxy";
Piotr Dobrowolski20c6bcb2021-10-16 23:07:29 +020012
13 # Cleanup source tree to limit impact of unrelated changes to hscloud source
14 # tree on nix build cache. This should only pass over:
15 # //BUILD, //WORKSPACE, //.bazelrc
16 # //hscloud/go/**
17 # //hscloud/third_party/**
18 # //hscloud/devtools/gerrit/** (WORKSPACE reference)
19 # //hswaw/laserproxy/** (our build target)
20 src = lib.cleanSourceWith {
21 filter = name: type: (
22 lib.strings.hasInfix "/go" name ||
23 lib.strings.hasInfix "/third_party" name ||
24
25 lib.strings.hasSuffix "/devtools" name ||
26 lib.strings.hasInfix "/devtools/gerrit" name ||
27
28 lib.strings.hasSuffix "/hswaw" name ||
Serge Bazanski2f6c92c2022-07-04 21:02:31 +020029 lib.strings.hasInfix "/hswaw/site" name ||
Piotr Dobrowolski20c6bcb2021-10-16 23:07:29 +020030 lib.strings.hasInfix "/hswaw/laserproxy" name ||
Piotr Dobrowolski9c5d8662022-05-08 02:17:41 +020031 lib.strings.hasInfix "/hswaw/site" name ||
Piotr Dobrowolski20c6bcb2021-10-16 23:07:29 +020032
33 lib.strings.hasSuffix "/BUILD" name ||
34 lib.strings.hasSuffix "/WORKSPACE" name ||
35 lib.strings.hasSuffix "/.bazelrc" name
36 );
37 src = hscloud.root;
38 };
39
Serge Bazanskib1de7572020-10-29 00:43:43 +010040 bazelTarget = "//hswaw/laserproxy";
41 nativeBuildInputs = with pkgs; [
42 git python3 postgresql go
43 ];
44 patches = [
Serge Bazanskib1de7572020-10-29 00:43:43 +010045 ./nix-use-system-go.patch
46 ./nix-disable-workspace-status.patch
47 ];
48
49 removeRulesCC = false;
50 fetchConfigured = true;
51 fetchAttrs = {
Serge Bazanskiae2886b2021-10-16 20:35:21 +020052 # Nicked from nixpkgs' usages of buildBazelPackage in bazel_watcher.
Serge Bazanskib1de7572020-10-29 00:43:43 +010053 preInstall = ''
Serge Bazanskiae2886b2021-10-16 20:35:21 +020054 # Remove the go_sdk (it's just a copy of the go derivation) and all
55 # references to it from the marker files. Bazel does not need to download
56 # this sdk because we have patched the WORKSPACE file to point to the one
57 # currently present in PATH. Without removing the go_sdk from the marker
58 # file, the hash of it will change anytime the Go derivation changes and
59 # that would lead to impurities in the marker files which would result in
60 # a different sha256 for the fetch phase.
Serge Bazanskib1de7572020-10-29 00:43:43 +010061 rm -rf $bazelOut/external/{go_sdk,\@go_sdk.marker}
62 sed -e '/^FILE:@go_sdk.*/d' -i $bazelOut/external/\@*.marker
Serge Bazanskiae2886b2021-10-16 20:35:21 +020063
64 # Retains go build input markers
Serge Bazanskib1de7572020-10-29 00:43:43 +010065 chmod -R 755 $bazelOut/external/{bazel_gazelle_go_repository_cache,@\bazel_gazelle_go_repository_cache.marker}
66 rm -rf $bazelOut/external/{bazel_gazelle_go_repository_cache,@\bazel_gazelle_go_repository_cache.marker}
Serge Bazanskiae2886b2021-10-16 20:35:21 +020067
68 # Remove the gazelle tools, they contain go binaries that are built
69 # non-deterministically. As long as the gazelle version matches the tools
70 # should be equivalent.
Serge Bazanskib1de7572020-10-29 00:43:43 +010071 rm -rf $bazelOut/external/{bazel_gazelle_go_repository_tools,\@bazel_gazelle_go_repository_tools.marker}
72 sed -e '/^FILE:@bazel_gazelle_go_repository_tools.*/d' -i $bazelOut/external/\@*.marker
73 '';
vuko5319e612021-12-28 18:45:14 +010074 sha256 = "sha256-WbM9+9Pt//21MCwb/zVro29uKVdNXHnWpuh7kILUbco=";
Serge Bazanskib1de7572020-10-29 00:43:43 +010075 };
76 buildAttrs = {
77 inherit patches;
78 installPhase = ''
79 install -Dm755 bazel-bin/hswaw/laserproxy/*/laserproxy $out/bin/laserproxy
80 '';
81 };
82}