Skip to content

Build Process

Warning

This section is currently somewhat WIP.

Warning

This section is intended for people who wish to work on/build/distribute bottom, not general users.

Overview

bottom manages its own binary builds for nightly and stable release purposes. The core build workflow is handled by build_releases.yml, called by a wrapper workflow for nightly and stable releases. Builds take place via GitHub Actions.

The main things built are:

  • Binaries for various platforms
  • MSI installer for Windows
  • .deb package for Debian and its derivatives

This documentation gives a high-level overview of the build process for each part. For the most up-to-date and detailed reference, definitely refer back to the build_releases.yml file.

Binaries

Binaries are built currently for various targets. Note that not all of these are officially supported. The following general steps are performed:

  • Set up the Rust toolchain for the action runner.
  • Enable cache.
  • Build a release build with:

    • --features deploy, which enables only crates needed for release builds.
    • --locked to lock the dependency versions.
    • The following env variables set:

      • BTM_GENERATE: true
      • COMPLETION_DIR: "target/tmp/bottom/completion/"
      • MANPAGE_DIR: "target/tmp/bottom/manpage/"

      These generate the manpages and shell completions (see Packaging for some more information).

  • Bundle the binaries and manpage/completions.
  • Cleanup.

Some builds use cross to do cross-compilation builds for architectures otherwise not natively supported by the runner.

MSI

This builds a full Windows installer using cargo-wix and WiX Toolset 4. This requires some setup beforehand with some dependencies:

  • Net-Framework-Core (handled by Powershell)
  • WiX Toolset 4 (needs to be separately installed on GitHub runners as a .NET tool)
  • Rust toolchain

After that, cargo wix takes care of the rest.

.deb

Currently, .deb files are built for x86 and ARM architectures (armv7, aarch64). This is handled by cargo-deb.

  • For x86, this is handled natively with just cargo-deb.
  • For ARM, this uses a Docker container, cargo-deb-arm, which correctly sets the dependencies and architecture for the generated .deb file.

There are additional checks via dpkg to ensure the architecture is correctly set.