A GUI front-end for interacting with One ROM and managing firmware images.
All instructions assume you are in the rust/studio directory. Steps 1-3 can be run in parallel.
Steps:
-
Copy the schema to the images repo if it differs. The schema is regenerated when the version is updated.
git diff manifest/app-schema.json ../../../one-rom-images/studio/app-schema.json # If differences cp manifest/app-schema.json ../../../one-rom-images/studio/app-schema.json -
Use the
build-release.shscript to build Studio for all platforms and architectures. This requires ssh access to build machines for each platform and clones the current main branch to build from. To set up the Windows machine, see Setting up a Windows build machine:scripts/build-release.sh pin=WIN_SIGNING_PIN
Artifacts are placed in the
dist/directory. -
Run the release script to upload the files and update the manifest - assumes you have the images.onerom.org github repo at ../../../one-rom-images:
scripts/release.py --input-dir dist --output-dir ../../../one-rom-images
-
Commit one-rom-images changes and push:
cd ../../../one-rom-images git add . git commit -m "Update One ROM Studio releases" git push
-
Tag the current commit in
one-romand push. Tags are signed, so they take a message:cd ../one-rom git tag -s -a studio-vX.Y.Z -m "One ROM Studio vX.Y.Z" git push origin studio-vX.Y.Z
-
Check new releases appear at https://onerom.org/studio/
-
Update the Studio manifest
one-rom-images/studio.jsonwith the latest version.
-
From an up to date Apple Silicon Mac, open
assets/onerom-liquid-glass.icon. -
Modify the icon as needed using the Icon Composer application.
-
Regenerate
assets/onerom-liquid-glass-icons/Assets.carusing:scripts/create-mac-icon-ac.sh
-
Commit and push both
assets/onerom-liquid-glass.iconandassets/onerom-liquid-glass-icons/Assets.car.
See https://piers.rocks/2025/10/30/certum-open-source-code-sign.html
.github/workflows/build-apps.yml builds the Studio and CLI Windows and macOS packages, and .github/workflows/ci.yml builds and tests the Linux packages. These packages are unsigned, so do not use them for release.
Both run on every push that changes rust/.
Assuming building Windows target on a Debian-based Linux distribution.
Install the Rust Windows targets:
rustup target add x86_64-pc-windows-gnuInstall ming-w64 for Windows builds:
sudo apt install mingw-w64Uses cargo-packager - see the following in Cargo.toml:
[package.metadata.packager][package.metadata.packager.nsis]
Code signing is done using signtool.exe called from scripts/build-windows.ps1.
Uses cargo-bundle to create the macOS app bundle - see the following in Cargo.toml:
[package.metadata.bundle]
scripts/build-mac.sh does code signing and notarization using codesign and xcrun notarytool.
scripts/create-dmg.py is used by build-mac.sh to create DMG installer.
scripts/build-linux.sh builds x86_64 and arm64 .deb packages, on either architecture, using cargo-zigbuild and cargo-deb - see [package.metadata.deb] in Cargo.toml. The packages require the glibc version in ci/linux-min-glibc-version or later, whatever the build machine runs, and include maintainer scripts to handle udev rules installation.