diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000000..6905d384f6a --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +github: shiftkey diff --git a/.github/ISSUE_TEMPLATE/--submit-a-feature-request.md b/.github/ISSUE_TEMPLATE/--submit-a-feature-request.md index ece837861e1..eca720b17d1 100644 --- a/.github/ISSUE_TEMPLATE/--submit-a-feature-request.md +++ b/.github/ISSUE_TEMPLATE/--submit-a-feature-request.md @@ -1,6 +1,6 @@ --- name: "⭐ Submit a feature request" -about: 'Feature requests are considered based on team''s capacity ' +about: Feature requests are considered based on team''s capacity title: '' labels: '' assignees: '' diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 38ece480aed..c44a7e6ea4d 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -11,6 +11,12 @@ assignees: '' A clear and concise description of what the bug is. + + + + + + ### Version & OS Open 'About GitHub Desktop' menu to see the Desktop version. Also include what operating system you are using. diff --git a/.github/ISSUE_TEMPLATE/installation-issue.md b/.github/ISSUE_TEMPLATE/installation-issue.md new file mode 100644 index 00000000000..0d2175f7faa --- /dev/null +++ b/.github/ISSUE_TEMPLATE/installation-issue.md @@ -0,0 +1,21 @@ +--- +name: "\U0001F4BB Installation issue" +about: Report a problem when installing the application +title: '' +labels: '' +assignees: '' + +--- + +### Operating System/Distribution + +Which distribution of Linux are you using? + +### Installer + +Which version of the app? +Which installer type? + +### What happened? + +Provide as much detail as possible. Error messages or output are extremely useful. diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000000..ffe6d27daf4 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +version: 2 +updates: + - package-ecosystem: 'npm' + directory: '/' + open-pull-requests-limit: 5 + schedule: + interval: 'weekly' + allow: + - dependency-name: 'electron-builder' + - dependency-name: 'electron-packager' + - dependency-name: 'electron-installer-*' diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c2b3adfad39..cf2e80af2ba 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,8 +4,14 @@ on: push: branches: - development - - __release-* + - linux + - 'linux-release-*' + tags: + - 'release-*.*.*-linux*' pull_request: + branches: + - linux + - 'linux-release-*' jobs: build: @@ -15,13 +21,15 @@ jobs: fail-fast: false matrix: node: [14.15.4] - os: [macos-10.15, windows-2019] + os: [macos-10.15, windows-2019, ubuntu-18.04] arch: [x64, arm64] include: - os: macos-10.15 friendlyName: macOS - os: windows-2019 friendlyName: Windows + - os: ubuntu-18.04 + friendlyName: Ubuntu timeout-minutes: 60 env: # Needed for macOS arm64 until hosted macos-11.0 runners become available @@ -56,27 +64,12 @@ jobs: - name: Install and build dependencies run: yarn - env: - npm_config_arch: ${{ matrix.arch }} - TARGET_ARCH: ${{ matrix.arch }} - - name: Lint - run: yarn lint - name: Validate changelog run: yarn validate-changelog - name: Ensure a clean working directory run: yarn check-modified - name: Build production app run: yarn build:prod - env: - DESKTOP_OAUTH_CLIENT_ID: ${{ secrets.DESKTOP_OAUTH_CLIENT_ID }} - DESKTOP_OAUTH_CLIENT_SECRET: - ${{ secrets.DESKTOP_OAUTH_CLIENT_SECRET }} - APPLE_ID: ${{ secrets.APPLE_ID }} - APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} - DESKTOPBOT_TOKEN: ${{ secrets.DESKTOPBOT_TOKEN }} - KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} - npm_config_arch: ${{ matrix.arch }} - TARGET_ARCH: ${{ matrix.arch }} - name: Prepare testing environment if: matrix.arch == 'x64' run: yarn test:setup @@ -90,14 +83,20 @@ jobs: if: matrix.arch == 'x64' timeout-minutes: 5 run: yarn test:integration - - name: Publish production app - run: yarn run publish + - name: Package application + run: yarn run package + if: ${{ matrix.os == 'ubuntu-18.04' && matrix.arch == 'x64' }} + - name: Create Release + uses: softprops/action-gh-release@v1 + if: + ${{ matrix.os == 'ubuntu-18.04' && startsWith(github.ref, + 'refs/tags/') }} + with: + files: | + dist/*.AppImage + dist/*.deb + dist/*.rpm + dist/*.txt + draft: true env: - npm_config_arch: ${{ matrix.arch }} - DESKTOPBOT_TOKEN: ${{ secrets.DESKTOPBOT_TOKEN }} - WINDOWS_CERT_PASSWORD: ${{ secrets.WINDOWS_CERT_PASSWORD }} - KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} - DEPLOYMENT_SECRET: ${{ secrets.DEPLOYMENT_SECRET }} - S3_KEY: ${{ secrets.S3_KEY }} - S3_SECRET: ${{ secrets.S3_SECRET }} - S3_BUCKET: github-desktop + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 72129ee3699..a9db5ef1536 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -4,6 +4,7 @@ on: push: branches: - development + - linux pull_request: schedule: - cron: '0 19 * * 0' diff --git a/README.md b/README.md index 3e8505e79d5..dcc33eb7f26 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ -# [GitHub Desktop](https://desktop.github.com) +# [GitHub Desktop](https://desktop.github.com) - The Linux Fork + +[![Build Status](https://brendanforster.visualstudio.com/desktop-linux/_apis/build/status/Azure%20Pipelines%20Build?branchName=linux)](https://brendanforster.visualstudio.com/desktop-linux/_build/latest?definitionId=10&branchName=linux) GitHub Desktop is an open source [Electron](https://www.electronjs.org/)-based GitHub app. It is written in [TypeScript](http://www.typescriptlang.org) and @@ -6,85 +8,79 @@ uses [React](https://reactjs.org/). ![GitHub Desktop screenshot - Windows](https://cloud.githubusercontent.com/assets/359239/26094502/a1f56d02-3a5d-11e7-8799-23c7ba5e5106.png) -## Where can I get it? - -Download the official installer for your operating system: +## What is this repository for? - - [macOS](https://central.github.com/deployments/desktop/desktop/latest/darwin) - - [macOS (Apple Silicon)](https://central.github.com/deployments/desktop/desktop/latest/darwin-arm64) - - [Windows](https://central.github.com/deployments/desktop/desktop/latest/win32) - - [Windows machine-wide install](https://central.github.com/deployments/desktop/desktop/latest/win32?format=msi) +This repository contains specific patches on top of the upstream +`desktop/desktop` repository to support Linux usage. -You can install this alongside your existing GitHub Desktop for Mac or GitHub -Desktop for Windows application. +It also hosts preview packages for various Linux distributions: -**NOTE**: there is no current migration path to import your existing -repositories into the new application - you can drag-and-drop your repositories -from disk onto the application to get started. + - AppImage (`.AppImage`) + - Debian (`.deb`) + - RPM (`.rpm`) -### Beta Channel +Check out the [latest releases](https://github.com/shiftkey/desktop/releases) to +help out with testing on your distribution. -Want to test out new features and get fixes before everyone else? Install the -beta channel to get access to early builds of Desktop: +## packagecloud - - [macOS](https://central.github.com/deployments/desktop/desktop/latest/darwin?env=beta) - - [macOS (Apple Silicon)](https://central.github.com/deployments/desktop/desktop/latest/darwin-arm64?env=beta) - - [Windows](https://central.github.com/deployments/desktop/desktop/latest/win32?env=beta) - - [Windows (ARM64)](https://central.github.com/deployments/desktop/desktop/latest/win32-arm64?env=beta) - -The release notes for the latest beta versions are available [here](https://desktop.github.com/release-notes/?env=beta). +We use [PackageCloud](https://packagecloud.io/) for distributing +the installers for Debian and RPM-based distributions. These are not free services, +so if you can afford to help with these costs please [**Sponsor**](https://github.com/sponsors/shiftkey) +the project using the link in the header. -### Community Releases +### Debian/Ubuntu distributions -There are several community-supported package managers that can be used to -install GitHub Desktop: - - Windows users can install using [Chocolatey](https://chocolatey.org/) package manager: - `c:\> choco install github-desktop` - - macOS users can install using [Homebrew](https://brew.sh/) package manager: - `$ brew install --cask github` +To setup the package repository, run these commands: -Installers for various Linux distributions can be found on the -[`shiftkey/desktop`](https://github.com/shiftkey/desktop) fork. +```sh +$ wget -qO - https://packagecloud.io/shiftkey/desktop/gpgkey | sudo tee /etc/apt/trusted.gpg.d/shiftkey-desktop.asc > /dev/null +$ sudo sh -c 'echo "deb [arch=amd64] https://packagecloud.io/shiftkey/desktop/any/ any main" > /etc/apt/sources.list.d/packagecloud-shiftky-desktop.list' +$ sudo apt-get update +``` -Arch Linux users can install the latest version from the -[AUR](https://aur.archlinux.org/packages/github-desktop-bin/). +Then install GitHub Desktop: -## Is GitHub Desktop right for me? What are the primary areas of focus? +```sh +$ sudo apt install github-desktop +``` -[This document](https://github.com/desktop/desktop/blob/development/docs/process/what-is-desktop.md) describes the focus of GitHub Desktop and who the product is most useful for. +### Red Hat/CentOS/Fedora distributions -And to see what the team is working on currently and in the near future, check out the [GitHub Desktop roadmap](https://github.com/desktop/desktop/blob/development/docs/process/roadmap.md). +To setup the package repository, run these commands: -## I have a problem with GitHub Desktop +```sh +$ sudo rpm --import https://packagecloud.io/shiftkey/desktop/gpgkey +$ sudo sh -c 'echo -e "[shiftkey]\nname=GitHub Desktop\nbaseurl=https://packagecloud.io/shiftkey/desktop/el/7/\$basearch\nenabled=1\ngpgcheck=0\nrepo_gpgcheck=1\ngpgkey=https://packagecloud.io/shiftkey/desktop/gpgkey" > /etc/yum.repos.d/shiftkey-desktop.repo' +``` -Note: The [GitHub Desktop Code of Conduct](https://github.com/desktop/desktop/blob/development/CODE_OF_CONDUCT.md) applies in all interactions relating to the GitHub Desktop project. +Then install GitHub Desktop: -First, please search the [open issues](https://github.com/desktop/desktop/issues?q=is%3Aopen) -and [closed issues](https://github.com/desktop/desktop/issues?q=is%3Aclosed) -to see if your issue hasn't already been reported (it may also be fixed). +```sh +# if yum is your package manager +$ sudo yum install github-desktop -There is also a list of [known issues](https://github.com/desktop/desktop/blob/development/docs/known-issues.md) -that are being tracked against Desktop, and some of these issues have workarounds. +# if dnf is your package manager +$ sudo dnf install github-desktop +``` -If you can't find an issue that matches what you're seeing, open a [new issue](https://github.com/desktop/desktop/issues/new/choose), -choose the right template and provide us with enough information to investigate -further. +## Other Distributions -## The issue I reported isn't fixed yet. What can I do? - -If nobody has responded to your issue in a few days, you're welcome to respond to it with a friendly ping in the issue. Please do not respond more than a second time if nobody has responded. The GitHub Desktop maintainers are constrained in time and resources, and diagnosing individual configurations can be difficult and time consuming. While we'll try to at least get you pointed in the right direction, we can't guarantee we'll be able to dig too deeply into any one person's issue. +Arch Linux users can install GitHub Desktop from the +[AUR](https://aur.archlinux.org/packages/github-desktop-bin/). -## How can I contribute to GitHub Desktop? +`gnome-keyring` is required and the daemon must be launched either at login or when the X server is started. Normally this is handled by a display manager, but in other cases following the instructions found on the [Arch Wiki](https://wiki.archlinux.org/index.php/GNOME/Keyring#Using_the_keyring_outside_GNOME) will fix the issue of not being able to save login credentials. -The [CONTRIBUTING.md](./.github/CONTRIBUTING.md) document will help you get setup and -familiar with the source. The [documentation](docs/) folder also contains more -resources relevant to the project. +## Known issues -If you're looking for something to work on, check out the [help wanted](https://github.com/desktop/desktop/issues?q=is%3Aissue+is%3Aopen+label%3A%22help%20wanted%22) label. +If you're having troubles with Desktop, please refer to the [Known issues](docs/known-issues.md#linux) +document for guidance and workarounds for common limitations. -## More Resources +## More information -See [desktop.github.com](https://desktop.github.com) for more product-oriented +Please check out the [README](https://github.com/desktop/desktop#github-desktop) +on the upstream [GitHub Desktop project](https://github.com/desktop/desktop) and +[desktop.github.com](https://desktop.github.com) for more product-oriented information about GitHub Desktop. ## License diff --git a/app/package.json b/app/package.json index 7cd6fb22473..cf35d2a3197 100644 --- a/app/package.json +++ b/app/package.json @@ -1,5 +1,5 @@ { - "name": "desktop", + "name": "github-desktop", "productName": "GitHub Desktop", "bundleID": "com.github.GitHubClient", "companyName": "GitHub, Inc.", @@ -21,7 +21,7 @@ "byline": "^5.0.0", "chalk": "^2.3.0", "classnames": "^2.2.5", - "codemirror": "^5.49.2", + "codemirror": "^5.59.2", "codemirror-mode-elixir": "^1.1.2", "compare-versions": "^3.6.0", "deep-equal": "^1.0.1", @@ -29,7 +29,7 @@ "detect-arm64-translation": "https://github.com/desktop/node-detect-arm64-translation#v1.0.4", "dexie": "^2.0.0", "double-ended-queue": "^2.1.0-0", - "dugite": "^1.103.0", + "@shiftkey/dugite": "^1.103.99", "electron-window-state": "^5.0.3", "event-kit": "^2.0.0", "file-metadata": "^1.0.0", diff --git a/app/src/cli/open-desktop.ts b/app/src/cli/open-desktop.ts index f1cf81a35b8..8223a68edd1 100644 --- a/app/src/cli/open-desktop.ts +++ b/app/src/cli/open-desktop.ts @@ -12,6 +12,8 @@ export function openDesktop(url: string = '') { return ChildProcess.spawn('open', [url], { env }) } else if (__WIN32__) { return ChildProcess.spawn('cmd', ['/c', 'start', url], { env }) + } else if (__LINUX__) { + return ChildProcess.spawn('xdg-open', [url], { env }) } else { throw new Error( `Desktop command line interface not currently supported on platform ${process.platform}` diff --git a/app/src/lib/editors/found-editor.ts b/app/src/lib/editors/found-editor.ts index a2c7f2bb5ad..c6a54597cc5 100644 --- a/app/src/lib/editors/found-editor.ts +++ b/app/src/lib/editors/found-editor.ts @@ -1,5 +1,11 @@ export interface IFoundEditor { readonly editor: T readonly path: string + /** + * Indicate to Desktop to launch the editor with the `shell: true` option included. + * + * This is available to all platforms, but is only currently used by some Windows + * editors as their launch programs end in `.cmd` + */ readonly usesShell?: boolean } diff --git a/app/src/lib/editors/launch.ts b/app/src/lib/editors/launch.ts index 1d098f3843f..d20be766e48 100644 --- a/app/src/lib/editors/launch.ts +++ b/app/src/lib/editors/launch.ts @@ -1,7 +1,25 @@ import { spawn, SpawnOptions } from 'child_process' -import { pathExists } from 'fs-extra' +import { pathExists as pathExistsDefault } from 'fs-extra' +import { pathExists as pathExistsLinux, spawnEditor } from '../helpers/linux' import { ExternalEditorError, FoundEditor } from './shared' +/** + * Use a platform-specific pathExists based on the platform, to simplify changes + * to the application logic + * + * @param path the location of some program on disk + * + * @returns `true` if the path exists on disk, or `false` otherwise + * + */ +function pathExists(path: string) { + if (__LINUX__) { + return pathExistsLinux(path) + } else { + return pathExistsDefault(path) + } +} + /** * Open a given file or folder in the desired external editor. * @@ -35,6 +53,8 @@ export async function launchExternalEditor( // In macOS we can use `open`, which will open the right executable file // for us, we only need the path to the editor .app folder. spawn('open', ['-a', editorPath, fullPath], opts) + } else if (__LINUX__) { + spawnEditor(editorPath, fullPath, opts) } else { spawn(editorPath, [fullPath], opts) } diff --git a/app/src/lib/editors/linux.ts b/app/src/lib/editors/linux.ts index 91fd4ecbe14..04c9fb4e45a 100644 --- a/app/src/lib/editors/linux.ts +++ b/app/src/lib/editors/linux.ts @@ -1,4 +1,4 @@ -import { pathExists } from 'fs-extra' +import { pathExists } from '../helpers/linux' import { IFoundEditor } from './found-editor' @@ -34,7 +34,11 @@ const editors: ILinuxExternalEditor[] = [ }, { name: 'VSCodium', - paths: ['/usr/bin/codium', '/var/lib/flatpak/app/com.vscodium.codium'], + paths: [ + '/usr/bin/codium', + '/var/lib/flatpak/app/com.vscodium.codium', + '/usr/share/vscodium-bin/bin/codium', + ], }, { name: 'Sublime Text', diff --git a/app/src/lib/git/apply.ts b/app/src/lib/git/apply.ts index 85467312822..eec87e4c72c 100644 --- a/app/src/lib/git/apply.ts +++ b/app/src/lib/git/apply.ts @@ -1,4 +1,4 @@ -import { GitError as DugiteError } from 'dugite' +import { GitError as DugiteError } from '@shiftkey/dugite' import { git } from './core' import { WorkingDirectoryFileChange, diff --git a/app/src/lib/git/authentication.ts b/app/src/lib/git/authentication.ts index 6a925a72491..9c484bebda9 100644 --- a/app/src/lib/git/authentication.ts +++ b/app/src/lib/git/authentication.ts @@ -1,6 +1,6 @@ import * as Path from 'path' -import { GitError as DugiteError } from 'dugite' +import { GitError as DugiteError } from '@shiftkey/dugite' import { IGitAccount } from '../../models/git-account' import { enableDesktopTrampoline } from '../feature-flag' import { getDesktopTrampolineFilename } from 'desktop-trampoline' diff --git a/app/src/lib/git/branch.ts b/app/src/lib/git/branch.ts index 7f4df2d6cea..982e608496f 100644 --- a/app/src/lib/git/branch.ts +++ b/app/src/lib/git/branch.ts @@ -4,7 +4,7 @@ import { Branch } from '../../models/branch' import { IGitAccount } from '../../models/git-account' import { formatAsLocalRef } from './refs' import { deleteRef } from './update-ref' -import { GitError as DugiteError } from 'dugite' +import { GitError as DugiteError } from '@shiftkey/dugite' import { getRemoteURL } from './remote' import { getFallbackUrlForProxyResolve } from './environment' import { withTrampolineEnvForRemoteOperation } from '../trampoline/trampoline-environment' diff --git a/app/src/lib/git/cherry-pick.ts b/app/src/lib/git/cherry-pick.ts index ec8d235223a..e203b892f0c 100644 --- a/app/src/lib/git/cherry-pick.ts +++ b/app/src/lib/git/cherry-pick.ts @@ -1,6 +1,6 @@ import * as Path from 'path' import * as FSE from 'fs-extra' -import { GitError } from 'dugite' +import { GitError } from '@shiftkey/dugite' import { Repository } from '../../models/repository' import { AppFileStatusKind, diff --git a/app/src/lib/git/core.ts b/app/src/lib/git/core.ts index dbe06f9b752..0b416ba4198 100644 --- a/app/src/lib/git/core.ts +++ b/app/src/lib/git/core.ts @@ -3,7 +3,7 @@ import { IGitResult as DugiteResult, GitError as DugiteError, IGitExecutionOptions as DugiteExecutionOptions, -} from 'dugite' +} from '@shiftkey/dugite' import { assertNever } from '../fatal-error' import { getDotComAPIEndpoint } from '../api' diff --git a/app/src/lib/git/for-each-ref.ts b/app/src/lib/git/for-each-ref.ts index 5f477a07581..bcfe8d4b0a0 100644 --- a/app/src/lib/git/for-each-ref.ts +++ b/app/src/lib/git/for-each-ref.ts @@ -1,5 +1,5 @@ import { git } from './core' -import { GitError } from 'dugite' +import { GitError } from '@shiftkey/dugite' import { Repository } from '../../models/repository' import { Branch, diff --git a/app/src/lib/git/merge.ts b/app/src/lib/git/merge.ts index 5efae36c6fe..9e5554b97ca 100644 --- a/app/src/lib/git/merge.ts +++ b/app/src/lib/git/merge.ts @@ -2,7 +2,7 @@ import * as FSE from 'fs-extra' import * as Path from 'path' import { git } from './core' -import { GitError } from 'dugite' +import { GitError } from '@shiftkey/dugite' import { Repository } from '../../models/repository' import { Branch } from '../../models/branch' import { MergeTreeResult } from '../../models/merge' diff --git a/app/src/lib/git/push.ts b/app/src/lib/git/push.ts index 3e845134ccf..22e4abfbd5c 100644 --- a/app/src/lib/git/push.ts +++ b/app/src/lib/git/push.ts @@ -1,4 +1,4 @@ -import { GitError as DugiteError } from 'dugite' +import { GitError as DugiteError } from '@shiftkey/dugite' import { git, diff --git a/app/src/lib/git/rebase.ts b/app/src/lib/git/rebase.ts index c3e2e5962ab..1d7913b2b15 100644 --- a/app/src/lib/git/rebase.ts +++ b/app/src/lib/git/rebase.ts @@ -1,7 +1,7 @@ import * as Path from 'path' import { ChildProcess } from 'child_process' import * as FSE from 'fs-extra' -import { GitError } from 'dugite' +import { GitError } from '@shiftkey/dugite' import byline from 'byline' import { Repository } from '../../models/repository' diff --git a/app/src/lib/git/remote.ts b/app/src/lib/git/remote.ts index df807c16005..15b8d8fcada 100644 --- a/app/src/lib/git/remote.ts +++ b/app/src/lib/git/remote.ts @@ -1,5 +1,5 @@ import { git } from './core' -import { GitError } from 'dugite' +import { GitError } from '@shiftkey/dugite' import { Repository } from '../../models/repository' import { IRemote } from '../../models/remote' diff --git a/app/src/lib/git/rev-list.ts b/app/src/lib/git/rev-list.ts index 6e87fe31c2a..b4b3f11a203 100644 --- a/app/src/lib/git/rev-list.ts +++ b/app/src/lib/git/rev-list.ts @@ -1,4 +1,4 @@ -import { GitError } from 'dugite' +import { GitError } from '@shiftkey/dugite' import { git } from './core' import { Repository } from '../../models/repository' import { Branch, BranchType, IAheadBehind } from '../../models/branch' diff --git a/app/src/lib/git/rev-parse.ts b/app/src/lib/git/rev-parse.ts index 0e1bb4eeff9..609afe2bfa8 100644 --- a/app/src/lib/git/rev-parse.ts +++ b/app/src/lib/git/rev-parse.ts @@ -1,7 +1,7 @@ import * as Path from 'path' import { git } from './core' -import { RepositoryDoesNotExistErrorCode } from 'dugite' +import { RepositoryDoesNotExistErrorCode } from '@shiftkey/dugite' /** * Get the absolute path to the top level working directory. diff --git a/app/src/lib/git/spawn.ts b/app/src/lib/git/spawn.ts index f773cb6e124..113a7295f66 100644 --- a/app/src/lib/git/spawn.ts +++ b/app/src/lib/git/spawn.ts @@ -1,4 +1,4 @@ -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import * as GitPerf from '../../ui/lib/git-perf' import { isErrnoException } from '../errno-exception' diff --git a/app/src/lib/git/stash.ts b/app/src/lib/git/stash.ts index d7bc81131c6..869ca242bd7 100644 --- a/app/src/lib/git/stash.ts +++ b/app/src/lib/git/stash.ts @@ -1,4 +1,4 @@ -import { GitError as DugiteError } from 'dugite' +import { GitError as DugiteError } from '@shiftkey/dugite' import { git, GitError } from './core' import { Repository } from '../../models/repository' import { diff --git a/app/src/lib/helpers/linux.ts b/app/src/lib/helpers/linux.ts new file mode 100644 index 00000000000..e6e021808b0 --- /dev/null +++ b/app/src/lib/helpers/linux.ts @@ -0,0 +1,96 @@ +import { join } from 'path' +import { pathExists as pathExistsInternal } from 'fs-extra' +import { + ChildProcess, + spawn, + SpawnOptionsWithoutStdio, + SpawnOptions, +} from 'child_process' + +export function isFlatpakBuild() { + return __LINUX__ && process.env.FLATPAK_HOST === '1' +} + +/** + * Convert an executable path to be relative to the flatpak host + * + * @param path a path to an executable relative to the root of the filesystem + * + */ +export function convertToFlatpakPath(path: string) { + if (!__LINUX__) { + return path + } + + if (path.startsWith('/opt/')) { + return path + } + + return join('/var/run/host', path) +} +export function formatWorkingDirectoryForFlatpak(path: string): string { + return path.replace(/(\s)/, "\ ") +} +/** + * Checks the file path on disk exists before attempting to launch a specific shell + * + * @param path + * + * @returns `true` if the path can be resolved, or `false` otherwise + */ +export async function pathExists(path: string): Promise { + if (isFlatpakBuild()) { + path = convertToFlatpakPath(path) + } + + try { + return await pathExistsInternal(path) + } catch { + return false + } +} + +/** + * Spawn a particular shell in a way that works for Flatpak-based usage + * + * @param path path to shell, relative to the root of the filesystem + * @param args arguments to provide to the shell + * @param options additional options to provide to spawn function + * + * @returns a child process to observe and monitor + */ +export function spawnShell( + path: string, + args: string[], + options?: SpawnOptionsWithoutStdio +): ChildProcess { + if (isFlatpakBuild()) { + return spawn('flatpak-spawn', ['--host', path, ...args], options) + } + + return spawn(path, args, options) +} + +/** + * Spawn a given editor in a way that works for Flatpak-based usage + * + * @param path path to editor, relative to the root of the filesystem + * @param workingDirectory working directory to open initially in editor + * @param options additional options to provide to spawn function + */ +export function spawnEditor( + path: string, + workingDirectory: string, + options: SpawnOptions +): ChildProcess { + if (isFlatpakBuild()) { + let EscapedworkingDirectory = formatWorkingDirectoryForFlatpak(workingDirectory) + return spawn( + 'flatpak-spawn', + ['--host', path, EscapedworkingDirectory], + options + ) + } else { + return spawn(path, [workingDirectory], options) + } +} diff --git a/app/src/lib/shells/linux.ts b/app/src/lib/shells/linux.ts index 47a5c7f038c..393e0bb7e30 100644 --- a/app/src/lib/shells/linux.ts +++ b/app/src/lib/shells/linux.ts @@ -1,8 +1,8 @@ -import { spawn, ChildProcess } from 'child_process' -import { pathExists } from 'fs-extra' +import { ChildProcess } from 'child_process' import { assertNever } from '../fatal-error' import { IFoundShell } from './found-shell' import { parseEnumValue } from '../enum' +import { pathExists as pathExistsLinux, spawnShell } from '../helpers/linux' export enum Shell { Gnome = 'GNOME Terminal', @@ -27,7 +27,7 @@ export function parse(label: string): Shell { } async function getPathIfAvailable(path: string): Promise { - return (await pathExists(path)) ? path : null + return (await pathExistsLinux(path)) ? path : null } function getShellPath(shell: Shell): Promise { @@ -164,21 +164,25 @@ export function launch( case Shell.Terminator: case Shell.XFCE: case Shell.Alacritty: - return spawn(foundShell.path, ['--working-directory', path]) + return spawnShell(foundShell.path, ['--working-directory', path]) case Shell.Urxvt: - return spawn(foundShell.path, ['-cd', path]) + return spawnShell(foundShell.path, ['-cd', path]) case Shell.Konsole: - return spawn(foundShell.path, ['--workdir', path]) + return spawnShell(foundShell.path, ['--workdir', path]) case Shell.Xterm: - return spawn(foundShell.path, ['-e', '/bin/bash'], { cwd: path }) + return spawnShell(foundShell.path, ['-e', '/bin/bash'], { cwd: path }) case Shell.Terminology: - return spawn(foundShell.path, ['-d', path]) + return spawnShell(foundShell.path, ['-d', path]) case Shell.Deepin: - return spawn(foundShell.path, ['-w', path]) + return spawnShell(foundShell.path, ['-w', path]) case Shell.Elementary: - return spawn(foundShell.path, ['-w', path]) + return spawnShell(foundShell.path, ['-w', path]) case Shell.Kitty: - return spawn(foundShell.path, ['--single-instance', '--directory', path]) + return spawnShell(foundShell.path, [ + '--single-instance', + '--directory', + path, + ]) default: return assertNever(shell, `Unknown shell: ${shell}`) } diff --git a/app/src/lib/shells/shared.ts b/app/src/lib/shells/shared.ts index f09bfdfa774..4ec05019ac8 100644 --- a/app/src/lib/shells/shared.ts +++ b/app/src/lib/shells/shared.ts @@ -1,9 +1,10 @@ import { ChildProcess } from 'child_process' -import { pathExists } from 'fs-extra' +import { pathExists as pathExistsDefault } from 'fs-extra' import * as Darwin from './darwin' import * as Win32 from './win32' import * as Linux from './linux' +import { pathExists as pathExistsLinux } from '../helpers/linux' import { IFoundShell } from './found-shell' import { ShellError } from './error' @@ -72,6 +73,23 @@ export async function findShellOrDefault(shell: Shell): Promise { } } +/** + * Use a platform-specific pathExists based on the platform, to simplify changes + * to the application logic + * + * @param path the location of some program on disk + * + * @returns `true` if the path exists on disk, or `false` otherwise + * + */ +function pathExists(path: string) { + if (__LINUX__) { + return pathExistsLinux(path) + } else { + return pathExistsDefault(path) + } +} + /** Launch the given shell at the path. */ export async function launchShell( shell: FoundShell, diff --git a/app/src/lib/stores/app-store.ts b/app/src/lib/stores/app-store.ts index fdf47ed58b5..68dedca3afe 100644 --- a/app/src/lib/stores/app-store.ts +++ b/app/src/lib/stores/app-store.ts @@ -262,7 +262,7 @@ import { WorkflowPreferences } from '../../models/workflow-preferences' import { RepositoryIndicatorUpdater } from './helpers/repository-indicator-updater' import { getAttributableEmailsFor } from '../email' import { TrashNameLabel } from '../../ui/lib/context-menu' -import { GitError as DugiteError } from 'dugite' +import { GitError as DugiteError } from '@shiftkey/dugite' import { ErrorWithMetadata, CheckoutError } from '../error-with-metadata' import { ShowSideBySideDiffDefault, diff --git a/app/src/lib/stores/git-store.ts b/app/src/lib/stores/git-store.ts index d9c5ae7dfc6..8e4ddee3b6d 100644 --- a/app/src/lib/stores/git-store.ts +++ b/app/src/lib/stores/git-store.ts @@ -69,7 +69,7 @@ import { createBranch, } from '../git' import { GitError as DugiteError } from '../../lib/git' -import { GitError } from 'dugite' +import { GitError } from '@shiftkey/dugite' import { RetryAction, RetryActionType } from '../../models/retry-actions' import { UpstreamAlreadyExistsError } from './upstream-already-exists-error' import { forceUnwrap } from '../fatal-error' diff --git a/app/src/main-process/app-window.ts b/app/src/main-process/app-window.ts index faf034cb2bf..5ab5832c5e1 100644 --- a/app/src/main-process/app-window.ts +++ b/app/src/main-process/app-window.ts @@ -1,5 +1,6 @@ import { BrowserWindow, ipcMain, Menu, app, dialog } from 'electron' import { Emitter, Disposable } from 'event-kit' +import { join } from 'path' import { encodePathAsUrl } from '../lib/path' import { registerWindowStateChangedEvents } from '../lib/window-state' import { MenuEvent } from './menu' @@ -7,7 +8,6 @@ import { URLActionType } from '../lib/parse-app-url' import { ILaunchStats } from '../lib/stats' import { menuFromElectronMenu } from '../models/app-menu' import { now } from './now' -import * as path from 'path' import windowStateKeeper from 'electron-window-state' export class AppWindow { @@ -57,7 +57,13 @@ export class AppWindow { } else if (__WIN32__) { windowOptions.frame = false } else if (__LINUX__) { - windowOptions.icon = path.join(__dirname, 'static', 'icon-logo.png') + windowOptions.icon = join(__dirname, 'static', 'logos', '512x512.png') + + // relax restriction here for users trying to run app at a small + // resolution and any other side-effects of dropping this restriction are + // currently unsupported + delete windowOptions.minHeight + delete windowOptions.minWidth } this.window = new BrowserWindow(windowOptions) diff --git a/app/src/main-process/menu/build-default-menu.ts b/app/src/main-process/menu/build-default-menu.ts index 4181079f1a7..0d267d56120 100644 --- a/app/src/main-process/menu/build-default-menu.ts +++ b/app/src/main-process/menu/build-default-menu.ts @@ -1,4 +1,4 @@ -import { Menu, ipcMain, shell, app } from 'electron' +import { Menu, ipcMain, shell } from 'electron' import { ensureItemIds } from './ensure-item-ids' import { MenuEvent } from './menu-event' import { truncateWithEllipsis } from '../../lib/truncate-with-ellipsis' @@ -453,22 +453,11 @@ export function buildDefaultMenu({ label: __DARWIN__ ? 'Report Issue…' : 'Report issue…', click() { shell - .openExternal('https://github.com/desktop/desktop/issues/new/choose') + .openExternal('https://github.com/shiftkey/desktop/issues/new/choose') .catch(err => log.error('Failed opening issue creation page', err)) }, } - const contactSupportItem: Electron.MenuItemConstructorOptions = { - label: __DARWIN__ ? 'Contact GitHub Support…' : '&Contact GitHub support…', - click() { - shell - .openExternal( - `https://github.com/contact?from_desktop_app=1&app_version=${app.getVersion()}` - ) - .catch(err => log.error('Failed opening contact support page', err)) - }, - } - const showUserGuides: Electron.MenuItemConstructorOptions = { label: 'Show User Guides', click() { @@ -511,7 +500,6 @@ export function buildDefaultMenu({ const helpItems = [ submitIssueItem, - contactSupportItem, showUserGuides, showKeyboardShortcuts, showLogsItem, diff --git a/app/src/ui/about/about.tsx b/app/src/ui/about/about.tsx index faa7e42c7ff..81a58103a26 100644 --- a/app/src/ui/about/about.tsx +++ b/app/src/ui/about/about.tsx @@ -14,7 +14,7 @@ import { Disposable } from 'event-kit' import { Loading } from '../lib/loading' import { RelativeTime } from '../relative-time' import { assertNever } from '../../lib/fatal-error' -import { ReleaseNotesUri } from '../lib/releases' +import { ReleaseNotesUri, LinuxReleasesUri } from '../lib/releases' import { encodePathAsUrl } from '../../lib/path' const logoPath = __DARWIN__ @@ -102,6 +102,17 @@ export class About extends React.Component { return null } + if (__LINUX__) { + const linuxReleaseLink = ( + View Releases + ) + return ( + +

{linuxReleaseLink}

+
+ ) + } + const updateStatus = this.state.updateState.status switch (updateStatus) { @@ -177,7 +188,12 @@ export class About extends React.Component { private renderUpdateDetails() { if (__LINUX__) { - return null + return ( +

+ Please visit the GitHub Desktop for Linux release page for + Linux-specific release notes and to download the latest version. +

+ ) } if ( diff --git a/app/src/ui/add-repository/add-existing-repository.tsx b/app/src/ui/add-repository/add-existing-repository.tsx index 4dca558d29f..23383bfd0b2 100644 --- a/app/src/ui/add-repository/add-existing-repository.tsx +++ b/app/src/ui/add-repository/add-existing-repository.tsx @@ -165,7 +165,7 @@ export class AddExistingRepository extends React.Component< } private onPathChanged = async (path: string) => { - const isRepository = await isGitRepository(path) + const isRepository = await isGitRepository(this.resolvedPath(path)) this.setState({ path, isRepository }) } diff --git a/app/src/ui/app.tsx b/app/src/ui/app.tsx index ef4896e0d95..09519957fee 100644 --- a/app/src/ui/app.tsx +++ b/app/src/ui/app.tsx @@ -1247,6 +1247,12 @@ export class App extends React.Component { this.state.currentFoldout && this.state.currentFoldout.type === FoldoutType.AppMenu + // As Linux still uses the classic Electron menu, we are opting out of the + // custom menu that is shown as part of the title bar below + if (__LINUX__) { + return null + } + // When we're in full-screen mode on Windows we only need to render // the title bar when the menu bar is active. On other platforms we // never render the title bar while in full-screen mode. diff --git a/app/src/ui/dispatcher/error-handlers.ts b/app/src/ui/dispatcher/error-handlers.ts index 3cbcb8b3a1c..ed7f737939b 100644 --- a/app/src/ui/dispatcher/error-handlers.ts +++ b/app/src/ui/dispatcher/error-handlers.ts @@ -1,7 +1,7 @@ import { GitError as DugiteError, RepositoryDoesNotExistErrorCode, -} from 'dugite' +} from '@shiftkey/dugite' import { Dispatcher } from '.' import { ExternalEditorError } from '../../lib/editors/shared' diff --git a/app/src/ui/lib/releases.ts b/app/src/ui/lib/releases.ts index 958ccad3722..ba088f73374 100644 --- a/app/src/ui/lib/releases.ts +++ b/app/src/ui/lib/releases.ts @@ -2,3 +2,5 @@ export const ReleaseNotesUri = __RELEASE_CHANNEL__ === 'beta' ? 'https://desktop.github.com/release-notes/?env=beta' : 'https://desktop.github.com/release-notes/' + +export const LinuxReleasesUri = 'https://github.com/shiftkey/desktop/releases/' diff --git a/app/static/linux/github b/app/static/linux/github new file mode 100644 index 00000000000..0f7513eb244 --- /dev/null +++ b/app/static/linux/github @@ -0,0 +1,35 @@ +#!/bin/sh + +if [ ! -L "$0" ]; then + # if path is not a symlink, find relatively + GITHUB_PATH=$(dirname "$(dirname "$(dirname "$(dirname "$0")")")") +else + if command -v readlink >/dev/null; then + # if readlink exists, follow the symlink and then find relatively + SYMLINK=$(readlink -f "$0") + GITHUB_PATH=$(dirname "$(dirname "$(dirname "$(dirname "$SYMLINK")")")") + else + # else use the standard install location + GITHUB_PATH="/opt/GitHub Desktop" + fi +fi +# check if this is a dev install or standard +if [ -f "$GITHUB_PATH/github-desktop-dev" ]; then + BINARY_NAME="github-desktop-dev" +else + BINARY_NAME="github-desktop" +fi + +ELECTRON="$GITHUB_PATH/$BINARY_NAME" +CLI="$GITHUB_PATH/resources/app/cli.js" + +case $1 in + # if help in the first variable, return contents to shell + *help*|*--help*) + ELECTRON_RUN_AS_NODE=1 "$ELECTRON" "$CLI" "$@";; + # any other, redirect to /dev/null to detach from controlling terminal + *) + ELECTRON_RUN_AS_NODE=1 "$ELECTRON" "$CLI" "$@" < /dev/null > /dev/null &;; +esac + +exit $? diff --git a/app/static/linux/icon-logo.png b/app/static/linux/icon-logo.png deleted file mode 100644 index 7e598fe0118..00000000000 Binary files a/app/static/linux/icon-logo.png and /dev/null differ diff --git a/app/static/logos/128x128.png b/app/static/logos/128x128.png new file mode 100644 index 00000000000..af1e5cfcd8c Binary files /dev/null and b/app/static/logos/128x128.png differ diff --git a/app/static/logos/32x32.png b/app/static/logos/32x32.png new file mode 100644 index 00000000000..f1b5f9719ea Binary files /dev/null and b/app/static/logos/32x32.png differ diff --git a/app/static/logos/64x64.png b/app/static/logos/64x64.png new file mode 100644 index 00000000000..77fe2a72c18 Binary files /dev/null and b/app/static/logos/64x64.png differ diff --git a/app/styles/_variables.scss b/app/styles/_variables.scss index ad3db282b2b..e1e0d0b69d1 100644 --- a/app/styles/_variables.scss +++ b/app/styles/_variables.scss @@ -78,7 +78,7 @@ $overlay-background-color: rgba(0, 0, 0, 0.4); * Background color for custom scroll bars. * The color is applied to the thumb part of the scrollbar. * - * Note: Only applies to win32 platforms + * Note: Only applies to win32 and linux platforms */ --scroll-bar-thumb-background-color: rgba(0, 0, 0, 0.2); @@ -86,7 +86,7 @@ $overlay-background-color: rgba(0, 0, 0, 0.4); * Background color for custom scroll bars in their active state. * The color is applied to the thumb part of the scrollbar. * - * Note: Only applies to win32 platforms + * Note: Only applies to win32 and linux platforms */ --scroll-bar-thumb-background-color-active: rgba(0, 0, 0, 0.5); @@ -277,8 +277,9 @@ $overlay-background-color: rgba(0, 0, 0, 0.4); --list-item-selected-active-badge-background-color: #{$white}; --list-item-hover-background-color: #{$gray-100}; - /** Win32 has custom scrol bars, see _scroll.scss */ + /** Windows/Linux have custom scrollbars, see _scroll.scss */ --win32-scroll-bar-size: 10px; + --linux-scroll-bar-size: 10px; /** * The z-index for popups. Nothing should be higher, but other z-indexes can diff --git a/app/styles/mixins/_platform.scss b/app/styles/mixins/_platform.scss index 0191bdd2dcc..b3c7bd55584 100644 --- a/app/styles/mixins/_platform.scss +++ b/app/styles/mixins/_platform.scss @@ -41,3 +41,25 @@ @content; } } + +// A mixin which takes a content block that should only +// be applied when the current (real or emulated) operating +// system is Linux. +// +// This helper mixin is useful in so far that it allows us +// to keep platform specific styles next to cross-platform +// styles instead of splitting them out and possibly forgetting +// about them. +@mixin linux { + body.platform-linux & { + @content; + } +} + +// An exact copy of the linux mixin except that it allows for +// writing base-level rules +@mixin linux-context { + body.platform-linux { + @content; + } +} diff --git a/app/styles/themes/_dark.scss b/app/styles/themes/_dark.scss index 391b652585e..503883dfb4a 100644 --- a/app/styles/themes/_dark.scss +++ b/app/styles/themes/_dark.scss @@ -45,16 +45,16 @@ body.theme-dark { * Background color for custom scroll bars. * The color is applied to the thumb part of the scrollbar. * - * Note: Only applies to win32 platforms + * Note: Only applies to win32 and linux platforms */ --scroll-bar-thumb-background-color: rgba(255, 255, 255, 0.2); /** - * Background color for custom scroll bars in their active state. - * The color is applied to the thumb part of the scrollbar. - * - * Note: Only applies to win32 platforms - */ + * Background color for custom scroll bars in their active state. + * The color is applied to the thumb part of the scrollbar. + * + * Note: Only applies to win32 and linux platforms + */ --scroll-bar-thumb-background-color-active: rgba(255, 255, 255, 0.5); // Box diff --git a/app/styles/ui/_scroll.scss b/app/styles/ui/_scroll.scss index 30f477b7296..6d7f5152e77 100644 --- a/app/styles/ui/_scroll.scss +++ b/app/styles/ui/_scroll.scss @@ -59,3 +59,40 @@ } } } + +@include linux-context { + // Linux scrollbars need styled, too + ::-webkit-scrollbar { + width: var(--linux-scroll-bar-size); + height: var(--linux-scroll-bar-size); + background: transparent; + cursor: pointer; + + &-thumb { + background-color: var(--scroll-bar-thumb-background-color); + border-radius: var(--linux-scroll-bar-size); + + // This little hack allows us to have a slim scroll bar + // with a bigger hit area. The scroll bar width/height + // is 10px but we're cutting off 6px using clipping so + // that it appears as if it's actually only 4px. + border-color: transparent; + border-style: solid; + border-width: 3px; + background-clip: padding-box; + + // ...and when it's pressed we'll up the contrast + &:active { + background-color: var(--scroll-bar-thumb-background-color-active); + } + + // When someone hovers over, or presses the bar we'll expand it to 8px + &:hover, + &:active { + border-width: 1px; + background-color: var(--scroll-bar-thumb-background-color-active); + cursor: pointer; + } + } + } +} diff --git a/app/test/helpers/local-config.ts b/app/test/helpers/local-config.ts index 945f12fa578..42ab21afb6b 100644 --- a/app/test/helpers/local-config.ts +++ b/app/test/helpers/local-config.ts @@ -1,5 +1,5 @@ import { Repository } from '../../src/models/repository' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' export async function setupLocalConfig( repository: Repository, diff --git a/app/test/helpers/repositories.ts b/app/test/helpers/repositories.ts index 36c69e9e395..4a773d61e92 100644 --- a/app/test/helpers/repositories.ts +++ b/app/test/helpers/repositories.ts @@ -3,7 +3,7 @@ import * as FSE from 'fs-extra' import { mkdirSync } from './temp' import klawSync, { Item } from 'klaw-sync' import { Repository } from '../../src/models/repository' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { makeCommit, switchTo } from './repository-scaffolding' import { writeFile } from 'fs-extra' import { git } from '../../src/lib/git' diff --git a/app/test/helpers/repository-builder-branch-pruner.ts b/app/test/helpers/repository-builder-branch-pruner.ts index 7f3aed9f8cd..7c7e9d25555 100644 --- a/app/test/helpers/repository-builder-branch-pruner.ts +++ b/app/test/helpers/repository-builder-branch-pruner.ts @@ -1,6 +1,6 @@ import { setupEmptyRepository } from './repositories' import { makeCommit, switchTo } from './repository-scaffolding' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { RepositoriesStore, GitStore } from '../../src/lib/stores' import { RepositoryStateCache } from '../../src/lib/stores/repository-state-cache' import { diff --git a/app/test/helpers/repository-scaffolding.ts b/app/test/helpers/repository-scaffolding.ts index ad53ea8c82a..a5e9feabb99 100644 --- a/app/test/helpers/repository-scaffolding.ts +++ b/app/test/helpers/repository-scaffolding.ts @@ -1,4 +1,4 @@ -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import * as FSE from 'fs-extra' import * as Path from 'path' diff --git a/app/test/unit/app-store-test.ts b/app/test/unit/app-store-test.ts index a9cf9c3b09d..5cbbde0618e 100644 --- a/app/test/unit/app-store-test.ts +++ b/app/test/unit/app-store-test.ts @@ -1,6 +1,6 @@ import * as Path from 'path' import * as FSE from 'fs-extra' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { AppStore, diff --git a/app/test/unit/branch-pruner-test.ts b/app/test/unit/branch-pruner-test.ts index 9beca4862d0..fac67ec0ad6 100644 --- a/app/test/unit/branch-pruner-test.ts +++ b/app/test/unit/branch-pruner-test.ts @@ -7,7 +7,7 @@ import { RepositoryStateCache } from '../../src/lib/stores/repository-state-cach import { setupFixtureRepository } from '../helpers/repositories' import { shell } from '../helpers/test-app-shell' import { TestRepositoriesDatabase } from '../helpers/databases' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { createRepository as createPrunedRepository, setupRepository, diff --git a/app/test/unit/git-store-test.ts b/app/test/unit/git-store-test.ts index 391b5a56f0e..a9200f1a109 100644 --- a/app/test/unit/git-store-test.ts +++ b/app/test/unit/git-store-test.ts @@ -1,6 +1,6 @@ import * as FSE from 'fs-extra' import * as Path from 'path' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { shell } from '../helpers/test-app-shell' import { diff --git a/app/test/unit/git/apply-test.ts b/app/test/unit/git/apply-test.ts index 34450ded8f1..1eaf05593b6 100644 --- a/app/test/unit/git/apply-test.ts +++ b/app/test/unit/git/apply-test.ts @@ -1,4 +1,4 @@ -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { setupTwoCommitRepo, setupFixtureRepository, diff --git a/app/test/unit/git/branch-test.ts b/app/test/unit/git/branch-test.ts index 542c828aa3f..91d5c57c9cf 100644 --- a/app/test/unit/git/branch-test.ts +++ b/app/test/unit/git/branch-test.ts @@ -13,7 +13,7 @@ import { IUnbornRepository, } from '../../../src/models/tip' import { GitStore } from '../../../src/lib/stores' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { getBranchesPointedAt, createBranch, diff --git a/app/test/unit/git/checkout-test.ts b/app/test/unit/git/checkout-test.ts index de1c5ab0967..b49c94f9351 100644 --- a/app/test/unit/git/checkout-test.ts +++ b/app/test/unit/git/checkout-test.ts @@ -10,7 +10,7 @@ import { TipState, IValidBranch } from '../../../src/models/tip' import { GitStore } from '../../../src/lib/stores' import { Branch, BranchType } from '../../../src/models/branch' import { getStatusOrThrow } from '../../helpers/status' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { StatsStore, StatsDatabase } from '../../../src/lib/stats' import { UiActivityMonitor } from '../../../src/ui/lib/ui-activity-monitor' diff --git a/app/test/unit/git/cherry-pick-test.ts b/app/test/unit/git/cherry-pick-test.ts index 5b60aea8cca..dd56ce6fd0f 100644 --- a/app/test/unit/git/cherry-pick-test.ts +++ b/app/test/unit/git/cherry-pick-test.ts @@ -1,4 +1,4 @@ -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import * as FSE from 'fs-extra' import * as Path from 'path' import { diff --git a/app/test/unit/git/commit-test.ts b/app/test/unit/git/commit-test.ts index a68097db33f..fb42ba710ee 100644 --- a/app/test/unit/git/commit-test.ts +++ b/app/test/unit/git/commit-test.ts @@ -18,7 +18,7 @@ import { setupConflictedRepoWithMultipleFiles, } from '../../helpers/repositories' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { WorkingDirectoryFileChange, AppFileStatusKind, diff --git a/app/test/unit/git/config-test.ts b/app/test/unit/git/config-test.ts index 376d8d0297a..f52ab103513 100644 --- a/app/test/unit/git/config-test.ts +++ b/app/test/unit/git/config-test.ts @@ -1,4 +1,4 @@ -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import * as Path from 'path' import { Repository } from '../../../src/models/repository' diff --git a/app/test/unit/git/core-test.ts b/app/test/unit/git/core-test.ts index b61c94a0c75..60827b82201 100644 --- a/app/test/unit/git/core-test.ts +++ b/app/test/unit/git/core-test.ts @@ -1,4 +1,4 @@ -import { GitError } from 'dugite' +import { GitError } from '@shiftkey/dugite' import { Repository } from '../../../src/models/repository' import { git, diff --git a/app/test/unit/git/diff-test.ts b/app/test/unit/git/diff-test.ts index e168655734e..9664b76a6c5 100644 --- a/app/test/unit/git/diff-test.ts +++ b/app/test/unit/git/diff-test.ts @@ -26,7 +26,7 @@ import { } from '../../../src/lib/git' import { getStatusOrThrow } from '../../helpers/status' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' async function getTextDiff( repo: Repository, diff --git a/app/test/unit/git/format-patch-test.ts b/app/test/unit/git/format-patch-test.ts index d5092f4181e..724cb5c1695 100644 --- a/app/test/unit/git/format-patch-test.ts +++ b/app/test/unit/git/format-patch-test.ts @@ -8,7 +8,7 @@ import { cloneLocalRepository, makeCommit, } from '../../helpers/repository-scaffolding' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' describe('formatPatch', () => { describe('in a repo with commits', () => { diff --git a/app/test/unit/git/gitignore-test.ts b/app/test/unit/git/gitignore-test.ts index 4f495260ee9..734abececb5 100644 --- a/app/test/unit/git/gitignore-test.ts +++ b/app/test/unit/git/gitignore-test.ts @@ -1,6 +1,6 @@ import * as FSE from 'fs-extra' import * as Path from 'path' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { setupEmptyRepository } from '../../helpers/repositories' import { getStatusOrThrow } from '../../helpers/status' diff --git a/app/test/unit/git/lfs-test.ts b/app/test/unit/git/lfs-test.ts index 0ae47412a9b..adb69cb4889 100644 --- a/app/test/unit/git/lfs-test.ts +++ b/app/test/unit/git/lfs-test.ts @@ -6,7 +6,7 @@ import { setupEmptyRepository, } from '../../helpers/repositories' import { Repository } from '../../../src/models/repository' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { isUsingLFS, isTrackedByLFS, diff --git a/app/test/unit/git/merge-test.ts b/app/test/unit/git/merge-test.ts index 2b45457fbf0..f03a322f58c 100644 --- a/app/test/unit/git/merge-test.ts +++ b/app/test/unit/git/merge-test.ts @@ -10,7 +10,7 @@ import { setupFixtureRepository, setupConflictedRepo, } from '../../helpers/repositories' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { Repository } from '../../../src/models/repository' describe('git/merge', () => { diff --git a/app/test/unit/git/rebase/detect-conflict-test.ts b/app/test/unit/git/rebase/detect-conflict-test.ts index 49434495c5c..9f33500f80c 100644 --- a/app/test/unit/git/rebase/detect-conflict-test.ts +++ b/app/test/unit/git/rebase/detect-conflict-test.ts @@ -1,4 +1,4 @@ -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import * as FSE from 'fs-extra' import * as Path from 'path' diff --git a/app/test/unit/git/reflog-test.ts b/app/test/unit/git/reflog-test.ts index c60c64b489a..4b11b326481 100644 --- a/app/test/unit/git/reflog-test.ts +++ b/app/test/unit/git/reflog-test.ts @@ -9,7 +9,7 @@ import { } from '../../../src/lib/git' import { setupFixtureRepository } from '../../helpers/repositories' import moment from 'moment' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' async function createAndCheckout( repository: Repository, diff --git a/app/test/unit/git/remote-test.ts b/app/test/unit/git/remote-test.ts index 4ccfe6572d4..dff8c8665b6 100644 --- a/app/test/unit/git/remote-test.ts +++ b/app/test/unit/git/remote-test.ts @@ -11,7 +11,7 @@ import { setupEmptyDirectory, } from '../../helpers/repositories' import { findDefaultRemote } from '../../../src/lib/stores/helpers/find-default-remote' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' describe('git/remote', () => { describe('getRemotes', () => { diff --git a/app/test/unit/git/reorder-test.ts b/app/test/unit/git/reorder-test.ts index f8a06c87c42..f3c8570929e 100644 --- a/app/test/unit/git/reorder-test.ts +++ b/app/test/unit/git/reorder-test.ts @@ -11,7 +11,7 @@ import { Commit } from '../../../src/models/commit' import { Repository } from '../../../src/models/repository' import { setupEmptyRepositoryDefaultMain } from '../../helpers/repositories' import { makeCommit } from '../../helpers/repository-scaffolding' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { getStatusOrThrow } from '../../helpers/status' import { getTempFilePath } from '../../../src/lib/file-system' import { reorder } from '../../../src/lib/git/reorder' diff --git a/app/test/unit/git/reset-test.ts b/app/test/unit/git/reset-test.ts index 32ef18d37cb..b63b5650c60 100644 --- a/app/test/unit/git/reset-test.ts +++ b/app/test/unit/git/reset-test.ts @@ -4,7 +4,7 @@ import { Repository } from '../../../src/models/repository' import { reset, resetPaths, GitResetMode } from '../../../src/lib/git/reset' import { getStatusOrThrow } from '../../helpers/status' import { setupFixtureRepository } from '../../helpers/repositories' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import * as FSE from 'fs-extra' diff --git a/app/test/unit/git/rev-parse-test.ts b/app/test/unit/git/rev-parse-test.ts index 1dec7a68387..aaa35564b86 100644 --- a/app/test/unit/git/rev-parse-test.ts +++ b/app/test/unit/git/rev-parse-test.ts @@ -13,7 +13,7 @@ import { setupFixtureRepository, setupEmptyRepository, } from '../../helpers/repositories' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { mkdirSync } from '../../helpers/temp' describe('git/rev-parse', () => { diff --git a/app/test/unit/git/squash-test.ts b/app/test/unit/git/squash-test.ts index 8f2093e3331..923ca4eb9c8 100644 --- a/app/test/unit/git/squash-test.ts +++ b/app/test/unit/git/squash-test.ts @@ -13,7 +13,7 @@ import { Repository } from '../../../src/models/repository' import { setupEmptyRepositoryDefaultMain } from '../../helpers/repositories' import { makeCommit } from '../../helpers/repository-scaffolding' import { squash } from '../../../src/lib/git/squash' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { getStatusOrThrow } from '../../helpers/status' import { getTempFilePath } from '../../../src/lib/file-system' diff --git a/app/test/unit/git/stash-test.ts b/app/test/unit/git/stash-test.ts index 3dfbfb8f84d..544923a251e 100644 --- a/app/test/unit/git/stash-test.ts +++ b/app/test/unit/git/stash-test.ts @@ -2,7 +2,7 @@ import * as FSE from 'fs-extra' import * as path from 'path' import { Repository } from '../../../src/models/repository' import { setupEmptyRepository } from '../../helpers/repositories' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { createDesktopStashMessage, createDesktopStashEntry, diff --git a/app/test/unit/git/status-test.ts b/app/test/unit/git/status-test.ts index 7e4d4332f2c..cde78b7cbae 100644 --- a/app/test/unit/git/status-test.ts +++ b/app/test/unit/git/status-test.ts @@ -1,6 +1,6 @@ import * as path from 'path' import * as FSE from 'fs-extra' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { Repository } from '../../../src/models/repository' diff --git a/app/test/unit/git/worktree-test.ts b/app/test/unit/git/worktree-test.ts index 01d304c1acf..560184c513b 100644 --- a/app/test/unit/git/worktree-test.ts +++ b/app/test/unit/git/worktree-test.ts @@ -1,7 +1,7 @@ import * as Os from 'os' import * as Path from 'path' import * as FSE from 'fs-extra' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { setupEmptyRepository } from '../../helpers/repositories' import { diff --git a/app/test/unit/helpers/linux-test.ts b/app/test/unit/helpers/linux-test.ts new file mode 100644 index 00000000000..0f6895c8835 --- /dev/null +++ b/app/test/unit/helpers/linux-test.ts @@ -0,0 +1,44 @@ +import { convertToFlatpakPath, formatWorkingDirectoryForFlatpak } from '../../../src/lib/helpers/linux' + +describe('convertToFlatpakPath()', () => { + if (__LINUX__) { + it('converts /usr paths', () => { + const path = '/usr/bin/subl' + const expectedPath = '/var/run/host/usr/bin/subl' + expect(convertToFlatpakPath(path)).toEqual(expectedPath) + }) + + it('preserves /opt paths', () => { + const path = '/opt/slickedit-pro2018/bin/vs' + expect(convertToFlatpakPath(path)).toEqual(path) + }) + } + + if (__WIN32__) { + it('returns same path', () => { + const path = 'C:\\Windows\\System32\\Notepad.exe' + expect(convertToFlatpakPath(path)).toEqual(path) + }) + } + + if (__DARWIN__) { + it('returns same path', () => { + const path = '/usr/local/bin/code' + expect(convertToFlatpakPath(path)).toEqual(path) + }) + } +}) + +describe('formatWorkingDirectoryForFlatpak()', () => { + if (__LINUX__) { + it('escapes string', () => { + const path = "/home/test/path with space" + const expectedPath = "/home/test/path\ with\ space" + expect(formatWorkingDirectoryForFlatpak(path)).toEqual(expectedPath) + }) + it('returns same path', () => { + const path = "/home/test/path_wthout_spaces" + expect(formatWorkingDirectoryForFlatpak(path)).toEqual(path) + }) + } +}) diff --git a/app/test/unit/parse-files-to-be-overwritten-test.ts b/app/test/unit/parse-files-to-be-overwritten-test.ts index f5ab0a1077a..64f7331d925 100644 --- a/app/test/unit/parse-files-to-be-overwritten-test.ts +++ b/app/test/unit/parse-files-to-be-overwritten-test.ts @@ -3,7 +3,7 @@ import { writeFile } from 'fs-extra' import { join } from 'path' import { git } from '../../src/lib/git' import { cloneLocalRepository } from '../helpers/repository-scaffolding' -import { GitError as DugiteError } from 'dugite' +import { GitError as DugiteError } from '@shiftkey/dugite' import { parseFilesToBeOverwritten } from '../../src/ui/lib/parse-files-to-be-overwritten' describe('parseFilesToBeOverwritten', () => { diff --git a/app/test/unit/text-diff-expansion-test.ts b/app/test/unit/text-diff-expansion-test.ts index b1e811f3493..c33240b9a1e 100644 --- a/app/test/unit/text-diff-expansion-test.ts +++ b/app/test/unit/text-diff-expansion-test.ts @@ -1,7 +1,7 @@ import * as path from 'path' import * as os from 'os' import * as FSE from 'fs-extra' -import { GitProcess } from 'dugite' +import { GitProcess } from '@shiftkey/dugite' import { DiffParser } from '../../src/lib/diff-parser' import { expandTextDiffHunk, diff --git a/app/yarn.lock b/app/yarn.lock index 5d5479389bd..524f8a505eb 100644 --- a/app/yarn.lock +++ b/app/yarn.lock @@ -16,6 +16,18 @@ dependencies: regenerator-runtime "^0.13.4" +"@shiftkey/dugite@^1.103.99": + version "1.103.99" + resolved "https://registry.yarnpkg.com/@shiftkey/dugite/-/dugite-1.103.99.tgz#1b5ffe19eaee55ae6be8f053895a7bd5e9aad847" + integrity sha512-1XA1Tv3G3u5IcYjXSisB6AaQ2vcKdfGnxH0qPHphjpYWtDJJFgtfUh6paPgr2fqhbdljF6/xATDaWcPnZfpuvQ== + dependencies: + checksum "^0.1.1" + got "^9.6.0" + mkdirp "^0.5.1" + progress "^2.0.3" + rimraf "^2.5.4" + tar "^4.4.7" + "@sindresorhus/is@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" @@ -189,10 +201,10 @@ codemirror-mode-elixir@^1.1.2: resolved "https://registry.yarnpkg.com/codemirror-mode-elixir/-/codemirror-mode-elixir-1.1.2.tgz#61227208d2684d928500af6934e4b9c995fb0960" integrity sha512-1oIuRVHyUhLv0Za9sEIsI7urAj06EohwO/yVj10bg7aHnimHQ964Wk3uuoPH0Yn8L38EkOd+SwULYpDiCQtoTA== -codemirror@^5.49.2: - version "5.49.2" - resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.49.2.tgz#c84fdaf11b19803f828b0c67060c7bc6d154ccad" - integrity sha512-dwJ2HRPHm8w51WB5YTF9J7m6Z5dtkqbU9ntMZ1dqXyFB9IpjoUFDj80ahRVEoVanfIp6pfASJbOlbWdEf8FOzQ== +codemirror@^5.59.2: + version "5.59.2" + resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.59.2.tgz#ee674d3a4a8d241af38d52afc482625ba7393922" + integrity sha512-/D5PcsKyzthtSy2NNKCyJi3b+htRkoKv3idswR/tR6UAvMNKA7SrmyZy6fOONJxSRs1JlUWEDAbxqfdArbK8iA== color-convert@^1.9.0: version "1.9.0" @@ -374,18 +386,6 @@ double-ended-queue@^2.1.0-0: resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" integrity sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw= -dugite@^1.103.0: - version "1.103.0" - resolved "https://registry.yarnpkg.com/dugite/-/dugite-1.103.0.tgz#2229c83790782116f96b87763d9ea1a0f2a55842" - integrity sha512-8rKO/jQX2HKfSd5wNG/l3HnUfQPKqyC3+D+3CR5Go4+BJOyCPScQwiAVW+eeKLqHFOvjq/w67+ymMyPGxUqhIA== - dependencies: - checksum "^0.1.1" - got "^9.6.0" - mkdirp "^0.5.1" - progress "^2.0.3" - rimraf "^2.5.4" - tar "^4.4.7" - duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" diff --git a/docs/installation.md b/docs/installation.md index 6681d22a00b..af08c517d13 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -13,6 +13,26 @@ On Windows you have two options: - Download the `GitHubDesktopSetup.exe` and run it to install it for the current user. - Download the `GitHubDesktopSetup.msi` and run it to install a machine-wide version of GitHub Desktop - each logged-in user will then be able to run GitHub Desktop from the program at `%PROGRAMFILES(x86)\GitHub Desktop Installer\desktop.exe`. +### Linux + +On Linux there are four different package formats available, depending on your +distribution: + + - AppImage (`.AppImage`) + - Debian (`.deb`) + - RPM (`.rpm`) + - Snap (`.snap`) - also available from [snapcraft.io](https://snapcraft.io/github-desktop) + +If you install the Snap package, ensure you also connect it to your password +manager: + +```shellsession +$ sudo snap connect github-desktop:password-manager-service +``` + +Without this, GitHub Desktop cannot store or retrieve account details it +requires in the user's keychain. + ## Data Directories GitHub Desktop will create directories to manage the files and data it needs to function. If you manage a network of computers and want to install GitHub Desktop, here is more information about how things work. @@ -25,6 +45,13 @@ GitHub Desktop will create directories to manage the files and data it needs to - `%LOCALAPPDATA%\GitHubDesktop\` - contains the latest versions of the app, and some older versions if the user has updated from a previous version. - `%APPDATA%\GitHub Desktop\` - this directory contains user-specific data which the application requires to run, and is created on launch if it doesn't exist. Log files are also stored in this location. +### Linux + +This varies based on the installer chosen: + + - AppImage, Debian and RPM: `~/.config/GitHub Desktop/` + - Snap: `~/snap/github-desktop/current/.config/GitHub Desktop/` + ## Log Files GitHub Desktop will generate logs as part of its normal usage, to assist with troubleshooting. They are located in the data directory that GitHub Desktop uses (see above) under a `logs` subdirectory, organized by date using the format `YYYY-MM-DD.desktop.production.log`, where `YYYY-MM-DD` is the day the log was created. diff --git a/docs/known-issues.md b/docs/known-issues.md index 77641511209..610d5001f7d 100644 --- a/docs/known-issues.md +++ b/docs/known-issues.md @@ -12,6 +12,9 @@ - [Failed to open CA file after an update](#failed-to-open-ca-file-after-an-update) - [`ask-pass-trampoline.bat` errors](#ask-pass-trampolinebat-errors) - [Authentication errors due to modified registry entries](#authentication-errors-due-to-modified-registry-entries) +- [Linux](#linux) + - [I get a white screen when launching Desktop](#i-get-a-white-screen-when-launching-desktop) + - [I cannot access repositories under my organization](#i-cannot-access-repositories-under-my-organization) # Known Issues @@ -234,3 +237,28 @@ If either the user or an application has modified the `Command Processor` regist `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor\` Check to see if there is an `Autorun` value in either of those location. If there is, deleting that value should resolve the `Authentication failed` error. + +## Linux + +### I get a white screen when launching Desktop + +Electron enables hardware accelerated graphics by default, but some graphics cards have issues with hardware acceleration which means the application will launch successfully but it will be a white screen. If you are running GitHub Desktop within virtualization software like Parallels Desktop, hardware accelerated graphics may not be available. + +**Workaround:** if you set the `GITHUB_DESKTOP_DISABLE_HARDWARE_ACCELERATION` environment variable to any value and launch Desktop again it will disable hardware acceleration on launch, so the application is usable. + +### I cannot access repositories under my organization + +The GitHub Desktop application is an OAuth application, but this fork does not +have the same permissions as the app does on Windows and macOS, which manifests +in a couple of different ways: + + - the "Clone a Repository" view does not show all organization repositories + - pushes to a repository owned by an organization may be rejected with a + generic error message + +The root cause of this is organizations by default will have "OAuth App access +restrictions" enabled, which blocks the GitHub Desktop development app that is +used by this fork. + +**Workaround:** ask your organization admin to [approve access](https://docs.github.com/en/organizations/restricting-access-to-your-organizations-data/approving-oauth-apps-for-your-organization) +to the GitHub Desktop development app. diff --git a/docs/process/publishing-linux-releases.md b/docs/process/publishing-linux-releases.md new file mode 100644 index 00000000000..76a5648b68a --- /dev/null +++ b/docs/process/publishing-linux-releases.md @@ -0,0 +1,154 @@ +# Publishing Linux Releases + +This document outlines the steps I take once a release has been published from +the main GitHub Desktop project. + +This document assumes you have these remotes configured: + +``` +$ git remote -v +origin https://github.com/shiftkey/desktop (fetch) +origin https://github.com/shiftkey/desktop (push) +upstream https://github.com/desktop/desktop (fetch) +upstream https://github.com/desktop/desktop (push) +``` + +Ensure that `development` and `linux` are up-to-date: + +``` +$ git fetch --all +$ git checkout development +$ git reset upstream/development --hard +$ git push origin development +$ git checkout linux +$ git reset origin/linux --hard +$ git rebase development linux +``` + +We want to ensure our changes work against the current branch, so take some time +to rebase the changes and force push `linux` once you're done. + +``` +$ git push origin linux --force-with-lease +``` + +Wait for the continuous integration tests to pass. If `linux` is not passing the +continuous integration tests we need to investigate and identify why things are +no longer working. + +### 1. Create a branch from the release tag + +Each release tag from the upstream project matches the format `release-X.Y.Z` +where `X.Y.Z` are version numbers. We should create a corresponding branch in +this repository named `linux-release-X.Y.Z` as a starting point for the next +Linux release. + +On the command line, this looks like this (using the `2.1.3` release as an +example): + +``` +$ git checkout -b linux-release-2.1.3 release-2.1.3 +$ git push origin linux-release-2.1.3 -u +``` + +### 2. Open pull request to apply the necessary patches to the new branch + +The first step to cutting a release is to backport the latest fixes to the +release branch: + +``` +$ git checkout -b apply-changes-2.1.3 linux +$ git submodule update +$ git rebase --onto linux-release-2.1.3 development apply-changes-2.1.3 +``` + +Work through the conflicts reported until the branch is cleanly applied to the +previous release. + +When the branch is ready to go, push the branch to the remote: + +``` +$ git push origin apply-changes-2.1.3 -u +``` + +Open a pull request that targets `linux-release-2.1.3`. Review the changes and +ensure the tests pass. + +### 3. Approve and merge PR + +If we're satisifed with the pull request, we can merge the pull request to +update the release branch. + +Ensure **rebase and merge** is used here, as we want to preserve the commit +history as-is without introducing merge commits. + +If there are additional changes that need to go into the release, make sure to +include them + +### 4. Tag the release + +Ensure you are on the latest version that passes all tests: + +``` +$ git checkout linux-release-2.1.3 +$ git pull +``` + +We need to bump the version here to indicate this is not the exact same version +as the original release. The convention we follow is `release-X.Y.Z-linuxA` +where `A` is an auto-incrementing number (starting from 1). + +Update the `version` field in `app/package.json` to this new version. For +example, updating to the first release of `2.1.3` would look like this: + +```diff +diff --git a/app/package.json b/app/package.json +index fbbbb976f..3baaf9e33 100644 +--- a/app/package.json ++++ b/app/package.json +@@ -3,7 +3,7 @@ + "productName": "GitHub Desktop", + "bundleID": "com.github.GitHubClient", + "companyName": "GitHub, Inc.", +- "version": "2.1.0", ++ "version": "2.1.3-linux1", + "main": "./main.js", + "repository": { + "type": "git", +``` + +Commit and push this change to ensure we still pass the CI suite: + +``` +$ git commit -am "bump version for release" +$ git push +``` + +With this passing CI, we can tag this version to indicate this is what we are +releasing: + +``` +$ git tag release-2.1.3-linux1 +``` + +With those things in place, push the changes to the branch as well as the new +tag: + +``` +$ git push --follow-tags +``` + +### 5. Publish to GitHub + +After the tagged build completes, it will have the installers available as +artifacts. Over on Azure Pipelines - switch to the Releases tab and run "Publish +to Beta Channel" with the Snap release disabled +([**#204**](https://github.com/shiftkey/desktop/issues/202) is the tracking +issue for re-enabling that). + +When that is done, there should be a draft release available assigned to the tag +from earlier. Edit the release to add the release notes and checksums. + +**TODO:** it'd be great to have some sort of script to generate the release +notes from the changelog in this "markdown + sections" format, which would save +a lot of manual effort. diff --git a/docs/technical/editor-integration.md b/docs/technical/editor-integration.md index a933259d919..ec8aa368710 100644 --- a/docs/technical/editor-integration.md +++ b/docs/technical/editor-integration.md @@ -75,7 +75,7 @@ wishes to uninstall. These entries are used by GitHub Desktop to identify relevant programs and where they can be located. The registry locations for each editor are listed in the `registryKeys` -property. Some editors support multiple install locations, but are structurally +property. Some editors support multiple install locations, but are structurally the same (for example 64-bit or 32-bit application, or stable and developer channels). @@ -116,7 +116,7 @@ is the key that Desktop needs to read the registry and find the installation for As seen in the example above, you can use the following helper functions to enumerate the uninstall keys: - - `LocalMachineUninstallKey` for keys in + - `LocalMachineUninstallKey` for keys in `HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall` - `Wow64LocalMachineUninstallKey` for keys in `HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall` @@ -258,7 +258,7 @@ The `CFBundleIdentifier` value in the plist is what applications use to uniquely identify themselves, for example `com.github.GitHubClient` is the identifier for GitHub Desktop. -To find the bundle identifier for an application, using `PhpStorm` as an example, +To find the bundle identifier for an application, using `PhpStorm` as an example, run `defaults read /Applications/PhpStorm.app/Contents/Info CFBundleIdentifier`. With this bundle identifier, GitHub Desktop can obtain the install location of @@ -292,6 +292,7 @@ These editors are currently supported: - [Sublime Text](https://www.sublimetext.com/) - [Typora](https://typora.io/) - [SlickEdit](https://www.slickedit.com) + - [Code](https://github.com/elementary/code) These are defined in a list at the top of the file: diff --git a/docs/technical/shell-integration.md b/docs/technical/shell-integration.md index ae8b2dde33f..b3f85d87a51 100644 --- a/docs/technical/shell-integration.md +++ b/docs/technical/shell-integration.md @@ -252,6 +252,8 @@ These shells are currently supported: - [Konsole](https://konsole.kde.org/) - [XTerm](http://invisible-island.net/xterm/) - [Terminology](https://www.enlightenment.org/docs/apps/terminology.md) + - [Deepin Terminal](https://www.deepin.org/en/original/deepin-terminal/) + - [Elementary Terminal](https://github.com/elementary/terminal) These are defined in an enum at the top of the file: @@ -265,6 +267,8 @@ export enum Shell { Konsole = 'Konsole', Xterm = 'XTerm', Terminology = 'Terminology', + Deepin = 'Deepin Terminal', + Elementary = 'Elementary Terminal', } ``` @@ -299,6 +303,8 @@ export async function getAvailableShells(): Promise< konsolePath, xtermPath, terminologyPath, + deepinPath, + elementaryPath, ] = await Promise.all([ getShellPath(Shell.Gnome), getShellPath(Shell.Mate), @@ -308,6 +314,8 @@ export async function getAvailableShells(): Promise< getShellPath(Shell.Konsole), getShellPath(Shell.Xterm), getShellPath(Shell.Terminology), + getShellPath(Shell.Deepin), + getShellPath(Shell.Elementary), ]) ... @@ -344,6 +352,10 @@ export function launch( return spawn(foundShell.path, ['-e', '/bin/bash'], { cwd: path }) case Shell.Terminology: return spawn(foundShell.path, ['-d', path]) + case Shell.Deepin: + return spawn(foundShell.path, ['-w', path]) + case Shell.Elementary: + return spawn(foundShell.path, ['-w', path]) default: return assertNever(shell, `Unknown shell: ${shell}`) } diff --git a/package.json b/package.json index ef4089f48c3..df3d71da658 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,8 @@ "webpack-hot-middleware": "^2.22.2", "webpack-merge": "^4.1.2", "xml2js": "^0.4.16", - "xvfb-maybe": "^0.2.1" + "xvfb-maybe": "^0.2.1", + "yaml": "^1.4.0" }, "devDependencies": { "@types/byline": "^4.2.31", @@ -170,8 +171,15 @@ "@types/winston": "^2.2.0", "@types/xml2js": "^0.4.0", "electron": "=11.1.1", - "electron-builder": "^22.7.0", - "electron-packager": "^15.1.0", + "electron-builder": "^22.11.7", + "electron-packager": "^15.3.0", "electron-winstaller": "^5.0.0" + }, + "optionalDependencies": { + "electron-installer-debian": "3.1.0", + "electron-installer-redhat": "3.3.0" + }, + "resolutions": { + "electron/@electron/get": "1.12.2" } } diff --git a/script/build.ts b/script/build.ts index d6aef303b9e..55e71a949bf 100755 --- a/script/build.ts +++ b/script/build.ts @@ -305,13 +305,9 @@ function copyDependencies() { const updatedPackage = Object.assign({}, originalPackage, { productName: getProductName(), dependencies: newDependencies, - devDependencies: newDevDependencies, + devDependencies: isDevelopmentBuild ? newDevDependencies : undefined, }) - if (!isDevelopmentBuild) { - delete updatedPackage.devDependencies - } - fs.writeFileSync( path.join(outRoot, 'package.json'), JSON.stringify(updatedPackage) @@ -348,7 +344,10 @@ function copyDependencies() { const gitDir = path.resolve(outRoot, 'git') fs.removeSync(gitDir) fs.mkdirpSync(gitDir) - fs.copySync(path.resolve(projectRoot, 'app/node_modules/dugite/git'), gitDir) + fs.copySync( + path.resolve(projectRoot, 'app/node_modules/@shiftkey/dugite/git'), + gitDir + ) if (process.platform === 'win32') { console.log(' Cleaning unneeded Git components…') diff --git a/script/dist-info.ts b/script/dist-info.ts index ee9de2328c8..153bed7caae 100644 --- a/script/dist-info.ts +++ b/script/dist-info.ts @@ -28,7 +28,7 @@ export function getExecutableName() { if (process.platform === 'win32') { return `${getWindowsIdentifierName()}${suffix}` } else if (process.platform === 'linux') { - return 'desktop' + return `github-desktop${suffix}` } else { return productName } diff --git a/script/electron-builder-linux.yml b/script/electron-builder-linux.yml index b096a6da00f..7d5d6f5dfde 100644 --- a/script/electron-builder-linux.yml +++ b/script/electron-builder-linux.yml @@ -1,46 +1,31 @@ -productName: 'GitHubDesktop' -artifactName: '${productName}-${os}-${arch}-${version}.${ext}' +artifactName: 'GitHubDesktop-${os}-${version}.${ext}' linux: category: 'GNOME;GTK;Development' packageCategory: 'GNOME;GTK;Development' icon: 'app/static/logos' + mimeTypes: + - x-scheme-handler/x-github-client + - x-scheme-handler/x-github-desktop-auth + # workaround for handling OAuth flow until we figure out what we're doing + # With the development OAuth details + # see https://github.com/shiftkey/desktop/issues/72 for more details + - x-scheme-handler/x-github-desktop-dev-auth target: - - deb - - rpm - - snap - AppImage maintainer: 'GitHub, Inc ' -deb: - afterInstall: './script/linux-after-install.sh' - afterRemove: './script/linux-after-remove.sh' - depends: - # default Electron dependencies - - gconf2 - - gconf-service - - libnotify4 - - libappindicator1 - - libxtst6 - - libnss3 - # dugite-native dependencies - - libcurl3 | libcurl4 - # keytar dependencies - - libsecret-1-0 rpm: depends: - # default Electron dependencies - - libXScrnSaver - - libappindicator - - libnotify # dugite-native dependencies - libcurl # keytar dependencies - libsecret + - gnome-keyring snap: confinement: 'classic' stagePackages: - default - libcurl3 - - libsecret-1-0 - openssh-client - plugs: - - password-manager-service + - gettext + environment: + DISABLE_WAYLAND: 1 diff --git a/script/linux-after-install.sh b/script/linux-after-install.sh deleted file mode 100644 index b6f0a7d1f0c..00000000000 --- a/script/linux-after-install.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -set -e - -PROFILE_D_FILE="/etc/profile.d/github-desktop.sh" -INSTALL_DIR="/opt/${productFilename}" -SCRIPT=$"#!/bin/sh -export PATH=\"$INSTALL_DIR:\$PATH\"" - -case "$1" in - configure) - echo "$SCRIPT" > "${PROFILE_D_FILE}"; - . "${PROFILE_D_FILE}"; - ;; - - abort-upgrade|abort-remove|abort-deconfigure) - ;; - - *) - echo "postinst called with unknown argument \`$1'" >&2 - exit 1 - ;; -esac - -exit 0 diff --git a/script/package-debian.ts b/script/package-debian.ts new file mode 100644 index 00000000000..35402cafaf2 --- /dev/null +++ b/script/package-debian.ts @@ -0,0 +1,104 @@ +import { promisify } from 'util' +import { join } from 'path' + +import glob = require('glob') +const globPromise = promisify(glob) + +import { rename } from 'fs-extra' + +import { getVersion } from '../app/package-info' +import { getDistPath, getDistRoot } from './dist-info' + +const distRoot = getDistRoot() + +// best guess based on documentation +type DebianOptions = { + // required + src: string + dest: string + arch: 'amd64' | 'i386' | 'arm64' + // optional + description?: string + productDescription?: string + categories?: Array + section?: string + priority?: 'required' | 'important' | 'standard' | 'optional' | 'extra' + homepage?: string + icon?: any + scripts?: { + preinst?: string + postinst?: string + prerm?: string + postrm?: string + } + mimeType?: Array + maintainer?: string + depends?: Array +} + +const options: DebianOptions = { + src: getDistPath(), + dest: distRoot, + arch: 'amd64', + description: 'Simple collaboration from your desktop', + productDescription: + 'This is the unofficial port of GitHub Desktop for Linux distributions', + section: 'GNOME;GTK;Development', + priority: 'extra', + homepage: 'https://github.com/shiftkey/desktop', + depends: [ + // Desktop-specific dependencies + 'libcurl3 | libcurl4', + 'libsecret-1-0', + 'gnome-keyring', + ], + icon: { + '32x32': 'app/static/logos/32x32.png', + '64x64': 'app/static/logos/64x64.png', + '128x128': 'app/static/logos/128x128.png', + '256x256': 'app/static/logos/256x256.png', + '512x512': 'app/static/logos/512x512.png', + '1024x1024': 'app/static/logos/1024x1024.png', + }, + scripts: { + postinst: 'script/resources/deb/postinst.sh', + postrm: 'script/resources/deb/postrm.sh', + }, + mimeType: [ + 'x-scheme-handler/x-github-client', + 'x-scheme-handler/x-github-desktop-auth', + // workaround for handling OAuth flow until we figure out what we're doing + // with the development OAuth details + // + // see https://github.com/shiftkey/desktop/issues/72 for more details + 'x-scheme-handler/x-github-desktop-dev-auth', + ], + maintainer: 'Brendan Forster ', +} + +export async function packageDebian(): Promise { + if (process.platform === 'win32') { + return Promise.reject('Windows is not supported') + } + + const installer = require('electron-installer-debian') + + await installer(options) + const installersPath = `${distRoot}/github-desktop*.deb` + + const files = await globPromise(installersPath) + + if (files.length !== 1) { + return Promise.reject( + `Expected one file but instead found '${files.join(', ')}' - exiting...` + ) + } + + const oldPath = files[0] + + const newFileName = `GitHubDesktop-linux-${getVersion()}.deb` + const newPath = join(distRoot, newFileName) + await rename(oldPath, newPath) + + return Promise.resolve(newPath) +} diff --git a/script/package-electron-builder.ts b/script/package-electron-builder.ts new file mode 100644 index 00000000000..7b26f48b2b5 --- /dev/null +++ b/script/package-electron-builder.ts @@ -0,0 +1,55 @@ +/* eslint-disable no-sync */ + +import * as path from 'path' +import * as cp from 'child_process' +import { promisify } from 'util' + +import glob = require('glob') +const globPromise = promisify(glob) + +import { getDistPath, getDistRoot } from './dist-info' + +export async function packageElectronBuilder(): Promise> { + const distPath = getDistPath() + const distRoot = getDistRoot() + + const electronBuilder = path.resolve( + __dirname, + '..', + 'node_modules', + '.bin', + 'electron-builder' + ) + + const configPath = path.resolve(__dirname, 'electron-builder-linux.yml') + + const args = [ + 'build', + '--prepackaged', + distPath, + '--x64', + '--config', + configPath, + ] + + const { error } = cp.spawnSync(electronBuilder, args, { stdio: 'inherit' }) + + if (error != null) { + return Promise.reject(error) + } + + const appImageInstaller = `${distRoot}/GitHubDesktop-linux-*.AppImage` + + const files = await globPromise(appImageInstaller) + if (files.length !== 1) { + return Promise.reject( + `Expected one AppImage installer but instead found '${files.join( + ', ' + )}' - exiting...` + ) + } + + const appImageInstallerPath = files[0] + + return Promise.resolve([appImageInstallerPath]) +} diff --git a/script/package-redhat.ts b/script/package-redhat.ts new file mode 100644 index 00000000000..3b5a55b8a25 --- /dev/null +++ b/script/package-redhat.ts @@ -0,0 +1,100 @@ +import { promisify } from 'util' +import { join } from 'path' + +import glob = require('glob') +const globPromise = promisify(glob) + +import { rename } from 'fs-extra' + +import { getVersion } from '../app/package-info' +import { getDistPath, getDistRoot } from './dist-info' + +const distRoot = getDistRoot() + +// best guess based on documentation +type RedhatOptions = { + // required + src: string + dest: string + arch: 'x86_64' + // optional + description?: string + productDescription?: string + categories?: Array + icon?: any + scripts?: { + pre?: string + post?: string + preun?: string + postun?: string + } + homepage?: string + mimeType?: Array + requires?: Array +} + +const options: RedhatOptions = { + src: getDistPath(), + dest: distRoot, + arch: 'x86_64', + description: 'Simple collaboration from your desktop', + productDescription: + 'This is the unofficial port of GitHub Desktop for Linux distributions', + categories: ['GNOME', 'GTK', 'Development'], + requires: [ + // dugite-native dependencies + '(libcurl or libcurl4)', + // keytar dependencies + 'libsecret', + 'gnome-keyring', + ], + icon: { + '32x32': 'app/static/logos/32x32.png', + '64x64': 'app/static/logos/64x64.png', + '128x128': 'app/static/logos/128x128.png', + '256x256': 'app/static/logos/256x256.png', + '512x512': 'app/static/logos/512x512.png', + '1024x1024': 'app/static/logos/1024x1024.png', + }, + scripts: { + post: 'script/resources/rpm/post.sh', + preun: 'script/resources/rpm/preun.sh', + }, + homepage: 'https://github.com/shiftkey/desktop', + mimeType: [ + 'x-scheme-handler/x-github-client', + 'x-scheme-handler/x-github-desktop-auth', + // workaround for handling OAuth flow until we figure out what we're doing + // with the development OAuth details + // + // see https://github.com/shiftkey/desktop/issues/72 for more details + 'x-scheme-handler/x-github-desktop-dev-auth', + ], +} + +export async function packageRedhat(): Promise { + if (process.platform === 'win32') { + return Promise.reject('Windows is not supported') + } + + const installer = require('electron-installer-redhat') + + await installer(options) + const installersPath = `${distRoot}/github-desktop*.rpm` + + const files = await globPromise(installersPath) + + if (files.length !== 1) { + return Promise.reject( + `Expected one file but instead found '${files.join(', ')}' - exiting...` + ) + } + + const oldPath = files[0] + + const newFileName = `GitHubDesktop-linux-${getVersion()}.rpm` + const newPath = join(distRoot, newFileName) + await rename(oldPath, newPath) + + return Promise.resolve(newPath) +} diff --git a/script/package.ts b/script/package.ts index a39b1b48020..0befa105b58 100644 --- a/script/package.ts +++ b/script/package.ts @@ -4,6 +4,8 @@ import * as fs from 'fs-extra' import * as cp from 'child_process' import * as path from 'path' import * as electronInstaller from 'electron-winstaller' +import * as crypto from 'crypto' + import { getProductName, getCompanyName } from '../app/package-info' import { getDistPath, @@ -14,9 +16,14 @@ import { shouldMakeDelta, getUpdatesURL, getIconFileName, + getDistRoot, } from './dist-info' import { isAppveyor, isGitHubActions } from './build-platforms' +import { packageElectronBuilder } from './package-electron-builder' +import { packageDebian } from './package-debian' +import { packageRedhat } from './package-redhat' + const distPath = getDistPath() const productName = getProductName() const outputDir = path.join(distPath, '..', 'installer') @@ -123,26 +130,70 @@ function packageWindows() { }) } -function packageLinux() { - const electronBuilder = path.resolve( - __dirname, - '..', - 'node_modules', - '.bin', - 'electron-builder' - ) +function getSha256Checksum(fullPath: string): Promise { + return new Promise((resolve, reject) => { + const algo = 'sha256' + const shasum = crypto.createHash(algo) - const configPath = path.resolve(__dirname, 'electron-builder-linux.yml') + const s = fs.createReadStream(fullPath) + s.on('data', function (d) { + shasum.update(d) + }) + s.on('error', err => { + reject(err) + }) + s.on('end', function () { + const d = shasum.digest('hex') + resolve(d) + }) + }) +} + +async function generateChecksums(files: Array) { + const distRoot = getDistRoot() + + const checksums = new Map() + + for (const f of files) { + const checksum = await getSha256Checksum(f) + checksums.set(f, checksum) + } - const args = [ - 'build', - '--prepackaged', - distPath, - '--x64', - '--config', - configPath, - ] + let checksumsText = `Checksums: \n` - console.log('Packaging for Linux…') - cp.spawnSync(electronBuilder, args, { stdio: 'inherit' }) + for (const [fullPath, checksum] of checksums) { + const fileName = path.basename(fullPath) + checksumsText += `${checksum} - ${fileName}\n` + } + + const checksumFile = path.join(distRoot, 'checksums.txt') + + await fs.writeFile(checksumFile, checksumsText) +} + +async function packageLinux() { + const helperPath = path.join(getDistPath(), 'chrome-sandbox') + const exists = fs.pathExistsSync(helperPath) + + if (exists) { + console.log('Updating file mode for chrome-sandbox…') + fs.chmodSync(helperPath, 0o4755) + } + try { + const files = await packageElectronBuilder() + const debianPackage = await packageDebian() + const redhatPackage = await packageRedhat() + + const installers = [...files, debianPackage, redhatPackage] + + console.log(`Installers created:`) + for (const installer of installers) { + console.log(` - ${installer}`) + } + + generateChecksums(installers) + } catch (err) { + console.error('A problem occurred with the packaging step', err) + process.exit(1) + } } diff --git a/script/post-install.ts b/script/post-install.ts index dac221dc8d2..8e2b33aa2d3 100644 --- a/script/post-install.ts +++ b/script/post-install.ts @@ -27,36 +27,53 @@ function findYarnVersion(callback: (path: string) => void) { callback(latestVersion) }) } +function isOffline() { + return process.env.OFFLINE === '1' +} findYarnVersion(path => { - let result = spawnSync( - 'node', - [path, '--cwd', 'app', 'install', '--force'], - options - ) + let result + if (isOffline()) { + result = spawnSync( + 'node', + [path, '--offline', '--cwd', 'app', 'install', '--force'], + options + ) + } else { + result = spawnSync( + 'node', + [path, '--cwd', 'app', 'install', '--force'], + options + ) + } if (result.status !== 0) { process.exit(result.status || 1) } - - result = spawnSync( - 'git', - ['submodule', 'update', '--recursive', '--init'], - options - ) + if (!isOffline()) { + result = spawnSync( + 'git', + ['submodule', 'update', '--recursive', '--init'], + options + ) + } if (result.status !== 0) { process.exit(result.status || 1) } - - result = spawnSync('node', [path, 'compile:tslint'], options) - + if (isOffline()) { + result = spawnSync('node', [path, '--offline', 'compile:tslint'], options) + } else { + result = spawnSync('node', [path, 'compile:tslint'], options) + } if (result.status !== 0) { process.exit(result.status || 1) } - - result = spawnSync('node', [path, 'compile:script'], options) - + if (isOffline()) { + result = spawnSync('node', [path, '--offline', 'compile:script'], options) + } else { + result = spawnSync('node', [path, 'compile:script'], options) + } if (result.status !== 0) { process.exit(result.status || 1) } diff --git a/script/resources/deb/postinst.sh b/script/resources/deb/postinst.sh new file mode 100755 index 00000000000..79081967042 --- /dev/null +++ b/script/resources/deb/postinst.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +set -e + +PROFILE_D_FILE="/etc/profile.d/github-desktop.sh" +INSTALL_DIR="/usr/lib/github-desktop" +CLI_DIR="$INSTALL_DIR/resources/app/static" + +case "$1" in + configure) + # add executable permissions for CLI interface + chmod +x "$CLI_DIR"/github || : + # check if this is a dev install or standard + if [ -f "$INSTALL_DIR/github-desktop-dev" ]; then + BINARY_NAME="github-desktop-dev" + else + BINARY_NAME="github-desktop" + fi + # create symbolic links to /usr/bin directory + ln -f -s "$INSTALL_DIR"/$BINARY_NAME /usr/bin || : + ln -f -s "$CLI_DIR"/github /usr/bin || : + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +exit 0 diff --git a/script/linux-after-remove.sh b/script/resources/deb/postrm.sh old mode 100644 new mode 100755 similarity index 58% rename from script/linux-after-remove.sh rename to script/resources/deb/postrm.sh index 9a73886e2a5..d85b3eb28e8 --- a/script/linux-after-remove.sh +++ b/script/resources/deb/postrm.sh @@ -2,12 +2,17 @@ set -e PROFILE_D_FILE="/etc/profile.d/github-desktop.sh" +BASE_FILE="/usr/bin/github" case "$1" in purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) echo "#!/bin/sh" > "${PROFILE_D_FILE}"; . "${PROFILE_D_FILE}"; rm "${PROFILE_D_FILE}"; + # remove symbolic links in /usr/bin directory + test -f ${BASE_FILE} && unlink ${BASE_FILE} + test -f ${BASE_FILE}-desktop && unlink ${BASE_FILE}-desktop + test -f ${BASE_FILE}-desktop-dev && unlink ${BASE_FILE}-desktop-dev ;; *) diff --git a/script/resources/rpm/post.sh b/script/resources/rpm/post.sh new file mode 100755 index 00000000000..092c75b9d26 --- /dev/null +++ b/script/resources/rpm/post.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +INSTALL_DIR="/usr/lib/github-desktop" +CLI_DIR="$INSTALL_DIR/resources/app/static" + +# add executable permissions for CLI interface +chmod +x "$CLI_DIR"/github || : + +# create symbolic links to /usr/bin directory +ln -f -s "$CLI_DIR"/github /usr/bin || : + +exit 0 diff --git a/script/resources/rpm/preun.sh b/script/resources/rpm/preun.sh new file mode 100755 index 00000000000..fdb0a748a34 --- /dev/null +++ b/script/resources/rpm/preun.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +BASE_FILE="/usr/bin/github" + +# remove symbolic links in /usr/bin directory +test -f ${BASE_FILE} && unlink ${BASE_FILE} + +exit 0 diff --git a/yarn.lock b/yarn.lock index 3b0e3a0868a..c1e0232f399 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,10 +2,10 @@ # yarn lockfile v1 -"7zip-bin@~5.0.3": - version "5.0.3" - resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-5.0.3.tgz#bc5b5532ecafd923a61f2fb097e3b108c0106a3f" - integrity sha512-GLyWIFBbGvpKPGo55JyRZAo4lVbnBiD52cKlw/0Vt+wnmKvWJkpZvsjVoaIolyBXDeAQKSicRtqFNPem9w0WYA== +"7zip-bin@~5.1.1": + version "5.1.1" + resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-5.1.1.tgz#9274ec7460652f9c632c59addf24efb1684ef876" + integrity sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ== "@babel/code-frame@^7.0.0": version "7.0.0" @@ -254,6 +254,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/runtime@^7.3.4": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.2.tgz#f5ab6897320f16decd855eed70b705908a313fe8" + integrity sha512-7Bl2rALb7HpvXFL7TETNzKSAeBVCPHELzc0C//9FCxN8nsiueWSJBqaF+2oIJScyILStASR/Cx5WMkXGYTiJFA== + dependencies: + regenerator-runtime "^0.13.2" + "@babel/template@^7.10.4", "@babel/template@^7.12.7", "@babel/template@^7.3.3": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" @@ -308,7 +315,7 @@ ajv "^6.12.0" ajv-keywords "^3.4.1" -"@electron/get@^1.0.1", "@electron/get@^1.12.2": +"@electron/get@1.12.2", "@electron/get@^1.0.1", "@electron/get@^1.12.2", "@electron/get@^1.6.0": version "1.12.2" resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.12.2.tgz#6442066afb99be08cefb9a281e4b4692b33764f3" integrity sha512-vAuHUbfvBQpYTJ5wB7uVIDq5c/Ry0fiTBMs7lnEYAo/qXXppIVcWdfBr57u6eRnKdVso7KSiH6p/LbQAG6Izrg== @@ -324,20 +331,16 @@ global-agent "^2.0.2" global-tunnel-ng "^2.7.1" -"@electron/get@^1.6.0": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.7.1.tgz#41aa60871b9d7e225bbe68135012f88a9ef87012" - integrity sha512-+BOIzkmYbe+oOBGqSByq8zXYXCFztccoymR3uNkvX5ckJ/5xU+4peVyEvFyH6+zfv58hCo99RxgIpwuaMfRtRg== +"@electron/universal@1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.0.5.tgz#b812340e4ef21da2b3ee77b2b4d35c9b86defe37" + integrity sha512-zX9O6+jr2NMyAdSkwEUlyltiI4/EBLu2Ls/VD3pUQdi3cAYeYfdQnT2AJJ38HE4QxLccbU13LSpccw1IWlkyag== dependencies: - debug "^4.1.1" - env-paths "^2.2.0" - fs-extra "^8.1.0" - got "^9.6.0" - sanitize-filename "^1.6.2" - sumchecker "^3.0.0" - optionalDependencies: - global-agent "^2.0.2" - global-tunnel-ng "^2.7.1" + "@malept/cross-spawn-promise" "^1.1.0" + asar "^3.0.3" + debug "^4.3.1" + dir-compare "^2.4.0" + fs-extra "^9.0.1" "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" @@ -572,6 +575,30 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" +"@malept/cross-spawn-promise@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.0.tgz#258fde4098f5004a56db67c35f33033af64810f6" + integrity sha512-GeIK5rfU1Yd7BZJQPTGZMMmcZy5nhRToPXZcjaDwQDRSewdhp648GT2E4dh+L7+Io7AOW6WQ+GR44QSzja4qxg== + dependencies: + cross-spawn "^7.0.1" + +"@malept/cross-spawn-promise@^1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz#504af200af6b98e198bce768bc1730c6936ae01d" + integrity sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ== + dependencies: + cross-spawn "^7.0.1" + +"@malept/flatpak-bundler@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz#e8a32c30a95d20c2b1bb635cc580981a06389858" + integrity sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q== + dependencies: + debug "^4.1.1" + fs-extra "^9.0.0" + lodash "^4.17.15" + tmp-promise "^3.0.2" + "@primer/octicons@^10.0.0": version "10.0.0" resolved "https://registry.yarnpkg.com/@primer/octicons/-/octicons-10.0.0.tgz#81e94ed32545dfd3472c8625a5b345f3ea4c153d" @@ -819,6 +846,13 @@ dependencies: "@types/node" "*" +"@types/fs-extra@^9.0.11": + version "9.0.11" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.11.tgz#8cc99e103499eab9f347dbc6ca4e99fb8d2c2b87" + integrity sha512-mZsifGG4QeQ7hlkhO56u7zt/ycBgGxSVsFI/6lGTU34VtwkiqrrSDgw0+ygs8kFGWcXnFQWMrzF2h7TtDFNixA== + dependencies: + "@types/node" "*" + "@types/fs-extra@^9.0.2": version "9.0.4" resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.4.tgz#12553138cf0438db9a31cdc8b0a3aa9332eb67aa" @@ -1038,7 +1072,7 @@ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== -"@types/plist@^3.0.2": +"@types/plist@^3.0.1", "@types/plist@^3.0.2": version "3.0.2" resolved "https://registry.yarnpkg.com/@types/plist/-/plist-3.0.2.tgz#61b3727bba0f5c462fe333542534a0c3e19ccb01" integrity sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw== @@ -1262,6 +1296,11 @@ resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.0.tgz#215c231dff736d5ba92410e6d602050cce7e273f" integrity sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ== +"@types/verror@^1.10.3": + version "1.10.4" + resolved "https://registry.yarnpkg.com/@types/verror/-/verror-1.10.4.tgz#805c0612b3a0c124cf99f517364142946b74ba3b" + integrity sha512-OjJdqx6QlbyZw9LShPwRW+Kmiegeg3eWNI41MQQKaG3vjdU2L9SRElntM51HmHBY1cu7izxQJ1lMYioQh3XMBg== + "@types/webpack-bundle-analyzer@^2.9.2": version "2.9.2" resolved "https://registry.yarnpkg.com/@types/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.9.2.tgz#a3f9f4dd8bc3025550001a1704cfd31125773f40" @@ -1329,16 +1368,16 @@ integrity sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw== "@types/yargs@^15.0.0": - version "15.0.4" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.4.tgz#7e5d0f8ca25e9d5849f2ea443cf7c402decd8299" - integrity sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg== + version "15.0.13" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.13.tgz#34f7fec8b389d7f3c1fd08026a5763e072d3c6dc" + integrity sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ== dependencies: "@types/yargs-parser" "*" -"@types/yargs@^15.0.5": - version "15.0.5" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.5.tgz#947e9a6561483bdee9adffc983e91a6902af8b79" - integrity sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w== +"@types/yargs@^16.0.2": + version "16.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.3.tgz#4b6d35bb8e680510a7dc2308518a80ee1ef27e01" + integrity sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ== dependencies: "@types/yargs-parser" "*" @@ -1871,38 +1910,39 @@ anymatch@^3.0.3, anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" -app-builder-bin@3.5.9: - version "3.5.9" - resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-3.5.9.tgz#a3ac0c25286bac68357321cb2eaf7128b0bc0a4f" - integrity sha512-NSjtqZ3x2kYiDp3Qezsgukx/AUzKPr3Xgf9by4cYt05ILWGAptepeeu0Uv+7MO+41o6ujhLixTou8979JGg2Kg== +app-builder-bin@3.5.13: + version "3.5.13" + resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-3.5.13.tgz#6dd7f4de34a4e408806f99b8c7d6ef1601305b7e" + integrity sha512-ighVe9G+bT1ENGdp9ecO1P+94vv/f+FUwaI+XkNzeg9bYF8Oi3BQ+mJuxS00UgyHs8luuOzjzC+qnAtdb43Mpg== -app-builder-lib@22.7.0: - version "22.7.0" - resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-22.7.0.tgz#ccd3e7ece2d46bc209423a77aa142f74aaf65db0" - integrity sha512-blRKwV8h0ztualXS50ciCTo39tbuDGNS+ldcy8+KLvKXuT6OpYnSJ7M6MSfPT+xWatshMHJV1rJx3Tl+k/Sn/g== +app-builder-lib@22.11.7: + version "22.11.7" + resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-22.11.7.tgz#c0ad1119ebfbf4189a8280ad693625f5e684dca6" + integrity sha512-pS9/cR4/TnNZVAHZECiSvvwTBzbwblj7KBBZkMKDG57nibq0I1XY8zAaYeHFdlYTyrRcz9JUXbAqJKezya7UFQ== dependencies: - "7zip-bin" "~5.0.3" + "7zip-bin" "~5.1.1" "@develar/schema-utils" "~2.6.5" + "@electron/universal" "1.0.5" + "@malept/flatpak-bundler" "^0.4.0" async-exit-hook "^2.0.1" bluebird-lst "^1.0.9" - builder-util "22.7.0" - builder-util-runtime "8.7.1" + builder-util "22.11.7" + builder-util-runtime "8.7.7" chromium-pickle-js "^0.2.0" - debug "^4.2.0" - ejs "^3.1.3" - electron-publish "22.7.0" - fs-extra "^9.0.0" - hosted-git-info "^3.0.4" - is-ci "^2.0.0" - isbinaryfile "^4.0.6" - js-yaml "^3.14.0" - lazy-val "^1.0.4" + debug "^4.3.2" + ejs "^3.1.6" + electron-publish "22.11.7" + fs-extra "^10.0.0" + hosted-git-info "^4.0.2" + is-ci "^3.0.0" + isbinaryfile "^4.0.8" + js-yaml "^4.1.0" + lazy-val "^1.0.5" minimatch "^3.0.4" - normalize-package-data "^2.5.0" - read-config-file "6.0.0" + read-config-file "6.2.0" sanitize-filename "^1.6.3" - semver "^7.3.2" - temp-file "^3.3.7" + semver "^7.3.5" + temp-file "^3.4.0" aproba@^1.1.1: version "1.2.0" @@ -1945,6 +1985,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + argv@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/argv/-/argv-0.0.2.tgz#ecbd16f8949b157183711b1bda334f37840185ab" @@ -2042,7 +2087,7 @@ asar@^2.0.1: mkdirp "^0.5.1" tmp-promise "^1.0.5" -asar@^3.0.0: +asar@^3.0.0, asar@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/asar/-/asar-3.0.3.tgz#1fef03c2d6d2de0cbad138788e4f7ae03b129c7b" integrity sha512-k7zd+KoR+n8pl71PvgElcoKHrVNiSXtw7odKbyNpmgKe7EGRF9Pnu3uLOukD37EvavKwVFxOUpqXTIZC5B5Pmw== @@ -2475,6 +2520,11 @@ base64-js@^1.2.3: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw== +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -2608,19 +2658,19 @@ boom@5.x.x: dependencies: hoek "4.x.x" -boxen@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" - integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== +boxen@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.0.0.tgz#64fe9b16066af815f51057adcc800c3730120854" + integrity sha512-5bvsqw+hhgUi3oYGK0Vf4WpIkyemp60WBInn7+WNfoISzAqk/HX4L7WNROq38E6UR/y3YADpv6pEm4BfkeEAdA== dependencies: ansi-align "^3.0.0" - camelcase "^5.3.1" - chalk "^3.0.0" - cli-boxes "^2.2.0" - string-width "^4.1.0" - term-size "^2.1.0" - type-fest "^0.8.1" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.0" + type-fest "^0.20.2" widest-line "^3.1.0" + wrap-ansi "^7.0.0" brace-expansion@^1.1.7: version "1.1.8" @@ -2740,6 +2790,11 @@ buffer-crc32@^0.2.1, buffer-crc32@^0.2.13, buffer-crc32@~0.2.3: resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= +buffer-equal@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" + integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74= + buffer-from@1.x, buffer-from@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -2764,6 +2819,14 @@ buffer@4.9.1, buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" +buffer@^5.1.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + buffer@^5.2.1, buffer@^5.5.0: version "5.6.0" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" @@ -2772,33 +2835,41 @@ buffer@^5.2.1, buffer@^5.5.0: base64-js "^1.0.2" ieee754 "^1.1.4" -builder-util-runtime@8.7.1: - version "8.7.1" - resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.7.1.tgz#23c808cddd650d4376a7a1518ec1e80e85c10f00" - integrity sha512-uEBH1nAnTvzjcsrh2XI3qOzJ39h0+9kuIuwj+kCc3a07TZNGShfJcai8fFzL3mNgGjEFxoq+XMssR11r+FOFSg== +builder-util-runtime@8.7.6: + version "8.7.6" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.7.6.tgz#4b43c96db2bd494ced7694bcd7674934655e8324" + integrity sha512-rj9AIY7CzLSuTOXpToiaQkruYh6UEQ+kYnd5UET22ch8MGClEtIZKXHG14qEiXEr2x4EOKDMxkcTa+9TYaE+ug== + dependencies: + debug "^4.3.2" + sax "^1.2.4" + +builder-util-runtime@8.7.7: + version "8.7.7" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.7.7.tgz#6c83cc3abe7a7a5c8b4ec8878f68adc828c07f0d" + integrity sha512-RUfoXzVrmFFI0K/Oft0CtP1LpTIOlBeLJatt5DePTI0KlxE156am4SGUpqtbbdqZNm++LkV9mX4olBDcXyGPow== dependencies: - debug "^4.2.0" + debug "^4.3.2" sax "^1.2.4" -builder-util@22.7.0: - version "22.7.0" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-22.7.0.tgz#0776a66e6d6e408a78bed7f17a7ad22516d9e7f0" - integrity sha512-UV3MKL0mwjMq2y9JlBf28Cegpj0CrIXcjGkO0TXn+QZ6Yy9rY6lHOuUvpQ19ct2Qh1o+QSwH3Q1nKUf5viJBBg== +builder-util@22.11.7: + version "22.11.7" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-22.11.7.tgz#ae9707afa6a31feafa13c274ac83b4fe28ef1467" + integrity sha512-ihqUe5ey82LM9qqQe0/oIcaSm9w+B9UjcsWJZxJliTBsbU+sErOpDFpHW+sim0veiTF/EIcGUh9HoduWw+l9FA== dependencies: - "7zip-bin" "~5.0.3" + "7zip-bin" "~5.1.1" "@types/debug" "^4.1.5" - "@types/fs-extra" "^9.0.1" - app-builder-bin "3.5.9" + "@types/fs-extra" "^9.0.11" + app-builder-bin "3.5.13" bluebird-lst "^1.0.9" - builder-util-runtime "8.7.1" - chalk "^4.0.0" - debug "^4.2.0" - fs-extra "^9.0.0" - is-ci "^2.0.0" - js-yaml "^3.14.0" + builder-util-runtime "8.7.7" + chalk "^4.1.1" + debug "^4.3.2" + fs-extra "^10.0.0" + is-ci "^3.0.0" + js-yaml "^4.1.0" source-map-support "^0.5.19" stat-mode "^1.0.0" - temp-file "^3.3.7" + temp-file "^3.4.0" builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" @@ -2896,16 +2967,16 @@ camel-case@3.0.x: upper-case "^1.1.1" camelcase@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" - integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== + version "5.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.2.0.tgz#e7522abda5ed94cc0489e1b8466610e88404cf45" + integrity sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ== camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0: +camelcase@^6.0.0, camelcase@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== @@ -2950,10 +3021,10 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" + integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" @@ -3072,6 +3143,11 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +ci-info@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.1.1.tgz#9a32fcefdf7bcdb6f0a7e1c0f8098ec57897b80a" + integrity sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ== + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -3115,10 +3191,10 @@ clean-webpack-plugin@^0.1.19: dependencies: rimraf "^2.6.1" -cli-boxes@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d" - integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w== +cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== cli-table@0.3.1: version "0.3.1" @@ -3127,6 +3203,14 @@ cli-table@0.3.1: dependencies: colors "1.0.3" +cli-truncate@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-1.1.0.tgz#2b2dfd83c53cfd3572b87fc4d430a808afb04086" + integrity sha512-bAtZo0u82gCfaAGfSNxUdTI9mNyza7D8w4CVCcaOsy7sgwDzvx6ekr6cuWJqY3UGzgnQ1+4wgENup5eIhgxEYA== + dependencies: + slice-ansi "^1.0.0" + string-width "^2.0.0" + cliui@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" @@ -3136,6 +3220,15 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + clone-response@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" @@ -3421,6 +3514,13 @@ crc32-stream@^4.0.1: crc-32 "^1.2.0" readable-stream "^3.4.0" +crc@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" + integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== + dependencies: + buffer "^5.1.0" + create-ecdh@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" @@ -3459,6 +3559,15 @@ cross-env@^5.0.5: cross-spawn "^5.1.0" is-windows "^1.0.0" +cross-spawn-windows-exe@^1.1.0, cross-spawn-windows-exe@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/cross-spawn-windows-exe/-/cross-spawn-windows-exe-1.2.0.tgz#46253b0f497676e766faf4a7061004618b5ac5ec" + integrity sha512-mkLtJJcYbDCxEG7Js6eUnUNndWjyUZwJ3H7bErmmtOYU/Zb99DyUkpamuIZE0b3bhmJyZ7D90uS6f+CGxRRjOw== + dependencies: + "@malept/cross-spawn-promise" "^1.1.0" + is-wsl "^2.2.0" + which "^2.0.2" + cross-spawn@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -3488,6 +3597,15 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" +cross-spawn@^7.0.1: + version "7.0.2" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.2.tgz#d0d7dcfa74e89115c7619f4f721a94e1fdb716d6" + integrity sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + cryptiles@3.x.x: version "3.1.2" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" @@ -3648,12 +3766,12 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: dependencies: ms "2.0.0" -debug@4: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== dependencies: - ms "^2.1.1" + ms "2.1.2" debug@^3.1.0: version "3.1.0" @@ -3662,27 +3780,6 @@ debug@^3.1.0: dependencies: ms "2.0.0" -debug@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.0.tgz#373687bffa678b38b1cd91f861b63850035ddc87" - integrity sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg== - dependencies: - ms "^2.1.1" - -debug@^4.1.0, debug@^4.1.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - -debug@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" - integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== - dependencies: - ms "2.1.2" - debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -3876,17 +3973,44 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" -dmg-builder@22.7.0: - version "22.7.0" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-22.7.0.tgz#ead7e7c046cbdc52d29d302a4455f6668cdf7d45" - integrity sha512-5Ea2YEz6zSNbyGzZD+O9/MzmaXb6oa15cSKWo4JQ1xP4rorOpte7IOj2jcwYjtc+Los2gu1lvT314OC1OZIWgg== +dir-compare@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/dir-compare/-/dir-compare-2.4.0.tgz#785c41dc5f645b34343a4eafc50b79bac7f11631" + integrity sha512-l9hmu8x/rjVC9Z2zmGzkhOEowZvW7pmYws5CWHutg8u1JgvsKWMx7Q/UODeu4djLZ4FgW5besw5yvMQnBHzuCA== dependencies: - app-builder-lib "22.7.0" - builder-util "22.7.0" - fs-extra "^9.0.0" - iconv-lite "^0.5.1" - js-yaml "^3.14.0" - sanitize-filename "^1.6.3" + buffer-equal "1.0.0" + colors "1.0.3" + commander "2.9.0" + minimatch "3.0.4" + +dmg-builder@22.11.7: + version "22.11.7" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-22.11.7.tgz#5956008c18d40ee72c0ea01ffea9590dbf51df89" + integrity sha512-+I+XfP2DODHB6PwFANgpH/WMzzCA5r5XoMvbFCIYjQjJpXlO0XnqQaamzFl2vh/Wz/Qt0d0lJMgRy8gKR3MGdQ== + dependencies: + app-builder-lib "22.11.7" + builder-util "22.11.7" + builder-util-runtime "8.7.6" + fs-extra "^10.0.0" + iconv-lite "^0.6.2" + js-yaml "^4.1.0" + optionalDependencies: + dmg-license "^1.0.9" + +dmg-license@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/dmg-license/-/dmg-license-1.0.9.tgz#a2fb8d692af0e30b0730b5afc91ed9edc2d9cb4f" + integrity sha512-Rq6qMDaDou2+aPN2SYy0x7LDznoJ/XaG6oDcH5wXUp+WRWQMUYE6eM+F+nex+/LSXOp1uw4HLFoed0YbfU8R/Q== + dependencies: + "@types/plist" "^3.0.1" + "@types/verror" "^1.10.3" + ajv "^6.10.0" + cli-truncate "^1.1.0" + crc "^3.8.0" + iconv-corefoundation "^1.1.6" + plist "^3.0.1" + smart-buffer "^4.0.2" + verror "^1.10.0" doctrine@^2.1.0: version "2.1.0" @@ -3980,10 +4104,10 @@ dotenv-expand@^5.1.0: resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== -dotenv@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" - integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== +dotenv@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-9.0.2.tgz#dacc20160935a37dea6364aa1bef819fb9b6ab05" + integrity sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg== duplexer3@^0.1.4: version "0.1.4" @@ -4033,32 +4157,30 @@ ejs@^2.6.1: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0" integrity sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ== -ejs@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.3.tgz#514d967a8894084d18d3d47bd169a1c0560f093d" - integrity sha512-wmtrUGyfSC23GC/B1SMv2ogAUgbQEtDmTIhfqielrG5ExIM9TP4UoYdi90jLF1aTcsWCJNEO0UrgKzP0y3nTSg== +ejs@^3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.6.tgz#5bfd0a0689743bb5268b3550cceeebbc1702822a" + integrity sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw== dependencies: jake "^10.6.1" -electron-builder@^22.7.0: - version "22.7.0" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-22.7.0.tgz#a42d08a1654ffc2f7d9e2860829d3cc55d4a0c81" - integrity sha512-t6E3oMutpST64YWbZCg7HodEwJOsnjUF1vnDIHm2MW6CFZPX8tlCK6efqaV66LU0E0Nkp/JH6TE5bCqQ1+VdPQ== - dependencies: - "@types/yargs" "^15.0.5" - app-builder-lib "22.7.0" - bluebird-lst "^1.0.9" - builder-util "22.7.0" - builder-util-runtime "8.7.1" - chalk "^4.0.0" - dmg-builder "22.7.0" - fs-extra "^9.0.0" - is-ci "^2.0.0" - lazy-val "^1.0.4" - read-config-file "6.0.0" - sanitize-filename "^1.6.3" - update-notifier "^4.1.0" - yargs "^15.3.1" +electron-builder@^22.11.7: + version "22.11.7" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-22.11.7.tgz#cd97a0d9f6e6d388112e66b4376de431cca4d596" + integrity sha512-yQExSLt7Hbz/P8lLkZDdE/OnJJ7NCX+uiQcV+XIH0TeEZcD87ZnSqBBzGUN5akySU4BXXlrVZKeUsXACWrm5Kw== + dependencies: + "@types/yargs" "^16.0.2" + app-builder-lib "22.11.7" + builder-util "22.11.7" + builder-util-runtime "8.7.7" + chalk "^4.1.1" + dmg-builder "22.11.7" + fs-extra "^10.0.0" + is-ci "^3.0.0" + lazy-val "^1.0.5" + read-config-file "6.2.0" + update-notifier "^5.1.0" + yargs "^17.0.1" electron-chromedriver@^11.0.0: version "11.0.0" @@ -4068,6 +4190,50 @@ electron-chromedriver@^11.0.0: "@electron/get" "^1.12.2" extract-zip "^2.0.0" +electron-installer-common@^0.10.2: + version "0.10.3" + resolved "https://registry.yarnpkg.com/electron-installer-common/-/electron-installer-common-0.10.3.tgz#40f9db644ca60eb28673d545b67ee0113aef4444" + integrity sha512-mYbP+6i+nHMIm0WZHXgGdmmXMe+KXncl6jZYQNcCF9C1WsNA9C5SZ2VP4TLQMSIoFO+X4ugkMEA5uld1bmyEvA== + dependencies: + "@malept/cross-spawn-promise" "^1.0.0" + asar "^3.0.0" + debug "^4.1.1" + fs-extra "^9.0.0" + glob "^7.1.4" + lodash "^4.17.15" + parse-author "^2.0.0" + semver "^7.1.1" + tmp-promise "^3.0.2" + optionalDependencies: + "@types/fs-extra" "^9.0.1" + +electron-installer-debian@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/electron-installer-debian/-/electron-installer-debian-3.1.0.tgz#2f6107f559f6564c44e3832fb2942dd8de4d40cc" + integrity sha512-k6KChvx0Fw8XTlCqwwbBfh19yGQaKjGdbugokmr1IpzINOm4QFyACKMTHAYFHW5LCBUZQShZD96hwxUZ+8Kx+w== + dependencies: + "@malept/cross-spawn-promise" "^1.0.0" + debug "^4.1.1" + electron-installer-common "^0.10.2" + fs-extra "^9.0.0" + get-folder-size "^2.0.1" + lodash "^4.17.4" + word-wrap "^1.2.3" + yargs "^15.0.1" + +electron-installer-redhat@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/electron-installer-redhat/-/electron-installer-redhat-3.3.0.tgz#acdb59d13d738c55debc5214114d36096eda1aed" + integrity sha512-hXIXB3uQXmXZy/v3MpbwWN4Of28ALpPt9ZyUDNEoSe0w7QZceL9IqI2K6Q6imiBJCLRC0hmT94WhlKj1RyGOWg== + dependencies: + "@malept/cross-spawn-promise" "^1.0.0" + debug "^4.1.1" + electron-installer-common "^0.10.2" + fs-extra "^9.0.0" + lodash "^4.17.15" + word-wrap "^1.2.3" + yargs "^16.0.2" + electron-notarize@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/electron-notarize/-/electron-notarize-1.0.0.tgz#bc925b1ccc3f79e58e029e8c4706572b01a9fd8f" @@ -4076,10 +4242,10 @@ electron-notarize@^1.0.0: debug "^4.1.1" fs-extra "^9.0.1" -electron-osx-sign@^0.4.11: - version "0.4.17" - resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.4.17.tgz#2727ca0c79e1e4e5ccd3861fb3da9c3c913b006c" - integrity sha512-wUJPmZJQCs1zgdlQgeIpRcvrf7M5/COQaOV68Va1J/SgmWx5KL2otgg+fAae7luw6qz9R8Gvu/Qpe9tAOu/3xQ== +electron-osx-sign@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.5.0.tgz#fc258c5e896859904bbe3d01da06902c04b51c3a" + integrity sha512-icoRLHzFz/qxzDh/N4Pi2z4yVHurlsCAYQvsCSG7fCedJ4UJXBS6PoQyGH71IfcqKupcKeK7HX/NkyfG+v6vlQ== dependencies: bluebird "^3.5.0" compare-version "^0.1.2" @@ -4088,16 +4254,17 @@ electron-osx-sign@^0.4.11: minimist "^1.2.0" plist "^3.0.1" -electron-packager@^15.1.0: - version "15.1.0" - resolved "https://registry.yarnpkg.com/electron-packager/-/electron-packager-15.1.0.tgz#16a3733e4cad26112a2ac36f0b0f35c3b0170eff" - integrity sha512-THNm4bz1DfvR9f0g51+NjuAYELflM8+1vhQ/iv/G8vyZNKzSMuFd5doobngQKq3rRsLdPNZVnGqDdgS884d7Og== +electron-packager@^15.3.0: + version "15.3.0" + resolved "https://registry.yarnpkg.com/electron-packager/-/electron-packager-15.3.0.tgz#10f51960d518e4c35b760c10d1392c7ebea24c8b" + integrity sha512-PHcykXinmjPyJcYoNGbOWNsOU25nIbMLHBAfg4caazWzYELFL14FshDZEqqrvVOMEUnqjx/Ktc1NmMIN5ZRomQ== dependencies: "@electron/get" "^1.6.0" asar "^3.0.0" + cross-spawn-windows-exe "^1.2.0" debug "^4.0.1" electron-notarize "^1.0.0" - electron-osx-sign "^0.4.11" + electron-osx-sign "^0.5.0" extract-zip "^2.0.0" filenamify "^4.1.0" fs-extra "^9.0.0" @@ -4106,24 +4273,23 @@ electron-packager@^15.1.0: junk "^3.1.0" parse-author "^2.0.0" plist "^3.0.0" - rcedit "^2.0.0" + rcedit "^3.0.1" resolve "^1.1.6" semver "^7.1.3" - yargs-parser "^19.0.1" + yargs-parser "^20.0.0" -electron-publish@22.7.0: - version "22.7.0" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-22.7.0.tgz#d92ba7c4007c9ac1dd070593e48028184fb2dc19" - integrity sha512-hmU69xlb6vvAV3QfpHYDlkdZMFdBAgDbptoxbLFrnTq5bOkcL8AaDbvxeoZ4+lvqgs29NwqGpkHo2oN+p/hCfg== +electron-publish@22.11.7: + version "22.11.7" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-22.11.7.tgz#4126cbb08ccf082a2aa7fef89ee629b3a4b8ae9a" + integrity sha512-A4EhRRNBVz4SPzUlBrPO6BmuyDeI0pyprggPAV9rQ+SDVSnSB/WKPot9JwWMyArkGj3AUUTMNVT6hwZhMvhfqw== dependencies: - "@types/fs-extra" "^9.0.1" - bluebird-lst "^1.0.9" - builder-util "22.7.0" - builder-util-runtime "8.7.1" - chalk "^4.0.0" - fs-extra "^9.0.0" - lazy-val "^1.0.4" - mime "^2.4.5" + "@types/fs-extra" "^9.0.11" + builder-util "22.11.7" + builder-util-runtime "8.7.7" + chalk "^4.1.1" + fs-extra "^10.0.0" + lazy-val "^1.0.5" + mime "^2.5.2" electron-winstaller@*, electron-winstaller@^5.0.0: version "5.0.0" @@ -4342,6 +4508,11 @@ es6-shim@^0.35.3: resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.3.tgz#9bfb7363feffff87a6cdb6cd93e405ec3c4b6f26" integrity sha1-m/tzY/7//4emzbbNk+QF7DxLbyY= +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-goat@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" @@ -5044,6 +5215,15 @@ fs-constants@^1.0.0: resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== +fs-extra@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1" + integrity sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" @@ -5072,14 +5252,14 @@ fs-extra@^8.1.0: universalify "^0.1.0" fs-extra@^9.0.0, fs-extra@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== dependencies: at-least-node "^1.0.0" graceful-fs "^4.2.0" jsonfile "^6.0.1" - universalify "^1.0.0" + universalify "^2.0.0" fs-write-stream-atomic@^1.0.8: version "1.0.10" @@ -5142,16 +5322,29 @@ galactus@^0.2.1: flora-colossus "^1.0.0" fs-extra "^4.0.0" +gar@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/gar/-/gar-1.0.4.tgz#f777bc7db425c0572fdeb52676172ca1ae9888b8" + integrity sha512-w4n9cPWyP7aHxKxYHFQMegj7WIAsL/YX/C4Bs5Rr8s1H9M1rNtRWRsw+ovYMkXDQ5S4ZbYHsHAPmevPjPgw44w== + gensync@^1.0.0-beta.1: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^2.0.1: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-folder-size@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/get-folder-size/-/get-folder-size-2.0.1.tgz#3fe0524dd3bad05257ef1311331417bcd020a497" + integrity sha512-+CEb+GDCM7tkOS2wdMKTn9vU7DgnKUTuDlehkNJKNSovdCOVxs14OfKCk4cvSaR3za4gj+OBdl9opPN9xrJ0zA== + dependencies: + gar "^1.0.4" + tiny-each-async "2.0.3" + get-package-info@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/get-package-info/-/get-package-info-1.0.0.tgz#6432796563e28113cd9474dbbd00052985a4999c" @@ -5301,12 +5494,12 @@ global-agent@^2.0.2: semver "^7.3.2" serialize-error "^7.0.1" -global-dirs@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.0.1.tgz#acdf3bb6685bcd55cb35e8a052266569e9469201" - integrity sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A== +global-dirs@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" + integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== dependencies: - ini "^1.3.5" + ini "2.0.0" global-tunnel-ng@^2.7.1: version "2.7.1" @@ -5587,12 +5780,12 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -hosted-git-info@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.4.tgz#be4973eb1fd2737b11c9c7c19380739bb249f60d" - integrity sha512-4oT62d2jwSDBbLLFLZE+1vPuQ1h8p9wjrJ8Mqx5TjsyWmBMV5B13eJqn8pvluqubLf3cJPTfiYCIwNwDNmzScQ== +hosted-git-info@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" + integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== dependencies: - lru-cache "^5.1.1" + lru-cache "^6.0.0" html-encoding-sniffer@^2.0.1: version "2.0.1" @@ -5708,6 +5901,14 @@ human-signals@^1.1.1: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +iconv-corefoundation@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/iconv-corefoundation/-/iconv-corefoundation-1.1.6.tgz#27c135470237f6f8d13462fa1f5eaf250523c29a" + integrity sha512-1NBe55C75bKGZaY9UHxvXG3G0gEp0ziht7quhuFrW3SPgZDw9HI6qvYXRSV5M/Eupyu8ljuJ6Cba+ec15PZ4Xw== + dependencies: + cli-truncate "^1.1.0" + node-addon-api "^1.6.3" + iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -5715,12 +5916,12 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.5.1.tgz#b2425d3c7b18f7219f2ca663d103bddb91718d64" - integrity sha512-ONHr16SQvKZNSqjQT9gy5z24Jw+uqfO02/ngBSBoqChZ+W8qXX7GPRa1RoUnzGADw8K63R1BXUMzarCVQBpY8Q== +iconv-lite@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" + integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== dependencies: - safer-buffer ">= 2.1.2 < 3" + safer-buffer ">= 2.1.2 < 3.0.0" icss-replace-symbols@^1.1.0: version "1.1.0" @@ -5734,6 +5935,11 @@ icss-utils@^4.0.0: dependencies: postcss "^7.0.14" +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ieee754@^1.1.4: version "1.1.13" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" @@ -5815,12 +6021,17 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= +ini@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== + ini@^1.3.4: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -ini@^1.3.5, ini@~1.3.0: +ini@~1.3.0: version "1.3.7" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== @@ -5918,6 +6129,13 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" +is-ci@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.0.tgz#c7e7be3c9d8eef7d0fa144390bd1e4b88dc4c994" + integrity sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ== + dependencies: + ci-info "^3.1.1" + is-core-module@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" @@ -6036,18 +6254,18 @@ is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" -is-installed-globally@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.1.tgz#679afef819347a72584617fd19497f010b8ed35f" - integrity sha512-oiEcGoQbGc+3/iijAijrK2qFpkNoNjsHOm/5V5iaeydyrS/hnwaRCEgH5cpW0P3T1lSjV5piB7S5b5lEugNLhg== +is-installed-globally@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" + integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== dependencies: - global-dirs "^2.0.1" - is-path-inside "^3.0.1" + global-dirs "^3.0.0" + is-path-inside "^3.0.2" -is-npm@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" - integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== +is-npm@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" + integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== is-number@^3.0.0: version "3.0.0" @@ -6078,10 +6296,10 @@ is-odd@^2.0.0: dependencies: is-number "^4.0.0" -is-path-inside@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" - integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== +is-path-inside@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" @@ -6188,10 +6406,10 @@ isbinaryfile@^3.0.2: resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621" integrity sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE= -isbinaryfile@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.6.tgz#edcb62b224e2b4710830b67498c8e4e5a4d2610b" - integrity sha512-ORrEy+SNVqUhrCaal4hA4fBzhggQQ+BaLntyPOdoEiwlKZW9BZiJXjg3RMiruE4tPEI3pyVPpySHQF/dKWperg== +isbinaryfile@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.8.tgz#5d34b94865bd4946633ecc78a026fc76c5b11fcf" + integrity sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w== isexe@^2.0.0: version "2.0.0" @@ -6771,7 +6989,7 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@3.13.1, js-yaml@^3.10.0, js-yaml@^3.13.1, js-yaml@^3.7.0: +js-yaml@3.13.1, js-yaml@^3.13.1: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== @@ -6779,14 +6997,29 @@ js-yaml@3.13.1, js-yaml@^3.10.0, js-yaml@^3.13.1, js-yaml@^3.7.0: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^3.14.0: - version "3.14.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" - integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== +js-yaml@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" + integrity sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA== dependencies: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^3.7.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" + integrity sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -6915,6 +7148,13 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +json5@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + jsonc-parser@^2.2.1: version "2.3.0" resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.3.0.tgz#7c7fc988ee1486d35734faaaa866fadb00fa91ee" @@ -7019,7 +7259,7 @@ klona@^2.0.4: resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== -latest-version@^5.0.0: +latest-version@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== @@ -7043,10 +7283,10 @@ lazy-cache@^2.0.2: dependencies: set-getter "^0.1.0" -lazy-val@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.4.tgz#882636a7245c2cfe6e0a4e3ba6c5d68a137e5c65" - integrity sha512-u93kb2fPbIrfzBuLjZE+w+fJbUUMhNDXxNmMfaqNgpfQf1CO5ZSe2LfsnBqVAk7i/2NF48OSoRj+Xe2VT+lE8Q== +lazy-val@^1.0.4, lazy-val@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.5.tgz#6cf3b9f5bc31cee7ee3e369c0832b7583dcd923d" + integrity sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q== lazystream@^1.0.0: version "1.0.0" @@ -7561,7 +7801,7 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.0.3, mime@^2.4.5: +mime@^2.0.3: version "2.4.6" resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== @@ -7571,6 +7811,11 @@ mime@^2.4.4: resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== +mime@^2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" + integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -7604,7 +7849,7 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@^3.0.2, minimatch@^3.0.4: +minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -7721,11 +7966,6 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - nan@^2.12.1: version "2.14.1" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" @@ -7788,6 +8028,11 @@ no-case@^2.2.0: dependencies: lower-case "^1.1.1" +node-addon-api@^1.6.3: + version "1.7.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.7.2.tgz#3df30b95720b53c24e59948b49532b662444f54d" + integrity sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg== + node-fetch@^2.2.0: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" @@ -8340,11 +8585,6 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" - integrity sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME= - path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" @@ -8753,10 +8993,10 @@ punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -pupa@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.0.1.tgz#dbdc9ff48ffbea4a26a069b6f9f7abb051008726" - integrity sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA== +pupa@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" + integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== dependencies: escape-goat "^2.0.0" @@ -8878,10 +9118,12 @@ rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" -rcedit@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/rcedit/-/rcedit-2.1.0.tgz#37ae6ad1fc8d7734b2e445ec3d378ace89d4076d" - integrity sha512-Nrd/65LzMjFmKpS9d2fqIxVYdW0M8ovsN0PgZhCrPMQss2yznkp6/zjEQ1a9DzzoGv2uuN3yDJAeHybOD5ZNKA== +rcedit@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/rcedit/-/rcedit-3.0.1.tgz#ae21b43e49c075f4d84df1929832a12c302f3c90" + integrity sha512-XM0Jv40/y4hVAqj/MO70o/IWs4uOsaSoo2mLyk3klFDW+SStLnCtzuQu+1OBTIMGlM8CvaK9ftlYCp6DJ+cMsw== + dependencies: + cross-spawn-windows-exe "^1.1.0" react-is@^16.12.0: version "16.13.1" @@ -8898,15 +9140,15 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== -read-config-file@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-6.0.0.tgz#224b5dca6a5bdc1fb19e63f89f342680efdb9299" - integrity sha512-PHjROSdpceKUmqS06wqwP92VrM46PZSTubmNIMJ5DrMwg1OgenSTSEHIkCa6TiOJ+y/J0xnG1fFwG3M+Oi1aNA== +read-config-file@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-6.2.0.tgz#71536072330bcd62ba814f91458b12add9fc7ade" + integrity sha512-gx7Pgr5I56JtYz+WuqEbQHj/xWo+5Vwua2jhb1VwM4Wid5PqYmZ4i00ZB0YEGIfkVBsCv9UrjgyqCiQfS/Oosg== dependencies: - dotenv "^8.2.0" + dotenv "^9.0.2" dotenv-expand "^5.1.0" - js-yaml "^3.13.1" - json5 "^2.1.2" + js-yaml "^4.1.0" + json5 "^2.2.0" lazy-val "^1.0.4" read-installed@4.0.3: @@ -9080,6 +9322,11 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" integrity sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A== +regenerator-runtime@^0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447" + integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA== + regex-not@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.0.tgz#42f83e39771622df826b02af176525d6a5f157f9" @@ -9305,28 +9552,7 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.1.6, resolve@^1.3.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" - integrity sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw== - dependencies: - path-parse "^1.0.5" - -resolve@^1.10.0: - version "1.15.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" - integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.18.1: +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.3.2: version "1.19.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== @@ -9452,7 +9678,7 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -9557,10 +9783,10 @@ semver-diff@^3.1.1: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@7.x, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2: - version "7.3.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" - integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== +semver@7.x, semver@^7.1.1, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" @@ -9724,6 +9950,13 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +slice-ansi@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== + dependencies: + is-fullwidth-code-point "^2.0.0" + slice-ansi@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" @@ -9738,6 +9971,11 @@ slide@~1.1.3: resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= +smart-buffer@^4.0.2: + version "4.1.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" + integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== + smoothscroll-polyfill@^0.3.6: version "0.3.6" resolved "https://registry.yarnpkg.com/smoothscroll-polyfill/-/smoothscroll-polyfill-0.3.6.tgz#492be845195157cdc2fc529a95d89e7a71509172" @@ -10040,6 +10278,14 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" +string-width@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + string-width@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" @@ -10146,10 +10392,17 @@ strip-ansi@^3.0.0: dependencies: ansi-regex "^2.0.0" +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + strip-ansi@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + version "5.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.1.0.tgz#55aaa54e33b4c0649a7338a43437b1887d153ec4" + integrity sha512-TjxrkPONqO2Z8QDCpeE2j6n0M6EwxzyDgzEeGp+FbdvaJAt//ClYi6W5my+3ROlC/hZX2KACUwDfK49Ka5eDvg== dependencies: ansi-regex "^4.1.0" @@ -10217,7 +10470,7 @@ style-loader@^0.21.0: loader-utils "^1.1.0" schema-utils "^0.4.5" -sumchecker@^3.0.0, sumchecker@^3.0.1: +sumchecker@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42" integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg== @@ -10340,13 +10593,13 @@ teeny-request@6.0.1: stream-events "^1.0.5" uuid "^3.3.2" -temp-file@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.3.7.tgz#686885d635f872748e384e871855958470aeb18a" - integrity sha512-9tBJKt7GZAQt/Rg0QzVWA8Am8c1EFl+CAv04/aBVqlx5oyfQ508sFIABshQ0xbZu6mBrFLWIUXO/bbLYghW70g== +temp-file@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.4.0.tgz#766ea28911c683996c248ef1a20eea04d51652c7" + integrity sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg== dependencies: async-exit-hook "^2.0.1" - fs-extra "^8.1.0" + fs-extra "^10.0.0" temp@^0.9.0: version "0.9.1" @@ -10355,11 +10608,6 @@ temp@^0.9.0: dependencies: rimraf "~2.6.2" -term-size@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753" - integrity sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw== - terminal-link@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" @@ -10442,6 +10690,11 @@ timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" +tiny-each-async@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/tiny-each-async/-/tiny-each-async-2.0.3.tgz#8ebbbfd6d6295f1370003fbb37162afe5a0a51d1" + integrity sha1-jru/1tYpXxNwAD+7NxYq/loKUdE= + tmp-promise@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-1.0.5.tgz#3208d7fa44758f86a2a4c4060f3c33fea30e8038" @@ -10450,6 +10703,13 @@ tmp-promise@^1.0.5: bluebird "^3.5.0" tmp "0.0.33" +tmp-promise@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-3.0.2.tgz#6e933782abff8b00c3119d63589ca1fb9caaa62a" + integrity sha512-OyCLAKU1HzBjL6Ev3gxUeraJNlbNingmi8IrHHEsYH8LTmEuhvYfqvhn2F/je+mjf4N58UmZ96OMEy1JanSCpA== + dependencies: + tmp "^0.2.0" + tmp@0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -10457,6 +10717,13 @@ tmp@0.0.33: dependencies: os-tmpdir "~1.0.2" +tmp@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" @@ -10757,6 +11024,11 @@ type-fest@^0.13.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + type-fest@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" @@ -10882,6 +11154,11 @@ universalify@^1.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -10900,22 +11177,23 @@ upath@^1.1.1: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -update-notifier@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.0.tgz#4866b98c3bc5b5473c020b1250583628f9a328f3" - integrity sha512-w3doE1qtI0/ZmgeoDoARmI5fjDoT93IfKgEGqm26dGUOh8oNpaSTsGNdYRN/SjOuo10jcJGwkEL3mroKzktkew== +update-notifier@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" + integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== dependencies: - boxen "^4.2.0" - chalk "^3.0.0" + boxen "^5.0.0" + chalk "^4.1.0" configstore "^5.0.1" has-yarn "^2.1.0" import-lazy "^2.1.0" is-ci "^2.0.0" - is-installed-globally "^0.3.1" - is-npm "^4.0.0" + is-installed-globally "^0.4.0" + is-npm "^5.0.0" is-yarn-global "^0.3.0" - latest-version "^5.0.0" - pupa "^2.0.1" + latest-version "^5.1.0" + pupa "^2.1.1" + semver "^7.3.4" semver-diff "^3.1.1" xdg-basedir "^4.0.0" @@ -11086,7 +11364,7 @@ vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= -verror@1.10.0: +verror@1.10.0, verror@^1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= @@ -11475,6 +11753,15 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -11590,6 +11877,11 @@ y18n@^4.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== +y18n@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" + integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== + yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" @@ -11605,7 +11897,14 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@20.x: +yaml@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.4.0.tgz#b729a3ef7e35bdc5ece8f28900e20a9b41510fc3" + integrity sha512-rzU83hGJrNgyT7OE2mP/SILeZxEMRJ0mza0n4KFtkNL1aXUZ79ZgZ5pIH56yT6LiqujcAs/Rqzp0ApvvNYfUfw== + dependencies: + "@babel/runtime" "^7.3.4" + +yargs-parser@20.x, yargs-parser@^20.0.0, yargs-parser@^20.2.2: version "20.2.4" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== @@ -11618,12 +11917,7 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^19.0.1: - version "19.0.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-19.0.4.tgz#99183a3a59268b205c6b04177f2a5bfb46e79ba7" - integrity sha512-eXeQm7yXRjPFFyf1voPkZgXQZJjYfjgQUmGPbD2TLtZeIYzvacgWX7sQ5a1HsRgVP+pfKAkRZDNtTGev4h9vhw== - -yargs@^15.3.1, yargs@^15.4.1: +yargs@^15.0.1, yargs@^15.4.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== @@ -11640,6 +11934,32 @@ yargs@^15.3.1, yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" +yargs@^16.0.2: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^17.0.1: + version "17.0.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.0.1.tgz#6a1ced4ed5ee0b388010ba9fd67af83b9362e0bb" + integrity sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + yauzl@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"