Contributing
nix develop # rust toolchain, yt-dlp, ffmpeg
cargo test # offline suite
cargo test -- --include-ignored # also the live ListenBrainz / MusicBrainz tests
nix build # what CI and the cache build; runs the offline suite
The repository is a Cargo workspace: tapedeck itself at the root and
crates/subsonic-server, the Subsonic protocol layer, which depends on nothing in tapedeck.
CI runs fmt, clippy and the full test suite, builds the Nix package on x86_64-linux and
aarch64-darwin and pushes both to arunoruto.cachix.org, and publishes this book to GitHub
Pages from docs/. Pushing a v* tag that matches Cargo.toml cuts a release with
prebuilt binaries and pushes the container to ghcr.io/arunoruto/tapedeck as <version> and
latest; running the Container workflow by hand pushes sha-<short sha> only, for trying a
commit without moving latest. Sync targets and download backends are each one small trait; the
architecture page says where. Keep the docs human-sounding;
design decisions go into the architecture page’s design notes.
Commit messages follow Conventional Commits:
feat(lyrics): …, fix(subsonic): …, docs: …, ci: …, refactor: …, chore: …, with a
! or a BREAKING CHANGE: footer for anything that changes behaviour people rely on, so a
changelog can be generated for a release.