152 Commits

Author SHA1 Message Date
Deluan
dc3ead97f7
Upgrade go.mod to 1.23, allow override CI_RELEASER_VERSION for make single and make all 2026-01-02 20:39:14 +00:00
Deluan Quintão
e766adaa03
Upgrade TagLib 2.0.2, GoReleaser 2.2.0 (#3217)
* Upgrade ci-goreleaser

* Fix tests

* Fix taglib lib path in macOS
2026-01-02 20:39:13 +00:00
Deluan
de64b62edb
Deprecate buildall 2026-01-02 20:37:43 +00:00
Deluan
4cf8fca63d
Build UI bundle on demand 2026-01-02 20:37:43 +00:00
Deluan
453e1371b6
Update Go to 1.22.3 2026-01-02 20:36:55 +00:00
Deluan
b20e3ae337
Fix migration package name mismatch 2026-01-02 20:36:54 +00:00
Deluan
ce14bf9d8e
Add make target to build docker image 2026-01-02 20:35:03 +00:00
Deluan Quintão
9bca8adb12
Update Go to 1.22.2 and TagLib to 2.0.1 (#2946) 2026-01-02 20:34:46 +00:00
Deluan
26a53c717e
Use new ci-goreleaser (with TagLib 2) 2026-01-02 20:33:14 +00:00
Deluan Quintão
cf3754e868
Upgrade to Go 1.22 and Node v20 (#2861)
* Remove workaround for missing `context.WithoutCancel` in Go 1.20

* Upgrade to Go 1.22

* Upgrade GitHub Actions

* Upgrade Node to v20
2026-01-02 20:33:00 +00:00
Deluan Quintão
83fddba87d
Bump Go version to 1.21.5 (#2729) 2026-01-02 20:32:36 +00:00
Deluan
d950a2b25b
Remove tools.go 2026-01-02 20:31:54 +00:00
Deluan
e0d4ef979d
Use TagLib 1.13.1 for snapshots/releases 2026-01-02 20:31:30 +00:00
Deluan
db81d98a10
Fixed deprecated GoReleaser options 2026-01-02 20:31:30 +00:00
Deluan
322bac297f
Bump Go to 1.21.4 2026-01-02 20:31:30 +00:00
Matthias Schmidt
e31500e80e
Jukebox mode (#2289)
* Adding cache directory to ignore-list

* Adding jukebox-related config options

* Adding DevEnableJukebox config option pls. dummy server

* Adding types and routers

* Now without panic

* First draft on parsing the action

* Some cleanups

* Adding playback server

* Verify audio device configuration

* Adding debug-build target to have full symbol support

* Adding beep sound library pls some example code. Not working yet

* Play a fixed mp3 on any interface access for testing purposes

* Put action code into separate file, adding stringer, more debug output, prepare structs, validation

* Put action parameter parser code where it belongs

* Have a single Action transporting all information

* User fmt.Errorf for error-generation

* Adding wide playback interface

* Use action map for parsing, stringer instead switch stmt.

* Use but only one switch case and direct dispatch, refactoring

* Add error handling and pushing to client

* send decent errormessage, no internal server error

* Adding playback devices slice and load it from config

* Combine config-verification and structure init

* Return user-specific device

* Separate playback server from device

* Use dataStore to retrieve mediafile by id

* WIP: Playlist and start/stop handling. Doing start/stop the hard way as of now

* WIP: set, start and stop work on one single song. More to come

* Dont need to wait for the end

* Merge jukebox_action.go into jukebox.go

* Remove getParameterAsInt64(). Use existing requiredParamInt() instead

* Dont need to call newFailure() explicitly

* Remove int64, use int instead.

* Add and set action now accept multiple ids

* Kickout copy of childFromMediaFile(). It is not needed here.

* Refactoring devices and playbackServer

* Turn (internal) playback.DeviceStatus into subsonic JukeboxStatus when rendering output. Indexes int64 -> int

* Now we have a position and playing status

* Switching gain to float32, xs:float is defined as 32 bit. Fixing nasty copy/pointer bug

* Now with volume control

* Start working the queue

* Remove user from device interface

* Rename function GetDevice -> GetDeviceForUser to make intention clearer

* Have a nice stringer for the queue

* User Prepared boolean for now to allow pause/unpause

* Skipping works, but without offsets

* Make ChildFromMediaFile public to be used in jukebox get() implementation

* Return position in seconds and implement offset-skip in seconds

* Default offset to 0

* Adding a simple setGain implementation

* Prepare for transcoding AAC

* WIP: transcode to WAV to use beeps wav decoder. Not done yet.

* WIP: out of sheer desparation: convert to MP3 (which works) rather than WAV to troubleshoot issue.

* Use FLAC as intermediate format to play Apple AAC

* A bit of cleanup

* Catching the end-of-stream event for further reactions

* Have a trackSwitching goroutine waiting on channel when track ends

* Move decoder code into own file. Restructure code a bit

* Now with going on to play the next song in the playlist

* Adding shuffle feature

* Implementing remove action

* Cleanup code

* Remove templates for ffmpeg mp3 generation. Not needed anymore.

* Adding some documentation

* Check whether offset into track is in range. Fixing potential remove track bug. Documentation

* Make golangci-lint happy: handling return values

* Adding test suite and example dummy for playback package

* Adding some basic queue tests

* Only use Jukebox.Enabled config option

* Adding stream closing handling

* Pass context.Context to all PlaybackDevice methods

* Remove unneeded function

* Correct spelling

* Reduce visibility of ChildFromMediaFile

* Decomplicate action-parsing

* Adding simple tempfile-based AAC->FLAC transcoding. No parallel reading and writing yet.

* Try to optimize pipe-writing, tempfile-handling and reading. Not done yet.

* Do a synchronous copy of the tempfile. Racecondition detected

* More debugging statements and fixing the play/pause bug. More work needed

* Start the trackSwitcher() with each device once. Return JSON position even if its 0. More debug-output

* Moving all track-handling code into own module

* Fix typo. Do not pass ctx around when not applicable

* WIP: More refactoring, debugging output

* Fix nil pointer

* Repairing MP3 playback by pinning indirect dependencies: hajimehoshi/go-mp3 and hajimehoshi/oto

* Do not forget to cleanup after a skip action

* Make resync with master easy

* Adding missing mocks

* Adding missing error-handling found by linter

* Updating github.com/hajimehoshi/oto

* Removing duplicate function

* Move BEEP-related code into own package

* Juggle beep-related code around as preparation for interface access

* More refactoring for interface separation

* Gather CloseDevice() behind Track interface.

* Adding skeleton, draft audio-interface using mpv.io

* Adding majority of interface commands using messages to mpv socket.

* Adding end-of-stream handling

* MPV: start/stop are working

* postition is given in float in mpv

* Unify Close() and CloseDevice(). Using temp filename for controlling socket

* Wait until control-socket shows up. Cleanup socket in Close()

* Use canceable command. Rename to Executor

* Skipping tracks works now

* Now with actually setting the position

* Fix regain

* Add missing error-handling found by linter

* Adding retry mode on time-pos property getter

* Remove unneeded code on queue

* Putting build-tag beep onto beep files

* Remove deprecated call to rand.Seed()

"As of Go 1.20 there is no reason to call Seed with a random value. Programs that call Seed with a known value to get a specific sequence of results should use New(NewSource(seed)) to obtain a local random generator."

* Using int32 to conform to Subsonic API spec

* Fix merge error

* Minor style changes

* Get username from context

---------

Co-authored-by: Deluan <deluan@navidrome.org>
2026-01-02 20:29:11 +00:00
Deluan Quintão
879688cc6a
Upgrade to Go 1.21 (#2475)
* Upgrade to Go 1.21

* Remove 'replacements' from goreleaser config
2026-01-02 20:28:31 +00:00
Deluan
e0befe24d0
Fix typo 2026-01-02 20:27:56 +00:00
Deluan
3edec760fb
Add format target to Makefile 2026-01-02 20:27:56 +00:00
tomleb
c8fd9190e1
Allow configuring cache folder (#2357)
* Set all clients to dev_download for make get-music

* Use multiple TranscodingCache instances in tests

This fixes flaky tests. The issue is that the TranscodingCache object
was being reused in tests from media_stream_Internal_test.go and
media_stream_test.go. If tests from the former was run first, the cache
would be filled up, so that when running tests from the latter, the `NON
seekable` test would fail.

* Allow configuring cache folder

This commit introduces a new configuration option to configure the cache
folder. This allows the cache to be in a separate folder such as
/var/cache/navidrome on Linux distributions.

* Fix tests

* Removed unused test setup code

---------

Co-authored-by: Deluan <deluan@deluan.com>
Co-authored-by: Deluan <deluan@navidrome.org>
2026-01-02 20:27:26 +00:00
Deluan
232f6fcf69
Add help msg for JS formatting errors 2026-01-02 20:25:45 +00:00
Deluan
407d21d31e
Upgrade to Go 1.20.3 and GoRelease 1.16.1 2026-01-02 20:25:45 +00:00
Deluan
7b326f0b21
Use Go 1.20 for local cross-compilation 2026-01-02 20:25:45 +00:00
Deluan
55c1d95376
Enable SQL migrations 2026-01-02 20:25:44 +00:00
Deluan
145bed52c5
Upgrade goose 2026-01-02 20:25:44 +00:00
Deluan
8be77a4c93
Remove some tools from dependencies, reducing the modules dependencies 2026-01-02 20:25:42 +00:00
Julien Voisin
b890fa0cb6
Shuffle the tests, just in case (#2272) 2026-01-02 20:25:18 +00:00
Deluan
87d3638ed4
Upgrade to Go 1.19.5 2026-01-02 20:20:21 +00:00
Deluan
b2ac58070a
Fix race conditions in tests 2026-01-02 20:17:21 +00:00
Deluan
3476e73043
Fix ARM v5 and v6 builds, by going back to armel.
Also upgrades Go to 1.19.3. Closes #1968
2026-01-02 20:16:00 +00:00
Deluan
180d23eb5c
Add make target to download some music for development purposes. Closes #1703 2026-01-02 20:15:58 +00:00
Deluan
3cfe1753f4
Reduce go mod download verbosity 2026-01-02 20:15:57 +00:00
Deluan
a1506402aa
Use armhf for ARM builds 2026-01-02 20:15:29 +00:00
Deluan
0ab1d0d3d0
Fix Linux 32 bits build 2026-01-02 20:15:29 +00:00
Deluan
8dfbf37548
Upgrade to GoLang 1.19 and bump golangci-lint version 2026-01-02 20:15:27 +00:00
Deluan
90bc1981d8
Upgrade Ginkgo to V2 2026-01-02 20:14:21 +00:00
Deluan
4b60d2af8f
Build with GoLang 1.18.4 2026-01-02 20:12:40 +00:00
Deluan
5d114aa55b
Upgrade to GoLang 1.18 2026-01-02 20:12:38 +00:00
whorfin
ba82ccee3b
Improve git-vs-tarball detection (#1423)
* Extract version from directory name if .git dir is missing

* Avoid using shell

* Remove .gitinfo build from pipeline

* Fix git-detecting rule to be robust in presence of setup-git
2026-01-02 20:09:00 +00:00
Deluan
8d97486708
Bump GoLang to 1.17.2 2026-01-02 20:08:57 +00:00
Deluan
dcaa478b7c
Upgrade to GoLang 1.17.1 2026-01-02 20:06:54 +00:00
Deluan Quintão
e8c6807f7e
Update GoLang to 1.17 (#1295)
* Update GoLang to 1.17

* Rename pipeline jobs
2026-01-02 20:06:53 +00:00
whorfin
a3499067a3
Extract version from directory name if .git dir is missing (#1327)
* Extract version from directory name if .git dir is missing

* Avoid using shell

* Remove .gitinfo build from pipeline
2026-01-02 20:06:33 +00:00
Deluan
3055240950
Give a warning on commands that do not build the frontend.
This is to avoid confusions like this:
https://github.com/navidrome/navidrome/issues/1297#issuecomment-913007331
2026-01-02 20:06:33 +00:00
Deluan
9fde6b8834
Setup git hooks when running make setup 2026-01-02 20:06:12 +00:00
Deluan Quintão
313639d522
Add git version info to release source (#1250) 2026-01-02 20:06:07 +00:00
Deluan
422d72f016
Reorder Makefile dev targets 2026-01-02 19:31:10 +00:00
Deluan
fbfe1af318
Upgrade TagLib to 1.12 2026-01-02 19:31:10 +00:00
Deluan
3e56e834a4
Upgrade to go-chi 5 2026-01-02 19:31:07 +00:00
Deluan
357f57cbe7
Revert "Better way to invoke make single"
This reverts commit 73efbd90
2026-01-02 19:26:43 +00:00