From f48b30fb54ba2d65eb578cb8e27a2e5fedf566d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wiktor=20Zi=C4=99bka?= Date: Tue, 13 Oct 2026 23:18:52 +0200 Subject: [PATCH] chore(release): prepare v0.8.2 Add the release notes for v0.8.2, the release with the corrections of the bookmarks, the playback, and the text inputs of pine, and with two corrections of spruce. Name the new version in the release steps of the two READMEs. Co-Authored-By: Claude Opus 5.5 --- README.md | 4 +- docs/releases/v0.8.2.md | 149 ++++++++++++++++++++++++++++++++++++++++ docs/spruce/README.md | 2 +- 3 files changed, 152 insertions(+), 3 deletions(-) create mode 100644 docs/releases/v0.8.2.md diff --git a/README.md b/README.md index f71ee70..25b5a4a 100644 --- a/README.md +++ b/README.md @@ -165,8 +165,8 @@ One tag releases pine and spruce together. Write the release notes for the two p Commit the notes and push them to `main`. Then use the release script. ```sh -${EDITOR:-vi} docs/releases/v0.8.1.md -./scripts/release.sh v0.8.1 +${EDITOR:-vi} docs/releases/v0.8.2.md +./scripts/release.sh v0.8.2 ``` When the script publishes the GitHub Release, the `Release` workflow builds the two programs for Linux, macOS, and Windows. It attaches one archive for each program and each system to the release. diff --git a/docs/releases/v0.8.2.md b/docs/releases/v0.8.2.md new file mode 100644 index 0000000..8227eab --- /dev/null +++ b/docs/releases/v0.8.2.md @@ -0,0 +1,149 @@ +# pine and spruce v0.8.2 + +This release corrects faults in the bookmarks, the playback, and the text +inputs of pine. It removes the keys `n` and `N` of pine. spruce has two +corrections. + +## Installation + +```sh +go install github.com/Thelost77/pine@v0.8.2 +go install github.com/Thelost77/pine/cmd/spruce@v0.8.2 +``` + +As an alternative, download an archive from the release page. See "Binaries". + +## Binaries + +The release has one archive for each program and each system. The name of an +archive is `_v0.8.2__`: + +| System | Architecture | File type | +|--------|--------------|-----------| +| `linux` | `amd64`, `arm64` | `.tar.gz` | +| `darwin` (macOS) | `amd64`, `arm64` | `.tar.gz` | +| `windows` | `amd64` | `.zip` | + +Each archive contains the program, the `LICENSE` file of pine, and a `licenses` +directory. That directory has the license texts of Go and of the modules that +the program links. + +- A binary needs libmpv. See "Requirements". +- On Windows, put `libmpv-2.dll` in the directory of the program. The archive + does not contain it. +- The binaries are not signed. +- A GitHub Actions workflow builds the binaries on Linux with `CGO_ENABLED=0`. + No binary of this release has run on a test machine. + +## pine + +### Reliability and Correctness + +Bookmarks: + +* **The detail screen showed no bookmarks for an item that has bookmarks.** + pine read the bookmarks from the progress of the item. Audiobookshelf gives + no bookmarks there. A bookmark that the user added was in the list only + until the user left the detail screen. pine now reads the bookmark route, + which Audiobookshelf has from 2.36.0. For an older server, pine reads the + bookmarks of the user and keeps those of the item. +* **The detail screen could show the bookmarks of a different item.** The + answer for an item can come after the user opened a different item. pine + now ignores the bookmarks of an item that the detail screen does not show. +* **`b` made a bookmark on an item that did not play.** The bookmark got the + position of the player. On the detail screen of a different item, `b` made + a bookmark on that item, at a position of the item that plays. pine now + makes no bookmark and shows an error. + +Playback: + +* **A new player played at the speed 1.0, while the footer showed the speed of + pine.** This occurred after the start of a session, and after the change to + the next file of a book. The key `speed` of the config file had no effect + on the player. pine now sets its speed in each new player. +* **The time of a stalled stream counted as listening time.** mpv reports no + pause while it waits for data. pine now counts no listening time while the + player plays no audio. +* **The close of the terminal lost the last position and the listening + time.** The process ended before pine sent them. pine now quits at the + close of the terminal as it does with `q`. +* **A pause state, a speed, or a volume that the player refused gave no + error.** The footer then showed a state that the player did not have. pine + now shows the error. + +Text inputs: + +* **The bookmark title editor lost keys.** `q` quit the program, `?` opened + the help overlay, and `esc` went to the previous screen. During a playback, + the playback keys did their function, for example `l`, `h`, `p`, and space. + The left arrow closed the editor, and the text was lost. The editor now + gets each key. `esc` cancels the edit, and the left arrow moves the cursor. +* **The login screen lost the keys `?` and `C`.** `?` opened the help + overlay, and a typed `C` had no effect. So a password with one of these + characters could not be typed. +* **The metadata editor lost the key `?`.** `?` opened the help overlay. +* **`q` in the confirmation dialog of a deletion quit the program.** `q` now + cancels the dialog, as `n` and `esc` do. +* **The error banner took the first key of a text input.** A key closes the + banner. While a text input or the confirmation dialog has the keys, the key + now goes to it, and the banner closes after 5 seconds. + +### Changes of Behavior + +* The keys `n` and `N` (next and previous chapter) are gone. Use the chapter + list (`C`), or the actions "Next Chapter" and "Previous Chapter" of the + command palette (`ctrl+p`). +* The config keys `next_chapter` and `prev_chapter` are gone. A config file + that has them still loads, and the two keys have no effect. pine wrote the + two keys to each config file that it made. +* While a text input or the confirmation dialog has the keys, the global keys + and the playback keys have no function. `ctrl+p` does not open the command + palette, and space does not pause the playback. `ctrl+c` quits the program + on each screen. The hint line then shows no global key and no playback key. +* `?` closes the help overlay on each screen. +* A stall of the stream can lose up to 1 second of listening time, as a pause + does. +* For Audiobookshelf before 2.36.0, each read of the bookmarks reads the user + with all bookmarks. + +## spruce + +* **spruce did no cleanup at the close of the terminal.** The process ended + before spruce closed its media cache and its players. spruce now quits its + program at the close of the terminal, and then does the cleanup. +* **A pause state, a speed, or a volume that the player refused gave no + error.** spruce now shows the error. + +The shared packages `internal/player` and `internal/ui` have changes for +pine. spruce gets the new idle state of the player in each position tick, and +does not use it. + +## Development + +* Each correction has a test that failed before the correction, but not the + cleanup of spruce at the close of the terminal. The tests use a fake + Audiobookshelf server and the mock player of the app tests. The test of the + stalled stream plays a stream through the real libmpv. +* No real Audiobookshelf server ran for these corrections. The statements + about Audiobookshelf are from the source of the versions 2.35.1, 2.36.0, and + 2.37.1. +* pine and spruce did not run in a terminal for the corrections of the keys + and of the bookmarks. The tests send messages to the models and read the + views. +* The close of a terminal has a test for the function that the two programs + call. No test runs the `main` function of a program, because it needs a + terminal. For the first form of this correction, pine ran one time in a + pseudo-terminal, with no session. spruce did not run. +* No test makes libmpv refuse a pause state, a speed, or a volume. The tests + use a player that fails these calls. +* In CI on Windows, the tests `TestE2E_LoginFailure` and + `TestE2E_CacheSurvivesRestart` failed at times, and passed in the next run + of the same commit. The test helper waits 200 ms for a command. This release + does not change the two tests or the helper. + +## Requirements + +- Go 1.26.4 or newer, for an installation from source +- libmpv from [mpv](https://mpv.io/) 0.34 or later +- pine: an [Audiobookshelf](https://www.audiobookshelf.org/) server +- spruce: a [Jellyfin](https://jellyfin.org/) account with a music library diff --git a/docs/spruce/README.md b/docs/spruce/README.md index 849bc00..34effbb 100644 --- a/docs/spruce/README.md +++ b/docs/spruce/README.md @@ -191,7 +191,7 @@ Commit the notes and all release changes. Push them to `main`. Then use the release script: ```sh -./scripts/release.sh v0.8.1 +./scripts/release.sh v0.8.2 ``` The script verifies the repository, creates and pushes the exact annotated tag,