runner-run 0.11.0

Universal project task runner
Documentation
[package]
name          = "runner-run"
version       = "0.11.0"
edition       = "2024"
rust-version  = "1.95"
description   = "Universal project task runner"
documentation = "https://docs.rs/runner-run"
readme        = "README.md"
homepage      = "https://runner.kjanat.dev"
repository    = "https://github.com/kjanat/runner/"
license       = "MIT"
keywords      = ["automation", "build-tool", "cli", "task-runner"]
categories    = ["command-line-utilities", "development-tools"]
build         = "build.rs"
include       = ["/CHANGELOG.md", "/LICENSE*", "/README.md", "/build.rs", "/examples", "/schemas", "/src", "/tests"]
default-run   = "runner"
autobins      = false

[[package.metadata.authors]]
name  = "Kaj Kowalski"
email = "info+runner@kajkowalski.nl"

[package.metadata.npm]
name        = "runner-run"
subpkgscope = "@runner-run"
bugs        = { "url" = "https://github.com/kjanat/runner/issues" }
repository  = { "type" = "git", "url" = "git+https://github.com/kjanat/runner.git" }
engines     = { "node" = ">=18" }

# `cargo binstall runner-run` pulls the prebuilt binary from GitHub releases
# instead of compiling from source. Asset filename pattern is
# `runner-v{version}-{rust-triple}.tar.gz` — taiki-e/upload-rust-binary-action
# is invoked with `tar: all, zip: none` so all platforms (Linux/macOS/BSD/
# Windows) ship as `.tar.gz`. Archive contents are flat at the root
# (`runner`, `run`, `README.md`, `LICENSE`) — no enclosing directory — so the
# default `bin-dir` (which expects cargo's `{name}-{version}-{target}/…`
# layout) has to be overridden.
[package.metadata.binstall]
pkg-url = "{repo}/releases/download/v{version}/runner-v{version}-{target}{archive-suffix}"
pkg-fmt = "tgz"
bin-dir = "{bin}{binary-ext}"

[lib]
name = "runner"
path = "src/lib.rs"

[[bin]]
name = "runner"
path = "src/main.rs"

[[bin]]
name              = "run"
path              = "src/bin/run.rs"
required-features = ["run"]

[[example]]
name              = "gen-schema"
required-features = ["schema-gen"]

[dependencies]
anyhow        = "1"
colored       = "3"
json5         = "1"
semver        = "1"
serde_json    = "1"
shlex         = "2"
terminal_size = "0.4"
unicode-width = "0.2"
yaml-rust2    = "0.11"

[dependencies.clap]
version  = "4"
features = ["cargo", "derive", "env", "string", "wrap_help"]

[dependencies.clap_complete]
version  = "4"
features = ["unstable-dynamic"]

# Optional: only pulled in for `cargo run --example gen-schema --features
# schema-gen`. Kept out of the release build so the binary doesn't carry
# the JSON Schema generator at runtime.
[dependencies.schemars]
version  = "1.2"
optional = true

[dependencies.serde]
version  = "1"
features = ["derive"]

[dependencies.toml]
version          = "1.1"
default-features = false
features         = ["parse", "serde"]

[build-dependencies.serde]
version  = "1"
features = ["derive"]

[build-dependencies.toml]
version          = "1.1"
default-features = false
features         = ["parse", "serde"]

[features]
default    = ["run"]
run        = []
# Enables the `gen-schema` example + the `pub use` of `RunnerConfig`
# needed for `schemars::schema_for!` to reach it from outside the crate.
# Off by default so production builds don't pull in `schemars`.
schema-gen = ["dep:schemars"]

[lints.clippy]
cargo_common_metadata   = "allow"
multiple_crate_versions = "allow"  # is_executable 1.0.5 pins windows-sys 0.60
redundant_pub_crate     = "allow"

[lints.clippy.all]
level    = "deny"
priority = -1

[lints.clippy.cargo]
level    = "deny"
priority = -1

[lints.clippy.complexity]
level    = "warn"
priority = -1

[lints.clippy.correctness]
level    = "deny"
priority = -1

[lints.clippy.nursery]
level    = "warn"
priority = -1

[lints.clippy.pedantic]
level    = "warn"
priority = -1

[lints.clippy.perf]
level    = "warn"
priority = -1

[lints.clippy.style]
level    = "warn"
priority = -1

[lints.clippy.suspicious]
level    = "warn"
priority = -1

[lints.rust]
elided_lifetimes_in_paths = "warn"
missing_docs              = "warn"
trivial_numeric_casts     = "warn"
unnameable_types          = "warn"
unreachable_pub           = "warn"
unsafe_code               = "deny"
unused_import_braces      = "warn"
unused_lifetimes          = "warn"
unused_qualifications     = "warn"

[lints.rustdoc]
bare_urls                    = "deny"
broken_intra_doc_links       = "deny"
invalid_codeblock_attributes = "deny"
invalid_html_tags            = "deny"
invalid_rust_codeblocks      = "deny"
private_intra_doc_links      = "deny"
redundant_explicit_links     = "warn"
unescaped_backticks          = "warn"

[profile.release]
strip = true
lto   = true