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
2 changes: 2 additions & 0 deletions .sparkle/notes/2.11.0.md → .changes/2.11.0.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
## 2.11.0 - 2026-08-12

- New: Inspector window describing the file you are playing. Open it from the Window menu, or press Command-I
- Fixed: A file exactly one hour long showed its length as 60:00 rather than 1:00:00
- Fixed: Closing the player window left the file loaded, so the playback controls and menu items stayed active with nothing playing
Expand Down
2 changes: 2 additions & 0 deletions .sparkle/notes/3.0.0.md → .changes/3.0.0.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
## 3.0.0 - 2026-08-22

- New: Front Row offers to convert and play MKV files if possible (using FFmpeg)
- New: Open URL distinguishes between network issue and actually unplayable files
- Changed: Experience Spatial Audio menu item renamed to Play Spatial Audio Sample
Expand Down
2 changes: 2 additions & 0 deletions .sparkle/notes/3.0.1.md → .changes/3.0.1.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
## 3.0.1 - 2026-08-26

- Fixed: Audio Track and Subtitle menus displayed “None” for some files
- Fixed: Tracks with no language tag were listed as “Unknown language” rather than by their name or number
- Fixed: Handling files with multichannel Opus or MP3 audio tracks
2 changes: 2 additions & 0 deletions .sparkle/notes/3.1.0.md → .changes/3.1.0.md
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
## 3.1.0 - 2026-09-30

- New: File ▸ Move to Trash moves the playing file to the Trash and returns to the welcome window. Hold Option for Delete Immediately…, which deletes it outright after asking
49 changes: 49 additions & 0 deletions .changes/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Release notes

Release notes are kept with [Changie](https://changie.dev) (`brew install changie`).
Every user-facing change adds a fragment in the same pull request:

```sh
changie new # prompts for the kind and the text
changie new --kind Fixed --body "Something that was broken"
```

Kinds are `New`, `Changed`, `Fixed` and `Updated`. With the release type `auto`,
`New` bumps the minor version and the others bump the patch. Changes users don't
notice (CI, refactors, docs) get no fragment.

The release workflow batches `unreleased/` into `<version>.md`, regenerates
`CHANGELOG.md`, and stamps the version into the project. The file becomes the
GitHub release body as written, and `scripts/render-notes.sh` converts it to the
HTML fragment embedded in the appcast's `<description>` CDATA and shown in
Sparkle's update dialog. Each fragment becomes one line, in the format below, so
write for users rather than summarizing commits:

```markdown
- New: Something people asked for
- Fixed: Something that was broken
```

For a free-text note above the list (e.g. `**Note**: Anything worth calling out
before updating.`), write `unreleased/header.md` before releasing. The release
consumes it.

Lists, paragraphs, bold, italic, links, tables, task lists, and strikethrough
all work. Two things are rejected, because each would reach one destination and
not the other:

- **HTML tags**. GitHub renders them, but the appcast conversion drops them, so
the release page and Sparkle's dialog would disagree.
- **Code blocks**, including a line indented four spaces. The appcast is
indented to match, and that indentation would show inside a `<pre>`.

Footnotes are the one GitHub construct left unsupported, and render as literal
`[^1]` markers.

Rendering uses [cmark-gfm](https://github.com/github/cmark-gfm), GitHub's own
Markdown implementation, so Sparkle shows what the release page shows. To run
the script tests locally: `brew install cmark-gfm`.

The `<version>.md` files are the archive of what shipped in each release. Notes
up to 2.11.0 were written as HTML fragments and have been converted; the appcast
entries already published keep the HTML they shipped with.
3 changes: 3 additions & 0 deletions .changes/header.tpl.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Changelog

What changed in each release of Front Row. Generated by [Changie](https://changie.dev) from `.changes/`; edit those files, not this one.
Empty file added .changes/unreleased/.gitkeep
Empty file.
38 changes: 38 additions & 0 deletions .changie.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Release notes and versioning. Each user-facing change adds a fragment with
# `changie new`; the release workflow batches them into .changes/<version>.md,
# which becomes the GitHub release body and, rendered to HTML by
# scripts/render-notes.sh, the Sparkle update notes. See .changes/README.md.
changesDir: .changes
unreleasedDir: unreleased
headerPath: header.tpl.md
changelogPath: CHANGELOG.md
versionExt: md
# Optional free text (e.g. "**Note**: …") placed above the changes. Create
# .changes/unreleased/header.md before the release; batch consumes it.
versionHeaderPath: header.md
versionFormat: '## {{.Version}} - {{.Time.Format "2006-01-02"}}'
kindFormat: ""
changeFormat: "- {{.Kind}}: {{.Body}}"
body:
block: false
kinds:
- label: New
auto: minor
- label: Changed
auto: patch
- label: Fixed
auto: patch
- label: Updated
auto: patch
newlines:
afterChangelogHeader: 0
afterVersion: 1
beforeChangelogVersion: 1
endOfVersion: 1
# Applied by `changie merge`: the marketing version lives at project level in
# project.xcproj (four spaces of indentation). The build number is the commit
# count and is passed to the build, never written back.
replacements:
- path: Front Row.xcodeproj/project.xcproj
find: '^ "MARKETING_VERSION": ".*",$'
replace: ' "MARKETING_VERSION": "{{.VersionNoPrefix}}",'
19 changes: 0 additions & 19 deletions .github/ExportOptions.plist

This file was deleted.

16 changes: 16 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,22 @@ jobs:
brew update
brew install cmark-gfm

- name: Install Changie
uses: miniscruff/changie-action@v3
with:
version: v1.26.0

# Every fragment must parse and have a known kind, or the release would
# fail at its first step.
- name: Check the Changie fragments
run: |
set -euo pipefail
if compgen -G ".changes/unreleased/*.yaml" >/dev/null; then
changie batch auto --dry-run
else
echo "No unreleased changes"
fi

- name: Run script tests
run: |
failures=0
Expand Down
Loading
Loading