Корень проблемы 404: репо приватный, Gitea требует Authorization
header для release assets даже на browser_download_url. Без токена
запрос возвращает 404 (не 401), поэтому electron-updater сообщал
"Cannot find channel latest.yml update info".
Решение — embed read-only токена в build:
- electron.vite.config.ts: vite `define` для __UPDATE_TOKEN__
читает process.env.UPDATE_TOKEN на этапе сборки
- src/main/updater.ts: если __UPDATE_TOKEN__ непустой, выставляет
autoUpdater.requestHeaders = { Authorization: 'token ...' }
- Декларация declare const локально в модуле, vite заменяет литерал
Сборка теперь требует:
$env:UPDATE_TOKEN = '<gitea-token>'; npm run dist
Если переменная не задана — токен пустой, auto-update тихо отключается
(статус 'unsupported' не показывается, просто запросы будут падать).
Альтернатива на будущее (без токена в .exe):
1. Сделать репо публичным в Gitea Settings
2. Или сделать только Releases публичными если в этой версии Gitea
есть такая опция
Тогда токен в коде не нужен.
== Важно для существующих пользователей ==
Установленные v0.2.x / v0.3.0-0.3.4 не могут получить апдейт
автоматически — у них в бинаре старый updater без токена и они
продолжат получать 404. Им нужно скачать v0.3.5 .exe вручную
и переустановить. После 0.3.5 auto-update заработает.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
96 lines
2.8 KiB
JSON
96 lines
2.8 KiB
JSON
{
|
|
"name": "laude",
|
|
"version": "0.3.5",
|
|
"description": "Exercise reminder — Windows desktop app",
|
|
"main": "out/main/index.js",
|
|
"author": "AnRil",
|
|
"private": true,
|
|
"scripts": {
|
|
"dev": "electron-vite dev",
|
|
"build": "electron-vite build",
|
|
"preview": "electron-vite preview",
|
|
"typecheck:node": "tsc --noEmit -p tsconfig.node.json",
|
|
"typecheck:web": "tsc --noEmit -p tsconfig.web.json",
|
|
"typecheck": "npm run typecheck:node && npm run typecheck:web",
|
|
"test": "vitest",
|
|
"test:run": "vitest run",
|
|
"dist": "electron-vite build && electron-builder --win --x64",
|
|
"dist:dir": "electron-vite build && electron-builder --win --x64 --dir",
|
|
"publish": "electron-vite build && electron-builder --win --x64 --publish always",
|
|
"release": "powershell -ExecutionPolicy Bypass -File scripts/release.ps1",
|
|
"gen:icons": "powershell -ExecutionPolicy Bypass -File scripts/gen-icons.ps1"
|
|
},
|
|
"dependencies": {
|
|
"electron-updater": "^6.8.3",
|
|
"framer-motion": "^11.11.17",
|
|
"lucide-react": "^0.460.0",
|
|
"react": "^18.3.1",
|
|
"react-dom": "^18.3.1",
|
|
"react-router-dom": "^6.28.0",
|
|
"zustand": "^5.0.1"
|
|
},
|
|
"devDependencies": {
|
|
"@types/node": "^22.19.19",
|
|
"@types/react": "^18.3.12",
|
|
"@types/react-dom": "^18.3.1",
|
|
"@vitejs/plugin-react": "^4.3.3",
|
|
"autoprefixer": "^10.4.20",
|
|
"electron": "^33.2.0",
|
|
"electron-builder": "^25.1.8",
|
|
"electron-vite": "^2.3.0",
|
|
"postcss": "^8.4.49",
|
|
"tailwindcss": "^3.4.15",
|
|
"typescript": "^5.6.3",
|
|
"vite": "^5.4.11",
|
|
"vitest": "^4.1.6"
|
|
},
|
|
"build": {
|
|
"appId": "com.anril.exercise-reminder",
|
|
"productName": "Exercise Reminder",
|
|
"directories": {
|
|
"output": "release",
|
|
"buildResources": "resources"
|
|
},
|
|
"files": [
|
|
"out/**/*",
|
|
"resources/**/*"
|
|
],
|
|
"win": {
|
|
"target": [
|
|
{
|
|
"target": "nsis",
|
|
"arch": [
|
|
"x64"
|
|
]
|
|
}
|
|
],
|
|
"icon": "resources/icon.ico"
|
|
},
|
|
"nsis": {
|
|
"oneClick": false,
|
|
"perMachine": false,
|
|
"allowToChangeInstallationDirectory": true,
|
|
"allowElevation": true,
|
|
"createDesktopShortcut": true,
|
|
"createStartMenuShortcut": true,
|
|
"shortcutName": "Exercise Reminder",
|
|
"uninstallDisplayName": "Exercise Reminder",
|
|
"installerLanguages": [
|
|
"ru_RU",
|
|
"en_US"
|
|
],
|
|
"displayLanguageSelector": true,
|
|
"menuCategory": false,
|
|
"runAfterFinish": true,
|
|
"deleteAppDataOnUninstall": false,
|
|
"differentialPackage": true,
|
|
"artifactName": "Exercise-Reminder-Setup-${version}.${ext}"
|
|
},
|
|
"publish": {
|
|
"provider": "generic",
|
|
"url": "https://xn--90adajar8af4h.xn--p1ai/git/AnRil/laude/releases/download/v${version}",
|
|
"channel": "latest"
|
|
}
|
|
}
|
|
}
|