# Push Updates Use this when pushing code from the Mac to `git.whoagland.com`, then updating the TrueNAS-hosted server. ## Rules - Git deploys code only. - TrueNAS save data lives in `/mnt/usbssds/apps/iwanttoheal/data/game.db`. - Do not commit, copy, or replace `data/game.db`. - Do not run character reset commands unless you intentionally want a wipe. - Restarting the TrueNAS app runs `npm ci`, `npm run db:init`, `npm run build`, and `npm start`. ## Step 1: Build Web Locally ```sh cd /Users/warren/Documents/testgame/testgame npm run build ``` This validates TypeScript, builds the browser app, and refreshes `src/offline-starter-profile.json`. ## Step 2: Optional Android APK Only run this when building a new APK. ```sh set -e cd /Users/warren/Documents/testgame/testgame export JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home" export PATH="$JAVA_HOME/bin:$PATH" VERSION="1.0.27" CURRENT_CODE=$(grep -E 'versionCode [0-9]+' android/app/build.gradle | awk '{print $2}') NEXT_CODE=$((CURRENT_CODE + 1)) perl -0pi -e "s/versionCode\s+\d+/versionCode $NEXT_CODE/" android/app/build.gradle perl -0pi -e "s/versionName\s+\"[^\"]+\"/versionName \"$VERSION\"/" android/app/build.gradle VITE_API_BASE_URL="https://iwanttoheal.phenomrom.com" npm run android:sync cd android ./gradlew clean assembleDebug cd .. cp android/app/build/outputs/apk/debug/app-debug.apk "IWantToHeal-Thor-v$VERSION.apk" ls -lh "IWantToHeal-Thor-v$VERSION.apk" ``` ## Step 3: Commit And Push Code ```sh cd /Users/warren/Documents/testgame/testgame git add . git commit -m "Update game 1.0.27" git push origin main ``` Check before committing: ```sh git status --short ``` Expected: source/doc/build-output changes only. Do not stage `data/game.db`. ## Step 4: Optional Gitea Release For APK Only run this when Step 2 created a new APK. ```sh set -e cd /Users/warren/Documents/testgame/testgame export GITEA_URL="https://git.whoagland.com" export GITEA_OWNER="phenom" export GITEA_REPO="i-want-to-heal" export GITEA_TOKEN="ed2db3fd54546e9658377d0551b3fc3961583f1d" VERSION="1.0.27" APK="IWantToHeal-Thor-v$VERSION.apk" RELEASE_JSON=$(curl -sS -X POST "$GITEA_URL/api/v1/repos/$GITEA_OWNER/$GITEA_REPO/releases" \ -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ -d "{\"tag_name\":\"v$VERSION\",\"target_commitish\":\"main\",\"name\":\"v$VERSION\",\"body\":\"I Want to Heal Android build v$VERSION\",\"draft\":false,\"prerelease\":false}") RELEASE_ID=$(python3 -c 'import sys,json; data=json.load(sys.stdin); print(data.get("id") or data)' <<< "$RELEASE_JSON") curl -sS -X POST "$GITEA_URL/api/v1/repos/$GITEA_OWNER/$GITEA_REPO/releases/$RELEASE_ID/assets?name=$APK" \ -H "Authorization: token $GITEA_TOKEN" \ -F "attachment=@$APK" ``` If the CLI release fails after creating the Gitea release but before uploading the APK asset, retry only the release upload: ```sh npm run release:cli -- --release-only 1.1.26 ``` ## Step 5: Update TrueNAS The TrueNAS app checkout should be cloned from the local Gitea bare repository path when Gitea runs on the same TrueNAS host. After that setup, normal updates still use `git pull`; the remote is local filesystem storage instead of HTTPS. ```sh cd /mnt/usbssds/apps/iwanttoheal/app git pull ``` Before restarting, make a DB backup: ```sh cp /mnt/usbssds/apps/iwanttoheal/data/game.db \ "/mnt/usbssds/apps/iwanttoheal/data/game-before-update-$(date +%Y%m%d-%H%M%S).db" ``` Then restart the `iwanttoheal` app in the TrueNAS Apps UI. ## What Happens On Restart The app command runs: ```sh npm ci && npm run db:init && npm run build && npm start ``` That means: - dependency changes apply - schema changes apply - seed/static-content updates apply - browser files rebuild - existing accounts and characters stay in `data/game.db` `npm run db:init` should not wipe saves. Character wipes are separate manual reset operations. ## Resetting TrueNAS Characters Only run a reset when intentionally starting everyone over. Resetting the Mac database does not reset TrueNAS. TrueNAS has its own persistent DB at: ```text /mnt/usbssds/apps/iwanttoheal/data/game.db ``` Back it up first, then run the reset command or reset SQL on TrueNAS. ## If Something Looks Wrong Check the mounted DB path: ```sh ls -lh /mnt/usbssds/apps/iwanttoheal/data/game.db ``` Check the latest code: ```sh cd /mnt/usbssds/apps/iwanttoheal/app git log --oneline -5 ``` Check the app API: ```sh curl http://127.0.0.1:4173/api/auth/session ```