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.
| 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.
If you already have bestool, it can self-update to the latest version:
$ bestool self-updateIf 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- 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 usefulOr 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 usefulWith Binstall
$ cargo binstall bestool$ cargo install bestoolInstall rust, clone the repo, then run:
$ cargo checkTo run the tool:
$ cargo run -- --helpTo build the tool like for production:
$ cargo build --releaseCommits should follow the Conventional Commits format.
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.
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.)