#builder #bitcoin #guix

build bgt

A tool for automated Guix builds of Bitcoin Core

3 releases

0.1.2 Aug 13, 2024
0.1.1 Aug 12, 2024
0.1.0 Aug 12, 2024

#109 in Build Utils

MIT license

65KB
1.5K SLoC

bgt

Bitcoin Guix Tag Builder

About

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.

Requirements

  • 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).

Installation

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 .

Usage

After installation, you can use the bgt command to interact with the tool.

To see the available commands run:

bgt

Setup

Run the setup wizard to configure bgt:

bgt setup

This will guide you through setting up your GPG key ID, signer name, and other necessary configurations.

Build

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

Attest to non-codesigned build outputs:

bgt attest <tag>

Codesign

Attach codesignatures to existing non-codesigned outputs and attest:

bgt codesign <tag>

Watch

Run a continuous watcher to monitor for new tags and automatically build them, optionally as a background daemon:

bgt watch start <--daemon>

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

Clean up Guix build directories while leaving caches intact:

bgt clean

Show Config

View the current configuration settings:

bgt show-config

Additional Options

  • --multi-package: Use JOBS=1 ADDITIONAL_GUIX_COMMON_FLAGS='--max-jobs=8' for building. This can be added to any command.

Logging

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.

Contributing

Contributions to bgt are welcome! Please feel free to submit issues and pull requests on our GitHub repository.

License

See license.

Plans

  • implement Guix building
  • permit building a specified tag
  • enable signing
  • add advanced GPG signing solutions (tbd)
  • remove some dependencies

Dependencies

~16–30MB
~493K SLoC