Building a channel

build-channel is a Rust script that creates a channel that serves as a source of distribution of the Fuel toolchain. This is accomplished by querying and collecting a list of downloadable components that Fuel Labs publishes, creating a TOML file based on the collated data, which is then consumed by fuelup during usage.

To learn about the args and options used in the script, skip to Usage.

Use cases

There are 2 main ways the build-channel script is used: in the CI, and manually.

CI

This script's main usage is found within the fuelup CI. This script is in charge of publishing the latest and nightly channels on a routine basis.

The latest channel is re-built if the check versions workflow detects a new release of forc or fuel-core, and compatibility tests pass after that. This is explained in detail in the latest channel developer guide.

An example of this usage is in test-toolchain-compatibility.yml.

The nightly channel is more straightforward - a channel is built at 01:00 UTC every day, containing the download links to binaries found within the sway-nightly-binaries repository.

An example of this usage is in publish-nightly-channel.yml.

Manual

There may be times when we need a channel for a one-off event e.g. testnets. During these events, we do not

require a routine update, and can essentially publish once and be done. This is when manual publishing is done.

For example, building a testnet toolchain is done like so:

# from fuelup project root
cd ci/build-channel && cargo run -- channel-fuel-testnet.toml 2023-02-13 forc=0.35.0 fuel-core=0.17.1

The above command means that we're building a channel named channel-fuel-testnet.toml with the date 2023-02-13 (YYYY-MM-DD) and forc and fuel-core versions 0.35.0 and 0.17.1 respectively, and the latest versions for the other unlisted components.

Other than for these one-off events, manually running build-channel locally is a good sanity check when working on this codebase.

Usage

Arguments

OUT_FILE

  • Name of TOML file that will be created.

PUBLISH_DATE

  • The date for when the channel was created and published.

GITHUB_RUN_ID

  • Optional. This is the $GITHUB_RUN_ID variable in the GitHub CI. Identifies the specific run that a channel was published by.

PACKAGES

  • Optional. A list of key-value pairs mapping component names to SemVer-compatible versions, e.g. 'fuel-core=0.17.1'

Options

--nightly

  • Optional. Specify if we are building a nightly channel.