Bitcoin Guix Tag Builder
bgt is a tool to perform automated or semi-automated Guix builds of Bitcoin Core.
These can be manually initiated, or trigger when a new tag is detected via polling the GitHub API.
It can build, attest, and codesign tagged Bitcoin Core releases.
- You will need to install and setup Guix for Bitcoin Core by following Bitcoin Core's INSTALL.md.
- (optional) For attesting (signing) you will need a GPG key configured in your default keyring.
- You will need a fork of the bitcoin-core/guix.sigs repository.
- For pull requests to this repository, you will need your GPG key to be in the guix.sigs builder-keys which can be done via a pull request.
- (optional) To use
--auto
mode (automatically open pull requests against guix.sigs) you will need a github token with the appropriate permissions (repo).
To install bgt-builder, you need to have Rust and Cargo installed on your system. Then, you can install it either using Cargo:
cargo install bgt
Or from source:
git clone https://github.com/bitcoin-dev-tools/bgt-builder.git bgt
cd bgt
cargo install --path .
After installation, you can use the bgt
command to interact with the tool.
To see the available commands run:
bgt
Run the setup wizard to configure bgt:
bgt setup
This will guide you through setting up your GPG key short ID, signer name, and other necessary configurations.
Build a specific tag of Bitcoin Core:
bgt build <tag>
Replace <tag>
with the specific version tag you want to build, e.g., v27.1
.
Attest to non-codesigned build outputs:
bgt attest <tag> [--auto]
The --auto
flag will automatically sign using GPG and open a PR on GitHub.
Attach codesignatures to existing non-codesigned outputs and attest:
bgt codesign <tag> [--auto]
The --auto
flag will automatically sign using GPG and open a PR on GitHub.
Run a continuous watcher to monitor for new tags and automatically build them, optionally as a background daemon:
bgt watch start [--daemon] [--auto] [--dry-run]
Where:
--daemon
runs the watcher as a background process--auto
automatically signs using GPG and opens PRs on GitHub--dry-run
monitors for new tags without performing builds or signing
Stop a background watcher daemon:
bgt watch stop
This command will poll the GitHub API for new tags and automatically build, attest, and codesign new releases.
Clean up Guix build directories while leaving caches intact:
bgt clean
View the current configuration settings:
bgt show-config
Guix build current master to populate Guix caches:
bgt warmup
--multi-package
: UseJOBS=1 ADDITIONAL_GUIX_COMMON_FLAGS='--max-jobs=8'
for building. This can be added to any command.--debug
: Enable debug log level. This can be added to any command.
bgt uses environment variables for logging configuration. You can set the RUST_LOG
environment variable to control the log level. For example:
RUST_LOG=debug bgt build v27.1
This will run the build command with debug-level logging.
Contributions to bgt are welcome! Please feel free to submit issues and pull requests on our GitHub repository.
See license.
- implement Guix building
- permit building a specified tag
- enable signing
- add advanced GPG signing solutions (tbd)
- remove some dependencies