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:
|
|
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
With Binstall
$ 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.)