Skip to content

Iteration 8: release readiness for v0.1.0#11

Merged
ractive merged 4 commits into
mainfrom
iter-8/release-readiness
Mar 19, 2026
Merged

Iteration 8: release readiness for v0.1.0#11
ractive merged 4 commits into
mainfrom
iter-8/release-readiness

Conversation

@ractive

@ractive ractive commented Mar 18, 2026

Copy link
Copy Markdown
Owner

Summary

  • Release workflow: GitHub Actions builds 6 targets (linux x86_64/aarch64, macOS x86_64/aarch64, Windows x86_64/aarch64), packages .tar.gz/.zip archives with binary + completions + man pages, generates SHA-256 checksums, creates GitHub Release on v* tag push
  • Linux packages: .deb and .rpm built via cargo-deb and cargo-generate-rpm, uploaded to release
  • Homebrew: Automated formula update to ractive/homebrew-hoppy tap after release
  • Man pages: 159 man pages generated via cargo xtask man-pages using clap_mangen
  • CI updated: Triggers on push/PR to main (was manual-only), added aarch64-linux with cross-rs
  • Foundation: LICENSE (MIT), CHANGELOG.md, Cargo.toml metadata (repository, homepage, keywords, categories)
  • README overhaul: Installation instructions (Homebrew, cargo install --git, direct download, deb/rpm, winget), usage examples by service, environment variables, badges, AI-generated notice

Test plan

  • cargo check --lib passes (new lib.rs exposing cli module)
  • cargo build --release succeeds
  • cargo test --workspace passes
  • cargo xtask man-pages generates 159 man pages
  • Man pages render correctly (man target/man/hoppy.1)
  • Release workflow: push a v0.1.0 tag to trigger full pipeline
  • Verify Homebrew tap update after release

🤖 Generated with Claude Code

Add release infrastructure: GitHub Actions release workflow (6 targets),
deb/rpm packaging, Homebrew tap automation, man page generation (xtask),
shell completions bundling, LICENSE, CHANGELOG, and README overhaul.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@ractive
ractive requested a review from Copilot March 18, 2026 22:11
- Homebrew formula heredoc: auto-detect indentation instead of hardcoded sed
- rpm/deb rename: use glob instead of hardcoded filenames
- sha256sum: narrow glob to .tar.gz/.zip/.deb/.rpm
- xtask: &PathBuf → &Path parameter type
- xtask: remove misleading man-pages pseudo-subcommand from invocations
- Remove unused archive matrix variable

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR prepares hoppy v0.1.0 for an initial public release by adding release engineering automation (CI + release pipeline), packaging metadata, and end-user documentation needed to ship binaries and OS packages.

Changes:

  • Added an xtask workspace crate to generate clap-based man pages and exposed hoppy::cli via a new src/lib.rs.
  • Introduced GitHub Actions workflows for CI (multi-target, incl. aarch64-linux via cross) and a tag-driven release pipeline producing archives, checksums, .deb/.rpm, and Homebrew tap updates.
  • Added/updated release “foundation” files and metadata: LICENSE, CHANGELOG, README, and Cargo.toml packaging metadata.

Reviewed changes

Copilot reviewed 13 out of 14 changed files in this pull request and generated 9 comments.

Show a summary per file
File Description
xtask/src/main.rs New xtask for recursive manpage generation from clap command tree.
xtask/Cargo.toml Declares xtask crate deps (clap_mangen, hoppy, anyhow).
src/lib.rs Exposes cli module for reuse by xtask and tooling.
LICENSE Adds MIT license text plus AI-generated notice (currently with a placeholder).
README.md Expanded installation/usage docs, env vars, completions, badges.
CHANGELOG.md Adds v0.1.0 changelog entry.
Cargo.toml Adds repository metadata and deb/rpm packaging config; adds xtask to workspace.
.cargo/config.toml Adds cargo xtask alias.
.github/workflows/ci.yml Enables CI on push/PR and adds aarch64-linux via cross.
.github/workflows/release.yml Adds tag-triggered release pipeline (archives, checksums, deb/rpm, Homebrew).
hoppy-knowledgebase/*.md Adds release notes/research/checklist and updates roadmap.

You can also share your feedback on Copilot code review. Take the survey.

Comment thread xtask/src/main.rs Outdated
Comment on lines +60 to +63
// `Command::name` requires `&'static str`, so we leak the String to satisfy
// the lifetime. This is acceptable in a short-lived xtask binary.
let static_name: &'static str = Box::leak(name.into_boxed_str());
let page_cmd = cmd.clone().name(static_name);
Comment thread README.md Outdated
Comment on lines +67 to +71
Also available via [winget](https://github.com/microsoft/winget-pkgs):

```powershell
winget install ractive.hoppy
```
run: cargo deb --no-build --no-strip
# cargo-deb picks up the binary from target/release/ and assets from
# the paths listed in [package.metadata.deb]

Comment thread .github/workflows/ci.yml Outdated
components: clippy
- uses: Swatinem/rust-cache@v2
- run: cargo clippy -- -D warnings
- run: cargo clippy --all-targets --all-features -- -D warnings
Comment thread xtask/src/main.rs
Comment on lines +19 to +30
/// Parses `--output-dir <path>` from argv, defaulting to `target/man`.
fn parse_output_dir() -> PathBuf {
let mut args = std::env::args().skip(1);
while let Some(arg) = args.next() {
if arg == "--output-dir" {
if let Some(val) = args.next() {
return PathBuf::from(val);
}
} else if let Some(val) = arg.strip_prefix("--output-dir=") {
return PathBuf::from(val);
}
}
Comment thread LICENSE Outdated

MIT License

Copyright (c) 2026 [YOUR NAME OR ORGANIZATION]
Comment thread .github/workflows/ci.yml
Comment on lines 47 to 52
- name: Build
run: cargo build --target ${{ matrix.target }}
run: ${{ matrix.cross && 'cross' || 'cargo' }} build --target ${{ matrix.target }}

- name: Run tests
run: cargo test --target ${{ matrix.target }}
run: ${{ matrix.cross && 'cross' || 'cargo' }} test --target ${{ matrix.target }}

- name: Build release binary
run: ${{ matrix.cross && 'cross' || 'cargo' }} build --release --target ${{ matrix.target }}

# Generate shell completions by running a native host build.
- name: Package (Unix)
if: runner.os != 'Windows'
shell: bash
run: |
ractive and others added 2 commits March 19, 2026 10:19
- xtask: remove Box::leak, use Command::display_name() instead
- xtask: validate args, reject unknown arguments
- README: remove winget install (not yet available)
- Pin cargo-deb@3, cargo-generate-rpm@0.20, cross@0.2.5 with --locked
- CI: clippy and test now run with --workspace
- LICENSE: replace placeholder with ractive
- Fix 5 pre-existing clippy warnings in test crates

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Change from tag push to `on: release: types: [published]` so the
workflow is triggered by creating a release on the GitHub UI. The
release already exists when the workflow runs, so artifacts are
uploaded to it rather than creating a new one.

Also update roadmap checklist with actual done/not-done status.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@ractive
ractive merged commit 21b47be into main Mar 19, 2026
5 of 7 checks passed
@ractive
ractive deleted the iter-8/release-readiness branch March 19, 2026 09:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants