Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 28 additions & 11 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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 }}
Expand All @@ -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
Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -183,6 +198,7 @@ jobs:
steps:
- uses: actions/download-artifact@v8
with:
pattern: agent-p-*
path: artifacts
merge-multiple: true

Expand Down Expand Up @@ -271,6 +287,7 @@ jobs:
steps:
- uses: actions/download-artifact@v8
with:
pattern: agent-p-*
path: artifacts
merge-multiple: true

Expand Down
18 changes: 14 additions & 4 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name = "agent-p"
version = "0.1.0"
edition = "2024"
rust-version = "1.87"
rust-version = "1.88"
authors = ["ByteMagic Inc <copyright@bytemagic.xyz>"]
description = "A fast podcast downloader with customizable ID3 tagging"
license = "GPL-3.0-only"
Expand Down
10 changes: 7 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`<br>`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]
Expand All @@ -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
Expand Down Expand Up @@ -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:
Expand All @@ -340,6 +342,8 @@ cargo fmt --all -- --check && cargo clippy --all-targets -- -D warnings && cargo

Issues and PRs welcome at <https://github.com/ByteMagicInc/AgentP>. 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.
10 changes: 10 additions & 0 deletions docs/releasing.md
Original file line number Diff line number Diff line change
@@ -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 `<!-- next-header -->` 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.
Loading