Skip to content

Commit a0d356c

Browse files
authored
Write release notes by hand (#21)
The 0.3.0 release said "What's Changed: Make the app the product, not the CLI" and linked two pull requests. That is what was merged, which is not what changed for the person installing it — nothing in it mentions that the hotkey is now recorded, or that Delete exists, or that seven commands went away. CHANGELOG.md holds the notes, in the same plain register as the README, and the release job reads the section matching the tag. It runs before the build rather than after, so a version with no section fails in seconds instead of once Apple has finished notarizing it — an empty section counts as missing, because it is the same mistake. `body` and `generate_release_notes` together: GitHub puts the written notes first and appends the merged-PR list and the full-changelog link underneath, so the notes lead and the provenance stays one click away. Older releases are left alone; the file says where to find them.
1 parent b511da1 commit a0d356c

2 files changed

Lines changed: 104 additions & 0 deletions

File tree

.github/workflows/release.yml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,32 @@ jobs:
5454
grep -qF 'version: "${{ steps.v.outputs.version }}"' Sources/yap/Yap.swift \
5555
|| { echo "Sources/yap/Yap.swift version literal != ${{ steps.v.outputs.version }} — bump it first" >&2; exit 1; }
5656
57+
# Before the twenty minutes of build and notarization, so a release with
58+
# no notes fails in seconds rather than after Apple has stamped it.
59+
# Notes are written by hand: the generated list of PR titles says what
60+
# was merged, which is not the same as what changed for the person
61+
# installing it.
62+
- name: Read the release notes
63+
id: notes
64+
run: |
65+
V="${{ steps.v.outputs.version }}"
66+
awk -v want="## $V" '
67+
$0 == want { found = 1; next }
68+
found && /^## / { exit }
69+
found { print }
70+
' CHANGELOG.md > notes.md
71+
# -s rather than -f: an empty section is the same mistake as a
72+
# missing one, and both should stop the release.
73+
[ -s notes.md ] || {
74+
echo "CHANGELOG.md has no '## $V' section — write the notes first" >&2
75+
exit 1
76+
}
77+
{
78+
echo 'body<<YAPNOTES'
79+
cat notes.md
80+
echo 'YAPNOTES'
81+
} >> "$GITHUB_OUTPUT"
82+
5783
- name: Cache SwiftPM
5884
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
5985
with:
@@ -121,6 +147,10 @@ jobs:
121147
dist/yap-${{ steps.v.outputs.version }}.dmg.sha256
122148
dist/yap-${{ steps.v.outputs.version }}.zip
123149
dist/yap-${{ steps.v.outputs.version }}.zip.sha256
150+
# Both: GitHub puts `body` first and appends its own list of merged
151+
# pull requests and the full-changelog link underneath, so the notes
152+
# lead and the provenance is still one click away.
153+
body: ${{ steps.notes.outputs.body }}
124154
generate_release_notes: true
125155
fail_on_unmatched_files: true
126156

CHANGELOG.md

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# Changelog
2+
3+
What changed, for the person using yap. The release workflow reads the section
4+
matching the tag and publishes it as the release notes, so a version with no
5+
section here does not ship.
6+
7+
Releases before 0.3.0 are on the
8+
[Releases page](https://github.com/TerrifiedBug/yap/releases).
9+
10+
## 0.3.0
11+
12+
yap is an app now. Everything that used to need a terminal happens in the menu
13+
bar, and the command line is down to the one thing a terminal is genuinely
14+
better at.
15+
16+
### Setting up
17+
18+
- Launch yap from Applications and it asks for what it needs — Accessibility
19+
first, then the microphone — each one click from the right pane of System
20+
Settings.
21+
- The menu bar mark appears straight away and says what it is doing while the
22+
model downloads, instead of yap being invisible for the first few minutes of
23+
its life. Holding the key during that says so rather than recording into
24+
nothing.
25+
- A missing Accessibility grant no longer stops yap. It waits, and starts
26+
listening the moment you tick the box — no relaunch.
27+
- If macOS has the 🌐 key doing something else, the menu says which action and
28+
offers to open Keyboard settings.
29+
30+
### The hotkey
31+
32+
- Set it by pressing it: Settings → Dictation, click the field, hold what you
33+
want.
34+
- Any modifier on its own, now including the left-hand ones — or a chord like
35+
⌘⇧Space, or a function key like F5. A chord is swallowed while yap holds it,
36+
so the app underneath never sees the keystroke.
37+
38+
### Settings
39+
40+
- A new General pane: launch at login, updates, and a button that reveals the
41+
logs in Finder.
42+
- yap can update itself. "Check Now" downloads the new build, checks it is
43+
signed by the same identity as the one running, and offers
44+
"Update to x.y.z · Restart" in the menu — never while a recording is in
45+
flight. There is no background check: yap makes no network request of its own
46+
after the model is on disk unless you ask for one.
47+
48+
### Recordings
49+
50+
- The transcript banner gained **Delete**. It moves the session to the Trash and
51+
offers Undo, so a mis-click on a banner that appeared by itself costs nothing.
52+
53+
### Faster where you can feel it
54+
55+
- The recording pill now appears when you press the key rather than when the
56+
microphone finishes opening: **1.9 ms** instead of 70 ms, measured over ten
57+
presses. Transcription itself is unchanged — 39 ms for a five-second clip.
58+
59+
### Removed
60+
61+
- `yap setup`, `yap install`, `yap start`, `yap stop`, `yap doctor`,
62+
`yap record` and `yap models`. The menu bar does all of it.
63+
`yap bench --audio FILE` stays, at
64+
`/Applications/yap.app/Contents/MacOS/yap`.
65+
- The `--model`, `--hotkey`, `--no-overlay`, `--newline` and `--skip-doctor`
66+
flags. Settings covers every one of them.
67+
- Homebrew no longer puts a `yap` command on your PATH.
68+
69+
### Upgrading
70+
71+
`brew upgrade --cask yap` handles everything, including rewriting the login
72+
item that 0.2 left behind. If you installed from the .dmg and use launch at
73+
login, launch yap once after replacing the app — otherwise the old login item
74+
keeps trying to start it with an argument this version no longer takes.

0 commit comments

Comments
 (0)