7 Commits
Author SHA1 Message Date
Miles WardandClaude Fable 5.1 6fa37315d8 publish: force gzip on every layer so no blob exceeds Cloudflare's 100 MB
Build and Test / Build and Test (push) Successful in 1m12s
bitnami/minideb ships its base layer as an uncompressed 133 MB tar; with
the containerd image store docker push sends it as-is and Cloudflare in
front of Gitea answers 413. Build with force-compression=true (base layer
becomes ~43 MB) and document why.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
v0.7.1
2026-09-17 19:27:05 -04:00
Miles WardandClaude Fable 5.1 557eee9a06 publish script: find Docker CLI plugins under the private DOCKER_CONFIG
Build and Test / Build and Test (push) Successful in 3m31s
With an isolated DOCKER_CONFIG the CLI looks for buildx only in
$DOCKER_CONFIG/cli-plugins, fell back to the legacy builder, and rejected
--provenance. Symlink the user's plugin dir, honour Homebrew's, and fail
early if buildx is still missing.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-17 19:21:22 -04:00
Miles WardandClaude Fable 5.1 e772eb7c2b Gitea copy: $uicide Music Bot — image, Unraid template, CI, publishing
Build and Test / Build and Test (push) Canceled after 1m24s
Fork of purnell569/MusicBot 0.7.1 (JMusicBot), kept here as a reliable
copy with a container image built and served from this Gitea.

- README retitled "$uicide Music Bot"; lineage table, Gitea image, Unraid
  and release instructions. Nothing under src/ changes.
- Dockerfile: Maven stage on $BUILDPLATFORM (JAR is arch-neutral, so no
  QEMU for the build), OCI labels point at this repo and record commit and
  version via GIT_SHA/VERSION build args.
- docker/entrypoint.sh: check the data dir is writable up front (the bot's
  own error for that is a misleading "another instance is running"), and
  on a missing config.txt run the bot's generate-config and stop with
  instructions instead of prompting on a console that does not exist.
- deploy/unraid/musicbot.xml: Unraid template, --user 99:100 default.
- .gitea/workflows/build-and-test.yml: mvn verify + docker build on push;
  its presence makes Gitea ignore the GitHub-only workflows in .github/.
- scripts/build-and-publish-unraid.sh + docs/PUBLISHING.md: release
  runbook (keychain-safe registry push, release with zipped JAR).
- docker-compose.example.yml points at the Gitea image.

Upstream's v0.7.1 tag is preserved as upstream/v0.7.1; this repository's
own release tag v0.7.1 is on this commit.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-09-17 19:19:59 -04:00
purnell569 9991962e86 Point CI workflows at main instead of master
This repository's default branch is main, but every workflow was still keyed to
master, so none of them could ever run:

- build-and-test.yml triggered on push/PR to master, so CI never fired and the
  README's build badge had no status to report.
- docker-publish.yml keyed off a successful build-and-test run on master, so it
  never fired either. Only trigger filters and comments referenced the branch;
  the tag-vs-branch logic was already branch-agnostic.
- make-release.yml actively refused to run, failing with "Regular releases can
  only be created from the 'master' branch."

Also updated the branch names throughout docs/DEVELOPMENT_WORKFLOW.md to match.
upstream/v0.7.1
2026-09-11 14:15:12 +09:30
purnell569 60f3a6d693 Repoint fork references from arif-banai to purnell569
Anything that describes or acts on *this* repository now points here. Attribution
to the upstream authors is deliberately left untouched.

Functional, would otherwise misbehave on this fork:
- Docker workflows pushed to a ghcr namespace this account cannot write to.
- scripts/run_jmusicbot.sh auto-updated from arif-banai's releases, so it would
  have replaced this jar with the upstream one.
- pom.xml scm/issueManagement/ciManagement described the upstream repo.
- Removed .github/FUNDING.yml, which put a Sponsor button on this repo that
  funded arif-banai.

Cosmetic:
- Badges repointed; dropped the CircleCI, CodeFactor and Discord badges, which
  reported on services this fork is not registered with.
- License badge now targets main rather than master.
- Fixed the README header image: it was a float-right <img> that overlapped the
  note block, now centred above the title with alt text.
- Refreshed the stale JMusicBot-0.6.2 jar name in the run examples.

Left alone on purpose: copyright headers, pom.xml <developers>, the NOTICE and
README credit tables, and the upstream commit provenance in docs/ARCHITECTURE.md.
2026-09-11 14:01:42 +09:30
purnell569 c566a4e565 Release 0.7.1
Bump version from 0.7.0 to 0.7.1 for the YouTube playback fixes.

The version flows from pom.xml into the jar name and the manifest's
Implementation-Version, which is what the bot reports at runtime and what the
update checker compares against, so no other file needed changing. The Dockerfile
and release workflow already reference the jar by wildcard.
2026-09-11 13:51:17 +09:30
purnell569 0941987234 Initial commit
Based on JMusicBot by jagrosh (https://github.com/jagrosh/MusicBot),
via the maintained fork by arif-banai (https://github.com/arif-banai/MusicBot).
See NOTICE for attribution. Licensed under Apache 2.0.

YouTube-side changes had broken playback entirely. Fixes:

- Apply the remote signature cipher independently of OAuth. Deciphering and
  authentication are unrelated, but the cipher was only configured when OAuth
  was enabled, so the default install fell back to the bundled extractor and
  failed with "Must find sig function from script: /s/player/<id>/...".
  Now always applied, and configurable via playback.youtube.remoteCipher.url.

- Add the ANDROID client and order the client list by reliability. ANDROID is
  currently the only client YouTube reliably streams to anonymously. WEB moves
  last, as YouTube answers it with SABR-only responses carrying no playable
  format ("No supported audio streams available, available types:").

- Detect sign-in failures across the whole exception graph. The existing hint
  could never fire: it matched the aggregate AllClientsFailedException message
  rather than the per-client reasons, and compared against an ASCII apostrophe
  while YouTube sends U+2019.

- Track youtube-source past 1.18.2, which predates the TV client User-Agent fix
  and the contentLength recovery fix.

Measured on previously failing tracks: 5/5 playing, stable across repeat runs
(was 1/5). No OAuth required. Adds 17 tests; 676 unit + 48 integration pass.
2026-09-11 13:47:20 +09:30