nix-community.nixvim/flake/dev/tests.nix

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

86 lines
2.3 KiB
Nix
Raw Permalink Normal View History

{
lib,
self,
helpers,
...
}:
{
perSystem =
2025-01-19 12:55:15 +00:00
{ pkgs, ... }:
{
checks = pkgs.callPackages ../../tests {
2025-01-19 12:55:15 +00:00
inherit helpers self;
};
};
# Output a build matrix for CI
2025-05-27 15:45:15 +01:00
flake.githubActions =
2025-05-25 23:20:50 +01:00
let
systemsByPrio = [
"x86_64-linux"
"aarch64-linux"
"x86_64-darwin"
"aarch64-darwin"
];
2025-05-28 22:27:07 +01:00
# https://docs.github.com/en/actions/writing-workflows/choosing-where-your-workflow-runs/choosing-the-runner-for-a-job#choosing-github-hosted-runners
2025-05-25 23:20:50 +01:00
githubPlatforms = {
"x86_64-linux" = "ubuntu-24.04";
"aarch64-linux" = "ubuntu-24.04-arm";
2025-05-28 22:27:07 +01:00
"x86_64-darwin" = "macos-13";
"aarch64-darwin" = "macos-15";
2025-05-25 23:20:50 +01:00
};
toGithubBuild = system: {
inherit system;
runner = githubPlatforms.${system} or (throw "System not supported by GitHub Actions: ${system}");
};
getPrimaryBuild =
platforms:
let
systems = builtins.catAttrs "system" platforms;
system = lib.lists.findFirst (
system: builtins.elem system systems
) (throw "No supported system found!") systemsByPrio;
in
toGithubBuild system;
2025-05-27 15:45:15 +01:00
checks = lib.pipe self.checks [
(lib.mapAttrsRecursiveCond (x: !lib.isDerivation x) (
loc: _: {
_type = "check";
build = toGithubBuild (builtins.head loc);
name = lib.attrsets.showAttrPath (builtins.tail loc);
}
))
(lib.collect (lib.isType "check"))
# Tests are handled by a different workflow
(builtins.filter (x: !lib.strings.hasPrefix "test-" x.name))
2025-05-27 15:45:15 +01:00
(lib.groupBy' (builds: x: builds ++ [ x.build ]) [ ] (x: x.name))
(lib.mapAttrsToList (name: builds: { inherit name builds; }))
# Only build one one system per check
2025-05-27 15:45:15 +01:00
# TODO: this is very heavy handed, maybe we want some exceptions?
(map (
matrix:
matrix
// {
2025-05-27 15:45:15 +01:00
builds = [
(getPrimaryBuild matrix.builds)
];
}
))
2025-05-25 23:20:50 +01:00
2025-05-27 15:45:15 +01:00
# Inject per-system attr
(map (
matrix:
matrix
// {
builds = map (build: build // { attr = "checks.${build.system}.${matrix.name}"; }) matrix.builds;
}
))
];
in
{
checksMatrix.include = checks;
};
}