Как создавать электронные автообновления с помощью частного репозитория github? - PullRequest
0 голосов
/ 27 сентября 2019

Обновление обнаруживается, но я не могу загрузить его в свое приложение.Я получаю следующую ошибку:

Статус: доступно обновлениеСостояние: ошибка в автообновлении.Ошибка: невозможно загрузить "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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...