Setup runner cli
Version updated for https://github.com/kjanat/runner to version v0.20.0.
- This action is used across all versions by 0 repositories.
Action Type
This is a Node action using Node version 24.
Go to the GitHub Marketplace to find the latest changes.
Action Summary
runner is an action designed to help developers quickly identify and run commands across multiple task runners and package managers within their projects. It provides a tab completion feature that suggests available tasks and packages, reducing the need to remember specific command structures or configurations for different repositories. This tool enhances efficiency by automating the process of selecting the correct runner and command for executing tasks, making it easier to manage and run project-related commands without manual configuration.
What’s Changed
Added
[install].on_collision(RUNNER_INSTALL_ON_COLLISION) decides whatrunner installdoes when two detected package managers write the same directory."resolve"(the default) installs with the PM already resolved for that ecosystem (lockfile,packageManager,[pm].node) and skips the other, printing which one it skipped;"error"refuses to pick and exits 2. Under"resolve", naming both writers in[install].pmsstill runs both;"error"refuses the collision even when both writers are explicitly named.
Changed
- Package managers that write the same install directory no longer install
concurrently.
bun installanddeno installover onenode_modules/now run one after another; managers with their own directories (cargo, uv, go) still overlap. - The install-dir collision warning is confined to
runner installanddoctor, the surfaces that can act on it. It was reachingrun,list,info, and every nested runner process, none of which install anything.doctoralso reports the install plan (which PM installs a shared directory, and which is shadowed) as aconflicts[]entry alongside duplicate task names. - Detection warnings are printed once per project, not once per runner process.
A
package.jsonscript that callsrunneragain ("fmt": "runner run lint:fix fmt:dprint") no longer repeats its parent’s warnings.
Fixed
- Deno counts as a
node_moduleswriter in any project with apackage.json, not only one that setsnodeModulesDirexplicitly. Deno’s documented default for apackage.jsonproject is the manualnode_modulesmode, sodeno installwas writing the same tree as bun/npm/pnpm/yarn while runner reported no collision at all. - Two node lockfiles in one directory are settled by which one git tracks
before falling back to the fixed
bun > pnpm > yarn > npmpreference. A project that commitsbun.lockand gitignorespackage-lock.jsonis a bun project, whichever way the preference order happens to point. Committed status is the signal, not ignore status: a gitignored lockfile is ambiguous (it can mean “we never commit lockfiles”, which is evidence the manager is used). One lockfile still answers by itself, and no git process is spawned unless a directory holds two or more. - A prerelease package-manager build (
bun@1.3.0-canary) satisfies adevEnginesrange like>=1.2instead of reporting a version mismatch. Semver excludes prereleases from ranges that don’t name one, which is correct for a dependency solver and wrong for a “is the installed tool new enough” check. runner installno longer orphans a running package manager when waiting on another one fails.
What’s Changed
- feat(install): resolve install-dir collisions by @kjanat in https://github.com/kjanat/runner/pull/88
Full Changelog: https://github.com/kjanat/runner/compare/v0.19.1...v0.20.0