-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Description
Hi, I have a windows electron app that's in production with with electron-updater 2.10.0 / electron-builder 19.30.2.
Today I tried to deploy and update with electron-builder 20.0.4 and electron-updater 2.20.2. However the clients failed to install the update with a weird 404 when trying to download the .exe (see logs below)
I'm publishing a dual x64 x86 nsis-web installer to s3, this is the same as with the version that's in production currently.
Here's the latest.yml that the clients are fetching from: https://s3.amazonaws.com/smrt-releases/latest.yml
Here's the installer clients are downloading: https://s3.amazonaws.com/smrt-releases/SMRT+Web+Setup+2.4.3.exe
{"level":"info","message":"update check poll","timestamp":"2018-02-14T14:49:28.892Z"}
{"level":"info","message":"Checking for update","timestamp":"2018-02-14T14:49:28.896Z"}
{"level":"info","message":"looking for update","timestamp":"2018-02-14T14:49:28.896Z"}
{"level":"info","message":"Found version 2.4.1 (url: https://smrt-releases.s3.amazonaws.com/SMRT%20Web%20Setup%202.4.1.exe)","timestamp":"2018-02-14T14:49:29.098Z"}
{"level":"info","message":"update available","timestamp":"2018-02-14T14:49:29.098Z"}
{"level":"info","message":"Downloading update from https://smrt-releases.s3.amazonaws.com/SMRT%20Web%20Setup%202.4.1.exe","timestamp":"2018-02-14T14:49:29.099Z"}
{"level":"error","message":"Error: Error: Cannot download \"https://smrt-releases.s3.amazonaws.com/undefined\", status 404: Not Found\n at ClientRequest.request.doRequest.response (C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\builder-util-runtime\\src\\httpExecutor.ts:153:18)\n at Object.onceWrapper (events.js:293:19)\n at emitOne (events.js:96:13)\n at ClientRequest.emit (events.js:191:7)\n at URLRequest.ClientRequest.urlRequest.on (C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\electron.asar\\browser\\api\\net.js:207:12)\n at emitOne (events.js:96:13)\n at URLRequest.emit (events.js:191:7)\nFrom previous event:\n at CancellationToken.createPromise (C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\builder-util-runtime\\src\\CancellationToken.ts:51:5)\n at C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\src\\electronHttpExecutor.ts:20:44\n at Generator.next (<anonymous>)\nFrom previous event:\n at ElectronHttpExecutor.download (C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\out\\electronHttpExecutor.js:60:11)\n at C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\src\\NsisUpdater.ts:85:35\nFrom previous event:\n at NsisUpdater.doDownloadUpdate (C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\out\\NsisUpdater.js:167:11)\n at C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\src\\AppUpdater.ts:301:25\n at Generator.next (<anonymous>)\nFrom previous event:\n at NsisUpdater.downloadUpdate (C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\out\\AppUpdater.js:358:11)\n at C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\src\\AppUpdater.ts:276:49\nFrom previous event:\n at NsisUpdater.doCheckForUpdates (C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\out\\AppUpdater.js:329:11)\n at C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\src\\AppUpdater.ts:222:25\n at Generator.next (<anonymous>)\n at runCallback (timers.js:672:20)\n at tryOnImmediate (timers.js:645:5)\n at processImmediate [as _immediateCallback] (timers.js:617:5)\nFrom previous event:\n at NsisUpdater._checkForUpdates (C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\out\\AppUpdater.js:282:11)\n at NsisUpdater.checkForUpdates (C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\src\\AppUpdater.ts:166:35)\n at Timeout.startLookup [as _onTimeout] (C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\webpack:\\src\\main\\plugins\\AutoUpdatePlugin.js:44:25)\n at ontimeout (timers.js:386:14)\n at tryOnTimeout (timers.js:250:5)\n at Timer.listOnTimeout (timers.js:214:5)","timestamp":"2018-02-14T14:49:30.674Z"}
{"level":"error","message":"Error: Cannot download \"https://smrt-releases.s3.amazonaws.com/undefined\", status 404: Not Found\n at ClientRequest.request.doRequest.response (C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\builder-util-runtime\\src\\httpExecutor.ts:153:18)\n at Object.onceWrapper (events.js:293:19)\n at emitOne (events.js:96:13)\n at ClientRequest.emit (events.js:191:7)\n at URLRequest.ClientRequest.urlRequest.on (C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\electron.asar\\browser\\api\\net.js:207:12)\n at emitOne (events.js:96:13)\n at URLRequest.emit (events.js:191:7)\nFrom previous event:\n at CancellationToken.createPromise (C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\builder-util-runtime\\src\\CancellationToken.ts:51:5)\n at C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\src\\electronHttpExecutor.ts:20:44\n at Generator.next (<anonymous>)\nFrom previous event:\n at ElectronHttpExecutor.download (C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\out\\electronHttpExecutor.js:60:11)\n at C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\src\\NsisUpdater.ts:85:35\nFrom previous event:\n at NsisUpdater.doDownloadUpdate (C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\out\\NsisUpdater.js:167:11)\n at C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\src\\AppUpdater.ts:301:25\n at Generator.next (<anonymous>)\nFrom previous event:\n at NsisUpdater.downloadUpdate (C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\out\\AppUpdater.js:358:11)\n at C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\src\\AppUpdater.ts:276:49\nFrom previous event:\n at NsisUpdater.doCheckForUpdates (C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\out\\AppUpdater.js:329:11)\n at C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\src\\AppUpdater.ts:222:25\n at Generator.next (<anonymous>)\n at runCallback (timers.js:672:20)\n at tryOnImmediate (timers.js:645:5)\n at processImmediate [as _immediateCallback] (timers.js:617:5)\nFrom previous event:\n at NsisUpdater._checkForUpdates (C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\out\\AppUpdater.js:282:11)\n at NsisUpdater.checkForUpdates (C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\src\\AppUpdater.ts:166:35)\n at Timeout.startLookup [as _onTimeout] (C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\webpack:\\src\\main\\plugins\\AutoUpdatePlugin.js:44:25)\n at ontimeout (timers.js:386:14)\n at tryOnTimeout (timers.js:250:5)\n at Timer.listOnTimeout (timers.js:214:5) 'Error: Cannot download \"https://smrt-releases.s3.amazonaws.com/undefined\", status 404: Not Found\\n at ClientRequest.request.doRequest.response (C:\\\\Users\\\\MpUser\\\\AppData\\\\Local\\\\Programs\\\\smrt-systems\\\\resources\\\\app.asar\\\\node_modules\\\\builder-util-runtime\\\\src\\\\httpExecutor.ts:153:18)\\n at Object.onceWrapper (events.js:293:19)\\n at emitOne (events.js:96:13)\\n at ClientRequest.emit (events.js:191:7)\\n at URLRequest.ClientRequest.urlRequest.on (C:\\\\Users\\\\MpUser\\\\AppData\\\\Local\\\\Programs\\\\smrt-systems\\\\resources\\\\electron.asar\\\\browser\\\\api\\\\net.js:207:12)\\n at emitOne (events.js:96:13)\\n at URLRequest.emit (events.js:191:7)\\nFrom previous event:\\n at CancellationToken.createPromise (C:\\\\Users\\\\MpUser\\\\AppData\\\\Local\\\\Programs\\\\smrt-systems\\\\resources\\\\app.asar\\\\node_modules\\\\builder-util-runtime\\\\src\\\\CancellationToken.ts:51:5)\\n at C:\\\\Users\\\\MpUser\\\\AppData\\\\Local\\\\Programs\\\\smrt-systems\\\\resources\\\\app.asar\\\\node_modules\\\\electron-updater\\\\src\\\\electronHttpExecutor.ts:20:44\\n at Generator.next (<anonymous>)\\nFrom previous event:\\n at ElectronHttpExecutor.download (C:\\\\Users\\\\MpUser\\\\AppData\\\\Local\\\\Programs\\\\smrt-systems\\\\resources\\\\app.asar\\\\node_modules\\\\electron-updater\\\\out\\\\electronHttpExecutor.js:60:11)\\n at C:\\\\Users\\\\MpUser\\\\AppData\\\\Local\\\\Programs\\\\smrt-systems\\\\resources\\\\app.asar\\\\node_modules\\\\electron-updater\\\\src\\\\NsisUpdater.ts:85:35\\nFrom previous event:\\n at NsisUpdater.doDownloadUpdate (C:\\\\Users\\\\MpUser\\\\AppData\\\\Local\\\\Programs\\\\smrt-systems\\\\resources\\\\app.asar\\\\node_modules\\\\electron-updater\\\\out\\\\NsisUpdater.js:167:11)\\n at C:\\\\Users\\\\MpUser\\\\AppData\\\\Local\\\\Programs\\\\smrt-systems\\\\resources\\\\app.asar\\\\node_modules\\\\electron-updater\\\\src\\\\AppUpdater.ts:301:25\\n at Generator.next (<anonymous>)\\nFrom previous event:\\n at NsisUpdater.downloadUpdate (C:\\\\Users\\\\MpUser\\\\AppData\\\\Local\\\\Programs\\\\smrt-systems\\\\resources\\\\app.asar\\\\node_modules\\\\electron-updater\\\\out\\\\AppUpdater.js:358:11)\\n at C:\\\\Users\\\\MpUser\\\\AppData\\\\Local\\\\Programs\\\\smrt-systems\\\\resources\\\\app.asar\\\\node_modules\\\\electron-updater\\\\src\\\\AppUpdater.ts:276:49\\nFrom previous event:\\n at NsisUpdater.doCheckForUpdates (C:\\\\Users\\\\MpUser\\\\AppData\\\\Local\\\\Programs\\\\smrt-systems\\\\resources\\\\app.asar\\\\node_modules\\\\electron-updater\\\\out\\\\AppUpdater.js:329:11)\\n at C:\\\\Users\\\\MpUser\\\\AppData\\\\Local\\\\Programs\\\\smrt-systems\\\\resources\\\\app.asar\\\\node_modules\\\\electron-updater\\\\src\\\\AppUpdater.ts:222:25\\n at Generator.next (<anonymous>)\\n at runCallback (timers.js:672:20)\\n at tryOnImmediate (timers.js:645:5)\\n at processImmediate [as _immediateCallback] (timers.js:617:5)\\nFrom previous event:\\n at NsisUpdater._checkForUpdates (C:\\\\Users\\\\MpUser\\\\AppData\\\\Local\\\\Programs\\\\smrt-systems\\\\resources\\\\app.asar\\\\node_modules\\\\electron-updater\\\\out\\\\AppUpdater.js:282:11)\\n at NsisUpdater.checkForUpdates (C:\\\\Users\\\\MpUser\\\\AppData\\\\Local\\\\Programs\\\\smrt-systems\\\\resources\\\\app.asar\\\\node_modules\\\\electron-updater\\\\src\\\\AppUpdater.ts:166:35)\\n at Timeout.startLookup [as _onTimeout] (C:\\\\Users\\\\MpUser\\\\AppData\\\\Local\\\\Programs\\\\smrt-systems\\\\resources\\\\app.asar\\\\webpack:\\\\src\\\\main\\\\plugins\\\\AutoUpdatePlugin.js:44:25)\\n at ontimeout (timers.js:386:14)\\n at tryOnTimeout (timers.js:250:5)\\n at Timer.listOnTimeout (timers.js:214:5)'","timestamp":"2018-02-14T14:49:30.675Z"}
{"message":"Cannot download \"https://smrt-releases.s3.amazonaws.com/undefined\", status 404: Not Found","errorClass":"Error","stacktrace":[{"file":"node_modules\\builder-util-runtime\\src\\httpExecutor.ts","path":"C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\builder-util-runtime\\src\\httpExecutor.ts","method":"response","lineNumber":153,"columnNumber":18},{"file":"events.js","path":"events.js","method":"onceWrapper","lineNumber":293,"columnNumber":19},{"file":"events.js","path":"events.js","method":"emitOne","lineNumber":96,"columnNumber":13},{"file":"events.js","path":"events.js","method":"emit","lineNumber":191,"columnNumber":7},{"file":"C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\electron.asar\\browser\\api\\net.js","path":"C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\electron.asar\\browser\\api\\net.js","method":"on","lineNumber":207,"columnNumber":12},{"file":"events.js","path":"events.js","method":"emitOne","lineNumber":96,"columnNumber":13},{"file":"events.js","path":"events.js","method":"emit","lineNumber":191,"columnNumber":7},{"file":"node_modules\\builder-util-runtime\\src\\CancellationToken.ts","path":"C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\builder-util-runtime\\src\\CancellationToken.ts","method":"createPromise","lineNumber":51,"columnNumber":5},{"file":"node_modules\\electron-updater\\src\\electronHttpExecutor.ts","path":"C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\src\\electronHttpExecutor.ts","method":"none","lineNumber":20,"columnNumber":44},{"file":null,"path":null,"method":"next","lineNumber":null,"columnNumber":null},{"file":"node_modules\\electron-updater\\out\\electronHttpExecutor.js","path":"C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\out\\electronHttpExecutor.js","method":"download","lineNumber":60,"columnNumber":11},{"file":"node_modules\\electron-updater\\src\\NsisUpdater.ts","path":"C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\src\\NsisUpdater.ts","method":"none","lineNumber":85,"columnNumber":35},{"file":"node_modules\\electron-updater\\out\\NsisUpdater.js","path":"C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\out\\NsisUpdater.js","method":"doDownloadUpdate","lineNumber":167,"columnNumber":11},{"file":"node_modules\\electron-updater\\src\\AppUpdater.ts","path":"C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\src\\AppUpdater.ts","method":"none","lineNumber":301,"columnNumber":25},{"file":null,"path":null,"method":"next","lineNumber":null,"columnNumber":null},{"file":"node_modules\\electron-updater\\out\\AppUpdater.js","path":"C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\out\\AppUpdater.js","method":"downloadUpdate","lineNumber":358,"columnNumber":11},{"file":"node_modules\\electron-updater\\src\\AppUpdater.ts","path":"C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\src\\AppUpdater.ts","method":"none","lineNumber":276,"columnNumber":49},{"file":"node_modules\\electron-updater\\out\\AppUpdater.js","path":"C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\out\\AppUpdater.js","method":"doCheckForUpdates","lineNumber":329,"columnNumber":11},{"file":"node_modules\\electron-updater\\src\\AppUpdater.ts","path":"C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\src\\AppUpdater.ts","method":"none","lineNumber":222,"columnNumber":25},{"file":null,"path":null,"method":"next","lineNumber":null,"columnNumber":null},{"file":"timers.js","path":"timers.js","method":"runCallback","lineNumber":672,"columnNumber":20},{"file":"timers.js","path":"timers.js","method":"tryOnImmediate","lineNumber":645,"columnNumber":5},{"file":"timers.js","path":"timers.js","method":"processImmediate [as _immediateCallback]","lineNumber":617,"columnNumber":5},{"file":"node_modules\\electron-updater\\out\\AppUpdater.js","path":"C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\out\\AppUpdater.js","method":"_checkForUpdates","lineNumber":282,"columnNumber":11},{"file":"node_modules\\electron-updater\\src\\AppUpdater.ts","path":"C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\node_modules\\electron-updater\\src\\AppUpdater.ts","method":"checkForUpdates","lineNumber":166,"columnNumber":35},{"file":"webpack:\\src\\main\\plugins\\AutoUpdatePlugin.js","path":"C:\\Users\\MpUser\\AppData\\Local\\Programs\\smrt-systems\\resources\\app.asar\\webpack:\\src\\main\\plugins\\AutoUpdatePlugin.js","method":"startLookup [as _onTimeout]","lineNumber":44,"columnNumber":25,"inProject":true},{"file":"timers.js","path":"timers.js","method":"ontimeout","lineNumber":386,"columnNumber":14},{"file":"timers.js","path":"timers.js","method":"tryOnTimeout","lineNumber":250,"columnNumber":5},{"file":"timers.js","path":"timers.js","method":"listOnTimeout","lineNumber":214,"columnNumber":5}],"level":"error","timestamp":"2018-02-14T14:49:30.680Z"}
Also, here's my electron-updater implementation/class that outputs the logs you see. The code is the same in the old version of my app and the new one that I'm trying to update to.
import { autoUpdater } from 'electron-updater';
import winston from 'winston';
import NativeClientPlugin from './NativeClientPlugin';
const QUIT_AND_INSTALL = 'quitAndUpdate';
const UPDATE_READY = 'updateReady';
const POLL_INTERVAL = 1000 * 60 * 10;
const NOTIFY_CLIENT_WAIT_TIME = 30000;
export default class AutoUpdatePlugin extends NativeClientPlugin {
constructor(conf) {
super(conf);
AutoUpdatePlugin.registerListeners();
AutoUpdatePlugin.pollUpdates();
}
execute = (action) => {
switch (action) {
case QUIT_AND_INSTALL:
return AutoUpdatePlugin.quitAndInstall();
default:
return NativeClientPlugin.fail(`No action ${action}`);
}
};
static pollUpdates() {
AutoUpdatePlugin.startLookup();
setInterval(AutoUpdatePlugin.startLookup, POLL_INTERVAL);
}
static startLookup() {
if (process.env.NODE_ENV === 'development') {
winston.info("No update check, Update system disabled in development");
}
else{
winston.info("update check poll");
autoUpdater.checkForUpdates();
}
return NativeClientPlugin.success();
}
static quitAndInstall() {
autoUpdater.quitAndInstall();
return NativeClientPlugin.success();
}
static notifyUpdateReady(...info) {
winston.info(`update downloaded ${JSON.stringify(info)}`);
setTimeout(() => {
winston.info('notifying client of update');
AutoUpdatePlugin.notify(UPDATE_READY);
}, NOTIFY_CLIENT_WAIT_TIME);
}
static registerListeners() {
autoUpdater.logger = winston;
autoUpdater.on('error', winston.error);
autoUpdater.on('checking-for-update', () => winston.info('looking for update'));
autoUpdater.on('update-available', () => winston.info('update available'));
autoUpdater.on('update-not-available', () => winston.info('update not available'));
autoUpdater.on('update-downloaded', AutoUpdatePlugin.notifyUpdateReady);
}
}
Here's my build config in package.json. Likewise, this has not changed between current production build and my new build.
"build": {
"appId": "com.smrtsystems.desktopapp",
"buildDependenciesFromSource": true,
"nsis": {
"oneClick": true,
"runAfterFinish": true,
"deleteAppDataOnUninstall": true,
"createDesktopShortcut": true
},
"win": {
"certificateFile": "certificates/SmrtElectronCodeSigning.pfx",
"certificatePassword": "truncatedforgithub"
},
"publish": {
"provider": "s3",
"bucket": "smrt-releases",
"acl": null
}
}
Here's my publish command (npm run publish):
cross-env NODE_ENV=production npm run build-preload && electron-webpack --env.minify=false && electron-builder --windows nsis-web --ia32 --x64 --publish always
Here's the final output of the publish command, uploading to S3 successfully:
• uploading file=SMRT Web Setup 2.4.3.exe provider=S3
[====================] 100% 0.0s | SMRT Web Setup 2.4.3.exe to S3
• uploaded provider=S3 file=SMRT Web Setup 2.4.3.exe bucket=smrt-releases
• uploading file=latest.yml provider=S3
• uploaded provider=S3 file=latest.yml bucket=smrt-releases