mirror of
https://github.com/quer3q/ps5-dump-forge.git
synced 2026-10-21 21:12:17 -05:00
230 lines
10 KiB
YAML
230 lines
10 KiB
YAML
name: Release
|
|
|
|
# A `v*` tag builds the macOS, Windows, Linux and PS5 releases and creates a *draft* GitHub Release
|
|
# with the macOS universal (arm64 + Intel) zip, the two Windows x86-64 zips (with and without a
|
|
# bundled WebView2 runtime), the Windows arm64 zip, the Linux x86-64 and arm64 tarballs, the PS5
|
|
# payload (one plain .elf) and SHA256SUMS (the source is GitHub's own archive of the tag); publishing the draft is a manual step on GitHub, after checking its assets.
|
|
# `workflow_dispatch` is a dry run, even on a tag: same build, artifact kept on the run,
|
|
# nothing published.
|
|
on:
|
|
push:
|
|
tags: ["v*"]
|
|
workflow_dispatch:
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
env:
|
|
CARGO_TERM_COLOR: always
|
|
|
|
jobs:
|
|
macos:
|
|
# PS5 Dump Forge.app + the CLI, ad-hoc signed, as one universal (arm64 + Intel) zip.
|
|
runs-on: macos-15
|
|
timeout-minutes: 60
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
with:
|
|
persist-credentials: false
|
|
- name: Check the versions agree (and match the tag)
|
|
run: scripts/check-versions.sh
|
|
- name: Latest stable Rust (rust-toolchain.toml adds aarch64-apple-darwin and x86_64-apple-darwin)
|
|
run: |
|
|
rustup update --no-self-update stable
|
|
rustup toolchain install --no-self-update
|
|
rustc -Vv
|
|
- uses: actions/setup-node@v7
|
|
with:
|
|
node-version: lts/*
|
|
# Builds PS5 Dump Forge.app (tauri build, universal) and the CLI (both targets,
|
|
# lipo-joined), assembles and verifies the zip, writes SHA256SUMS into dist/.
|
|
- run: scripts/release-macos.sh
|
|
- uses: actions/upload-artifact@v7
|
|
with:
|
|
name: release-macos
|
|
path: dist/*
|
|
if-no-files-found: error
|
|
retention-days: 3
|
|
|
|
windows:
|
|
# PS5 Dump Forge.exe + the CLI (MSVC, built natively on each runner), unsigned. x86-64: one zip
|
|
# for the installed WebView2 Runtime, one that carries Microsoft's Fixed Version runtime next to
|
|
# the exe. arm64: one zip for the installed runtime (Windows 11 ships it).
|
|
name: windows (${{ matrix.arch }})
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- os: windows-latest
|
|
arch: x86-64
|
|
- os: windows-11-arm
|
|
arch: arm64
|
|
timeout-minutes: 60
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
steps:
|
|
# LF checkout: the runner's Git converts to CRLF, which breaks the bash scripts (and the zips
|
|
# would carry CRLF docs).
|
|
- run: git config --global core.autocrlf false
|
|
- uses: actions/checkout@v7
|
|
with:
|
|
persist-credentials: false
|
|
- name: Check the versions agree (and match the tag)
|
|
run: scripts/check-versions.sh
|
|
- name: Latest stable Rust (the host, x86_64 or aarch64 pc-windows-msvc, is the release target)
|
|
run: |
|
|
rustup update --no-self-update stable
|
|
rustup toolchain install --no-self-update
|
|
rustc -Vv
|
|
- uses: actions/setup-node@v7
|
|
with:
|
|
node-version: lts/*
|
|
# Builds PS5 Dump Forge.exe (tauri build --no-bundle) and the CLI, (x86-64 only) downloads and
|
|
# checks the pinned WebView2 Fixed Version .cab, assembles and verifies the zips into dist/.
|
|
- run: scripts/release-windows.sh
|
|
- uses: actions/upload-artifact@v7
|
|
with:
|
|
name: release-windows-${{ matrix.arch }}
|
|
path: dist/*
|
|
if-no-files-found: error
|
|
retention-days: 3
|
|
|
|
linux:
|
|
# The extracted AppImage (an AppDir) + forge.sh + the CLI, unsigned, as one tarball per arch,
|
|
# built natively on each runner.
|
|
# ubuntu-22.04, not -latest: the binaries need the build host's glibc (2.35) or newer.
|
|
name: linux (${{ matrix.arch }})
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- os: ubuntu-22.04
|
|
arch: x86-64
|
|
- os: ubuntu-22.04-arm
|
|
arch: arm64
|
|
timeout-minutes: 60
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
with:
|
|
persist-credentials: false
|
|
- name: Check the versions agree (and match the tag)
|
|
run: scripts/check-versions.sh
|
|
# Tauri v2's Linux build deps; xvfb for the script's GUI launch check.
|
|
- name: WebKitGTK and the AppImage tools
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y --no-install-recommends libwebkit2gtk-4.1-dev libgtk-3-dev \
|
|
librsvg2-dev libayatana-appindicator3-dev patchelf file xvfb
|
|
- name: Latest stable Rust (the host, x86_64 or aarch64 unknown-linux-gnu, is the release target)
|
|
run: |
|
|
rustup update --no-self-update stable
|
|
rustup toolchain install --no-self-update
|
|
rustc -Vv
|
|
- uses: actions/setup-node@v7
|
|
with:
|
|
node-version: lts/*
|
|
# Builds the AppImage (tauri build) and the CLI, extracts the AppImage into the AppDir,
|
|
# assembles the tarball into dist/ and verifies it after a round trip (CLI run, GUI launch).
|
|
- run: scripts/release-linux.sh
|
|
- uses: actions/upload-artifact@v7
|
|
with:
|
|
name: release-linux-${{ matrix.arch }}
|
|
path: dist/*
|
|
if-no-files-found: error
|
|
retention-days: 3
|
|
|
|
ps5:
|
|
# The CLI as a PS5 payload with the web UI embedded, one plain .elf, unsigned. Cross-built in
|
|
# the ps5/ Docker image (Rust build-std + the ps5-payload-dev SDK); the web UI on the runner.
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 60
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
with:
|
|
persist-credentials: false
|
|
- name: Check the versions agree (and match the tag)
|
|
run: scripts/check-versions.sh
|
|
- uses: actions/setup-node@v7
|
|
with:
|
|
node-version: lts/*
|
|
# Builds the web UI and the ELF (ps5/build.sh), copies it into dist/ and checks the copy
|
|
# (llvm-readelf: a PIE with the SDK's NEEDED modules; the web UI and version embedded).
|
|
- run: scripts/release-ps5.sh
|
|
- uses: actions/upload-artifact@v7
|
|
with:
|
|
name: release-ps5
|
|
path: dist/*.elf
|
|
if-no-files-found: error
|
|
retention-days: 3
|
|
|
|
publish:
|
|
# One array entry per platform job (the windows and linux matrix legs all upload release-* artifacts).
|
|
needs: [macos, windows, linux, ps5]
|
|
# Only a real tag push creates the draft; a workflow_dispatch run stays a dry run.
|
|
if: github.event_name == 'push' && github.ref_type == 'tag'
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 60
|
|
permissions:
|
|
contents: write
|
|
steps:
|
|
# Every platform job uploads a `release-*` artifact; merge them all into dist/.
|
|
- uses: actions/download-artifact@v8
|
|
with:
|
|
pattern: release-*
|
|
path: dist
|
|
merge-multiple: true
|
|
- name: Recompute SHA256SUMS over every platform's archives
|
|
run: |
|
|
cd dist
|
|
rm -f SHA256SUMS
|
|
# merge-multiple lets a mislabelled leg overwrite another's archive, or a leg go missing:
|
|
# require exactly the seven archives of this tag before checksumming.
|
|
ver=${GITHUB_REF_NAME#v}
|
|
printf '%s\n' \
|
|
"ps5-dump-forge-$ver-linux-arm64.tar.gz" \
|
|
"ps5-dump-forge-$ver-linux-x86-64.tar.gz" \
|
|
"ps5-dump-forge-$ver-macos-universal.zip" \
|
|
"ps5-dump-forge-$ver-ps5.elf" \
|
|
"ps5-dump-forge-$ver-windows-arm64.zip" \
|
|
"ps5-dump-forge-$ver-windows-x86-64-webview2.zip" \
|
|
"ps5-dump-forge-$ver-windows-x86-64.zip" | LC_ALL=C sort > ../expected.txt
|
|
printf '%s\n' * | LC_ALL=C sort | diff ../expected.txt - || { echo "::error::dist/ does not hold exactly the expected archives"; exit 1; }
|
|
sha256sum -- * > SHA256SUMS
|
|
cat SHA256SUMS
|
|
# gh is preinstalled on the runner; no third-party release action needed.
|
|
- name: Create the GitHub Release
|
|
env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
GH_REPO: ${{ github.repository }}
|
|
run: |
|
|
ver=${GITHUB_REF_NAME#v}
|
|
{
|
|
echo "macOS 11 or later (Intel and Apple Silicon): unzip the universal zip, then see \"macOS\" in README.md."
|
|
echo "The app is ad-hoc signed only (no Developer ID, not notarized), so macOS asks you to allow it once."
|
|
echo
|
|
echo "Windows 10 or 11 (x86-64): the windows-x86-64 zip uses the Microsoft Edge WebView2 Runtime, which Windows 11 and most Windows 10 PCs already have."
|
|
echo "No WebView2 Runtime (or not allowed to install it)? The windows-x86-64-webview2 zip is larger but carries its own copy in its WebView2 folder."
|
|
echo "Windows 11 (arm64): the windows-arm64 zip uses the installed WebView2 Runtime, which Windows 11 ships."
|
|
echo "Unzip to a folder you can write to (the app keeps its WebView data beside it), then run PS5 Dump Forge.exe."
|
|
echo "The app is not signed, so SmartScreen may stop the first launch: choose \"More info\", then \"Run anyway\"."
|
|
echo
|
|
echo "Linux (x86-64 or arm64, glibc 2.35 or later, e.g. Ubuntu 22.04 or newer): extract the linux-x86-64 or linux-arm64 tarball (tar -xzf) to a folder you can write to (the app keeps its WebView data beside it), then run ./forge.sh."
|
|
echo "It needs no FUSE and no install; keep the PS5 Dump Forge.AppDir folder next to forge.sh."
|
|
echo
|
|
echo "PS5 (jailbroken, with an ELF loader): load ps5-dump-forge-$ver-ps5.elf, e.g. send it to elfldr's port 9021 or list it in the webkit autoloader's autoload.txt, then open http://<ps5-ip>:8095 in a browser."
|
|
echo "The web UI has no access control: use it on a trusted network."
|
|
echo
|
|
echo "Each desktop archive (macOS, Windows, Linux) holds the app (PS5 Dump Forge.app, PS5 Dump Forge.exe or PS5 Dump Forge.AppDir with forge.sh) and the ps5-dump-forge command-line tool. README, LICENSE (GPL-3.0), the UnRAR license and THIRD-PARTY-NOTICES.md are in the source archives below, the complete corresponding source of this release. SHA256SUMS lists every archive's SHA-256."
|
|
case "$GITHUB_REF_NAME" in *-*)
|
|
echo
|
|
echo "Test release: not every format has been tested on a console yet. Keep the original dump." ;;
|
|
esac
|
|
} > notes.md
|
|
# A tag with a suffix (v0.0.1-pre) becomes a pre-release.
|
|
pre=; case "$GITHUB_REF_NAME" in *-*) pre=--prerelease ;; esac
|
|
gh release create "$GITHUB_REF_NAME" dist/* --draft $pre \
|
|
--verify-tag --title "PS5 Dump Forge $GITHUB_REF_NAME" --notes-file notes.md
|