100 lines
3.3 KiB
Nix
100 lines
3.3 KiB
Nix
{
|
|
description = "Kaptan development environment";
|
|
|
|
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
|
|
outputs = { nixpkgs, ... }:
|
|
let
|
|
systems = [
|
|
"x86_64-linux"
|
|
"aarch64-linux"
|
|
];
|
|
forAllSystems = nixpkgs.lib.genAttrs systems;
|
|
perSystem = system:
|
|
let
|
|
pkgs = nixpkgs.legacyPackages.${system};
|
|
groundSuite = pkgs.buildNpmPackage {
|
|
pname = "kaptan-ground-suite";
|
|
version = "0.1.0";
|
|
src = ./ground-suite;
|
|
npmDepsHash = "sha256-l217EpOz2oEBQK6bzJV0DSEdBkK7HIlB4a7JMF+FadA=";
|
|
npmBuildScript = "check";
|
|
PLAYWRIGHT_CHROMIUM_EXECUTABLE = "${pkgs.chromium}/bin/chromium";
|
|
installPhase = ''
|
|
runHook preInstall
|
|
mkdir -p $out/libexec/ground-suite
|
|
cp -R dist node_modules src public scripts tests package.json package-lock.json tsconfig.json tsconfig.app.json vite.config.ts vitest.config.ts playwright.config.ts $out/libexec/ground-suite/
|
|
runHook postInstall
|
|
'';
|
|
};
|
|
groundSuiteCommand = pkgs.writeShellApplication {
|
|
name = "ground-suite";
|
|
runtimeInputs = [ pkgs.nodejs pkgs.coreutils pkgs.chromium ];
|
|
text = ''
|
|
suite_root=${groundSuite}/libexec/ground-suite
|
|
if [ "''${1:-}" = test ]; then
|
|
shift
|
|
test_root=$(mktemp -d -t kaptan-ground-suite-test.XXXXXX)
|
|
trap 'rm -rf "$test_root"' EXIT
|
|
cp -R "$suite_root" "$test_root/suite"
|
|
chmod -R u+w "$test_root/suite"
|
|
cd "$test_root/suite"
|
|
export PLAYWRIGHT_CHROMIUM_EXECUTABLE=${pkgs.chromium}/bin/chromium
|
|
npm test -- "$@"
|
|
exit $?
|
|
fi
|
|
exec node "$suite_root/scripts/server.mjs" "$@"
|
|
'';
|
|
};
|
|
in { inherit pkgs groundSuite groundSuiteCommand; };
|
|
in
|
|
{
|
|
packages = forAllSystems (system:
|
|
let values = perSystem system; in {
|
|
ground-suite = values.groundSuite;
|
|
default = values.groundSuite;
|
|
});
|
|
|
|
apps = forAllSystems (system:
|
|
let values = perSystem system; in {
|
|
ground-suite = {
|
|
type = "app";
|
|
program = "${values.groundSuiteCommand}/bin/ground-suite";
|
|
};
|
|
});
|
|
|
|
checks = forAllSystems (system:
|
|
let values = perSystem system; in {
|
|
ground-suite = values.groundSuite;
|
|
});
|
|
|
|
devShells = forAllSystems (system:
|
|
let
|
|
pkgs = nixpkgs.legacyPackages.${system};
|
|
python = pkgs.python3.withPackages (pythonPackages: with pythonPackages; [
|
|
pymavlink
|
|
pyserial
|
|
]);
|
|
in
|
|
{
|
|
default = pkgs.mkShell {
|
|
packages = [
|
|
pkgs.rustup
|
|
pkgs.dfu-util
|
|
pkgs.mdbook
|
|
pkgs.flutter
|
|
python
|
|
];
|
|
};
|
|
ground-suite = pkgs.mkShell {
|
|
packages = [ pkgs.nodejs ];
|
|
shellHook = ''
|
|
echo "Kaptan Ground Suite development shell (Node $(node --version), npm $(npm --version))"
|
|
echo "Run: cd ground-suite && npm ci && npm run dev"
|
|
echo "SIMULATED DATA ONLY"
|
|
'';
|
|
};
|
|
});
|
|
};
|
|
}
|