Обновление обнаруживается, но я не могу загрузить его в свое приложение.Я получаю следующую ошибку:
Статус: доступно обновлениеСостояние: ошибка в автообновлении.Ошибка: невозможно загрузить "https://api.github.com/repos/[username]/[repo-name]/releases/assets/15151663",, статус 404: не найден.
Проблема возникает только при использовании частного репозитория github, а не публичного !!
Я пытался установить автообновляет чистый электронный реактор, и он прекрасно работает с частным репозиторием github. Так что я немного растерялся, что мне делать здесь.
Я провел небольшое исследование, и мне кажется, чтоupdate.yml должен содержать токен github (электронный сборщик должен его сгенерировать), но мой app-update.yml (который находится в release / win-unpacked / resources) не содержит токен ...
Itсодержит только эту информацию:
owner: [username]
repo: [repo-name]
provider: github
updaterCacheDirName: [appname]
Как я могу ее сгенерировать?
В другом комментарии говорится, что у меня должен быть отдельный репозиторий только для релиза, который у меня есть, но он все равно не работает.
Электронный автообновитель с частным репозиторием GitHub?
Другие люди говорят, что более ранние версии решают эту проблему, но я также видел, что люди говорят, что это не исправляет и понижениене реальноОчень хороший вариант.
Мои шаги по добавлению gh-токена:
Я устанавливаю информацию о github в package.json (этот токен игнорируется)
"publish": {
"provider": "github",
"owner": "[username]",
"repo": "[repo-name]",
"token": "[gh-token]",
"private": true
}
"repository": {
"type": "git",
"url": "https://github.com/[username]/[repo-name].git"
},
Поэтому я добавляю его в свой main.js на всякий случай.
autoUpdater.setFeedURL({
provider: 'github',
repo: '[repo-name]',
owner: '[username]',
private: true,
token: '[gh-token]'
});
process.env.GH_TOKEN = "[gh-token]";
Когда я удаляю setFeedURL, я получаю ту же ошибку, что и в следующих вопросах: https://github.com/electron-userland/electron-builder/issues/2641
latest.yml(сгенерированный файл в github выпускается вместе с сайтом installer.exe installer.exe.blockmap и installer.msi)
version: [version-number]
files:
- url: [app-name.exe]
sha512: [string]
size: [file-size]
path: [app-name.exe]
sha512: [string]
releaseDate: [release-date]
версий, которые я использую:
"electron": "^3.0.10",
"electron-builder": "^20.38.4",
"electron-updater": "^4.0.0",
full main.js
import { app, BrowserWindow, ipcMain, dialog } from 'electron';
import { autoUpdater } from 'electron-updater';
import log from 'electron-log';
import MenuBuilder from './menu';
export default class AppUpdater {
constructor() {
log.transports.file.level = 'info';
autoUpdater.logger = log;
autoUpdater.checkForUpdatesAndNotify();
}
}
let mainWindow = null;
autoUpdater.setFeedURL({
provider: 'github',
repo: '[repo-name]',
owner: '[username]',
private: true,
token: '[gh-token]'
});
process.env.GH_TOKEN = "[gh-token]";
if (process.env.NODE_ENV === 'production') {
const sourceMapSupport = require('source-map-support');
sourceMapSupport.install();
}
if (
process.env.NODE_ENV === 'development' ||
process.env.DEBUG_PROD === 'true'
) {
require('electron-debug')();
}
const installExtensions = async () => {
const installer = require('electron-devtools-installer');
const forceDownload = !!process.env.UPGRADE_EXTENSIONS;
const extensions = ['REACT_DEVELOPER_TOOLS', 'REDUX_DEVTOOLS'];
return Promise.all(
extensions.map(name => installer.default(installer[name], forceDownload))
).catch(console.log);
};
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
const sendStatusToWindow = (text) => {
log.info(text);
if(mainWindow){
mainWindow.webContents.send('message', text);
}
}
autoUpdater.on('checking-for-update', () => {
sendStatusToWindow('Checking for update...');
});
autoUpdater.on('update-available', (info) => {
sendStatusToWindow('Update available.');
dialog.showMessageBox({
message: 'update available !!'
});
});
autoUpdater.on('update-not-available', (info) => {
sendStatusToWindow('Update not available.');
});
autoUpdater.on('error', (err) => {
sendStatusToWindow('Error in auto-updater. ' + err);
});
autoUpdater.on('download-progress', (progressObj) => {
let log_message = "Download speed: " + progressObj.bytesPerSecond;
log_message = log_message + ' - Downloaded ' + progressObj.percent + '%';
log_message = log_message + ' (' + progressObj.transferred + "/" + progressObj.total + ')';
sendStatusToWindow(log_message);
})
autoUpdater.on('update-downloaded', (info) => {
sendStatusToWindow('Update downloaded');
dialog.showMessageBox({
message: 'Update downloaded, restarting app..'
});
autoUpdater.quitAndInstall();
});
app.on('ready', async () => {
autoUpdater.checkForUpdatesAndNotify();
if (
process.env.NODE_ENV === 'development' ||
process.env.DEBUG_PROD === 'true'
) {
await installExtensions();
}
mainWindow = new BrowserWindow({
show: false,
width: 1024,
height: 728
});
mainWindow.webContents.openDevTools();
mainWindow.loadURL(`file://${__dirname}/app.html`);
mainWindow.webContents.on('did-finish-load', () => {
if (!mainWindow) {
throw new Error('"mainWindow" is not defined');
}
if (process.env.START_MINIMIZED) {
mainWindow.minimize();
} else {
mainWindow.show();
mainWindow.focus();
}
});
mainWindow.on('closed', () => {
mainWindow = null;
});
const menuBuilder = new MenuBuilder(mainWindow);
menuBuilder.buildMenu();
new AppUpdater();
});
Я упаковываю свое приложение, используя:
"package": "yarn build && electron-builder build --publish never"
И затем я публикую его в выпусках github, используя:
"gh-publish": "electron-builder --x64 -p always"