The go-mp3 library (v0.3.4) has a bug where Seek panics with a slice
bounds error for certain byte positions. This crashes the app when
restoring a saved playback position on startup.
Add bounds clamping and a recover wrapper around the seek call in
seekLocked to convert the panic into a graceful error. When the seek
fails, playback starts from the beginning instead of crashing.
Wire up Go's standard profiling toolkit so it's automatically available
in dev builds and completely absent from production. The profiling
package uses build tags (dev/!dev) to eliminate all pprof, trace, and
timing code from release binaries with zero new dependencies.
- backend/profiling: pprof HTTP server on :6060, /debug/trace endpoint,
block/mutex profiling, and TimeOp helper for structured operation timing
- scripts/profile.sh: interactive menu-driven script that auto-selects
free ports (8080-8089) so multiple profiles can be open simultaneously
- Instrumented key operations: app init, database init, player load/restore,
queue set/restore
- Makefile targets: profile, profile-cpu, profile-heap, profile-trace
- .gitignore: exclude trace-*.out and *.pprof artifacts
* ci: remove build-check job from CI workflow
The cross-platform build verification is redundant in CI since the
build and release pipeline (build.yml) already performs full builds
on every release. This reduces CI runner time and costs.
* ci: restrict build-check to Linux PRs and pin R2 action to v1.4
- Build-check now only runs on pull requests (skipped on main merge)
with only Linux/amd64 enabled; macOS and Windows are commented out
since the Build & Publish workflow handles all platforms on release.
- Pin ryand56/r2-upload-action from floating v1 tag to v1.4 to fix
the upload failure seen in the v1.1.0 release build.
* fix: resolve CI failures in type check, codegen, and lint
- Add missing title and artist fields to frontend QueueTrack interface
- Rename queue.QueueTrack to queue.Track and queue.QueueState to
queue.State to fix revive stutter lint errors
- Fix wsl violations (cuddled declaration, block ending with comment)
- Break long slog lines to satisfy golines formatter
- Run go mod tidy to add missing go.sum entries for templ dependencies
- Regenerate sqlc output for updated tooling version
* fix(ci): disable redundant checkout in govulncheck action
The govulncheck-action runs its own actions/checkout internally,
which conflicts with the checkout@v6 already performed by the job.
This causes 'Duplicate header: Authorization' HTTP 400 errors.
Setting repo-checkout: false skips the redundant checkout.
- Fix 10 err113 violations: extract dynamic errors to package-level sentinels
- Fix 12 errcheck violations: handle unchecked error returns in player,
metadata, and config packages
- Fix 4 revive stutter warnings: rename player.PlayerState to player.State,
player.PlayerVolume to player.Volume, queue.QueueTrack to queue.Track,
queue.QueueState to queue.State
- Fix 2 staticcheck SA4001: simplify *&x to x in assets handler
- Fix 5 unused constants: remove dead AudioFileType iota block in models
- Fix gci/gofumpt/wsl formatting issues across multiple files
- Add gofumpt module-path setting to .golangci.yml for correct import grouping
- Fix player test: gate integration test behind YELLOWJACKET_INTEGRATION env var
instead of only skipping in CI, and replace t.Errorf+t.Failed with t.Fatalf
- Remove continue-on-error from golangci-lint CI step so linting is now required
RENOVATE_ALLOW_POST_UPGRADE_COMMANDS is not a valid config option.
Self-hosted Renovate requires RENOVATE_ALLOWED_POST_UPGRADE_COMMANDS
with a JSON array of regex patterns to whitelist specific commands.
Replace the placeholder README with comprehensive documentation covering
install instructions, feature list, architecture overview, development
prerequisites, build/test/lint commands, data locations, and project
structure. Add CI and Release badges.
* chore(deps): update go dependencies (non-major)
* fix: regenerate code and add postUpgradeTasks for Renovate
Regenerate templ and sqlc output to match bumped tool versions.
Configure Renovate postUpgradeTasks to run 'go generate ./...' after
Go dependency updates, preventing stale generated files in future PRs.
---------
Co-authored-by: onion-4-dinner <15676555+onion-4-dinner@users.noreply.github.com>
- Fix Go version from 1.24+ to 1.25 (matching go.mod)
- Add missing make lint/test commands
- Add critical -tags webkit2_41 requirement to all test commands
- Add warning about generated files (sqlcgen/, *_templ.go)
- Add unexported sentinel error convention, logger.WithGroup() pattern
- Add SQLite WAL mode and SetMaxOpenConns(1) detail
- Add frontend type checking command (tsc --noEmit)
- Add missing backend directories to structure
- Consolidate and tighten sections to reduce line count
download-artifact preserves the original binary filename, not the
artifact name. Add a rename step so release assets have descriptive
platform-specific names (e.g., yellowjacket-linux-amd64).
Tag pushes created by semantic-release via the GitHub API do not
trigger push-based workflows. Switch to the release event which
fires when semantic-release creates the draft GitHub release.
filepath.Join uses OS-specific separators (backslash on Windows), but
embed.FS always uses forward slashes. This caused schema file lookups
to fail during Wails binding generation on Windows.
- Remove noautoinject Wails scripts from config.html (Vite 6 requires
type="module" on all script tags; Wails auto-injects them anyway).
- Replace vite-tsconfig-paths plugin with Vite native resolve.alias,
fixing path alias resolution that was silently broken during builds.
- Remove unused vite-tsconfig-paths dependency.
- Default to empty Config in NewLibrary when nil is passed, so Wails
binding generation succeeds without a config file on disk.
- Fix golangci-lint v2 flag in lefthook (--build-tags, not -tags).
- Run golangci-lint on full project instead of individual staged files.
- Use specific golangci-lint version (v2.5.0) instead of 'v2' which
the action cannot parse
- Use --build-tags flag (v2 syntax) instead of -tags
- Skip player test in CI: requires Wails runtime context and audio
device which are unavailable in GitHub Actions
- Remove standalone 'pnpm build' from frontend job since Vite cannot
resolve Wails path aliases alone; the build-check job validates the
full build via Wails
- Add frontend/dist stub in Go Checks and Go Tests jobs so the
go:embed directive in main.go resolves without a real frontend build
- Run go mod tidy to add missing go.sum entries for templ/sqlc tool
transitive dependencies (fixes Code Generation Check)
- Delete dead library-picker.ts that imported non-existent Wails
bindings module and called undefined functions
- Exclude Wails-generated JS stubs from tsc strict checking via
tsconfig exclude (the companion .d.ts files provide types)
- Add title and artist fields to QueueTrack interface to match the
Go backend struct and fix queue-panel.ts type errors
Add push trigger for main branch so CI validates the post-merge
state. Skip the PR title lint job on push events since it only
applies to pull requests.
persist-credentials: false prevents actions/checkout from overriding
git auth with GITHUB_TOKEN. Manual credential store setup ensures
all git pushes (including from @semantic-release/git) use the PAT,
which is required to trigger the build workflow on tag push.
GITHUB_TOKEN events cannot trigger other workflows by design.
Use a fine-grained PAT (RELEASE_TOKEN secret) so the tag push
from semantic-release triggers the build.yml workflow.
* started schema
* db schemas beginning
* first db schema gen
* added sqlc generation with go generate and sqlite driver
* i think these dependencies are needed
* added IF NOT EXISTS to create and CRUD for each table
* fixed missing columns
* added missing field
* fixed code generation with sqlc
* started schema
* db schemas beginning
* first db schema gen
* added sqlc generation with go generate and sqlite driver
* i think these dependencies are needed
* added IF NOT EXISTS to create and CRUD for each table
* fixed missing columns
* added missing field
* fixed code generation with sqlc
* added package flag to build ci
* bump wails-build-action version
* updated dependencies and go version to 1.24
* fixed wails build action version and point to go1.24
* using main version of wails build action
* added dependencies step
* added write permission for workflow
* switched alsa dep for proper dep
* added pnpm install step
* added pnpm version
* added os name to binary output
* undo last commit
* renamed windows binary, manually handle release
* fixed github ref name variable
* moved release to different job
* set build pre-req for release
* fixing artifact handling, manual upload
* fixed working directory
* fixed artifact naming
* fixing upload and download
* fixed artifact upload name
* fixed upload artifact name again
* upload all binaries
* fixed input and output binary files
* removed temporary artifact deletion
* trying to fix the artifact path for upload
* fix release glob pattern
* fixed glob path for subdirectories from download step
* fixed release version
* oops wrong release action version
* lets put all artifacts in the same directory
* remove prerelease
* set static run name
* added find steps for troubleshooting
* fix windows path for debugging
* turns out you cant do conditionals on matrix
* apparently you cant use type on windows either
* separated build jobs for each platform
* hopefully fixed all of the find commands
* hope to fix the windows dir command
* trying to add quotes to fix windows dir command
* ill try powershell instead
* fixed windows upload file and named find step
* fixed mac file upload
* added package flag to build ci
* bump wails-build-action version
* updated dependencies and go version to 1.24
* fixed wails build action version and point to go1.24
* using main version of wails build action
* added dependencies step
* added write permission for workflow
* switched alsa dep for proper dep
* added pnpm install step
* added pnpm version
* added os name to binary output
* undo last commit
* renamed windows binary, manually handle release
* fixed github ref name variable
* moved release to different job
* set build pre-req for release
* fixing artifact handling, manual upload
* fixed working directory
* fixed artifact naming
* fixing upload and download
* fixed artifact upload name
* fixed upload artifact name again
* upload all binaries
* fixed input and output binary files
* removed temporary artifact deletion
* trying to fix the artifact path for upload
* fix release glob pattern
* fixed glob path for subdirectories from download step
* fixed release version
* oops wrong release action version
* lets put all artifacts in the same directory
* remove prerelease
* set static run name