Skip to content

gonic v0.19.0

Latest

Choose a tag to compare

@github-actions github-actions released this 11 Oct 15:19
b957f50

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.