forgectl 0.3.0

Keep a GitHub account's repositories in line with one manifest
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [0.3.0] - 2026-11-09

### Added

- `rust-ci.yml`'s `light` input, for repos whose Actions minutes are
  billed: pull requests, scheduled and manual runs get one Linux job, `ok`,
  running fmt, clippy and the tests (`tests: false` leaves them out), and a
  push only builds and publishes the container image, for linux/amd64
  unless `arm64: true`. That's two or three billed minutes a pull request
  instead of a dozen or more, and none for a push without an image.

### Changed

- Private repos only get rulesets with the manifest's new
  `private_rulesets = true`: they need GitHub Pro, which can lapse without
  the manifest changing. forge used to try, and skip them when GitHub
  refused.
- `rust-ci.yml` checks a `vX.Y.Z` tag against Cargo.toml's version in a job
  of its own, `version`, before building any image, instead of after.

### Fixed

- `rust-release.yml` on a default-branch push with nothing to release ran
  the jobs that also run after a skipped one (`crates-io`, the GitHub
  release, Homebrew, winget), which the release environment then rejected:
  a failed run, though nothing was published. They need `verify` to have
  succeeded now.

## [0.2.0] - 2026-11-09

### Added

- `[pins]`: shared-workflow inputs that pin another repo's release (a T
  repo's `t-version` and `t-sha256`). `forge check` reports one that's
  behind; `forge bump` opens a PR moving it, with auto-merge on.
- The `require-ci` ruleset, requiring the `ci / ok` check that `rust-ci.yml`
  and `t-ci.yml` now end with: it passes when every job of theirs passed or
  was skipped. With it, a PR's auto-merge waits for all of CI.
- `rust-release.yml` can be called on pushes to the default branch too: a
  version in Cargo.toml with no tag yet is tagged, and released from the tag
  (callers add the trigger, `workflow_dispatch` and `actions: write`).

## [0.1.1] - 2026-11-08

### Fixed

- Organizations' repositories can be managed: when gh isn't signed in as the
  manifest's `owner`, forge uses the active gh account instead of failing.

## [0.1.0] - 2026-11-08

### Added

- First release, as the `forgectl` crate; the command is `forge`.
- `forge check`, `apply`, `list` and `stale`, driven by a manifest found at
  `--manifest`, `$FORGE_MANIFEST`, `./forge.toml` or the config directory.
- `forge init` writes a starter manifest listing every repo an account owns.
- Built-in rulesets: `protect-default-branch`, `require-pr`,
  `require-pr-title` and `protect-release-tags`.
- Prebuilt binaries for Windows, macOS and Linux are attached to each
  [GitHub release]https://github.com/lkurcak/forge/releases.

[Unreleased]: https://github.com/lkurcak/forge/compare/v0.3.0...HEAD
[0.3.0]: https://github.com/lkurcak/forge/compare/v0.2.0...v0.3.0
[0.2.0]: https://github.com/lkurcak/forge/compare/v0.1.1...v0.2.0
[0.1.1]: https://github.com/lkurcak/forge/compare/v0.1.0...v0.1.1
[0.1.0]: https://github.com/lkurcak/forge/releases/tag/v0.1.0