From 17a760bb910ad913ebd085833a79155cfcba549f Mon Sep 17 00:00:00 2001 From: andre-carbajal Date: Wed, 29 Jul 2026 20:02:59 -0500 Subject: [PATCH 1/5] feat: add NaviMusic blueprint template with docker-compose and configuration support for NaviMusic #1058 --- blueprints/navi-music/docker-compose.yml | 11 +++++++++++ blueprints/navi-music/meta.json | 17 +++++++++++++++++ blueprints/navi-music/navi-music.png | Bin 0 -> 14821 bytes blueprints/navi-music/template.toml | 12 ++++++++++++ 4 files changed, 40 insertions(+) create mode 100644 blueprints/navi-music/docker-compose.yml create mode 100644 blueprints/navi-music/meta.json create mode 100755 blueprints/navi-music/navi-music.png create mode 100644 blueprints/navi-music/template.toml diff --git a/blueprints/navi-music/docker-compose.yml b/blueprints/navi-music/docker-compose.yml new file mode 100644 index 000000000..78a323abf --- /dev/null +++ b/blueprints/navi-music/docker-compose.yml @@ -0,0 +1,11 @@ +services: + navimusic: + image: anvian/navi-music:latest + restart: unless-stopped + environment: + DISCORD_TOKEN: ${DISCORD_TOKEN} + SPOTIFY_CLIENT_ID: ${SPOTIFY_CLIENT_ID} + SPOTIFY_CLIENT_SECRET: ${SPOTIFY_CLIENT_SECRET} + YOUTUBE_POTOKEN: ${YOUTUBE_POTOKEN} + YOUTUBE_VISITOR: ${YOUTUBE_VISITOR} + YOUTUBE_OAUTH2: ${YOUTUBE_OAUTH2} diff --git a/blueprints/navi-music/meta.json b/blueprints/navi-music/meta.json new file mode 100644 index 000000000..05f005e92 --- /dev/null +++ b/blueprints/navi-music/meta.json @@ -0,0 +1,17 @@ +{ + "id": "navimusic", + "name": "NaviMusic", + "version": "latest", + "description": "A Discord music bot that plays YouTube and Spotify tracks and playlists in voice channels.", + "logo": "navimusic.svg", + "links": { + "github": "https://github.com/andre-carbajal/NaviMusic", + "website": "https://github.com/andre-carbajal/NaviMusic", + "docs": "https://github.com/andre-carbajal/NaviMusic#configuration" + }, + "tags": [ + "discord", + "music", + "bot" + ] +} diff --git a/blueprints/navi-music/navi-music.png b/blueprints/navi-music/navi-music.png new file mode 100755 index 0000000000000000000000000000000000000000..ec554749a411880e3bc1b25bdb2373efc3ada8ba GIT binary patch literal 14821 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 cfNflXR6T+Cu75Tgy^y`~=pU(t}humAu6 literal 0 HcmV?d00001 diff --git a/blueprints/navi-music/template.toml b/blueprints/navi-music/template.toml new file mode 100644 index 000000000..fa7b3da80 --- /dev/null +++ b/blueprints/navi-music/template.toml @@ -0,0 +1,12 @@ +[config] +env = [ + "# Required: create a Discord bot and paste its token.", + "DISCORD_TOKEN=", + "# Optional but recommended for Spotify links: https://developer.spotify.com/dashboard", + "SPOTIFY_CLIENT_ID=", + "SPOTIFY_CLIENT_SECRET=", + "# Optional YouTube authentication. See NaviMusic's README for how to obtain these values.", + "YOUTUBE_POTOKEN=", + "YOUTUBE_VISITOR=", + "YOUTUBE_OAUTH2=", +] From beb15e6f1c27ce2d8833426cc84a4ca0f6660c31 Mon Sep 17 00:00:00 2001 From: andre-carbajal Date: Wed, 29 Jul 2026 20:04:28 -0500 Subject: [PATCH 2/5] fix: align NaviMusic blueprint metadata --- blueprints/navi-music/docker-compose.yml | 6 ++++-- blueprints/navi-music/meta.json | 6 +++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/blueprints/navi-music/docker-compose.yml b/blueprints/navi-music/docker-compose.yml index 78a323abf..1ba44f1c0 100644 --- a/blueprints/navi-music/docker-compose.yml +++ b/blueprints/navi-music/docker-compose.yml @@ -1,6 +1,8 @@ +version: "3.8" + services: - navimusic: - image: anvian/navi-music:latest + navi-music: + image: anvian/navi-music:4.2.2 restart: unless-stopped environment: DISCORD_TOKEN: ${DISCORD_TOKEN} diff --git a/blueprints/navi-music/meta.json b/blueprints/navi-music/meta.json index 05f005e92..b04d0529d 100644 --- a/blueprints/navi-music/meta.json +++ b/blueprints/navi-music/meta.json @@ -1,9 +1,9 @@ { - "id": "navimusic", + "id": "navi-music", "name": "NaviMusic", - "version": "latest", + "version": "4.2.2", "description": "A Discord music bot that plays YouTube and Spotify tracks and playlists in voice channels.", - "logo": "navimusic.svg", + "logo": "navi-music.png", "links": { "github": "https://github.com/andre-carbajal/NaviMusic", "website": "https://github.com/andre-carbajal/NaviMusic", From f08ae1816706e3f519939397edede15bb8c145a5 Mon Sep 17 00:00:00 2001 From: Andre Carbajal Vargas Date: Wed, 29 Jul 2026 20:11:51 -0500 Subject: [PATCH 3/5] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- blueprints/navi-music/template.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blueprints/navi-music/template.toml b/blueprints/navi-music/template.toml index fa7b3da80..856bd6e84 100644 --- a/blueprints/navi-music/template.toml +++ b/blueprints/navi-music/template.toml @@ -1,8 +1,8 @@ [config] env = [ - "# Required: create a Discord bot and paste its token.", + # Required: create a Discord bot and paste its token. "DISCORD_TOKEN=", - "# Optional but recommended for Spotify links: https://developer.spotify.com/dashboard", + # Optional but recommended for Spotify links: https://developer.spotify.com/dashboard "SPOTIFY_CLIENT_ID=", "SPOTIFY_CLIENT_SECRET=", "# Optional YouTube authentication. See NaviMusic's README for how to obtain these values.", From 676011232012826e374d0253c6e0aba562db5ae2 Mon Sep 17 00:00:00 2001 From: andre-carbajal Date: Sun, 2 Aug 2026 17:50:46 -0500 Subject: [PATCH 4/5] fix: remove invalid NaviMusic env comment --- blueprints/navi-music/template.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/blueprints/navi-music/template.toml b/blueprints/navi-music/template.toml index 856bd6e84..892ee62aa 100644 --- a/blueprints/navi-music/template.toml +++ b/blueprints/navi-music/template.toml @@ -5,7 +5,6 @@ env = [ # Optional but recommended for Spotify links: https://developer.spotify.com/dashboard "SPOTIFY_CLIENT_ID=", "SPOTIFY_CLIENT_SECRET=", - "# Optional YouTube authentication. See NaviMusic's README for how to obtain these values.", "YOUTUBE_POTOKEN=", "YOUTUBE_VISITOR=", "YOUTUBE_OAUTH2=", From 29388e2e9182146ab29dd1c23431c0a0c8feddf7 Mon Sep 17 00:00:00 2001 From: Mauricio Siu Date: Thu, 6 Aug 2026 23:47:02 -0600 Subject: [PATCH 5/5] fix: pin NaviMusic to 4.1.0 and keep container alive without credentials 4.1.1+ throws at startup unless a valid YouTube OAuth2 refresh token (interactive device-code flow) is provided, so no placeholder config can ever boot those tags. 4.1.0 is the newest release that boots without it. Also wrap the entrypoint so a clean exit (empty/invalid DISCORD_TOKEN is logged, not thrown) idles with instructions in the logs instead of restart-looping; non-zero exits still hit the restart policy. Co-Authored-By: Claude Fable 5 --- blueprints/navi-music/docker-compose.yml | 24 +++++++++++++++++++++--- blueprints/navi-music/meta.json | 2 +- blueprints/navi-music/template.toml | 1 + 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/blueprints/navi-music/docker-compose.yml b/blueprints/navi-music/docker-compose.yml index 1ba44f1c0..d0fd9543c 100644 --- a/blueprints/navi-music/docker-compose.yml +++ b/blueprints/navi-music/docker-compose.yml @@ -1,9 +1,27 @@ -version: "3.8" - services: navi-music: - image: anvian/navi-music:4.2.2 + # 4.1.0 is the newest release that can boot without a YouTube OAuth2 refresh + # token; 4.1.1+ throws at startup ("YouTube OAuth token is mandatory") unless + # a valid token obtained via an interactive device-code flow is provided, so + # newer tags can never boot with template defaults. + image: anvian/navi-music:4.1.0 restart: unless-stopped + # NaviMusic logs (rather than throws) when DISCORD_TOKEN is empty or invalid, + # then exits 0 because no JDA threads keep the JVM alive. Keep the container + # running in that case so first-time users see the instructions in the logs + # instead of a restart loop; real crashes (non-zero exits) still propagate to + # the restart policy. + entrypoint: + - sh + - -c + - >- + java $$JAVA_OPTS -jar /app/NaviMusic.jar nogui --spring.profiles.active=prod; + code=$$?; + if [ "$$code" -eq 0 ]; then + echo "NaviMusic is idle. Set DISCORD_TOKEN (and optionally Spotify/YouTube credentials) in the Environment tab, then redeploy."; + tail -f /dev/null; + fi; + exit $$code environment: DISCORD_TOKEN: ${DISCORD_TOKEN} SPOTIFY_CLIENT_ID: ${SPOTIFY_CLIENT_ID} diff --git a/blueprints/navi-music/meta.json b/blueprints/navi-music/meta.json index b04d0529d..a5aefed5b 100644 --- a/blueprints/navi-music/meta.json +++ b/blueprints/navi-music/meta.json @@ -1,7 +1,7 @@ { "id": "navi-music", "name": "NaviMusic", - "version": "4.2.2", + "version": "4.1.0", "description": "A Discord music bot that plays YouTube and Spotify tracks and playlists in voice channels.", "logo": "navi-music.png", "links": { diff --git a/blueprints/navi-music/template.toml b/blueprints/navi-music/template.toml index 892ee62aa..cc4a40cce 100644 --- a/blueprints/navi-music/template.toml +++ b/blueprints/navi-music/template.toml @@ -5,6 +5,7 @@ env = [ # Optional but recommended for Spotify links: https://developer.spotify.com/dashboard "SPOTIFY_CLIENT_ID=", "SPOTIFY_CLIENT_SECRET=", + # Optional YouTube tweaks (leave empty to use the default anonymous clients). "YOUTUBE_POTOKEN=", "YOUTUBE_VISITOR=", "YOUTUBE_OAUTH2=",