Releases: octopyid/rune
Release list
v1.6.0
What's Changed
🚀 Added
- CLI Task Options & Enum Choices:
- Short Option Aliases (
-s|--long): Define single-character short aliases alongside long option names (e.g.-w|--watch?,-o|--output="dist"). - Valued Options (
--option=): Support options requiring or accepting values using=, with required (--token=), optional default (--output="dist"), and empty default (--tag=?) semantics. - Enum Choices Validation (
[a,b,c]): Constrain options and positional arguments to allowed choices (e.g.-e|--env=[staging,production],action=[up,down]="up"). Invalid inputs trigger immediate fail-fast validation errors listing allowed choices. - Auto-Generated Help Menu Enhancements: Option help outputs automatically format short aliases (
-e, --env=VALUE), allowed choices ([choices: staging, production]), defaults ([default: "dist"]), and required markers ((required)). - Autocompletion for Options & Choices: Shell completions suggest short flags (
-w), long flags (--watch), and complete enum choices upon typing--env=or-e=.
- Short Option Aliases (
Full Changelog: v1.5.0...v1.6.0
v1.5.0
What's Changed
🚀 Added
- Private Tasks (
#[private]/#[internal]):- Support declaring internal helper tasks using
#[private]or#[internal]attributes. - Private tasks remain fully executable directly by name and as task dependencies, but are excluded from task listings (
rune,rune list,--help) and shell autocompletion.
- Support declaring internal helper tasks using
- Task Dependency Tree (
--tree):- Visualize task dependency hierarchies using the
--treeglobal flag (e.g.rune --treeorrune <task> --tree). - Zero-dependency custom ASCII/Unicode tree formatter displaying tree branches (
├──,└──,│), task parameters, and boolean flags (--split?). - Includes circular dependency detection with cycle markers (
[cycle detected]).
- Visualize task dependency hierarchies using the
💅 Changed & Improved
- Shell Autocomplete Overhaul:
- Rich descriptions for tasks, namespaces, and flags in Zsh completion, styled with aligned
--columns matching GitHub CLI (gh). - Fix colon handling in Zsh: candidate names with namespaces (e.g.
assets:icons,test:coverage) escape colons so_describepreserves candidate names intact. - Contextual flag filtering: typing
rune <TAB>focuses on available tasks, while typing-or--switches to flag suggestions. - Task-specific flag completion: typing
rune <task> -<TAB>suggests task-specific boolean flags (with their inline doc comments) alongside global flags.
- Rich descriptions for tasks, namespaces, and flags in Zsh completion, styled with aligned
Full Changelog: v1.4.1...v1.5.0
v1.4.1
What's Changed
🐛 Fixed
- Zsh Shell Completion Execution:
- Prevent premature execution of
_rune "$@"when sourcing completion scripts directly (e.g.source <(rune completion zsh)) or reloading the shell (omz reload), eliminating_tags:comptags: can only be called from completion functionerrors. - Guard completion invocation with
[ "$funcstack[1]" = "_rune" ]so execution only occurs in an active completion context. - Automatically register completion for
runewithcompdef _rune runeupon sourcing.
- Prevent premature execution of
Full Changelog: v1.4.0...v1.4.1
v1.4.0
What's Changed
🚀 Features
- Task Working Directory (
#[dir: <path>]): Run tasks in a specific working directory relative to theRunefilelocation (or absolute path) with fail-fast validation. - Task Environment Variables (
#[env: ...]): Declare task-scoped environment variables with single, multiple, or semicolon-separated assignments that override.envand process env without leaking across tasks. - Verbose Output (
--verbose): Echo each command prefixed with$ <command>prior to execution, with clean shell escaping for arguments. - Task Execution Timing (
--time): Measure and report elapsed runtime for individual tasks and full dependency chains. - Standalone Shell Installer (
install.sh): Quick one-line curl installer for macOS and Linux:curl -fsSL https://raw.githubusercontent.com/octopyid/rune/main/install.sh | sh
⚙️ Changed & Improved
- Go Version Compatibility: Lowered minimum Go requirement to Go 1.22+ in
go.mod,README.md, andCONTRIBUTING.md. - Documentation: Cleaned up
README.mdand streamlined navigation.
Full Changelog: v1.3.2...v1.4.0
v1.3.2
What's Changed
🐛 Fixed
- Interactive TTY & Keyboard Input: Fix interactive terminal access for child processes by sharing the foreground process group with Rune instead of detaching via
Setpgid. Single-key shortcuts (e.g. Fluttersfor screenshot,rfor hot reload,hfor help,qfor quit) and navigation keys are now forwarded directly without triggeringSIGTTIN. - Signal Handling & Fail-Fast: Improve
Ctrl+C(SIGINT) handling during task execution, adding force-kill on repeated interrupt signals and propagating POSIX standard exit code130.
Full Changelog: v1.3.1...v1.3.2
v1.3.1
Note on Version Jump (v1.1.0 → v1.3.1)
Versions v1.2.0 and v1.3.0 were skipped/yanked due to an immutable Go module proxy (proxy.golang.org) caching anomaly.
During repository restructuring when the CLI entrypoint was moved into cmd/rune, earlier tags were cached by the Go proxy with an older package structure. Because proxy.golang.org stores module caches permanently and resolves @latest based on strict Semantic Versioning precedence, users running go install github.com/octopyid/rune/cmd/rune@latest encountered a does not contain package cmd/rune error against the cached v1.3.0.
To supersede the cached proxy index and ensure seamless installation via go install .../cmd/rune@latest, this patch release is tagged as v1.3.1.
What's Changed
🐛 Fixed
- CLI Entrypoint & Go Module Compatibility: Restructure CLI entrypoint to
cmd/runeand restore full compatibility with Go module proxy distribution.
Full Changelog: v1.1.0...v1.3.1
v1.1.0
Added
- Doc-Comments for Task Arguments & Flags:
- Support natural doc-comments directly preceding task headers to document CLI arguments and flags.
- Parse
# --<flag>: <desc>for boolean flags,# <arg>: <desc>for positional arguments, and# *<args>: <desc>for passthrough arguments. - Automatically render custom descriptions into
Arguments:andOptions:help tables (rune <task> --help). - Strict matching against declared task parameters; unassociated comments (like
# NOTE: ...or# TODO: ...), comments separated by blank lines, and comments inside the task body are ignored.
v1.0.0
Initial release of Rune — a small, predictable, and opinionated task runner for Go and modern development workflows, inspired by Make, Just, and Laravel Artisan.
Added
- CLI-First Mental Model:
- Every task signature defines a real CLI command.
- Positional parameters with optional default values (
task target="dev":). - Boolean flag parameters with automatic flag syntax (
task --race?:). - Namespace command grouping using colon syntax (e.g.
rune db:fresh,rune test:coverage).
- Passthrough & Interactive I/O:
- Explicit passthrough argument support (
*args) preserving raw arguments, arbitrary flags, and quotation boundaries without shell mangling. - Direct TTY attachment for interactive programs, REPLs (
tinker,python,vim), and curses applications. - Signal forwarding (
SIGINT/Ctrl+C,SIGTERM) directly to child processes. - Standard Unix stream piping (
cat dump.sql | rune db:import). - Exact process exit code propagation.
- Explicit passthrough argument support (
- Topological Dependency Graph:
- Deterministic dependency resolution executing prerequisites before dependents.
- Automatic dependency deduplication across shared branches in DAG.
- Cycle detection (
A -> B -> A) before executing any commands. - Fail-fast execution aborting immediately when any task fails.
- Interactive Safety & Confirmation:
#[confirm: message]directive prompting users before running dangerous actions.- Upfront graph-level verification checking confirmations before any dependency executes.
- Interactive arrow-key navigation (
❯ Yes No) with raw terminal input mode and instant terminal restoration. - Keyboard shortcuts (
←/→,Tab,h/l,y,n,Esc,Ctrl+C). - Automated non-interactive fallback for CI runners, background processes, and pipes without terminal freezing.
- Non-interactive bypass via
--yes/-y.
- Console UI Components:
- Built-in console badges styled after Laravel Console Components / Termwind:
rune info <msg>: Blue badge with informational status.rune warn <msg>: Yellow badge with black bold text for warnings.rune done <msg>/rune success <msg>: Green badge for successful completion.rune fail <msg>: Red badge for task, test, or validation failures, exiting with code 1.rune error <msg>: Red badge for system error alerts and fatal exceptions, exiting with code 1.
- Reusable directly in terminal or inside
Runefiletask recipes. - Built-in help routing (
rune help info,rune info --help) and typo suggestions.
- Built-in console badges styled after Laravel Console Components / Termwind:
- Simulation & Introspection:
--dry-runflag to simulate execution and preview topologically sorted execution plans without running commands.
- Help & Self-Documentation:
- Minimalist block ASCII banner inspired by Deno/Bun.
- Laravel Artisan inspired help menus for root commands, namespaces, and tasks.
- Levenshtein-based typo suggestions ("Did you mean: ...") for unknown tasks, namespaces, and flags.
- Environment Handling:
- Automatic
.envloading from project directory. - Injection of task context variables (
RUNE_TASK,RUNE_ARG_<NAME>,RUNE_FLAG_<NAME>). - System environment inheritance.
- Automatic
- Shell Completion:
- Native tab-completion generators for Zsh (
source <(rune completion zsh)), Bash, and Fish. - Autocompletion for tasks, namespaces, flags, global options, and built-in UI helpers.
- Native tab-completion generators for Zsh (
- Project Governance & Repository Standards:
- MIT License (
LICENSE). - Security policy (
SECURITY.md) with private disclosure instructions. - Contributor guidelines (
CONTRIBUTING.md) withRunefileself-hosting instructions. - Code of conduct (
CODE_OF_CONDUCT.md). - Sponsorship configuration (
.github/FUNDING.yml) supporting GitHub Sponsors and Ko-fi. - Pull request template (
.github/PULL_REQUEST_TEMPLATE.md). - GitHub Issue Forms (
.github/ISSUE_TEMPLATE/bug_report.yml,feature_request.yml,config.yml).
- MIT License (