fslabscli is free and open source! All code in this repository is dual-licensed under either:
- MIT License (LICENSE-MIT or http://opensource.org/licenses/MIT)
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
at your option. This means you can select the license you prefer! This dual-licensing approach is the de-facto standard in the Rust ecosystem and there are very good reasons to include both.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
To install, run the following command:
cargo install --git https://github.com/fslabs/fslabscli
Version source of truth: Cargo.toml
Tag format: v{version} (e.g., v2.43.0) — configurable via --tag-format
-
Bump version — Update
versioninCargo.toml, open a PR with appropriate labels, merge tomain. PRs withskip-changelogare excluded from release notes. Changelog categories are controlled by .github/release.yml. -
Draft release auto-created — On push to
main, a Prow postsubmit runsfslabscli draft-release, which:- Creates or updates a draft GitHub Release tagged
v{version} - Generates changelog from merged PRs (GitHub native release notes)
- Builds and uploads binary artifacts to the draft
- Pushes the Nix build to the cache
- Creates or updates a draft GitHub Release tagged
-
Publish the draft — Review the draft release on GitHub, verify all assets are present, click "Publish release". This creates the git tag and locks the release assets.
-
Post-publish automation — The new tag triggers Prow to:
- Publish the crate to the
fslCargo registry - Build and push the Docker image
- Mark the release as "latest"
- Kargo detects the new tag and starts canary promotion
- Publish the crate to the
sequenceDiagram
actor Dev as Developer
participant GH as GitHub (main)
participant Prow as Prow (draft-release)
participant Rel as GitHub Release
participant Prow2 as Prow (post-publish)
participant Kargo as Kargo
Dev->>GH: Merge PR (version bump in Cargo.toml)
GH->>Prow: Postsubmit on push to main
Prow->>Prow: Build Nix binary, push to cache
Prow->>Rel: Create/update draft release<br/>tag: v{version}, changelog from PR labels
Prow->>Rel: Upload binary artifacts
Dev->>Rel: Review draft, verify assets, click "Publish release"
Note over Rel: Git tag created, assets locked
Rel->>Prow2: Webhook (tag created)
Prow2->>Prow2: Publish crate to fsl registry
Prow2->>Prow2: Build & push Docker image
Prow2->>Rel: Mark as "latest"
Rel->>Kargo: Tag detected
Kargo->>Kargo: Start canary promotion