BRun: The simple way to run native workflows. No containers required

  • :sparkles: simple!!!

  • :high_voltage: fast!!!

  • :package: no dependencies – download a single binary and go for it …

  • :hammer_and_wrench: built-in commands for common tasks like boot, scripts, cron, email, git, file watching

  • :link: composed of chainable units

  • :laptop: first priority is to run native

  • :prohibited: does not require containers (but may support them in the future)

  • :page_facing_up: simple YAML config format

Simple to install and run brun update to update to the latest.

Things might do with this

  • Reboot cycle test for embedded systems.

  • Nightly Yocto builds on your powerful workstation.

  • Run admin tasks like backups.

  • Monitor the /etc directory a server for changes.

  • Implemented a watchdog that reboots the system under certain conditions.

  • Run build/test/deploy pipelines.

  • Notify someone when CPU usage is too high or diskspace too low.

v0.0.8

Fixed

  • State file can now be specified without a directory path (e.g., state.yaml),
    eliminating crashes when using simple filenames.

  • Boot counters and other state-dependent units now work more reliably by
    loading state once at startup instead of repeatedly during execution,
    preventing race conditions and improving performance.

  • Trigger units now execute more efficiently by avoiding redundant condition
    checks, improving overall system responsiveness.

  • Multiple units can now trigger the same unit (such as email or log units)
    multiple times in a single execution chain, while still properly detecting and
    preventing circular dependencies. This allows for more flexible notification
    and logging patterns.

Run brun update to update to the latest.

v0.0.9

Added

  • Graceful shutdown now waits for active units to complete when you press Ctrl+C or send a termination signal. BRun will wait for running units to finish before exiting, preventing interruption of critical operations like builds, deploys, or backups.

To update, run: brun update

v0.0.10

  • Email notifications now include a proper Date header, ensuring emails display
    correct timestamps in mail clients and comply with email standards (RFC 5322).

Github release workflow

The following GitHub workflow now automatically performs a BRun release when I push a tag to the main branch, including the automatic extraction of changelog contents into the GitHub release notes.

v0.0.12

Fixed

  • Trigger units (git, cron, file, etc.) now properly check their conditions when
    triggered by other units via on_success, on_failure, or always fields.
    For example, when a cron unit triggers a git unit, the git unit will only
    execute if there are actual git updates, preventing unnecessary builds and
    operations.

v0.0.13

Fixed

  • Git triggers without a poll interval (manual trigger mode) now correctly
    check for updates when triggered by other units instead of always skipping
    execution. This enables on-demand git update checking without requiring
    continuous polling.

v0.0.14

  • Expand Git debugging to print messages during checks.

v0.0.15

Added

  • Configuration files can now be encrypted with SOPS, allowing you to safely
    store passwords, API keys, and other secrets directly in your config files.
    BRun automatically decrypts them at runtime with no changes to your workflow.

v0.0.16

Fixed

  • Cron triggers now skip runs that were missed by more than 60 seconds (e.g.,
    due to system downtime), preventing unwanted catch-up behavior when the system
    comes back online after extended periods. (#27)