mirror of
https://github.com/akvorado/akvorado.git
synced 2025-12-11 22:14:02 +01:00
Some checks failed
CI / 🤖 Check dependabot status (push) Has been cancelled
CI / 🐧 Test on Linux (${{ github.ref_type == 'tag' }}, misc) (push) Has been cancelled
CI / 🐧 Test on Linux (coverage) (push) Has been cancelled
CI / 🐧 Test on Linux (regular) (push) Has been cancelled
CI / ❄️ Build on Nix (push) Has been cancelled
CI / 🍏 Build and test on macOS (push) Has been cancelled
CI / 🧪 End-to-end testing (push) Has been cancelled
CI / 🔍 Upload code coverage (push) Has been cancelled
CI / 🔬 Test only Go (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 20) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 22) (push) Has been cancelled
CI / 🔬 Test only JS (${{ needs.dependabot.outputs.package-ecosystem }}, 24) (push) Has been cancelled
CI / ⚖️ Check licenses (push) Has been cancelled
CI / 🐋 Build Docker images (push) Has been cancelled
CI / 🐋 Tag Docker images (push) Has been cancelled
CI / 🚀 Publish release (push) Has been cancelled
Update Nix dependency hashes / Update dependency hashes (push) Has been cancelled
Update Go toolchain / Update Go toolchain (push) Has been cancelled
Update Nix flake.lock / Update Nix lockfile (asn2org) (push) Has been cancelled
Update Nix flake.lock / Update Nix lockfile (iana-assignments) (push) Has been cancelled
Update Nix flake.lock / Update Nix lockfile (nixpkgs) (push) Has been cancelled
Like for other targets, we use precompiled BPF programs. Keep it in the development environment.
163 lines
5.7 KiB
Nix
163 lines
5.7 KiB
Nix
{
|
|
inputs = {
|
|
nixpkgs.url = "nixpkgs";
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
asn2org = {
|
|
url = "github:vincentbernat/asn2org/gh-pages";
|
|
flake = false;
|
|
};
|
|
iana-assignments = {
|
|
url = "github:larseggert/iana-assignments";
|
|
flake = false;
|
|
};
|
|
};
|
|
outputs = { self, nixpkgs, flake-utils, asn2org, iana-assignments }:
|
|
flake-utils.lib.eachDefaultSystem (system:
|
|
let
|
|
pkgs = import nixpkgs {
|
|
inherit system;
|
|
};
|
|
l = builtins // pkgs.lib;
|
|
nodejs = pkgs.nodejs_20;
|
|
pnpm = pkgs.pnpm_10;
|
|
go = pkgs.go_latest;
|
|
frontend = pkgs.stdenvNoCC.mkDerivation rec {
|
|
name = "akvorado-frontend";
|
|
src = ./console/frontend;
|
|
nativeBuildInputs = [
|
|
nodejs
|
|
pnpm.configHook
|
|
];
|
|
|
|
pnpmDeps = pnpm.fetchDeps {
|
|
inherit src;
|
|
pname = name;
|
|
buildInputs = [ nodejs ];
|
|
fetcherVersion = 2;
|
|
hash = l.readFile ./nix/npmDepsHash.txt;
|
|
};
|
|
|
|
buildPhase = ''
|
|
pnpm run build
|
|
'';
|
|
installPhase = ''
|
|
mkdir $out
|
|
cp -r node_modules $out/node_modules
|
|
cp -r ../data/frontend $out/data
|
|
'';
|
|
};
|
|
ianaServiceNames = pkgs.runCommand "service-names-port-numbers.csv" {} ''
|
|
> $out echo name,port,protocol
|
|
>> $out \
|
|
${pkgs.xmlstarlet}/bin/xmlstarlet sel -t -m "_:registry/_:record[_:name and _:number]" \
|
|
-v _:name -o , \
|
|
-v _:number -o , \
|
|
-v _:protocol -o , -n \
|
|
${iana-assignments}/service-names-port-numbers/service-names-port-numbers.xml
|
|
'';
|
|
backend = pkgs.buildGoModule.override { inherit go; } {
|
|
doCheck = false;
|
|
name = "akvorado";
|
|
src = ./.;
|
|
vendorHash = l.readFile ./nix/vendorHash.txt;
|
|
proxyVendor = true; # generated code may contain additional dependencies
|
|
nativeBuildInputs = [ pkgs.zip ];
|
|
buildPhase = ''
|
|
cp -r ${frontend}/node_modules console/frontend/node_modules
|
|
cp -r ${frontend}/data console/data/frontend
|
|
|
|
touch .fmt-js~ .fmt.go~ .lint-js~ .lint-go~
|
|
find . -print0 | xargs -0 touch -d @0
|
|
|
|
export XDG_CACHE_HOME=$TMPDIR
|
|
make all \
|
|
BUF=${pkgs.buf}/bin/buf \
|
|
ASNS_URL=${asn2org}/asns.csv \
|
|
SERVICES_URL=${ianaServiceNames}
|
|
'';
|
|
installPhase = ''
|
|
mkdir -p $out/bin
|
|
cp bin/akvorado $out/bin/.
|
|
'';
|
|
};
|
|
in
|
|
rec {
|
|
apps = l.attrsets.mapAttrs
|
|
(name: value:
|
|
let
|
|
script = pkgs.writeShellScriptBin name value;
|
|
in
|
|
{
|
|
type = "app";
|
|
program = "${script}/bin/${name}";
|
|
})
|
|
rec {
|
|
# Update various hashes
|
|
update-vendorHash = ''
|
|
sha256=$(2>&1 nix build --no-link .#backend.goModules \
|
|
| ${pkgs.gnused}/bin/sed -nE "s/\s+got:\s+(sha256-.*)/\1/p")
|
|
[[ -z "$sha256" ]] || echo $sha256 > nix/vendorHash.txt
|
|
'';
|
|
update-npmDepsHash = ''
|
|
oldSha256=$(cat nix/npmDepsHash.txt)
|
|
echo sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= > nix/npmDepsHash.txt
|
|
sha256=$(2>&1 nix build --no-link .#frontend.pnpmDeps \
|
|
| ${pkgs.gnused}/bin/sed -nE "s/\s+got:\s+(sha256-.*)/\1/p")
|
|
[[ -z "$sha256" ]] && echo $oldSha256 || echo $sha256 > nix/npmDepsHash.txt
|
|
'';
|
|
update = ''
|
|
${update-vendorHash}
|
|
${update-npmDepsHash}
|
|
'';
|
|
# Run nix build depending on TARGETPLATFORM value (for Docker).
|
|
build = ''
|
|
case $TARGETPLATFORM in
|
|
linux/amd64/v*) target=packages.x86_64-linux.backend-amd64v''${TARGETPLATFORM##*/v} ;;
|
|
linux/amd64*) target=packages.x86_64-linux.backend ;;
|
|
linux/arm64/v*) target=packages.aarch64-linux.backend-arm64v''${TARGETPLATFORM##*/v}_0 ;;
|
|
linux/arm64*) target=packages.aarch64-linux.backend ;;
|
|
*)
|
|
>&2 echo "Unknown target platform $TARGETPLATFORM"
|
|
exit 1
|
|
;;
|
|
esac
|
|
nix build --print-build-logs ".#$target"
|
|
'';
|
|
};
|
|
|
|
packages = {
|
|
inherit backend frontend;
|
|
default = backend;
|
|
} // (l.optionalAttrs (system == "x86_64-linux")
|
|
(l.attrsets.listToAttrs (l.lists.map
|
|
(v: {
|
|
name = "backend-amd64${v}";
|
|
value = backend.overrideAttrs (old: { env.GOAMD64 = v; });
|
|
})
|
|
# See https://go.dev/wiki/MinimumRequirements#amd64
|
|
[ "v1" "v2" "v3" "v4" ])))
|
|
// (l.optionalAttrs (system == "aarch64-linux")
|
|
(l.attrsets.listToAttrs (l.lists.map
|
|
(v: {
|
|
name = "backend-arm64${l.strings.replaceStrings ["."] ["_"] v}";
|
|
value = backend.overrideAttrs (old: { env.GOARM64 = v; });
|
|
})
|
|
# See https://go.dev/wiki/MinimumRequirements#arm64
|
|
((l.lists.map (m: "v8.${l.toString m}") (l.lists.range 0 9)) ++
|
|
(l.lists.map (m: "v9.${l.toString m}") (l.lists.range 0 5))))));
|
|
|
|
# Activate with "nix develop"
|
|
devShells.default = pkgs.mkShell {
|
|
name = "akvorado-dev";
|
|
nativeBuildInputs = [
|
|
go
|
|
nodejs
|
|
pkgs.git
|
|
pkgs.curl
|
|
pkgs.zip
|
|
pkgs.clang
|
|
];
|
|
};
|
|
});
|
|
}
|