Skip to content

feat: MPRIS server of our own and release binaries for v0.8.0 - #5

Merged
Thelost77 merged 3 commits into
mainfrom
release/v0.8.0
Oct 12, 2026
Merged

Thelost77 merged 3 commits into
mainfrom
release/v0.8.0

Conversation

@Thelost77

Copy link
Copy Markdown
Owner

This pull request prepares v0.8.0. It has three commits.

1. MPRIS server of our own

github.com/quarckster/go-mpris-server is GPL-3.0. A binary that links it is under GPL-3.0, so release binaries could not have a permissive license.

internal/mpris/server.go is a new server. It is written from the MPRIS 2.2 specification and uses only godbus/dbus (BSD-2-Clause). go.mod no longer contains the GPL module.

Changes that an MPRIS client sees:

  • A Set of Volume with a value of a wrong type returns an error. With the old module it stopped the program (panic: reflect: Call using string as type float64).
  • The metadata contains only the fields that have a value. Before, it contained 22 fields.
  • The introspection data shows only the interfaces that exist. Before, it also showed TrackList and Playlists.
  • PropertiesChanged does not contain Position or CanControl.

2. Release binaries

.github/workflows/release.yml starts when a GitHub Release is published. It builds pine and spruce for linux/amd64, linux/arm64, darwin/amd64, darwin/arm64, and windows/amd64, and attaches 10 archives to the release.

Each archive contains the program, LICENSE, and a licenses directory with the license texts of Go and of the linked modules. The job fails if the version in the binary is not the release tag.

3. Release preparation

docs/releases/v0.8.0.md, and the new version in the release steps of the two READMEs.

Verification

  • internal/mpris/server_linux_test.go starts the server on a private session bus and checks it as a client does. The same test file passed with the old module before the change.
  • gofmt, go vet, golangci-lint 2.14.0, and go test -race ./... pass locally.
  • playerctl and busctl work with the new server on a private bus.
  • pine was tested with the buttons of Bluetooth headphones, through BlueZ 5.72 and mpris-proxy.
  • The build and check steps of the release workflow ran locally on a scratch copy with a v0.8.0 tag: 10 archives, spruce --version printed spruce v0.8.0, and no archive contains GPL text.

Not verified

  • The release workflow has not run on GitHub. Its first run is the v0.8.0 release.
  • The new spruce build has not run with real playback. It uses the same server package as pine.
  • The binaries for linux_arm64, macOS, and Windows have not run on a test machine.

After the merge, the release is one command on main:

./scripts/release.sh v0.8.0

🤖 Generated with Claude Code

Wiktor Ziębka and others added 3 commits October 12, 2026 14:13
github.com/quarckster/go-mpris-server is GPL-3.0. A binary that links
it is under GPL-3.0, so the release binaries could not have a
permissive license.

internal/mpris now has a server of its own. It is written from the
MPRIS 2.2 specification and uses only godbus/dbus. The apps call
PlaybackChanged, StatusChanged, MetadataChanged, VolumeChanged, and
Seeked on it.

Changes that an MPRIS client sees:
- A Set of Volume with a value of a wrong type returns an error. With
  the old module it stopped the program.
- The metadata contains only the fields that have a value.
- The introspection data shows only the interfaces that exist.
- PropertiesChanged does not contain Position or CanControl.

server_linux_test.go starts the server on a private session bus and
checks it as a client does. The same test passed with the old module
before the change. With PINE_REQUIRE_DBUS=1 it fails if dbus-daemon is
absent. CI and scripts/release.sh set that variable.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
The Release workflow starts when a GitHub Release is published. It
builds pine and spruce with CGO_ENABLED=0 for linux/amd64, linux/arm64,
darwin/amd64, darwin/arm64, and windows/amd64, and attaches one archive
for each program and each system to the release.

Each archive contains the program, the LICENSE file, and the license
texts of Go and of the modules that the program links.

The job fails if the version in the binary is not the release tag.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Add the release notes for v0.8.0, the release with binaries and with
the MPRIS server of our own. Name the new version in the release steps
of the two READMEs.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@Thelost77
Thelost77 merged commit 20cb780 into main Oct 12, 2026
6 checks passed
@Thelost77
Thelost77 deleted the release/v0.8.0 branch October 12, 2026 12:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant