Skip to content

Validation & CI

Run these checks from the repository root:

Terminal window
make validate
make smoke
make smoke-install
make docs-build

make validate uses Python for structural Lua checks, local require paths, extra IDs, plugin loading rules, shipped pins for every plugin, documented defaults, required files, and docs links. It syntax-checks the installers and smoke runners. The Python checks are heuristics, not a Lua parser or proof of runtime correctness.

make smoke requires Neovim 0.12+ and network access for plugin installation. It creates temporary XDG config, data, state, and cache directories, copies the committed lockfile (the shipped pins), and tests this working tree against those pins. It does not modify the checkout’s lockfile or existing user/test state. NVIM_BIN can select a particular Neovim executable.

The suite checks first and subsequent startup, configuration and reload, keymaps, completion pairs, real fff file/grep and Snacks picker UI, splash rendering, every public command, extras state, update/upgrade/rollback contracts, directory startup, and focused regressions, including real Conform/Blink option reload and native helper availability. Focused checks also cover TypeScript SDK lookup/repair, native shortcut discovery, terminal recovery, formatting ranges and per-filetype options, config-function deletions, and language-stack activation in either order. Every shipped Lua module is syntax-compiled; each extra is built and validated independently. Lua assertion failures exit nonzero.

Further regressions cover extras-menu selection and resizing, invalid keymap modes, external config-file replacement, and independent linter failures.

Command tests use controlled substitutes for network updates, picker dispatch, and some tool/plugin operations. Health output is diagnostic; a warning is not by itself a failed test. Passing smoke does not verify every external language server, debugger adapter, AI account, terminal image protocol, or combination of extras. Exercise the specific language/project or external service when changing its integration. A restart is required to verify extras unloading.

make smoke-install runs the installer in temporary XDG directories, checks the sparse checkout, boots it, then overlays tracked and new non-ignored runtime files from the working tree and boots again. This checks both the committed install and local runtime changes. It also tests installer refusal to overwrite existing paths.

make docs-build requires Node.js 22.12+ and installed docs dependencies (make docs-install). CI uses Node.js 24. It builds all documentation routes, search indexes, and generated install/social assets. Preview the site when changing its layout or upgrading Astro/Starlight.

GitHub Actions runs static, runtime, and installer checks on pushes to main and pull requests. Stable Neovim smoke and installer checks are required; the nightly smoke job is advisory and does not gate stable changes. The docs workflow builds for docs/installer/workflow changes and deploys successful main builds to GitHub Pages. Local checks help catch regressions; CI also depends on its OS, network, and upstream services.