diff --git a/flake-modules/dev/devshell.nix b/flake-modules/dev/devshell.nix index dd2a8731..94665c40 100644 --- a/flake-modules/dev/devshell.nix +++ b/flake-modules/dev/devshell.nix @@ -7,6 +7,7 @@ lib, pkgs, config, + self', system, ... }: @@ -44,9 +45,27 @@ text = builtins.readFile ./launch-test.sh; }; + + tests = + let + checks' = self'.checks; + names = builtins.filter (n: builtins.match "test-.*" n != null) (builtins.attrNames checks'); + in + builtins.listToAttrs ( + builtins.concatMap ( + checkName: + map (testName: { + name = testName; + value = "${checkName}.passthru.entries.${testName}"; + }) (builtins.attrNames checks'.${checkName}.passthru.entries) + ) names + ); in '' - NIXVIM_SYSTEM=${system} NIXVIM_NIX_COMMAND=${nix} ${lib.getExe launchTest} "$@" + export NIXVIM_SYSTEM=${system} + export NIXVIM_NIX_COMMAND=${nix} + export NIXVIM_TESTS=${pkgs.writers.writeJSON "tests.json" tests} + ${lib.getExe launchTest} "$@" ''; } { diff --git a/flake-modules/dev/launch-test.sh b/flake-modules/dev/launch-test.sh index f90aa86d..30eceb46 100755 --- a/flake-modules/dev/launch-test.sh +++ b/flake-modules/dev/launch-test.sh @@ -36,8 +36,7 @@ nix_args=() interactive=false mk_test_list() { - nix eval ".#checks.${system}" --apply builtins.attrNames --json | - jq -r 'map(select(startswith("test-")))[]' + jq -r 'keys[]' "${NIXVIM_TESTS}" } while true; do @@ -72,9 +71,26 @@ while true; do esac done +get_tests() { + # Convert bash array to jq query + # e.g. (foo bar baz) => ."foo",."bar",."baz" + readarray -t queries < <( + for test in "$@"; do + echo '."'"$test"'"' + done + ) + query=$( + IFS=, + echo "${queries[*]}" + ) + for test in $(jq -r "${query}" "${NIXVIM_TESTS}"); do + echo "checks.${system}.${test}" + done +} + run_tests() { - # Add the prefix "checks.${system}." to each argument - if ! "${NIXVIM_NIX_COMMAND}" build "${nix_args[@]}" --no-link --file . "${@/#/checks.${system}.}"; then + readarray -t test_list < <(get_tests "$@") + if ! "${NIXVIM_NIX_COMMAND}" build "${nix_args[@]}" --no-link --file . "${test_list[@]}"; then echo "Test failure" >&2 exit 1 fi