mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-11-09 16:18:34 +01:00
143 lines
4.1 KiB
Nix
143 lines
4.1 KiB
Nix
{
|
|
lib,
|
|
stdenv,
|
|
buildGoModule,
|
|
fetchFromGitHub,
|
|
installShellFiles,
|
|
nixosTests,
|
|
externalPlugins ? [ ],
|
|
vendorHash ? "sha256-pU8INVCKjYfAFOeobM7N1XCMHod7Kz0N5NKwpMpA2lU=",
|
|
}:
|
|
|
|
let
|
|
attrsToSources = attrs: map ({ repo, version, ... }: "${repo}@${version}") attrs;
|
|
in
|
|
buildGoModule (finalAttrs: {
|
|
pname = "coredns";
|
|
version = "1.13.1";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "coredns";
|
|
repo = "coredns";
|
|
tag = "v${finalAttrs.version}";
|
|
hash = "sha256-rWa4xjHRREoMtvPqW6ZP6Ym9qNTa0l8Opd15FsmxraI=";
|
|
};
|
|
|
|
inherit vendorHash;
|
|
|
|
nativeBuildInputs = [ installShellFiles ];
|
|
|
|
outputs = [
|
|
"out"
|
|
"man"
|
|
];
|
|
|
|
# Override the go-modules fetcher derivation to fetch plugins
|
|
modBuildPhase = ''
|
|
cp plugin.cfg plugin.cfg.orig
|
|
${
|
|
(lib.concatMapStringsSep "\n" (
|
|
plugin:
|
|
let
|
|
position = plugin.position or "end-of-file";
|
|
formatPlugin = { name, repo, ... }: "${name}:${repo}";
|
|
in
|
|
if position == "end-of-file" then
|
|
"echo '${formatPlugin plugin}' >> plugin.cfg"
|
|
else if position == "start-of-file" then
|
|
"sed -i '1i ${formatPlugin plugin}' plugin.cfg"
|
|
else if lib.hasAttrByPath [ "before" ] position then
|
|
''
|
|
if ! grep -q '^${position.before}:' plugin.cfg; then
|
|
echo 'Failed to insert ${plugin.name} before ${position.before} in plugin.cfg: ${position.before} is not in plugin.cfg'
|
|
exit 1
|
|
fi
|
|
sed -i '/^${position.before}:/i ${formatPlugin plugin}' plugin.cfg
|
|
''
|
|
else if lib.hasAttrByPath [ "after" ] position then
|
|
''
|
|
if ! grep -q '^${position.after}:' plugin.cfg; then
|
|
echo 'Failed to insert ${plugin.name} after ${position.after} in plugin.cfg: ${position.after} is not in plugin.cfg'
|
|
exit 1
|
|
fi
|
|
sed -i '/^${position.after}:/a ${formatPlugin plugin}' plugin.cfg
|
|
''
|
|
else
|
|
throw ''
|
|
Unsupported position value in externalPlugin:
|
|
${builtins.toJSON plugin}.
|
|
Valid values for position attr are:
|
|
- position = "end-of-file" (the default)
|
|
- position = "start-of-file"
|
|
- position.before = "{other plugin}"
|
|
- position.after = "{other plugin}"
|
|
''
|
|
) externalPlugins)
|
|
}
|
|
diff -u plugin.cfg.orig plugin.cfg || true
|
|
for src in ${toString (attrsToSources externalPlugins)}; do go get $src; done
|
|
GOOS= GOARCH= go generate
|
|
go mod tidy
|
|
go mod vendor
|
|
'';
|
|
|
|
modInstallPhase = ''
|
|
mv -t vendor go.mod go.sum plugin.cfg
|
|
cp -r --reflink=auto vendor "$out"
|
|
'';
|
|
|
|
preBuild = ''
|
|
chmod -R u+w vendor
|
|
mv -t . vendor/go.{mod,sum} vendor/plugin.cfg
|
|
|
|
GOOS= GOARCH= go generate
|
|
'';
|
|
|
|
postPatch = ''
|
|
substituteInPlace test/file_cname_proxy_test.go \
|
|
--replace-fail \
|
|
"TestZoneExternalCNAMELookupWithProxy" \
|
|
"SkipZoneExternalCNAMELookupWithProxy"
|
|
|
|
substituteInPlace test/readme_test.go \
|
|
--replace-fail "TestReadme" "SkipReadme"
|
|
|
|
# this test fails if any external plugins were imported.
|
|
# it's a lint rather than a test of functionality, so it's safe to disable.
|
|
substituteInPlace test/presubmit_test.go \
|
|
--replace-fail "TestImportOrdering" "SkipImportOrdering"
|
|
''
|
|
+ lib.optionalString stdenv.hostPlatform.isDarwin ''
|
|
# loopback interface is lo0 on macos
|
|
sed -E -i 's/\blo\b/lo0/' plugin/bind/setup_test.go
|
|
|
|
# test is apparently outdated but only exhibits this on darwin
|
|
substituteInPlace test/corefile_test.go \
|
|
--replace-fail "TestCorefile1" "SkipCorefile1"
|
|
'';
|
|
|
|
__darwinAllowLocalNetworking = true;
|
|
|
|
postInstall = ''
|
|
installManPage man/*
|
|
'';
|
|
|
|
passthru.tests = {
|
|
kubernetes-single-node = nixosTests.kubernetes.dns-single-node;
|
|
kubernetes-multi-node = nixosTests.kubernetes.dns-multi-node;
|
|
};
|
|
|
|
meta = {
|
|
homepage = "https://coredns.io";
|
|
description = "DNS server that runs middleware";
|
|
mainProgram = "coredns";
|
|
license = lib.licenses.asl20;
|
|
maintainers = with lib.maintainers; [
|
|
deltaevo
|
|
djds
|
|
rtreffer
|
|
rushmorem
|
|
];
|
|
};
|
|
})
|