Skip to content

Releases: octopyid/rune

v1.6.0

Choose a tag to compare

@SupianIDz SupianIDz released this 11 Sep 08:21

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=.

Full Changelog: v1.5.0...v1.6.0

v1.5.0

Choose a tag to compare

@SupianIDz SupianIDz released this 10 Sep 16:50

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.
  • Task Dependency Tree (--tree):
    • Visualize task dependency hierarchies using the --tree global flag (e.g. rune --tree or rune <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]).

💅 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 _describe preserves 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.

Full Changelog: v1.4.1...v1.5.0

v1.4.1

Choose a tag to compare

@SupianIDz SupianIDz released this 10 Sep 16:22

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 function errors.
    • Guard completion invocation with [ "$funcstack[1]" = "_rune" ] so execution only occurs in an active completion context.
    • Automatically register completion for rune with compdef _rune rune upon sourcing.

Full Changelog: v1.4.0...v1.4.1

v1.4.0

Choose a tag to compare

@SupianIDz SupianIDz released this 10 Sep 16:02

What's Changed

🚀 Features

  • Task Working Directory (#[dir: <path>]): Run tasks in a specific working directory relative to the Runefile location (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 .env and 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, and CONTRIBUTING.md.
  • Documentation: Cleaned up README.md and streamlined navigation.

Full Changelog: v1.3.2...v1.4.0

v1.3.2

Choose a tag to compare

@SupianIDz SupianIDz released this 10 Sep 10:42

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. Flutter s for screenshot, r for hot reload, h for help, q for quit) and navigation keys are now forwarded directly without triggering SIGTTIN.
  • Signal Handling & Fail-Fast: Improve Ctrl+C (SIGINT) handling during task execution, adding force-kill on repeated interrupt signals and propagating POSIX standard exit code 130.

Full Changelog: v1.3.1...v1.3.2

v1.3.1

Choose a tag to compare

@SupianIDz SupianIDz released this 10 Sep 09:40

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/rune and restore full compatibility with Go module proxy distribution.

Full Changelog: v1.1.0...v1.3.1

v1.1.0

Choose a tag to compare

@SupianIDz SupianIDz released this 09 Sep 20:15

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: and Options: 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

Choose a tag to compare

@SupianIDz SupianIDz released this 09 Sep 19:03

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.
  • 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 Runefile task recipes.
    • Built-in help routing (rune help info, rune info --help) and typo suggestions.
  • Simulation & Introspection:
    • --dry-run flag 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 .env loading from project directory.
    • Injection of task context variables (RUNE_TASK, RUNE_ARG_<NAME>, RUNE_FLAG_<NAME>).
    • System environment inheritance.
  • 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.
  • Project Governance & Repository Standards:
    • MIT License (LICENSE).
    • Security policy (SECURITY.md) with private disclosure instructions.
    • Contributor guidelines (CONTRIBUTING.md) with Runefile self-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).