`b` is binary or a go package that provides a set of utilities for managing and executing binary files. It is particularly useful for binaries hosted on GitHub.
The package includes a Binary
struct that represents a binary file, including its name, file path, version, and other related properties. You can create a Binary
struct by providing the binary name and version, and then use the EnsureBinary
method to ensure that the binary is available on the system.
# List all installed binaries and/or defined in b.yaml
b --all
# Print as JSON
b -ao json
# Install all binaries defined in b.yaml
b -a --install
# Install or update jq
b -iu jq
# Force install jq, overwriting existing binary
b -fi jq
# Upgrade all binaries
b -aiu
# List all available binaries
b --list
# Checks (silent) if all binaries are up to date
b -acq || echo "Some binaries are not up to date"
b
needs one of three things defined to know where to install binaries to:
PATH_BIN
env, set to the directory where you want to install binaries.PATH_BASE
env, set to the project root directory. All binaries will be installed in the.bin
directory.- If you are in a git repository,
b
will install binaries in the.bin
directory in the root of the repository.
If none of these are set, b
will fail.
To properly use the --all
flag, you should create a b.yaml
file in the binary directory. This file should contain a list of binaries you want to manage. Here is an example:
jq:
version: 1.7
kind:
tilt:
This will ensure that jq
, kind
, and tilt
are installed and at the correct version. If you don't specify a version, b
will install the latest version.
If you have Go installed, you can build and install the latest version of b
with:
go install github.com/buyoio/b/b@latest
Binaries built in this way do not have the correct version embedded. Use our prebuilt binaries or check out .goreleaser.yaml to learn how to embed it yourself.
To use this package, you need to import it in your Go project:
import "github.com/buyoio/b/pkg/binary"
The Binary
struct represents a binary file, including its name, file path, version, and other related properties. You can create a Binary
struct by providing the binary name and version:
bin := binary.Binary{Name: "mybinary", Version: "1.0.0"}
bin.EnsureBinary(true)
Have a look into pkg/binary for more details.
Have a look into pkg/binaries for prepackaged binaries.
- argsh - Utilities for Bash script quality
b
- (Selfupdate) Manage and execute binary files- docker-compose - Define and run multi-container Docker applications
- gh - GitHub CLI wrapper
- hcloud - Hetzner Cloud CLI wrapper
- jq - Command-line JSON processor
- k9s - Kubernetes CLI to manage your clusters
- kind - Kubernetes IN Docker
- kubectl - Kubernetes CLI to manage your clusters
- mkcert - Create locally-trusted development certificates
- tilt - Local Kubernetes development with no stress
- yq - Command-line YAML processor
Feel free to extend this, PRs are welcome.
Using direnv allows you to load required binaries bound to a specific project.
#!/usr/bin/env bash
set -euo pipefail
: "${PATH_BASE:="$(git rev-parse --show-toplevel)"}"
: "${PATH_BIN:="${PATH_BASE}/.bin"}"
export PATH_BASE PATH_BIN
This is all you need or have a look here.
- Recognize the operating system and architecture and offer the correct binary
- Enforce min and max versions
- Create a logo
- Docs
- Tests
b
is released under the MIT license, which grants the following permissions:
- Commercial use
- Distribution
- Modification
- Private use
For more convoluted language, see the LICENSE. Let's build a better Bash experience together.
Thanks to all tools and projects that developing this project made possible.
Copyright © 2024-present Buyo