Icons set

Build electron for Linux, Windows and macOS. Ref. #18, #19, #20, #22
Include gns3server in electron app. Ref. #21
Bumping version Ref. #24
CD and Release for AppVeyor, CircleCi and TCI. Ref. #25, #26, #27, #28
Make lighter artifacts #31
Build gns3server for Linux, Windows and macOS. Ref. #33, #34, #35
This commit is contained in:
ziajka 2018-01-04 12:50:20 +01:00 committed by Dominik Ziajka
parent da01ac99fe
commit 55d049e945
23 changed files with 658 additions and 74 deletions

48
.appveyor.yml Normal file
View File

@ -0,0 +1,48 @@
version: 1.0.{build}
# Do not build feature branch with open Pull Requests
skip_branch_with_pr: true
platform:
- x64
init:
- git config --global core.autocrlf input
install:
- ps: Install-Product node 8 x64
- yarn
build_script:
- yarn buildforelectron
- "%PYTHON%\\python.exe -m pip install -r scripts\\requirements.txt"
- "%PYTHON%\\python.exe scripts\\build.py download"
- "%PYTHON%\\python.exe scripts\\build.py build -b dist"
- "%PYTHON%\\python.exe scripts\\build.py validate -b dist"
- yarn electron-builder --win --x64
- ps: $OutputDirectory = $((Get-Date).ToString('yyyy-MM-dd'))
- ps: If ($env:APPVEYOR_REPO_TAG -eq $false) { New-Item -ItemType Directory -Path "$OutputDirectory" }
- ps: If ($env:APPVEYOR_REPO_TAG -eq $false) { move build\*.exe "$OutputDirectory" }
- ps: If ($env:APPVEYOR_REPO_TAG -eq $false) { cd $OutputDirectory; Get-ChildItem -Filter '*.exe' | Rename-Item -NewName {$_.Name -replace ".exe","-$env:APPVEYOR_REPO_BRANCH-$env:APPVEYOR_BUILD_NUMBER.exe"} }
- ps: If ($env:APPVEYOR_REPO_TAG -eq $false) { $execs = Get-ChildItem -Filter '*.exe'; $artifact = $execs[0].basename; }
- ps: If ($env:APPVEYOR_REPO_TAG -eq $false) { cd ..; Push-AppveyorArtifact "$((Get-Date).ToString('yyyy-MM-dd'))\*.exe" -FileName "$((Get-Date).ToString('yyyy-MM-dd'))\$artifact.exe" }
test: off
deploy:
- provider: FTP
protocol: sftp
host: frs.sourceforge.net
username: gns3build
password:
secure: YRiLLoY27UOZ8QJHqqdESBQFfPfENKV0cLI/QFSsbWc=
folder: "../../../../frs/project/gns-3/Nightly Builds"
artifact: /.*\.exe/
on:
appveyor_repo_tag: false # deploy on branch only
environment:
GH_TOKEN:
secure: Zb0F4wfA/3zXZBQiEmEGpKIP17hD9gb/CNwxQE2N3J4Eq3z58mp0K0ey5g8Dupsb
PYTHON: "C:\\Python36-x64"

78
.circleci/config.yml Normal file
View File

@ -0,0 +1,78 @@
# iOS CircleCI 2.0 configuration file
version: 2
jobs:
build:
macos:
xcode: "9.1.0"
steps:
- checkout
- run:
name: Set timezone and check current datetime
command: |
sudo systemsetup -settimezone Europe/Warsaw
echo "Today is $(date +"%Y-%m-%d %T")"
- run:
name: Install project
# there is an issue with yarn and cache during executed on CI; for now we just run it twice, second should
# be successful. Check it later if updates fixed the issue
command: |
yarn || true
yarn || true
- run:
name: Building WebUI for distribution
command: |
yarn buildforelectron
- run:
name: Building gns3server
command: |
# brew update is required due to bug in CCI: https://discuss.circleci.com/t/homebrew-must-be-run-under-ruby-2-3-runtimeerror/17232/5
brew update
brew --env
brew --config
brew install python3
pip3 install -r scripts/requirements.txt
python3 scripts/build.py download
python3 scripts/build.py build -b dist
python3 scripts/build.py validate -b dist
- run:
name: Dist project
command: |
yarn electron-builder --mac --x64
- run:
name: Gather artifacts
command: |
mkdir artifacts
cp build/*.dmg artifacts/
- store_artifacts:
path: artifacts
destination: artifacts
- deploy:
name: Deploying on SourceForge
command: |
echo "Deploying on SourceForge"
ssh-keyscan -H frs.sourceforge.net >> ~/.ssh/known_hosts
mkdir -p artifacts/release
cd artifacts; for file in *.dmg; do mv "$file" "release/${file%.dmg}-${CIRCLE_BRANCH}-${CIRCLE_BUILD_NUM}.dmg"; done; cd ..
echo "mkdir \"/home/frs/project/gns-3/Nightly Builds/$(date +"%Y-%m-%d")\"" | sftp gns3build@frs.sourceforge.net || true
echo "Copying to SourceForge"
scp artifacts/release/* gns3build@frs.sourceforge.net:"/home/frs/project/gns-3/Nightly\ Builds/$(date +"%Y-%m-%d")/"
workflows:
version: 2
build_and_deploy:
jobs:
- build:
filters:
tags:
only: /v.*/

6
.gitignore vendored
View File

@ -6,6 +6,11 @@
/out-tsc
/ng-dist
/build
/scripts/tmp
/scripts/env
/scripts/build
/scripts/dist
/env
# dependencies
/node_modules
@ -34,6 +39,7 @@
npm-debug.log
testem.log
/typings
/yarn-error.log
# e2e
/e2e/*.js

View File

@ -7,22 +7,37 @@ addons:
apt:
sources:
- google-chrome
- ubuntu-toolchain-r-test
packages:
- google-chrome-stable
- google-chrome-beta
- g++-4.8
before_install:
- export CHROME_BIN=chromium-browser
- export DISPLAY=:99.0
- sh -e /etc/init.d/xvfb start
before_script:
- npm install -g karma
# Ubuntu trusty supports max python3.4, cx_freeze-5.1.1 requires min 3.5
- |
curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
export PATH="~/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
pyenv virtualenv 3.6.3 general
pyenv global general
python3 -V
pip3 -V
script: ng test --watch=false
before_script:
- yarn
script: yarn ng test --watch=false
after_script:
- ng build --base-href /${TRAVIS_BRANCH}/
# publish on gns3.github.io
- yarn ng build --base-href /${TRAVIS_BRANCH}/
- export GIT_LAST_LOG="$(git log -1 --pretty=%B)"
- git clone https://${GITHUB_CREDENTIALS}@github.com/GNS3/gns3.github.io.git github-pages
- mkdir -p github-pages/${TRAVIS_BRANCH}
@ -33,4 +48,15 @@ after_script:
- git add -A
- git commit -m "Deploy - $GIT_LAST_LOG"
- git push origin master
- cd $TRAVIS_BUILD_DIR
# publish
- yarn buildforelectron
- python3 -m venv env
- |
source env/bin/activate
pip3 install -r scripts/requirements.txt
python3 scripts/build.py download
python3 scripts/build.py build -b dist
# python3 scripts/build.py validate -b dist
- yarn electron-builder --linux --x64

View File

@ -50,6 +50,50 @@ Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.
Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/).
Before running the tests make sure you are serving the app via `ng serve`.
# How to build gns3server for WebUI?
python3 scripts/build.py build -b dist
# Releasing
## Bumping releases
We're using [version-bump-prompt](https://www.npmjs.com/package/version-bump-prompt) for increasing version.
Intall `bump` via:
npm install -g version-bump-prompt
If you would like to bump prepatch just type:
bump --prepatch --tag --push
## Final release
We have got configured CircleCI, TravisCI and AppVeyor for distributing application for particular platform. In order to release you need to tag your code nad push it.
Using `bump`:
bump --patch --tag --push
Or manually:
git tag v0.0.1
git push origin v0.0.1
When artifacts are made you can see draft release here: [gns3-web-ui releases](https://github.com/GNS3/gns3-web-ui/releases) which is waiting to be published.
After release please change current version in `package.json` to `X.X.X-beta.0`'. Otherwise artifacts will be overwritten during the next commit.
You may use `bump` to achieve that:
bump --prepatch
## Staging release
In case you would like to create a new staging release. Please create draft release on github, like `0.0.1-dev1`. After successful build you can find there artifacts.
## Further help
If you want to contribute to GNS3 Web UI feel free to reach us at `developers@gns3.net`.

52
electron-builder.yml Normal file
View File

@ -0,0 +1,52 @@
appId: com.gns3.web-ui
copyright: "Copyright © 2018 GNS3"
productName: "GNS3 Web UI Prototype"
#forceCodeSigning: true
artifactName: "${productName}-${os}-${arch}-${version}.${ext}"
asar: true
compression: normal
directories:
output: build
files:
- dist
- main.js
- package.json
mac:
category: public.app-category.developer-tools
# publish: github
target:
- dmg
dmg:
# background: "build/appdmg.png"
icon: "dist/assets/icons/mac/icon.icns"
iconSize: 128
contents:
- x: 380
y: 240
type: link
path: /Applications
- x: 122
y: 240
type: file
linux:
# publish: github
icon: "dist/assets/icons/png"
category: "Network"
packageCategory: "Network"
description: "GNS3 Web Ui Prototype application. Please don't use it as long as it's not officially announced."
target:
- deb
- AppImage
maintainer: "Dominik Ziajka <dominik@gns3.net>"
win:
publish:
provider: "github"
owner: "GNS3"
icon: "dist/assets/icons/win/icon.ico"
nsis:
perMachine: true

42
main.js
View File

@ -1,4 +1,5 @@
const electron = require('electron');
var fs = require('fs');
// Module to control application life.
const app = electron.app;
// Module to create native browser window.
@ -9,7 +10,43 @@ const url = require('url');
// Keep a global reference of the window object, if you don't, the window will
// be closed automatically when the JavaScript object is garbage collected.
let mainWindow
let mainWindow;
let serverProc = null;
let isWin = /^win/.test(process.platform);
const createServerProc = () => {
fs.readdir(path.join(__dirname, 'dist'), (err, files) => {
var serverPath = null;
files.forEach((filename) => {
if(filename.startsWith('exe.')) {
if (isWin) {
serverPath = path.join(__dirname, 'dist', filename, 'gns3server.exe');
}
else {
serverPath = path.join(__dirname, 'dist', filename, 'gns3server');
}
}
});
if (serverPath != null) {
serverProc = require('child_process').execFile(serverPath, []);
if (serverProc != null) {
console.log('gns3server started from path: ' + serverPath);
}
}
});
}
const exitServerProc = () => {
serverProc.kill();
serverProc = null;
}
function createWindow () {
// Create the browser window.
@ -39,6 +76,9 @@ function createWindow () {
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow);
app.on('ready', createServerProc);
app.on('will-quit', exitServerProc);
// Quit when all windows are closed.
app.on('window-all-closed', function () {
// On OS X it is common for applications and their menu bar

View File

@ -1,22 +1,26 @@
{
"name": "gns3-web-ui",
"version": "0.0.0",
"license": "MIT",
"version": "0.0.1-beta.0",
"license": "GPLv3",
"main": "main.js",
"repository": {
"type" : "git",
"url": "https://github.com/GNS3/gns3-web-ui.git"
},
"scripts": {
"ng": "ng",
"start": "ng serve",
"startforelectron": "ng serve -e electronDev",
"build": "ng build",
"buildforelectron": "ng build -e electronProd",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e",
"electrondev": "concurrently -k \"ng serve -e electronDev\" \"electron .\"",
"distlinux": "ng build -e electronProd && electron-builder --linux"
},
"build": {
"directories": {
"output": "build"
}
"electrondev": "concurrently -k \"yarn startforelectron\" \"electron .\"",
"distlinux": "yarn buildforelectron && electron-builder --linux --x64",
"distwin": "yarn buildforelectron && electron-builder --win --x64",
"distmac": "yarn buildforelectron && electron-builder --mac --x64",
"release": "build"
},
"private": true,
"dependencies": {
@ -32,7 +36,7 @@
"@angular/platform-browser-dynamic": "^5.1.2",
"@angular/router": "^5.1.2",
"@ng-bootstrap/ng-bootstrap": "^1.0.0-beta.4",
"angular2-indexeddb": "^1.0.11",
"angular2-indexeddb": "^1.2.2",
"bootstrap": "4.0.0-beta.2",
"core-js": "^2.4.1",
"d3-ng2-service": "^1.16.0",
@ -50,9 +54,10 @@
"@types/node": "~8.5.2",
"codelyzer": "~4.0.2",
"electron": "1.7.10",
"electron-builder": "^19.42.1",
"electron-builder": "^19.52.1",
"jasmine-core": "~2.8.0",
"jasmine-spec-reporter": "~4.2.1",
"jquery": "1.9.1 - 3",
"karma": "~2.0.0",
"karma-chrome-launcher": "~2.2.0",
"karma-cli": "~1.0.1",
@ -60,11 +65,10 @@
"karma-jasmine": "~1.1.0",
"karma-jasmine-html-reporter": "^0.2.2",
"node-sass": "^4.5.3",
"popper.js": "^1.12.3",
"protractor": "~5.2.0",
"ts-node": "~4.1.0",
"tslint": "~5.8.0",
"typescript": ">=2.4.0 <2.6.0",
"popper.js": "^1.12.3",
"jquery": "1.9.1 - 3"
"typescript": ">=2.4.0 <2.6.0"
}
}

257
scripts/build.py Normal file
View File

@ -0,0 +1,257 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2018 GNS3 Technologies Inc.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import os
import re
import pip
import sys
import shutil
import psutil
import zipfile
import requests
import platform
import argparse
import subprocess
from multiprocessing import Process, Queue
from multiprocessing.queues import Empty
from cx_Freeze import setup, Executable
FILE_DIR = os.path.dirname(os.path.realpath(__file__))
WORKING_DIR = os.path.join(FILE_DIR, 'tmp')
SOURCE_ZIP = os.path.join(WORKING_DIR, 'gns3-server.source.zip')
SOURCE_DESTINATION = os.path.join(WORKING_DIR, 'source')
BINARIES_EXTENSION = platform.system() == "Windows" and ".exe" or ""
def download(url, output):
print("Downloading {} to {}".format(url, output))
if os.path.exists(output):
print("{} already exist skip downloading".format(output))
return
r = requests.get(url, stream=True)
if r.status_code == 200:
with open(output, 'wb') as f:
for chunk in r.iter_content():
f.write(chunk)
else:
print("Download error for {} status {}".format(url, r.status_code))
sys.exit(1)
def unzip(filename, directory):
zip = zipfile.ZipFile(filename, 'r')
zip.extractall(directory)
zip.close()
return zip.filelist
def getversion(version):
match = re.search("^(\d+\.\d+(.\d+)?).*$", version)
assert match
return match.group(1)
def getsource_directory():
files = os.listdir(SOURCE_DESTINATION)
if len(files) > 0:
return os.path.join(SOURCE_DESTINATION, files[0])
raise Exception("Cannot find sources for gns3server")
def prepare():
os.makedirs(WORKING_DIR, exist_ok=True)
def download_command(arguments):
shutil.rmtree(SOURCE_DESTINATION, ignore_errors=True)
os.makedirs(SOURCE_DESTINATION)
download("https://github.com/GNS3/gns3-server/archive/2.1.zip", SOURCE_ZIP)
files = unzip(SOURCE_ZIP, SOURCE_DESTINATION)
source_directory = os.path.join(SOURCE_DESTINATION, files[0].filename)
if platform.system() == "Windows":
requirements = 'win-requirements.txt'
else:
requirements = 'requirements.txt'
pip.main(['install', '-r', os.path.join(source_directory, requirements)])
def build_command(arguments):
source_directory = getsource_directory()
sys.path.append(source_directory)
if platform.system() == 'Darwin':
# this fixes cx_freeze bug for OSX and python 3.6, see:
# https://bitbucket.org/ronaldoussoren/pyobjc/issues/185/python-36-modulenotfounderror-no-module
with open(os.path.join(source_directory, 'gns3server', 'main.py')) as f:
main_content = f.read()
if 'cx_freeze_and_python_3_6_missing_library' not in main_content:
main_content += "\ndef cx_freeze_and_python_3_6_missing_library():\n import _sysconfigdata_m_darwin_darwin\n\n"
with open(os.path.join(source_directory, 'gns3server', 'main.py'), 'w') as f:
f.write(main_content)
from gns3server.version import __version__
# cx_Freeze on Windows requires version to be in format a.b.c.d
server_version = getversion(__version__)
executables = [
Executable(
os.path.join(source_directory, "gns3server/main.py"),
targetName="gns3server{}".format(BINARIES_EXTENSION)
),
Executable(
os.path.join(source_directory, "gns3server/utils/vmnet.py"),
targetName="gns3vmnet{}".format(BINARIES_EXTENSION)
)
]
excludes = [
"raven.deprecation", # reported problem in raven package
"distutils", # issue on macOS
"tkinter", # issue on Windows
]
packages = [
"raven",
"psutil",
"asyncio",
"packaging", # needed for linux
"appdirs"
]
include_files = [
("gns3server/configs", "configs"),
("gns3server/appliances", "appliances"),
("gns3server/templates", "templates"),
("gns3server/symbols", "symbols"),
]
include_files = [(os.path.join(source_directory, x), y) for x, y in include_files]
setup(
name="GNS3",
version=server_version,
description="GNS3 Network simulator",
executables=executables,
options={
"build_exe": {
"includes": [],
"excludes": excludes,
"packages": packages,
"include_files": include_files
},
}
)
def execute(exe, queue, pid_q):
binary_process = subprocess.Popen(
[exe],
bufsize=1, shell=False,
stdout=subprocess.PIPE, stderr=subprocess.STDOUT
)
pid_q.put(binary_process.pid)
while True:
out = binary_process.stdout.read(1)
if out == b'' and binary_process.poll() is not None:
break
queue.put(out)
def validate_command(arguments):
output_directory = os.path.join(os.getcwd(), arguments.b)
files = os.listdir(output_directory)
matching = [f for f in files if f.startswith('exe.')]
if len(matching) == 0:
raise Exception("Cannot find binaries of gns3server")
binary = os.path.join(output_directory, matching[0], 'gns3server{}'.format(BINARIES_EXTENSION))
print("Validating: {}".format(binary))
pid_queue = Queue()
output_queue = Queue()
process = Process(target=execute, args=(binary, output_queue, pid_queue))
process.start()
pid = pid_queue.get()
print("Process is running on pid: " + str(pid))
output = ""
while True:
try:
char = output_queue.get(timeout=3)
output += char.decode()
except Empty:
break
process.terminate()
print("Output of process:")
print(output)
parent = psutil.Process(pid)
parent.kill()
result = "GNS3 Technologies Inc" not in output and 1 or 0
sys.exit(result)
if __name__ == '__main__':
parser = argparse.ArgumentParser(
description='Building gns3server for distribution')
subparsers = parser.add_subparsers(
dest='command',
help="Command which needs to be executed")
download_parser = subparsers.add_parser(
'download', help="Downloads source code of gns3server")
build_parser = subparsers.add_parser(
'build', help="Build gns3server")
build_parser.add_argument('-b', default=None, help="Output directory")
validate_parser = subparsers.add_parser(
'validate', help="Validate build")
validate_parser.add_argument('-b', default=None, help="Output directory")
args = parser.parse_args()
if args.command == 'build':
prepare()
build_command(args)
elif args.command == 'download':
prepare()
download_command(args)
elif args.command == 'validate':
prepare()
validate_command(args)

6
scripts/requirements.txt Normal file
View File

@ -0,0 +1,6 @@
setuptools==38.4
cx_Freeze==5.1.1
requests==2.18.4
packaging==16.8
appdirs==1.4.3
psutil==5.4.0

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 734 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 353 KiB

View File

@ -14,6 +14,9 @@
"lib": [
"es2016",
"dom"
],
},
"include": [
"./node_modules/angular2-indexeddb/index.ts"
]
}
}

126
yarn.lock
View File

@ -507,7 +507,7 @@ amdefine@>=0.0.4:
version "1.0.1"
resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
angular2-indexeddb@^1.0.11:
angular2-indexeddb@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/angular2-indexeddb/-/angular2-indexeddb-1.2.2.tgz#ec91bd2e94a451013a52060f7df4acb33fcec93b"
dependencies:
@ -527,14 +527,14 @@ ansi-html@0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e"
ansi-regex@*, ansi-regex@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
ansi-regex@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
ansi-regex@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
ansi-styles@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
@ -1209,7 +1209,7 @@ buffer@^5.0.2:
base64-js "^1.0.2"
ieee754 "^1.1.4"
builder-util-runtime@4.0.0, builder-util-runtime@^4.0.0:
builder-util-runtime@4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.0.0.tgz#783a4148164e8f9e2ffd4ffa4c2e0a0886e19496"
dependencies:
@ -1218,7 +1218,16 @@ builder-util-runtime@4.0.0, builder-util-runtime@^4.0.0:
fs-extra-p "^4.5.0"
sax "^1.2.4"
builder-util@4.1.1, builder-util@^4.1.0:
builder-util-runtime@^4.0.0, builder-util-runtime@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.0.1.tgz#d8423190a21e8c7cec185d589cb0cb888cc8e731"
dependencies:
bluebird-lst "^1.0.5"
debug "^3.1.0"
fs-extra-p "^4.5.0"
sax "^1.2.4"
builder-util@4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-4.1.1.tgz#478af1de7a2c5e1a9928712d558ae8e10ce727a7"
dependencies:
@ -1238,6 +1247,26 @@ builder-util@4.1.1, builder-util@^4.1.0:
temp-file "^3.0.0"
tunnel-agent "^0.6.0"
builder-util@^4.1.0:
version "4.1.4"
resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-4.1.4.tgz#d0c9544b6355d98ee6d2605d1fee3bcb55555d3e"
dependencies:
"7zip-bin" "^2.3.4"
bluebird-lst "^1.0.5"
builder-util-runtime "^4.0.1"
chalk "^2.3.0"
debug "^3.1.0"
fs-extra-p "^4.5.0"
ini "^1.3.5"
is-ci "^1.1.0"
js-yaml "^3.10.0"
lazy-val "^1.0.3"
semver "^5.4.1"
source-map-support "^0.5.0"
stat-mode "^0.2.2"
temp-file "^3.1.1"
tunnel-agent "^0.6.0"
buildmail@4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/buildmail/-/buildmail-4.0.1.tgz#877f7738b78729871c9a105e3b837d2be11a7a72"
@ -1492,6 +1521,14 @@ cliui@^3.2.0:
strip-ansi "^3.0.1"
wrap-ansi "^2.0.0"
cliui@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.0.0.tgz#743d4650e05f36d1ed2575b59638d87322bfbbcc"
dependencies:
string-width "^2.1.1"
strip-ansi "^4.0.0"
wrap-ansi "^2.0.0"
clone-deep@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.3.0.tgz#348c61ae9cdbe0edfe053d91ff4cc521d790ede8"
@ -2317,7 +2354,7 @@ debug@~2.2.0:
dependencies:
ms "0.7.1"
debuglog@*, debuglog@^1.0.1:
debuglog@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
@ -2650,7 +2687,7 @@ electron-builder-lib@19.52.1:
semver "^5.4.1"
temp-file "^3.0.0"
electron-builder@^19.42.1:
electron-builder@^19.52.1:
version "19.52.1"
resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-19.52.1.tgz#c218c641df764e48d082c48ae855beaab52e806a"
dependencies:
@ -3352,7 +3389,7 @@ fs-access@^1.0.0:
dependencies:
null-check "^1.0.0"
fs-extra-p@^4.4.4, fs-extra-p@^4.5.0:
fs-extra-p@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/fs-extra-p/-/fs-extra-p-4.5.0.tgz#b79f3f3fcc0b5e57b7e7caeb06159f958ef15fe8"
dependencies:
@ -4035,7 +4072,7 @@ import-local@^0.1.1:
pkg-dir "^2.0.0"
resolve-cwd "^2.0.0"
imurmurhash@*, imurmurhash@^0.1.4:
imurmurhash@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
@ -4780,7 +4817,7 @@ lazy-cache@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
lazy-val@^1.0.2, lazy-val@^1.0.3:
lazy-val@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.3.tgz#bb97b200ef00801d94c317e29dc6ed39e31c5edc"
@ -4903,10 +4940,6 @@ lockfile@~1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.3.tgz#2638fc39a0331e9cac1a04b71799931c9c50df79"
lodash._baseindexof@*:
version "3.1.0"
resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c"
lodash._baseuniq@~4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8"
@ -4914,28 +4947,10 @@ lodash._baseuniq@~4.6.0:
lodash._createset "~4.0.0"
lodash._root "~3.0.0"
lodash._bindcallback@*:
version "3.0.1"
resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e"
lodash._cacheindexof@*:
version "3.0.2"
resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92"
lodash._createcache@*:
version "3.1.2"
resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093"
dependencies:
lodash._getnative "^3.0.0"
lodash._createset@~4.0.0:
version "4.0.3"
resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26"
lodash._getnative@*, lodash._getnative@^3.0.0:
version "3.9.1"
resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
lodash._root@~3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692"
@ -4972,10 +4987,6 @@ lodash.mergewith@^4.3.1, lodash.mergewith@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55"
lodash.restparam@*:
version "3.6.1"
resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
lodash.tail@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664"
@ -5210,8 +5221,8 @@ mime@^1.2.11, mime@^1.3.4, mime@^1.4.1, mime@^1.5.0:
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
mime@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/mime/-/mime-2.1.0.tgz#1022a5ada445aa30686e4059abaea83d0b4e8f9c"
version "2.2.0"
resolved "https://registry.yarnpkg.com/mime/-/mime-2.2.0.tgz#161e541965551d3b549fa1114391e3a3d55b923b"
mimic-fn@^1.0.0:
version "1.1.0"
@ -6805,7 +6816,16 @@ rc-config-loader@^2.0.1:
path-exists "^2.1.0"
require-from-string "^2.0.1"
rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@^1.1.7, rc@^1.2.1:
rc@^1.0.1, rc@^1.1.6, rc@^1.2.1:
version "1.2.3"
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.3.tgz#51575a900f8dd68381c710b4712c2154c3e2035b"
dependencies:
deep-extend "~0.4.0"
ini "~1.3.0"
minimist "^1.2.0"
strip-json-comments "~2.0.1"
rc@^1.1.2, rc@^1.1.7:
version "1.2.2"
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077"
dependencies:
@ -6970,7 +6990,7 @@ readable-stream@~2.1.5:
string_decoder "~0.10.x"
util-deprecate "~1.0.1"
readdir-scoped-modules@*, readdir-scoped-modules@^1.0.0:
readdir-scoped-modules@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747"
dependencies:
@ -8251,14 +8271,14 @@ tar@^2.0.0, tar@^2.2.1, tar@~2.2.1:
fstream "^1.0.2"
inherits "2"
temp-file@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.0.0.tgz#1e9eca9c411a41564f5746bc2774c39080021db0"
temp-file@^3.0.0, temp-file@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.1.1.tgz#8823649aa4e8a6e419eb71b601a2e4d472b0f24f"
dependencies:
async-exit-hook "^2.0.1"
bluebird-lst "^1.0.5"
fs-extra-p "^4.4.4"
lazy-val "^1.0.2"
fs-extra-p "^4.5.0"
lazy-val "^1.0.3"
tempfile@^1.1.1:
version "1.1.1"
@ -8776,7 +8796,7 @@ v8flags@^3.0.0:
dependencies:
homedir-polyfill "^1.0.1"
validate-npm-package-license@*, validate-npm-package-license@^3.0.1:
validate-npm-package-license@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
dependencies:
@ -9208,17 +9228,17 @@ yargs-parser@^7.0.0:
dependencies:
camelcase "^4.1.0"
yargs-parser@^8.0.0:
yargs-parser@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950"
dependencies:
camelcase "^4.1.0"
yargs@^10.0.3:
version "10.0.3"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.0.3.tgz#6542debd9080ad517ec5048fb454efe9e4d4aaae"
version "10.1.1"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.1.tgz#5fe1ea306985a099b33492001fa19a1e61efe285"
dependencies:
cliui "^3.2.0"
cliui "^4.0.0"
decamelize "^1.1.1"
find-up "^2.1.0"
get-caller-file "^1.0.1"
@ -9229,7 +9249,7 @@ yargs@^10.0.3:
string-width "^2.0.0"
which-module "^2.0.0"
y18n "^3.2.1"
yargs-parser "^8.0.0"
yargs-parser "^8.1.0"
yargs@^4.3.2:
version "4.8.1"