Skip to content

beyondessential/bestool

bestool

All-in-one tool for BES ops and dev tasks.

It manifests as a single binary that can be easily uploaded to Windows machines, or downloaded from the internet, and also works cross-platform on Linux and Mac for many tasks.

See bestool <subcommand> --help for extensive help.

Download

Platform Variant Download
Windows x86 bestool.exe
Linux x86 bestool
Linux x86 static bestool
Linux ARM64 bestool
Mac Intel bestool
Mac ARM64 bestool

These URLs always point to the latest release. Pin to a specific version with https://tools.ops.tamanu.io/bestool/<version>/<target>/bestool.

Self-update

If you already have bestool, it can self-update to the latest version:

$ bestool self-update

APT repository

If you're on Debian or a derivative, you can use our APT repo:

curl -fsSL https://tools.ops.tamanu.io/apt/bes-tools.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/bes-tools.gpg
echo "deb [signed-by=/etc/apt/keyrings/bes-tools.gpg] https://tools.ops.tamanu.io/apt stable main" | sudo tee /etc/apt/sources.list.d/bes-tools.list
sudo apt-get update
sudo apt-get install bestool

In GitHub Actions

- name: Download bestool
  shell: bash
  run: |
    curl -Lo ${{ runner.os == 'Windows' && 'bestool.exe' || 'bestool' }} https://tools.ops.tamanu.io/bestool/gha/${{ runner.os }}-${{ runner.arch }}?bust=${{ github.run_id }}
    [[ -f bestool ]] && chmod +x bestool

- name: Use bestool
  shell: bash
  run: |
    bestool=bestool
    [[ ${{ runner.os }} == "Windows" ]] && bestool=bestool.exe
    ./$bestool --version # or something more useful

Or combined:

- name: Download bestool
  shell: bash
  run: |
    bestool=bestool
    [[ ${{ runner.os }} == "Windows" ]] && bestool=bestool.exe
    curl -Lo $bestool https://tools.ops.tamanu.io/bestool/gha/${{ runner.os }}-${{ runner.arch }}?bust=${{ github.run_id }}
    [[ -f bestool ]] && chmod +x bestool
    ./$bestool --version # or something more useful
$ cargo binstall bestool

With cargo (compiling)

$ cargo install bestool

Development

Install rust, clone the repo, then run:

$ cargo check

To run the tool:

$ cargo run -- --help

To build the tool like for production:

$ cargo build --release

Commits should follow the Conventional Commits format.

Releasing

Releases are automated by release-plz. Pushing to main opens a repo: release PR with per-crate version bumps determined from conventional commits and cargo-semver-checks; merging that PR (auto-merge is enabled once CI is green) publishes the affected crates to crates.io, pushes per-crate tags, and triggers the binary-build workflows.

Holding a release

To bundle several features or fixes into one release, add the release-hold label to the open repo: release PR. The CI turns auto-merge off when the label is added and won't turn it back on while the label is present, so subsequent merges to main keep updating the PR without shipping it. When you're ready to ship, remove the label and either queue the PR manually or push another commit to main to let the workflow re-enable auto-merge. (Don't rely on removing the autorelease label; release-plz re-adds it whenever it updates the PR.)

About

Custom BES command-line tool for all our purposes

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages