12.nixvim/ci/parse.nix
Austin Horstman b95b90f8c9 ci: add nix and lix parse checks
Co-authored-by: Wolfgang Walther <walther@technowledgy.de>
Co-authored-by: piegames <git@piegames.de>
2026-04-22 01:19:39 +00:00

50 lines
1.4 KiB
Nix

{
lib,
nix,
pipeOperatorFlag,
runCommand,
}:
runCommand "nix-parse-${nix.name}"
{
nativeBuildInputs = [ nix ];
nixvim =
with lib.fileset;
toSource {
root = ../.;
fileset = fileFilter (file: file.hasExt "nix") ../.;
};
inherit pipeOperatorFlag;
}
''
export HOME="$TMPDIR"
export XDG_CONFIG_HOME="$TMPDIR"
export NIX_CONF_DIR="$TMPDIR/nix-conf"
parseLog="$TMPDIR/nix-parse.log"
mkdir -p "$NIX_CONF_DIR"
: > "$NIX_CONF_DIR/nix.conf"
export NIX_STORE_DIR="$TMPDIR/store"
export NIX_STATE_DIR="$TMPDIR/state"
nix-store --init
cd "$nixvim"
# This will only show the first parse error, not all of them.
# That's fine, because the other CI jobs will report in more detail.
# This job is about checking parsing across different
# implementations / versions, not about providing the best DX.
# Returning all parse errors requires significantly more resources.
if ! find . -type f -iname '*.nix' -print0 | xargs -0 -P "$(nproc)" nix-instantiate --extra-experimental-features "$pipeOperatorFlag" --parse > /dev/null 2> "$parseLog"; then
cat "$parseLog" >&2
echo "Parse failed in nix-instantiate." >&2
exit 1
fi
if grep -q "^warning:" "$parseLog"; then
cat "$parseLog" >&2
echo "Failing due to warnings in stderr" >&2
exit 1
fi
touch "$out"
''