-
-
Notifications
You must be signed in to change notification settings - Fork 19.5k
Expand file tree
/
Copy pathpackage.nix
More file actions
136 lines (115 loc) · 4.13 KB
/
Copy pathpackage.nix
File metadata and controls
136 lines (115 loc) · 4.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
{
lib,
stdenv,
buildGoModule,
fetchFromGitHub,
installShellFiles,
enableWasmEval ? false,
}:
assert
enableWasmEval && stdenv.hostPlatform.isDarwin
-> throw "building with wasm on darwin is failing in nixpkgs";
buildGoModule (finalAttrs: {
pname = "open-policy-agent";
version = "1.16.2";
src = fetchFromGitHub {
owner = "open-policy-agent";
repo = "opa";
tag = "v${finalAttrs.version}";
hash = "sha256-f9t/BB0ldSUTaApjM75W9nw7jRC8Hp1t/KFRM/ky67s=";
};
vendorHash = "sha256-m+Mb2Llny7O9cfn8Js7MEaeYM9zC/CwWBAuliWE7G1E=";
nativeBuildInputs = [ installShellFiles ];
subPackages = [ "." ];
ldflags = [
"-s"
"-X github.com/open-policy-agent/opa/version.Version=${finalAttrs.version}"
];
tags = lib.optional enableWasmEval (
builtins.trace (
"Warning: enableWasmEval breaks reproducability, "
+ "ensure you need wasm evaluation. "
+ "`opa build` does not need this feature."
) "opa_wasm"
);
checkFlags =
let
skippedTests = [
# Skip tests that require network, not available in the nix sandbox
"TestInterQueryCache_ClientError"
"TestIntraQueryCache_ClientError"
"TestSSOCredentialService"
# This test depends on the metrics available in go not changing. This is a bit
# too unstable for us updating go independently.
"TestJSONSerialization"
# Flaky
"TestGraphQLParseSchemaAlloc"
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
# Skip tests that require network, not available in the darwin sandbox
"TestHTTPSClient"
"TestHTTPSNoClientCerts"
"TestSocketHTTPGetRequest"
# Flaky
"TestBenchMainWithBundleRegoVersion"
"TestClientTLSWithCustomCACert"
"TestECR"
"TestManagerWithOPATelemetryUpdateLoop"
]
++ lib.optionals (!enableWasmEval) [
"TestRegoTargetWasmAndTargetPluginDisablesIndexingTopdownStages"
];
in
[ "-skip=^${builtins.concatStringsSep "$|^" skippedTests}$" ];
preCheck =
# Feed in all but the e2e tests for testing
# This is because subPackages above limits what is built to just what we
# want but also limits the tests
# Also avoid wasm tests on darwin due to wasmtime-go build issues
''
getGoDirs() {
go list ./... | grep -v -e e2e ${lib.optionalString stdenv.hostPlatform.isDarwin "-e wasm"}
}
''
# remove tests that have "too many open files"/"no space left on device" issues on darwin in hydra
+ lib.optionalString stdenv.hostPlatform.isDarwin ''
rm v1/server/server_test.go
rm v1/server/server_bench_test.go
'';
postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
installShellCompletion --cmd opa \
--bash <($out/bin/opa completion bash) \
--fish <($out/bin/opa completion fish) \
--zsh <($out/bin/opa completion zsh)
'';
doInstallCheck = true;
installCheckPhase = ''
runHook preInstallCheck
$out/bin/opa --help
$out/bin/opa version | grep "Version: ${finalAttrs.version}"
${lib.optionalString enableWasmEval ''
# If wasm is enabled verify it works
$out/bin/opa eval -t wasm 'trace("hello from wasm")'
''}
runHook postInstallCheck
'';
# Required for tests that need networking
__darwinAllowLocalNetworking = true;
meta = {
mainProgram = "opa";
homepage = "https://www.openpolicyagent.org";
changelog = "https://github.com/open-policy-agent/opa/blob/v${finalAttrs.version}/CHANGELOG.md";
description = "General-purpose policy engine";
longDescription = ''
The Open Policy Agent (OPA, pronounced "oh-pa") is an open source, general-purpose policy engine that unifies
policy enforcement across the stack. OPA provides a high-level declarative language that let’s you specify policy
as code and simple APIs to offload policy decision-making from your software. You can use OPA to enforce policies
in microservices, Kubernetes, CI/CD pipelines, API gateways, and more.
'';
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [
lewo
jk
];
};
})