[package]
name         = "runner-run"
version      = "0.8.1"
edition      = "2024"
rust-version = "1.95"
description  = "Universal project task runner"
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"
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"]

[dependencies]
anyhow     = "1"
colored    = "3"
json5      = "1"
serde_json = "1"
shlex      = "1"
yaml-rust2 = "0.11"

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

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

[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     = []

[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
