diff --git a/CHANGELOG.md b/CHANGELOG.md index 35a271c..98c608d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- Capsule Local 0.1.2 packages the custom Windows icon and shows the installed version in the dashboard update notice. - Opt-in Capsule Local automatic-update testing, with a 0.1.0 bootstrap, isolated unsigned test feed, and 0.1.1 update target. Public signing requirements remain enforced. - Capsule Local 0.1.1 displays “you have updated to 0.1.1” on the dashboard for manual installer upgrade testing. diff --git a/build/config.mjs b/build/config.mjs index 1d26680..63f346f 100644 --- a/build/config.mjs +++ b/build/config.mjs @@ -49,6 +49,7 @@ export function createBuildConfig({ release = false, testUpdates = false, bootst }, artifactName: release || testUpdates ? 'Capsule-${version}-${arch}-Setup.${ext}' : 'Capsule-Local-${version}-${arch}-Setup.${ext}', win: { + icon: 'build/icon.ico', target: [{ target: 'nsis', arch: ['x64'] }], verifyUpdateCodeSignature: !testUpdates, signExecutable: release, diff --git a/build/icon.ico b/build/icon.ico new file mode 100644 index 0000000..bbcba4e Binary files /dev/null and b/build/icon.ico differ diff --git a/docs/releases.md b/docs/releases.md index 9855ce0..3855a90 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -8,11 +8,11 @@ Run `npm run dist:win`. The installer and blockmap are written to `dist/local/`; Local builds are unsigned, named **Capsule Local**, and have application ID `com.thetempusproject.capsule.local`. They store sessions in `%APPDATA%/capsule-local`. Updates are deliberately disabled, and these installers must not be distributed as the public product. Windows may display an unknown-publisher warning. -Public builds use the permanent ID `com.thetempusproject.capsule`, executable `Capsule.exe`, and `%APPDATA%/capsule/session.json`, preserving the original app's session location. Both installers run per user and preserve app data on uninstall. Do not change the public ID, package name, install scope, or data path after shipping without an explicit migration. The current installer uses Electron's default icon; add an approved `build/icon.ico` before public branding is finalized. +Public builds use the permanent ID `com.thetempusproject.capsule`, executable `Capsule.exe`, and `%APPDATA%/capsule/session.json`, preserving the original app's session location. Both installers run per user and preserve app data on uninstall. Do not change the public ID, package name, install scope, or data path after shipping without an explicit migration. Windows builds use `build/icon.ico`, which must contain a 256×256 image. A packaged update replaces the application icon without uninstalling; Windows may temporarily retain a cached shortcut or taskbar icon. ## Free automatic-update testing -The original Capsule Local 0.1.0 installer cannot check for updates. Install the update-enabled bootstrap once to start a real 0.1.0 to 0.1.1 test: +The original Capsule Local 0.1.0 installer cannot check for updates. Install the update-enabled bootstrap once to test an update to the current version: ```powershell $env:CAPSULE_TEST_UPDATE_URL = 'https://ttp.joeykimsey.com/capsule/testfeed/' @@ -20,7 +20,7 @@ npm run dist:test-bootstrap npm run dist:test ``` -`dist/test-bootstrap/Capsule-0.1.0-x64-Setup.exe` installs as Capsule Local and preserves its existing session location. Close the existing app before installing it. `dist/test/Capsule-0.1.1-x64-Setup.exe` is the update target; do not manually install that target when testing the updater. Both builds use the same Local identity. The dashboard message is hidden in the bootstrap and appears after updating to 0.1.1. +`dist/test-bootstrap/Capsule-0.1.0-x64-Setup.exe` installs as Capsule Local and preserves its existing session location. Close the existing app before installing it. `dist/test/Capsule-0.1.2-x64-Setup.exe` is the current update target; do not manually install that target when testing the updater. Both builds use the same Local identity. The dashboard message is hidden in the bootstrap and shows the installed version after updating. Test builds explicitly omit Authenticode verification; they rely on HTTPS, the publisher-controlled test feed, and metadata checksums. This is for trusted testers, not public signed releases. Windows can warn or block unsigned executables. The app labels this mode “Unsigned test channel.” Public release builds still require signing and verify publisher signatures. Normal `dist:win` builds still have updates disabled. @@ -30,7 +30,7 @@ The TTP plugin must include `/capsule/testfeed/` and `/capsule/testupload/` supp npm run publish:release -- --test-updates --upload ``` -The command publishes only `dist/test`, with metadata last. It never publishes the bootstrap or changes the public feed. Open the installed bootstrap, choose **Check for updates**, wait for **Restart to update**, then verify version 0.1.1, the dashboard message, and the preserved connection. Signed production upgrade acceptance remains a separate test. +The command publishes only `dist/test`, with metadata last. It never publishes the bootstrap or changes the public feed. Open the installed bootstrap, choose **Check for updates**, wait for **Restart to update**, then verify version 0.1.2, the custom icon, the dashboard message, and the preserved connection. Signed production upgrade acceptance remains a separate test. ## 2. Configure the release feed diff --git a/package-lock.json b/package-lock.json index 3844d51..bb119ac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "capsule", - "version": "0.1.1", + "version": "0.1.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "capsule", - "version": "0.1.1", + "version": "0.1.2", "license": "MIT", "dependencies": { "@electron-toolkit/utils": "^4.0.0", diff --git a/package.json b/package.json index 75d323e..4ac08ff 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "capsule", - "version": "0.1.1", + "version": "0.1.2", "description": "Desktop companion for The Tempus Project sites", "main": "./out/main/index.js", "author": "Joey Kimsey ", diff --git a/src/renderer/src/updates.js b/src/renderer/src/updates.js index 91895f3..bdcd87f 100644 --- a/src/renderer/src/updates.js +++ b/src/renderer/src/updates.js @@ -17,7 +17,9 @@ function renderUpdate(state) { error: 'Could not update Capsule. You can keep working and try again.' } label.textContent = `Capsule ${state.currentVersion}${state.testing ? ' · Unsigned test channel' : ''} · ${messages[state.status] || messages.error}` - document.getElementById('home-update-notice').hidden = state.currentVersion !== '0.1.1' + const notice = document.getElementById('home-update-notice') + notice.hidden = state.currentVersion === '0.1.0' + notice.textContent = `you have updated to ${state.currentVersion}` check.hidden = state.status === 'disabled' check.disabled = ['checking', 'downloading', 'ready', 'installing'].includes(state.status) install.hidden = state.status !== 'ready'