Files
gitea-docker/desktop/BUILD.md

192 lines
5.0 KiB
Markdown

# Build & Release Checklist
## Quick Start
```bash
# Build minimal JREs (run once or when Java version changes)
./build-jres.sh 11
# Build all platforms
./build-all.sh
```
## Build Artifacts
| Platform | Location | Size |
|----------|----------|------|
| Windows x64 | `target/windows/TicksTales.exe` | ~121MB |
| Linux x64 | `target/linux/amd64/Tick's Tales` | ~132MB |
| macOS x64 | `target/osx/Tick's Tales.app` | ~121MB |
| macOS ARM64 | `target/osx-arm64/Tick's Tales.app` | ~120MB |
## Remaining Production Tasks
### 1. Windows Icon Embedding
The `icons.ico` file exists but packr doesn't embed it into the .exe. This requires `rcedit`:
**Option A: On Windows**
```powershell
# Install rcedit via chocolatey
choco install rcedit
# Embed icon
rcedit "target/windows/TicksTales.exe" --set-icon "icons.ico"
```
**Option B: On Linux with Wine**
```bash
# Install wine and rcedit
sudo apt install wine64
# Download rcedit from https://github.com/electron/rcedit/releases
wget https://github.com/electron/rcedit/releases/download/v2.0.0/rcedit-x64.exe
# Embed icon
wine rcedit-x64.exe "target/windows/TicksTales.exe" --set-icon "icons.ico"
```
### 2. macOS Code Signing
Required for macOS 10.15+ and notarization:
```bash
# Requirements:
# - Apple Developer account
# - Developer ID Application certificate installed in Keychain
# Sign the app bundle
codesign --sign "Developer ID Application: Your Name (TEAMID)" \
--verbose=10 \
--timestamp \
--force \
--options runtime \
--entitlements entitlements.plist \
--deep \
"target/osx/Tick's Tales.app"
# Verify signature
codesign --verify --deep --strict --verbose=2 "target/osx/Tick's Tales.app"
```
**entitlements.plist** (required for Java apps):
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.allow-jit</key>
<true/>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.cs.disable-executable-page-protection</key>
<true/>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
</dict>
</plist>
```
### 3. macOS Notarization
Required for distribution outside Mac App Store:
```bash
# Requirements:
# - Apple Developer account with app-specific password
# - Store password in Keychain: xcrun notarytool store-credentials "TICKSTALES"
# Create zip for notarization
ditto -c -k --keepParent "target/osx/Tick's Tales.app" "TicksTales-macos.zip"
# Submit for notarization
xcrun notarytool submit "TicksTales-macos.zip" --keychain-profile "TICKSTALES" --wait
# Staple the ticket
xcrun stapler staple "target/osx/Tick's Tales.app"
# Verify
spctl --assess --verbose=4 --type execute "target/osx/Tick's Tales.app"
```
### 4. Steam Distribution
**Prepare content for Steam:**
```bash
# Create Steam build directory structure
mkdir -p steam-build/windows
mkdir -p steam-build/linux
mkdir -p steam-build/osx
# Copy Windows build
cp -r target/windows/* steam-build/windows/
# Copy Linux build
cp -r target/linux/amd64/* steam-build/linux/
# Copy macOS builds (after signing)
cp -r "target/osx/Tick's Tales.app" steam-build/osx/
cp -r "target/osx-arm64/Tick's Tales.app" steam-build/osx-arm64/
```
**Steam depot splits (recommended):**
- Depot 1: Windows x64
- Depot 2: Linux x64
- Depot 3: macOS x64
- Depot 4: macOS ARM64
Users only download the depot for their platform.
## Build Configuration Files
| File | Purpose |
|------|---------|
| `build-jres.sh` | Downloads Corretto JDKs and creates minimal JREs |
| `build-all.sh` | Main build script for all platforms |
| `build-windows.json` | Packr config for Windows |
| `build-linux-64.json` | Packr config for Linux |
| `build-osx.json` | Packr config for macOS x64 |
| `build-osx-arm64.json` | Packr config for macOS ARM64 |
| `*-steam.json` | Steam-enabled variants |
| `icons.ico` | Windows icon (needs embedding) |
| `icons.icns` | macOS icon |
| `tickstales.desktop` | Linux menu entry |
## Version Management
Version is read from `last-release` file:
```bash
# Update version
echo "31" > last-release
./build-all.sh # Will build v2.0.31
```
## JVM Arguments (in packr configs)
Current configuration:
```
-Duse-repl=false # Disable REPL
-Dui_scale=1.0 # UI scaling
-Dclojure.compiler.direct-linking=true # Performance optimization
-Dis-desktop=true # Platform detection
-Dplatform=desktop # Platform detection
-XstartOnFirstThread # macOS only (required for LWJGL)
```
Consider adding for production:
```
-Xmx2G # Max heap size
-XX:+UseG1GC # Garbage collector
-Dfile.encoding=UTF-8 # File encoding
```
## Troubleshooting
**"GLFW_PLATFORM_UNAVAILABLE"** - No display available (headless environment), normal for CI/build servers.
**"Unable to initialize GLFW"** - Same as above, test on actual desktop.
**Windows missing icon** - Run rcedit step.
**macOS "app is damaged"** - App not signed/notarized, run signing steps.