diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e60178c..0b0a014 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -40,6 +40,28 @@ jobs: - run: cargo fmt --all -- --check - run: cargo clippy --all-targets -- -D warnings - run: cargo test --all --locked + - name: Extract release notes from changelog + shell: python + run: | + import os + import re + from pathlib import Path + + version = os.environ["GITHUB_REF_NAME"].removeprefix("v") + changelog = Path("CHANGELOG.md").read_text() + sections = re.findall( + rf"^## \[{re.escape(version)}\] - \d{{4}}-\d{{2}}-\d{{2}}\n(.*?)(?=^## |\Z)", + changelog, + re.MULTILINE | re.DOTALL, + ) + if len(sections) != 1 or not sections[0].strip(): + raise SystemExit(f"Expected one nonempty CHANGELOG.md entry for {version}") + Path("RELEASE_NOTES.md").write_text(sections[0].strip() + "\n") + - uses: actions/upload-artifact@v7 + with: + name: release-notes + path: RELEASE_NOTES.md + if-no-files-found: error build-binaries: name: Build ${{ matrix.target }} @@ -61,7 +83,7 @@ jobs: archive: tar.gz cross: true - target: x86_64-apple-darwin - os: macos-13 + os: macos-15-intel archive: tar.gz cross: false - target: aarch64-apple-darwin @@ -132,20 +154,13 @@ jobs: needs: build-binaries runs-on: ubuntu-latest steps: - - uses: actions/checkout@v7 - with: - fetch-depth: 0 - - - name: Install git-cliff - uses: taiki-e/install-action@v2.87.12 + - uses: actions/download-artifact@v8 with: - tool: git-cliff - - - name: Generate release notes - run: git-cliff --current --strip header --output RELEASE_NOTES.md + name: release-notes - uses: actions/download-artifact@v8 with: + pattern: agent-p-* path: artifacts merge-multiple: true @@ -183,6 +198,7 @@ jobs: steps: - uses: actions/download-artifact@v8 with: + pattern: agent-p-* path: artifacts merge-multiple: true @@ -271,6 +287,7 @@ jobs: steps: - uses: actions/download-artifact@v8 with: + pattern: agent-p-* path: artifacts merge-multiple: true diff --git a/CHANGELOG.md b/CHANGELOG.md index b185ea0..81e6e16 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,9 +6,19 @@ All notable changes to this project will be documented in this file. ## [Unreleased] -## [0.1.0] - 2026-09-15 +## [0.1.0] - 2026-09-18 -### Changes +Initial public release of AgentP, a podcast downloader with an interactive terminal interface and a scriptable CLI. -- Initial public release: download and tag podcast episodes from a TUI or CLI. -- Initial release flow setup: CI, release workflow, cargo-release and git-cliff configs, packaging metadata, LICENSE, README, CHANGELOG. +### Added + +- Browse RSS podcast feeds, preview the latest episode, and select episodes for download in a Dracula-themed terminal interface. +- Add podcasts manually or prepopulate their name, album, and artist from feed metadata; edit, reorder, and delete podcasts from the library. +- Download selected episodes, the latest or oldest episodes, or an entire feed through the CLI, using podcast names or 1-based indices. +- Customize ID3 title, album, artist, and album-artist tags; remove existing tags or artwork; rename files and add zero-padded episode-number prefixes. +- Organize downloads into per-podcast folders with a configurable download location and reusable defaults for new podcasts. +- Override the audio-download User-Agent per podcast for hosts that reject the default client. +- Search actions through the command palette, navigate lists with keyboard shortcuts, and paste into text fields from the clipboard. +- Choose TUI or CLI as the default mode and select a joined or ASCII banner for terminal compatibility. +- Save configuration as JSON, seed new installations with demo podcasts, and accept legacy podcast option names. +- Provide release archives for Linux (x86_64 GNU, x86_64 musl, and ARM64), macOS (Intel and Apple Silicon), and Windows (x86_64), with Cargo, Homebrew, and Scoop distribution workflows. diff --git a/Cargo.toml b/Cargo.toml index d9db72d..3a93529 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "agent-p" version = "0.1.0" edition = "2024" -rust-version = "1.87" +rust-version = "1.88" authors = ["ByteMagic Inc "] description = "A fast podcast downloader with customizable ID3 tagging" license = "GPL-3.0-only" diff --git a/README.md b/README.md index b69eac3..e707727 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ |---|---| | **Homebrew** · macOS and Linux | `brew install ByteMagicInc/tap/agent-p` | | **Scoop** · Windows | `scoop bucket add bytemagicinc https://github.com/ByteMagicInc/scoop-bucket`
`scoop install agent-p` | -| **Cargo** · Rust 1.87+ | `cargo install agent-p` | +| **Cargo** · Rust 1.88+ | `cargo install agent-p --locked` | | **Pre-built binary** | Download an archive from [GitHub Releases](https://github.com/ByteMagicInc/AgentP/releases) and place `agentp` on your `PATH`. | > [!TIP] @@ -60,6 +60,8 @@ The first launch creates your configuration, seeds a set of demo podcasts, and p Press `c` to add your own feeds, change the download folder, and set the defaults for new podcasts. +AgentP comes with my favorite podcasts so you can see how different per-podcast configs are applied. + ### Scriptable CLI ```sh @@ -322,12 +324,12 @@ When `overwrite_tags` is on, AgentP writes the title, album, and artist plus alb ## Building from source -Requires Rust 1.87+ (edition 2024). The binary lands at `target/release/agentp`. +Requires Rust 1.88+ (edition 2024). The binary lands at `target/release/agentp`. ```sh git clone https://github.com/ByteMagicInc/AgentP.git cd AgentP -cargo build --release +cargo build --release --locked ``` Before opening a pull request, run what CI runs: @@ -340,6 +342,8 @@ cargo fmt --all -- --check && cargo clippy --all-targets -- -D warnings && cargo Issues and PRs welcome at . See [AGENTS.md](AGENTS.md) for architecture details. Start commit messages with `Fix`, `Add`, `Refactor`, or `Update` so the changelog groups them correctly. +Maintainers: see the short [release guide](docs/releasing.md). + ## License [GPL-3.0-only](LICENSE) © 2026 ByteMagic Inc. diff --git a/docs/releasing.md b/docs/releasing.md new file mode 100644 index 0000000..4d7bd0e --- /dev/null +++ b/docs/releasing.md @@ -0,0 +1,10 @@ +# Releasing + +Install the tools with `cargo install cargo-release git-cliff --locked`. + +1. Update **Unreleased** in `CHANGELOG.md`. Optionally draft notes with `git-cliff --unreleased --strip header`; review and copy the relevant bullets without replacing the file or its `` marker. +2. Commit the notes, ensure CI passes, and start from a clean, up-to-date `master`. +3. Preview `cargo release patch` (use `minor` or `major` as appropriate). Review the version and changelog changes. +4. Run `cargo release patch --execute` with the same version level when ready to publish. + +`cargo release` runs tests, updates the version and changelog, creates a fresh **Unreleased** section, then commits, tags, and pushes. The tag triggers GitHub Actions to build archives, publish the reviewed changelog entry as release notes, publish to crates.io, and update Homebrew and Scoop for stable releases. Check that all release jobs succeed.