biglybt: 3.5.0.0 -> 3.6.0.0
[NixPkgs.git] / pkgs / development / tools / open-policy-agent / default.nix
blobc175d788b355f86e9d106863ad8e1c72bcf914f2
1 { lib
2 , stdenv
3 , buildGoModule
4 , fetchFromGitHub
5 , installShellFiles
7 , enableWasmEval ? false
8 }:
10 assert enableWasmEval && stdenv.isDarwin -> builtins.throw "building with wasm on darwin is failing in nixpkgs";
12 buildGoModule rec {
13   pname = "open-policy-agent";
14   version = "0.63.0";
16   src = fetchFromGitHub {
17     owner = "open-policy-agent";
18     repo = "opa";
19     rev = "v${version}";
20     hash = "sha256-yXYyRl0ZDgS6eB2pB0Iqi3DiBGcIO3Vdet9RLSOczkU=";
21   };
23   vendorHash = null;
25   nativeBuildInputs = [ installShellFiles ];
27   subPackages = [ "." ];
29   ldflags = [ "-s" "-w" "-X github.com/open-policy-agent/opa/version.Version=${version}" ];
31   tags = lib.optional enableWasmEval (
32     builtins.trace
33       ("Warning: enableWasmEval breaks reproducability, "
34         + "ensure you need wasm evaluation. "
35         + "`opa build` does not need this feature.")
36       "opa_wasm");
38   checkFlags = lib.optionals (!enableWasmEval) [
39     "-skip=TestRegoTargetWasmAndTargetPluginDisablesIndexingTopdownStages"
40   ];
42   preCheck = ''
43     # Feed in all but the e2e tests for testing
44     # This is because subPackages above limits what is built to just what we
45     # want but also limits the tests
46     # Also avoid wasm tests on darwin due to wasmtime-go build issues
47     getGoDirs() {
48       go list ./... | grep -v -e e2e ${lib.optionalString stdenv.isDarwin "-e wasm"}
49     }
50   '' + lib.optionalString stdenv.isDarwin ''
51     # remove tests that have "too many open files"/"no space left on device" issues on darwin in hydra
52     rm server/server_test.go
53   '';
55   postInstall = ''
56     installShellCompletion --cmd opa \
57       --bash <($out/bin/opa completion bash) \
58       --fish <($out/bin/opa completion fish) \
59       --zsh <($out/bin/opa completion zsh)
60   '';
62   doInstallCheck = true;
63   installCheckPhase = ''
64     runHook preInstallCheck
66     $out/bin/opa --help
67     $out/bin/opa version | grep "Version: ${version}"
69     ${lib.optionalString enableWasmEval ''
70       # If wasm is enabled verify it works
71       $out/bin/opa eval -t wasm 'trace("hello from wasm")'
72     ''}
74     runHook postInstallCheck
75   '';
77   meta = with lib; {
78     mainProgram = "opa";
79     homepage = "https://www.openpolicyagent.org";
80     changelog = "https://github.com/open-policy-agent/opa/blob/v${version}/CHANGELOG.md";
81     description = "General-purpose policy engine";
82     longDescription = ''
83       The Open Policy Agent (OPA, pronounced "oh-pa") is an open source, general-purpose policy engine that unifies
84       policy enforcement across the stack. OPA provides a high-level declarative language that let’s you specify policy
85       as code and simple APIs to offload policy decision-making from your software. You can use OPA to enforce policies
86       in microservices, Kubernetes, CI/CD pipelines, API gateways, and more.
87     '';
88     license = licenses.asl20;
89     maintainers = with maintainers; [ lewo jk ];
90   };