# Releasing ## Build locally ```bash ./scripts/build-release.sh [version] # ZIP with binary + docs ./scripts/build-app.sh [version] # RemminaMac.app (bundle, ad-hoc signed, icon + ctty-run) ./scripts/build-dmg.sh [version] # DMG with app + Applications link ./scripts/generate-icon.sh # re-render AppIcon.icns (Dracula terminal) # Example: ./scripts/build-release.sh 0.7.0 ./scripts/build-app.sh 0.7.0 ./scripts/build-dmg.sh 0.7.0 # Output: # dist/RemminaMac-0.7.0-macos-arm64.zip (+ .sha256) # dist/RemminaMac.app/ (with ctty-run helper + icon) # dist/RemminaMac-0.7.0-macos-arm64.dmg (+ .sha256) ``` Bump `AppInfo.version` in `Views/AboutView.swift` with each release. ## What the scripts do 1. `swift build -c release` (builds both `RemminaMac` and `ctty-run`) 2. Copy binaries into `dist/RemminaMac--macos-arm64/` 3. Add `README.md` + `docs/` + `LICENSE` 4. ZIP + SHA256 `build-app.sh` also copies `AppIcon.icns` and `ctty-run` into the bundle and signs ad-hoc (`codesign --deep`). `build-dmg.sh` creates the drag-and-drop DMG via `hdiutil` (no extra tools). ## Publish a Gitea release ```bash export GITEA_HOST="https://git.sysdaemon.xyz" export GITEA_OWNER="" export GITEA_REPO="remmina-mac" export GITEA_TOKEN="" # not password: user → Settings → Applications → token export VERSION="0.7.0" ./scripts/publish-gitea-release.sh ``` The script creates the release (if needed) and uploads ZIP + SHA256 as attachments. ## Manual API ```bash curl -u "user:pass" -H "Content-Type: application/json" \ -d '{"tag_name":"v0.7.0","name":"v0.7.0","body":"..."}' \ "$GITEA_HOST/api/v1/repos/$OWNER/$REPO/releases" ```