biglybt: 3.5.0.0 -> 3.6.0.0
[NixPkgs.git] / pkgs / servers / http / pomerium / default.nix
blob6fe47f98539298ca362ca2e2c2deae50430a27cb
1 { buildGoModule
2 , fetchFromGitHub
3 , callPackage
4 , lib
5 , envoy
6 , mkYarnPackage
7 , fetchYarnDeps
8 , nixosTests
9 , pomerium-cli
12 let
13   inherit (lib) concatStringsSep concatMap id mapAttrsToList;
15 buildGoModule rec {
16   pname = "pomerium";
17   version = "0.25.2";
18   src = fetchFromGitHub {
19     owner = "pomerium";
20     repo = "pomerium";
21     rev = "v${version}";
22     hash = "sha256-JateIiVao5IiPXmphA5+PlzB2XtP6zRR4rURqXSqJ6Q=";
23   };
25   vendorHash = "sha256-GdeZkKkENacc11FmEAFUfX9efInfhpv2Lz0/3CtixFQ=";
27   ui = mkYarnPackage {
28     inherit version;
29     src = "${src}/ui";
31     packageJSON = ./package.json;
32     offlineCache = fetchYarnDeps {
33       yarnLock = "${src}/ui/yarn.lock";
34       sha256 = lib.fileContents ./yarn-hash;
35     };
37     buildPhase = ''
38       runHook preBuild
39       yarn --offline build
40       runHook postBuild
41     '';
43     installPhase = ''
44       runHook preInstall
45       cp -R deps/pomerium/dist $out
46       runHook postInstall
47     '';
49     doDist = false;
50   };
52   subPackages = [
53     "cmd/pomerium"
54   ];
56   # patch pomerium to allow use of external envoy
57   patches = [ ./external-envoy.diff ];
59   ldflags = let
60     # Set a variety of useful meta variables for stamping the build with.
61     setVars = {
62       "github.com/pomerium/pomerium/internal/version" = {
63         Version = "v${version}";
64         BuildMeta = "nixpkgs";
65         ProjectName = "pomerium";
66         ProjectURL = "github.com/pomerium/pomerium";
67       };
68       "github.com/pomerium/pomerium/pkg/envoy" = {
69         OverrideEnvoyPath = "${envoy}/bin/envoy";
70       };
71     };
72     concatStringsSpace = list: concatStringsSep " " list;
73     mapAttrsToFlatList = fn: list: concatMap id (mapAttrsToList fn list);
74     varFlags = concatStringsSpace (
75       mapAttrsToFlatList (package: packageVars:
76         mapAttrsToList (variable: value:
77           "-X ${package}.${variable}=${value}"
78         ) packageVars
79       ) setVars);
80   in [
81     "${varFlags}"
82   ];
84   preBuild = ''
85     # Replace embedded envoy with nothing.
86     # We set OverrideEnvoyPath above, so rawBinary should never get looked at
87     # but we still need to set a checksum/version.
88     rm pkg/envoy/files/files_{darwin,linux}*.go
89     cat <<EOF >pkg/envoy/files/files_external.go
90     package files
92     import _ "embed" // embed
94     var rawBinary []byte
96     //go:embed envoy.sha256
97     var rawChecksum string
99     //go:embed envoy.version
100     var rawVersion string
101     EOF
102     sha256sum '${envoy}/bin/envoy' > pkg/envoy/files/envoy.sha256
103     echo '${envoy.version}' > pkg/envoy/files/envoy.version
105     # put the built UI files where they will be picked up as part of binary build
106     cp -r ${ui}/* ui/dist
107   '';
109   installPhase = ''
110     install -Dm0755 $GOPATH/bin/pomerium $out/bin/pomerium
111   '';
113   passthru = {
114     tests = {
115       inherit (nixosTests) pomerium;
116       inherit pomerium-cli;
117     };
118     updateScript = ./updater.sh;
119   };
121   meta = with lib; {
122     homepage = "https://pomerium.io";
123     description = "Authenticating reverse proxy";
124     mainProgram = "pomerium";
125     license = licenses.asl20;
126     maintainers = with maintainers; [ lukegb devusb ];
127     platforms = [ "x86_64-linux" "aarch64-linux" ];
128   };