github sentriz/gonic v0.19.0
gonic v0.19.0

one day ago

This release uses WebAssesmby for the tagging and database backends. This means that gonic no longer requires Cgo or external dependencies to build. As a result, static binaries will be available in the releases page, and Docker images for more architectures. Performance of scanning and tagging should also be improved.

Features

  • build: add Cgo free database (505f7d8)
  • build: add Cgo free tagging backend (7802e20)
  • ci: merge nightly and debug workflows (ca85eed)
  • ci: remove Cgo dependencies, cross compile without QEMU, upload static binaries (e3db819)
  • ffprobe: add more supported file types (8e7820a)
  • gonic: add scan-embedded-cover-enabled flag (c69cb8c)
  • gonic: use wrtag/normtag for nag normalisation (aba758f)
  • subsonic: also read unsynced lyrics from .txt files and tag metadata (eb0d8fd), closes #593
  • subsonic: keep original cover file format when caching (#609) (1af4ce3), closes #11
  • subsonic: return genres for getAlbumListTwo2 (3909e9b), closes #605
  • subsonic: support embedded cover art (ec7cffd), closes #11 #556
  • subsonic: support embedded track level cover art (d66814b), closes #11
  • tags: add ffprobe reader (3a9c03a)
  • tags: add Properties.HasCover (bc0b6c0)
  • tags: add ReadCover interface method (e413bc3)

⚠ Note to package maintainers

  • The sqlite-dev and libtag-dev (or your distro's equivalents) packages are no longer required; please remove them from package dependencies.
  • Build with CGO_ENABLED=0 to produce static binaries.

gonic now vendors reproducible WebAssembly backends for TagLib and SQLite, eliminating Cgo and external system libraries. Builds are fully static, cross-compiling is straightforward, and supply-chain verification is easier.

Verify the vendored WASM artifacts using Artifact Attestations:

Example build pipeline:

$ git clone https://github.com/sentriz/gonic
$ cd gonic

$ sha256sum "$(go list -m -f '{{.Dir}}' go.senan.xyz/taglib)/taglib.wasm"
# expected ca5ce04b35f1e6cad8b8d9f00906a4c108ccd004b56e713db5ce69aa69b3805d (https://github.com/sentriz/go-taglib/attestations/11402786)

$ sha256sum "$(go list -m -f '{{.Dir}}' github.com/ncruces/go-sqlite3)/embed/sqlite3.wasm"
# expected 117262b6241d8de78ba564a44383fa1562e52f1a978de269e20a02b3c06c02e3 (https://github.com/ncruces/go-sqlite3/attestations/11344814)

$ CGO_ENABLED=0 go build ./cmd/gonic/.

Opting out of WebAssembly:

  • If you prefer not to use the WebAssembly binaries, you can build with nowasm:
$ go build -tags nowasm ./cmd/gonic/.
  • This mode is not supported, and tagging/scan performance will degrade.
  • Cgo will be used for sqlite, so sqlite-dev is still required.
  • ffprobe will be used for tagging, so that must be available in $PATH. libtag-dev is still not used in this mode.

Don't miss a new gonic release

NewReleases is sending notifications on new releases.