Files
ps5upload/CONTRIBUTING.md
phantomptrandClaude Opus 5.5 8d05f60a7e PS5 Payload SDK v0.44, and scripts/update-ps5-sdk.sh to bump it
Pin v0.44 (sha256 4d06eab7...). Its crt/ and prospero-nid are identical
to v0.43, so the vendored sdk-crt (+ ps5upload.patch) and the portable
prospero-nid stay as they are; the helper, installer and elfldr build to
the same code (only the build-id differs). v0.44 adds LLVM 23 to the
candidate list, so the Makefile comment and Homebrew fallbacks move too.

scripts/update-ps5-sdk.sh (make update-sdk): finds the latest release
(or --tag), checks the zip, rewrites the pin, re-vendors prospero-nid
and crt only when upstream changed them (stops if our crt patch no
longer applies), moves the "SDK vX.Y" doc mentions and installs with
install-ps5-sdk.sh, keeping the old SDK as a backup. --check only
reports. The installer names its backups after the release they hold.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ub1mez9eaVtTF8pMEFXvA9
2026-10-10 11:14:44 -07:00

3.5 KiB

Contributing to ps5upload

Thanks for your interest in improving ps5upload! Contributions come in via the standard fork + pull request flow — the repository doesn't grant direct push access, so everyone (including regulars) proposes changes the same way.

How to contribute

  1. Fork the repo to your own account.
  2. Branch off main in your fork: git checkout -b my-change.
  3. Make your change, keeping it focused — one logical change per PR.
  4. Run the quality gate locally (see below) until it's green.
  5. Open a pull request against phantomptr/ps5upload:main and fill out the PR template.

Every PR is gated by CI (the PR gate check) and reviewed by the code owner before it can merge. PRs are squash-merged, so your branch becomes a single clean commit on main.

Dev setup

make install     # bootstrap the dev env (auto-detects macOS / Linux / Windows)
make build       # payload ELF + Rust engine + client UI
make run-client  # launch the Tauri dev app

See the README and TESTING.md for the full toolchain (PS5 Payload SDK, Rust, Node 22, Tauri prerequisites).

The PS5 Payload SDK release is pinned in scripts/ps5-sdk.env. make update-sdk moves the pin to the latest upstream release and installs it (SDK_TAG=vX.Y for a specific one, SDK_CHECK=1 to only check); see TESTING.md, Layer 2.

Quality gate: run before opening a PR

CI runs the same checks; running them locally first saves a round-trip. npm run validate runs most of it in one command (version sync, script checks, i18n, engine and desktop fmt/clippy/tests, client typecheck/lint/tests/build). The complete gate is these, and cargo fmt --check must pass in BOTH engine/ and client/src-tauri:

( cd engine && cargo fmt --all -- --check )       # fmt in BOTH workspaces
( cd client/src-tauri && cargo fmt --all -- --check )
( cd engine && cargo clippy --workspace -- -D warnings )
( cd engine && cargo test --workspace )
( cd engine && cargo test -p ava1-ctest -- --test-threads=1 )
make test-payload                                 # needs PS5_PAYLOAD_SDK
make check-no-ftx2                                # the retired protocol must stay gone
( cd client && npm run lint && npm run typecheck && npm test && npm run build:vite )
npm run i18n:check                                # from the repo root

ava1-ctest builds the payload's AVA1 C on the host and tests it against the Rust side, so no PS5 is needed. check-no-ftx2 fails if the old protocol name or ports 9113/9114 reappear outside the changelog and a short list of exceptions in the Makefile.

Other useful targets:

make test               # script + engine + payload + client checks
npm run validate:full   # adds the payload ELF build and self-tests
npm run coverage        # frontend + Rust coverage reports

If your change touches user-facing strings, add the key to client/src/i18n/locales/en.ts; npm run i18n:check will tell you if a locale needs an allowlist entry.

Guidelines

  • Match the surrounding code's style, naming, and comment density.
  • Keep PRs small and reviewable; unrelated cleanups belong in their own PR.
  • Hardware-specific behavior (anything that talks to a real PS5) can't be verified in CI — call out in your PR how you tested it on hardware.
  • By contributing, you agree your work is licensed under the project's GPLv3.

Questions

Open a GitHub issue or ask in the Discord.