From 35a3034266cebc12fab630fbd134b240c56c3240 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Tue, 20 Nov 2018 15:35:16 -0400
Subject: [PATCH 01/97] update documentation and README for Linux support

---
 .github/ISSUE_TEMPLATE/installation-issue.md |  21 +++
 README.md                                    |  99 ++++++------
 docs/installation.md                         |  27 ++++
 docs/process/publishing-linux-releases.md    | 154 +++++++++++++++++++
 4 files changed, 249 insertions(+), 52 deletions(-)
 create mode 100644 .github/ISSUE_TEMPLATE/installation-issue.md
 create mode 100644 docs/process/publishing-linux-releases.md

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/README.md b/README.md
index 006b2c5f32d..1cb904c65f7 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](https://desktop.github.com/) is an open source [Electron](https://www.electronjs.org/)-based
 GitHub app. It is written in [TypeScript](https://www.typescriptlang.org) and
@@ -16,78 +18,71 @@ uses [React](https://reactjs.org/).
   />
 </picture>
 
-## Where can I get it?
-
-Download the official installer for your operating system:
-
- - [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)
-
-Linux is not officially supported; however, you can find installers created for Linux from a fork of GitHub Desktop in the [Community Releases](https://github.com/desktop/desktop#community-releases) section.
-
-### Beta Channel
-
-Want to test out new features and get fixes before everyone else? Install the
-beta channel to get access to early builds of Desktop:
+## What is this repository for?
 
- - [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)
+This repository contains specific patches on top of the upstream
+`desktop/desktop` repository to support Linux usage.
 
-The release notes for the latest beta versions are available [here](https://desktop.github.com/release-notes/?env=beta).
+It also hosts preview packages for various Linux distributions:
 
-### Community Releases
+ - AppImage (`.AppImage`)
+ - Debian (`.deb`)
+ - RPM (`.rpm`)
 
-There are several community-supported package managers that can be used to
-install GitHub Desktop:
- - Windows users can install using [winget](https://docs.microsoft.com/en-us/windows/package-manager/winget/) `c:\> winget install github-desktop` or [Chocolatey](https://chocolatey.org/) `c:\> choco install github-desktop`
- - macOS users can install using [Homebrew](https://brew.sh/) package manager:
-      `$ brew install --cask github`
+Check out the [latest releases](https://github.com/shiftkey/desktop/releases) to
+help out with testing on your distribution.
 
-Installers for various Linux distributions can be found on the
-[`shiftkey/desktop`](https://github.com/shiftkey/desktop) fork.
+## packagecloud
 
-## Is GitHub Desktop right for me? What are the primary areas of focus?
+We are trialing using [PackageCloud](https://packagecloud.io/) for distributing
+the installers for Debian and RPM-based distributions.
 
-[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.
+### Debian/Ubuntu distributions
 
-## I have a problem with GitHub Desktop
+To setup the package repository, run these commands:
 
-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.
+```
+$ wget -qO - https://packagecloud.io/shiftkey/desktop/gpgkey | sudo apt-key add -
+$ 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
+```
 
-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).
+Then 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.
+```
+$ sudo apt 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.
+### Red Hat/CentOS/Fedora distributions
 
-## The issue I reported isn't fixed yet. What can I do?
+To setup the package repository, run these commands:
 
-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.
+```
+$ 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'
+```
 
-## How can I contribute to GitHub Desktop?
+Then install GitHub Desktop:
 
-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.
+```
+# if yum is your package manager
+$ sudo yum install github-desktop
+# if dnf is your package manager
+$ sudo dnf install github-desktop
+```
 
-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.
+## Other Distributions
 
-## Building Desktop
+Arch Linux users can install GitHub Desktop from the
+[AUR](https://aur.archlinux.org/packages/github-desktop-bin/).
 
-To setup your development environment for building Desktop, check out: [`setup.md`](./docs/contributing/setup.md).
+`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.
 
-## 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.
 
 See our [getting started documentation](https://docs.github.com/en/desktop/installing-and-configuring-github-desktop/overview/getting-started-with-github-desktop) for more information on how to set up, authenticate, and configure GitHub Desktop.
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/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.

From 0d0cbd728d6d9235f9979f645695c3e0bfaab363 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Thu, 1 Nov 2018 18:06:04 -0300
Subject: [PATCH 02/97] improvements to electron-builder config

---
 app/package.json                  |  2 +-
 package.json                      |  4 +-
 script/dist-info.ts               |  2 +-
 script/electron-builder-linux.yml | 40 ++++++++++++++
 script/package.ts                 | 86 +++++++++++++++++++++++++++++++
 yarn.lock                         | 39 +++++++++++++-
 6 files changed, 168 insertions(+), 5 deletions(-)
 create mode 100644 script/electron-builder-linux.yml

diff --git a/app/package.json b/app/package.json
index 2fcf06d4ba9..eaf5d6cca64 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.",
diff --git a/package.json b/package.json
index 91ec49fe380..1444ff23cdc 100644
--- a/package.json
+++ b/package.json
@@ -108,7 +108,9 @@
     "webpack-dev-middleware": "^5.3.1",
     "webpack-hot-middleware": "^2.25.1",
     "webpack-merge": "^5.8.0",
-    "xml2js": "^0.5.0"
+    "xml2js": "^0.5.0",
+    "xvfb-maybe": "^0.2.1",
+    "yaml": "^1.4.0"
   },
   "devDependencies": {
     "@github/markdownlint-github": "^0.1.0",
diff --git a/script/dist-info.ts b/script/dist-info.ts
index e2ae688d55d..88a0bcbd4b4 100644
--- a/script/dist-info.ts
+++ b/script/dist-info.ts
@@ -25,7 +25,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
new file mode 100644
index 00000000000..cbf97eafa99
--- /dev/null
+++ b/script/electron-builder-linux.yml
@@ -0,0 +1,40 @@
+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
+  target:
+    - deb
+    - rpm
+    - AppImage
+  maintainer: 'GitHub, Inc <opensource+desktop@github.com>'
+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
+    - gnome-keyring
+rpm:
+  depends:
+    # default Electron dependencies
+    - libXScrnSaver
+    - libappindicator
+    - libnotify
+    # dugite-native dependencies
+    - libcurl
+    # keytar dependencies
+    - libsecret
+    - gnome-keyring
diff --git a/script/package.ts b/script/package.ts
index 23093146bd6..5017f9a06c2 100644
--- a/script/package.ts
+++ b/script/package.ts
@@ -1,8 +1,14 @@
 /* eslint-disable no-sync */
 
 import * as cp from 'child_process'
+import { createReadStream } from 'fs'
+import { writeFile } from 'fs/promises'
 import * as path from 'path'
 import * as electronInstaller from 'electron-winstaller'
+import * as crypto from 'crypto'
+
+import glob = require('glob')
+
 import { getProductName, getCompanyName } from '../app/package-info'
 import {
   getDistPath,
@@ -39,6 +45,8 @@ if (process.platform === 'darwin') {
   packageOSX()
 } else if (process.platform === 'win32') {
   packageWindows()
+} else if (process.platform === 'linux') {
+  packageLinux()
 } else {
   console.error(`I don't know how to package for ${process.platform} :(`)
   process.exit(1)
@@ -158,3 +166,81 @@ function packageWindows() {
       process.exit(1)
     })
 }
+
+function getSha256Checksum(fullPath: string): Promise<string> {
+  return new Promise<string>((resolve, reject) => {
+    const algo = 'sha256'
+    const shasum = crypto.createHash(algo)
+
+    const s = 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)
+    })
+  })
+}
+
+function generateChecksums() {
+  const distRoot = getDistRoot()
+
+  const installersPath = `${distRoot}/GitHubDesktop-linux-*`
+
+  glob(installersPath, async (error, files) => {
+    if (error != null) {
+      throw error
+    }
+
+    const checksums = new Map<string, string>()
+
+    for (const f of files) {
+      const checksum = await getSha256Checksum(f)
+      checksums.set(f, checksum)
+    }
+
+    let checksumsText = `Checksums: \n`
+
+    for (const [fullPath, checksum] of checksums) {
+      const fileName = path.basename(fullPath)
+      checksumsText += `${checksum} - ${fileName}\n`
+    }
+
+    const checksumFile = path.join(distRoot, 'checksums.txt')
+
+    await writeFile(checksumFile, checksumsText)
+  })
+}
+
+function packageLinux() {
+  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) {
+    throw error
+  }
+
+  generateChecksums()
+}
diff --git a/yarn.lock b/yarn.lock
index 798f59ba8ff..4602d399ceb 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -442,6 +442,13 @@
   dependencies:
     regenerator-runtime "^0.14.0"
 
+"@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.22.15":
   version "7.22.15"
   resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38"
@@ -6276,7 +6283,15 @@ js-queue@2.0.0:
   resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
   integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
 
-js-yaml@^3.10.0, js-yaml@^3.13.1:
+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.13.1:
   version "3.13.1"
   resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
   integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
@@ -7913,6 +7928,11 @@ reflect.getprototypeof@^1.0.4:
     globalthis "^1.0.3"
     which-builtin-type "^1.1.3"
 
+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==
+
 regenerator-runtime@^0.14.0:
   version "0.14.0"
   resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45"
@@ -9625,7 +9645,7 @@ which-typed-array@^1.1.9:
     gopd "^1.0.1"
     has-tostringtag "^1.0.0"
 
-which@^1.2.9:
+which@^1.2.4, which@^1.2.9:
   version "1.3.1"
   resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
   integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
@@ -9722,6 +9742,14 @@ xtend@^4.0.1:
   resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
   integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
 
+xvfb-maybe@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/xvfb-maybe/-/xvfb-maybe-0.2.1.tgz#ed8cb132957b7848b439984c66f010ea7f24361b"
+  integrity sha1-7YyxMpV7eEi0OZhMZvAQ6n8kNhs=
+  dependencies:
+    debug "^2.2.0"
+    which "^1.2.4"
+
 y18n@^5.0.5:
   version "5.0.8"
   resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
@@ -9742,6 +9770,13 @@ yallist@^4.0.0:
   resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
   integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
 
+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@^21.0.1, yargs-parser@^21.1.1:
   version "21.1.1"
   resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"

From 546602b543468464fe83363e7fa3878dd0e3afb2 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Fri, 19 Apr 2019 10:05:03 -0300
Subject: [PATCH 03/97] redirect in-app menu for reporting an issue to the fork
 (#141)

---
 app/src/main-process/menu/build-default-menu.ts | 16 ++--------------
 1 file changed, 2 insertions(+), 14 deletions(-)

diff --git a/app/src/main-process/menu/build-default-menu.ts b/app/src/main-process/menu/build-default-menu.ts
index 037364a0c13..82117a3b579 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, shell, app, BrowserWindow } from 'electron'
+import { Menu, shell, BrowserWindow } from 'electron'
 import { ensureItemIds } from './ensure-item-ids'
 import { MenuEvent } from './menu-event'
 import { truncateWithEllipsis } from '../../lib/truncate-with-ellipsis'
@@ -486,22 +486,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() {
@@ -540,7 +529,6 @@ export function buildDefaultMenu({
 
   const helpItems = [
     submitIssueItem,
-    contactSupportItem,
     showUserGuides,
     showKeyboardShortcuts,
     showLogsItem,

From 23530f3b9b2f79c88de513562dc01f81115404d7 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Thu, 30 May 2019 16:47:05 -0300
Subject: [PATCH 04/97] workaround for Linux users of the app to use it on very
 low resolution screens

---
 app/src/main-process/app-window.ts | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/app/src/main-process/app-window.ts b/app/src/main-process/app-window.ts
index e321e5662ec..9f6137ab7e9 100644
--- a/app/src/main-process/app-window.ts
+++ b/app/src/main-process/app-window.ts
@@ -76,6 +76,12 @@ export class AppWindow {
       windowOptions.frame = false
     } else if (__LINUX__) {
       windowOptions.icon = path.join(__dirname, 'static', 'icon-logo.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)

From 5e18f8cc63fccddcbe85fd55416c196b8223f17a Mon Sep 17 00:00:00 2001
From: jfgordon2 <55799997+jfgordon2@users.noreply.github.com>
Date: Sun, 29 Mar 2020 16:01:51 -0500
Subject: [PATCH 05/97] add CLI support to Debian package, add Elementary OS
 shell and editor support (#231)

---
 app/static/linux/github       | 28 ++++++++++++++++++++++++++++
 script/linux-after-install.sh | 33 +++++++++++++++++++++++++++++++++
 script/linux-after-remove.sh  | 23 +++++++++++++++++++++++
 3 files changed, 84 insertions(+)
 create mode 100644 app/static/linux/github
 create mode 100644 script/linux-after-install.sh
 create mode 100644 script/linux-after-remove.sh

diff --git a/app/static/linux/github b/app/static/linux/github
new file mode 100644
index 00000000000..dfb32bf6ea4
--- /dev/null
+++ b/app/static/linux/github
@@ -0,0 +1,28 @@
+#!/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"
+
+ELECTRON_RUN_AS_NODE=1 "$ELECTRON" "$CLI" "$@"
+
+exit $?
diff --git a/script/linux-after-install.sh b/script/linux-after-install.sh
new file mode 100644
index 00000000000..204b930b83d
--- /dev/null
+++ b/script/linux-after-install.sh
@@ -0,0 +1,33 @@
+#!/bin/bash
+
+set -e
+
+PROFILE_D_FILE="/etc/profile.d/github-desktop.sh"
+INSTALL_DIR="/opt/${productFilename}"
+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
\ No newline at end of file
diff --git a/script/linux-after-remove.sh b/script/linux-after-remove.sh
new file mode 100644
index 00000000000..64c0803dec3
--- /dev/null
+++ b/script/linux-after-remove.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+set -e
+
+PROFILE_D_FILE="/etc/profile.d/github-desktop.sh"
+
+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
+      unlink /usr/bin/github-desktop || :
+      unlink /usr/bin/github-desktop-dev || :
+      unlink /usr/bin/github || :
+    ;;
+
+    *)
+      echo "postrm called with unknown argument \`$1'" >&2
+      exit 1
+    ;;
+esac
+
+exit 0

From 921d89534aa1a15079fe2dc54735eb76e2b50862 Mon Sep 17 00:00:00 2001
From: jfgordon2 <55799997+jfgordon2@users.noreply.github.com>
Date: Mon, 30 Mar 2020 12:06:52 -0500
Subject: [PATCH 06/97] polish About modal for Linux build (#241)

Updated the "About GitHub Desktop" model to remove the button to check for updates (since it didn't do anything on Linux) and replace with a link to the linux releases page
---
 app/src/ui/about/about.tsx | 20 ++++++++++++++++++--
 app/src/ui/lib/releases.ts |  2 ++
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/app/src/ui/about/about.tsx b/app/src/ui/about/about.tsx
index 4c3d6df132a..3da23954011 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'
 import { isTopMostDialog } from '../dialog/is-top-most'
 import { isWindowsAndNoLongerSupportedByElectron } from '../../lib/get-os'
@@ -137,6 +137,17 @@ export class About extends React.Component<IAboutProps, IAboutState> {
       return null
     }
 
+    if (__LINUX__) {
+      const linuxReleaseLink = (
+        <LinkButton uri={LinuxReleasesUri}>View Releases</LinkButton>
+      )
+      return (
+        <Row>
+          <p className="no-padding">{linuxReleaseLink}</p>
+        </Row>
+      )
+    }
+
     const updateStatus = this.state.updateState.status
 
     switch (updateStatus) {
@@ -229,7 +240,12 @@ export class About extends React.Component<IAboutProps, IAboutState> {
 
   private renderUpdateDetails() {
     if (__LINUX__) {
-      return null
+      return (
+        <p>
+          Please visit the GitHub Desktop for Linux release page for
+          Linux-specific release notes and to download the latest version.
+        </p>
+      )
     }
 
     if (__RELEASE_CHANNEL__ === 'development') {
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/'

From 3d34c07150e3bdbd0e6d00b693d76cbd6459b392 Mon Sep 17 00:00:00 2001
From: jfgordon2 <55799997+jfgordon2@users.noreply.github.com>
Date: Mon, 30 Mar 2020 12:23:37 -0500
Subject: [PATCH 07/97] Detach CLI process from terminal (#239)

---
 app/static/linux/github | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/app/static/linux/github b/app/static/linux/github
index dfb32bf6ea4..0f7513eb244 100644
--- a/app/static/linux/github
+++ b/app/static/linux/github
@@ -23,6 +23,13 @@ fi
 ELECTRON="$GITHUB_PATH/$BINARY_NAME"
 CLI="$GITHUB_PATH/resources/app/cli.js"
 
-ELECTRON_RUN_AS_NODE=1 "$ELECTRON" "$CLI" "$@"
+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 $?

From a3004f06a7a1b1101f55e149550ab90f147407a1 Mon Sep 17 00:00:00 2001
From: Jeff Gordon <jeff@divvydose.com>
Date: Tue, 14 Apr 2020 05:02:06 -0500
Subject: [PATCH 08/97] Added test for symlinks

Reduce errors produced in terminal from debian package installations by testing for existence of symlink prior to executing unlink
---
 script/linux-after-remove.sh | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/script/linux-after-remove.sh b/script/linux-after-remove.sh
index 64c0803dec3..d85b3eb28e8 100644
--- a/script/linux-after-remove.sh
+++ b/script/linux-after-remove.sh
@@ -2,6 +2,7 @@
 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)
@@ -9,9 +10,9 @@ case "$1" in
       . "${PROFILE_D_FILE}";
       rm "${PROFILE_D_FILE}";
       # remove symbolic links in /usr/bin directory
-      unlink /usr/bin/github-desktop || :
-      unlink /usr/bin/github-desktop-dev || :
-      unlink /usr/bin/github || :
+      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
     ;;
 
     *)

From 01a9a1d7e3f6661d1b3671575d65f8b9f6261380 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Thu, 16 Apr 2020 13:43:46 -0300
Subject: [PATCH 09/97] set filemode for chrome-sandbox to reflect the
 permissions it needs (#254)

---
 script/package.ts | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/script/package.ts b/script/package.ts
index 5017f9a06c2..767189415b7 100644
--- a/script/package.ts
+++ b/script/package.ts
@@ -1,7 +1,7 @@
 /* eslint-disable no-sync */
 
 import * as cp from 'child_process'
-import { createReadStream } from 'fs'
+import { chmodSync, createReadStream } from 'fs'
 import { writeFile } from 'fs/promises'
 import * as path from 'path'
 import * as electronInstaller from 'electron-winstaller'
@@ -30,6 +30,7 @@ import { getVersion } from '../app/package-info'
 import { rename } from 'fs/promises'
 import { join } from 'path'
 import { assertNonNullable } from '../app/src/lib/fatal-error'
+import { pathExistsSync } from 'fs-extra'
 
 const distPath = getDistPath()
 const productName = getProductName()
@@ -217,6 +218,14 @@ function generateChecksums() {
 }
 
 function packageLinux() {
+  const helperPath = path.join(getDistPath(), 'chrome-sandbox')
+  const exists = pathExistsSync(helperPath)
+
+  if (exists) {
+    console.log('Updating file mode for chrome-sandbox…')
+    chmodSync(helperPath, 0o4755)
+  }
+
   const electronBuilder = path.resolve(
     __dirname,
     '..',

From e9116348bca6614e6bdb869102e5c4ec829d74bf Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Thu, 23 Apr 2020 14:05:20 -0300
Subject: [PATCH 10/97] move debian packaging out to dedicated step (#263)

---
 package.json                                  |   3 +
 script/electron-builder-linux.yml             |  17 --
 script/package-debian.ts                      | 105 ++++++++++
 script/package-electron-builder.ts            |  68 +++++++
 script/package.ts                             |  78 +++-----
 .../deb/postinst.sh}                          |   4 +-
 .../deb/postrm.sh}                            |   0
 yarn.lock                                     | 185 +++++++++++++++++-
 8 files changed, 385 insertions(+), 75 deletions(-)
 create mode 100644 script/package-debian.ts
 create mode 100644 script/package-electron-builder.ts
 rename script/{linux-after-install.sh => resources/deb/postinst.sh} (94%)
 mode change 100644 => 100755
 rename script/{linux-after-remove.sh => resources/deb/postrm.sh} (100%)
 mode change 100644 => 100755

diff --git a/package.json b/package.json
index 1444ff23cdc..5de0a137560 100644
--- a/package.json
+++ b/package.json
@@ -166,5 +166,8 @@
     "markdownlint-cli": "^0.32.2",
     "reserved-words": "^0.1.2",
     "tsconfig-paths": "^3.9.0"
+  },
+  "optionalDependencies": {
+    "electron-installer-debian": "3.0.0"
   }
 }
diff --git a/script/electron-builder-linux.yml b/script/electron-builder-linux.yml
index cbf97eafa99..c034288add1 100644
--- a/script/electron-builder-linux.yml
+++ b/script/electron-builder-linux.yml
@@ -7,26 +7,9 @@ linux:
     - x-scheme-handler/x-github-client
     - x-scheme-handler/x-github-desktop-auth
   target:
-    - deb
     - rpm
     - AppImage
   maintainer: 'GitHub, Inc <opensource+desktop@github.com>'
-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
-    - gnome-keyring
 rpm:
   depends:
     # default Electron dependencies
diff --git a/script/package-debian.ts b/script/package-debian.ts
new file mode 100644
index 00000000000..b6df4eb96f3
--- /dev/null
+++ b/script/package-debian.ts
@@ -0,0 +1,105 @@
+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<string>
+  section?: string
+  priority?: 'required' | 'important' | 'standard' | 'optional' | 'extra'
+  homepage?: string
+  icon?: any
+  scripts?: {
+    preinst?: string
+    postinst?: string
+    prerm?: string
+    postrm?: string
+  }
+  mimeType?: Array<string>
+  maintainer?: string
+  depends?: Array<string>
+}
+
+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: [
+    // additional core dependencies - are these still needed?
+    'gconf2',
+    'gconf-service',
+    'libappindicator1',
+    // Desktop-specific dependencies
+    'libcurl3 | libcurl4',
+    'libsecret-1-0',
+    'gnome-keyring',
+  ],
+  icon: {
+    '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 <github@brendanforster.com>',
+}
+
+export async function packageDebian(): Promise<string> {
+  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..daba1973377
--- /dev/null
+++ b/script/package-electron-builder.ts
@@ -0,0 +1,68 @@
+/* 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<Array<string>> {
+  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`
+
+  let 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]
+
+  const rpmInstaller = `${distRoot}/GitHubDesktop-linux-*.rpm`
+
+  files = await globPromise(rpmInstaller)
+  if (files.length !== 1) {
+    return Promise.reject(
+      `Expected one RPM installer but instead found '${files.join(
+        ', '
+      )}' - exiting...`
+    )
+  }
+
+  const rpmInstallerPath = files[0]
+
+  return Promise.resolve([appImageInstallerPath, rpmInstallerPath])
+}
diff --git a/script/package.ts b/script/package.ts
index 767189415b7..72cfadafa60 100644
--- a/script/package.ts
+++ b/script/package.ts
@@ -1,14 +1,13 @@
 /* eslint-disable no-sync */
 
 import * as cp from 'child_process'
-import { chmodSync, createReadStream } from 'fs'
+import { createReadStream } from 'fs'
 import { writeFile } from 'fs/promises'
+import { pathExists, chmod } from 'fs-extra'
 import * as path from 'path'
 import * as electronInstaller from 'electron-winstaller'
 import * as crypto from 'crypto'
 
-import glob = require('glob')
-
 import { getProductName, getCompanyName } from '../app/package-info'
 import {
   getDistPath,
@@ -30,7 +29,9 @@ import { getVersion } from '../app/package-info'
 import { rename } from 'fs/promises'
 import { join } from 'path'
 import { assertNonNullable } from '../app/src/lib/fatal-error'
-import { pathExistsSync } from 'fs-extra'
+
+import { packageElectronBuilder } from './package-electron-builder'
+import { packageDebian } from './package-debian'
 
 const distPath = getDistPath()
 const productName = getProductName()
@@ -187,69 +188,46 @@ function getSha256Checksum(fullPath: string): Promise<string> {
   })
 }
 
-function generateChecksums() {
+async function generateChecksums(files: Array<string>) {
   const distRoot = getDistRoot()
 
-  const installersPath = `${distRoot}/GitHubDesktop-linux-*`
-
-  glob(installersPath, async (error, files) => {
-    if (error != null) {
-      throw error
-    }
-
-    const checksums = new Map<string, string>()
+  const checksums = new Map<string, string>()
 
-    for (const f of files) {
-      const checksum = await getSha256Checksum(f)
-      checksums.set(f, checksum)
-    }
+  for (const f of files) {
+    const checksum = await getSha256Checksum(f)
+    checksums.set(f, checksum)
+  }
 
-    let checksumsText = `Checksums: \n`
+  let checksumsText = `Checksums: \n`
 
-    for (const [fullPath, checksum] of checksums) {
-      const fileName = path.basename(fullPath)
-      checksumsText += `${checksum} - ${fileName}\n`
-    }
+  for (const [fullPath, checksum] of checksums) {
+    const fileName = path.basename(fullPath)
+    checksumsText += `${checksum} - ${fileName}\n`
+  }
 
-    const checksumFile = path.join(distRoot, 'checksums.txt')
+  const checksumFile = path.join(distRoot, 'checksums.txt')
 
-    await writeFile(checksumFile, checksumsText)
-  })
+  await writeFile(checksumFile, checksumsText)
 }
 
-function packageLinux() {
+async function packageLinux() {
   const helperPath = path.join(getDistPath(), 'chrome-sandbox')
-  const exists = pathExistsSync(helperPath)
+  const exists = await pathExists(helperPath)
 
   if (exists) {
     console.log('Updating file mode for chrome-sandbox…')
-    chmodSync(helperPath, 0o4755)
+    await chmod(helperPath, 0o4755)
   }
 
-  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 files = await packageElectronBuilder()
+  const debianPackage = await packageDebian()
 
-  const { error } = cp.spawnSync(electronBuilder, args, { stdio: 'inherit' })
+  const installers = [...files, debianPackage]
 
-  if (error != null) {
-    throw error
+  console.log(`Installers created:`)
+  for (const installer of installers) {
+    console.log(` - ${installer}`)
   }
 
-  generateChecksums()
+  generateChecksums(installers)
 }
diff --git a/script/linux-after-install.sh b/script/resources/deb/postinst.sh
old mode 100644
new mode 100755
similarity index 94%
rename from script/linux-after-install.sh
rename to script/resources/deb/postinst.sh
index 204b930b83d..79081967042
--- a/script/linux-after-install.sh
+++ b/script/resources/deb/postinst.sh
@@ -3,7 +3,7 @@
 set -e
 
 PROFILE_D_FILE="/etc/profile.d/github-desktop.sh"
-INSTALL_DIR="/opt/${productFilename}"
+INSTALL_DIR="/usr/lib/github-desktop"
 CLI_DIR="$INSTALL_DIR/resources/app/static"
 
 case "$1" in
@@ -30,4 +30,4 @@ case "$1" in
     ;;
 esac
 
-exit 0
\ No newline at end of file
+exit 0
diff --git a/script/linux-after-remove.sh b/script/resources/deb/postrm.sh
old mode 100644
new mode 100755
similarity index 100%
rename from script/linux-after-remove.sh
rename to script/resources/deb/postrm.sh
diff --git a/yarn.lock b/yarn.lock
index 4602d399ceb..abad00e1c6b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -969,6 +969,13 @@
     "@jridgewell/resolve-uri" "^3.0.3"
     "@jridgewell/sourcemap-codec" "^1.4.10"
 
+"@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"
@@ -2854,7 +2861,7 @@ camel-case@^4.1.2:
     pascal-case "^3.1.2"
     tslib "^2.0.3"
 
-camelcase@^5.3.1:
+camelcase@^5.0.0, 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==
@@ -2975,6 +2982,15 @@ clean-css@^5.2.2:
   dependencies:
     source-map "~0.6.0"
 
+cliui@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
+  integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
+  dependencies:
+    string-width "^4.2.0"
+    strip-ansi "^6.0.0"
+    wrap-ansi "^6.2.0"
+
 cliui@^8.0.1:
   version "8.0.1"
   resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa"
@@ -3175,7 +3191,16 @@ cross-spawn@^5.1.0:
     shebang-command "^1.2.0"
     which "^1.2.9"
 
-cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
+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"
+
+cross-spawn@^7.0.2, cross-spawn@^7.0.3:
   version "7.0.3"
   resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
   integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
@@ -3286,6 +3311,11 @@ debuglog@^1.0.1:
   resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
   integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=
 
+decamelize@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+  integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==
+
 decimal.js@^10.4.2:
   version "10.4.3"
   resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23"
@@ -3564,6 +3594,34 @@ ee-first@1.1.1:
   resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
   integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
 
+electron-installer-common@^0.10.0:
+  version "0.10.1"
+  resolved "https://registry.yarnpkg.com/electron-installer-common/-/electron-installer-common-0.10.1.tgz#42738f140c15270758681ac3f32039430b9fc023"
+  integrity sha512-d9gEXhfSSyMn8mkFNdbUdkqdLkxVZ8nO3NDso3nuSnG1+wy7cJuuCjutwR4+zsXdQuNFC1n/DxpTk4pBLZSCTQ==
+  dependencies:
+    "@malept/cross-spawn-promise" "^1.0.0"
+    asar "^2.0.1"
+    debug "^4.1.1"
+    fs-extra "^8.0.1"
+    glob "^7.1.4"
+    lodash "^4.17.15"
+    parse-author "^2.0.0"
+    semver "^7.1.1"
+    tmp-promise "^2.0.1"
+
+electron-installer-debian@3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/electron-installer-debian/-/electron-installer-debian-3.0.0.tgz#abd76db8e89bc1ba1e5366975a941461dda06e6d"
+  integrity sha512-91iiicfK5hq6D6Xit7SFCN2GpccFBQbZB1JpYaxFdaueEjM/1hSULtCPf4e5w/2vQKZ73AfBZrxxIJqO3DhGPw==
+  dependencies:
+    debug "^4.1.1"
+    electron-installer-common "^0.10.0"
+    fs-extra "^8.0.1"
+    get-folder-size "^2.0.1"
+    lodash "^4.17.4"
+    word-wrap "^1.2.3"
+    yargs "^15.0.1"
+
 electron-packager@^17.1.1:
   version "17.1.1"
   resolved "https://registry.yarnpkg.com/electron-packager/-/electron-packager-17.1.1.tgz#f156fc63d3a66f4e902e4b42992550a172982d59"
@@ -4652,7 +4710,7 @@ fs-extra@^7.0.1:
     jsonfile "^4.0.0"
     universalify "^0.1.0"
 
-fs-extra@^8.1.0:
+fs-extra@^8.0.1, fs-extra@^8.1.0:
   version "8.1.0"
   resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
   integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
@@ -4744,16 +4802,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.2:
   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.5:
+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-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
@@ -6703,11 +6774,16 @@ lodash.upperfirst@4.3.1:
   resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce"
   integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==
 
-lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21:
+lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4:
   version "4.17.21"
   resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
   integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
 
+lodash@^4.17.19:
+  version "4.17.19"
+  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
+  integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
+
 loose-envify@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
@@ -8014,6 +8090,11 @@ require-from-string@^2.0.2:
   resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
   integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
 
+require-main-filename@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
+  integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
+
 requires-port@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
@@ -8110,6 +8191,13 @@ rimraf@^2.5.2:
   dependencies:
     glob "^7.0.5"
 
+rimraf@^2.6.3:
+  version "2.7.1"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+  integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+  dependencies:
+    glob "^7.1.3"
+
 rimraf@^3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
@@ -8265,13 +8353,25 @@ semver@^6.3.1:
   resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
   integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
 
-semver@^7.1.3, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.5.0:
+semver@^7.1.1:
+  version "7.1.3"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-7.1.3.tgz#e4345ce73071c53f336445cfc19efb1c311df2a6"
+  integrity sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA==
+
+semver@^7.1.3, semver@^7.3.2, semver@^7.5.0:
   version "7.5.0"
   resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.0.tgz#ed8c5dc8efb6c629c88b23d41dc9bf40c1d96cd0"
   integrity sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==
   dependencies:
     lru-cache "^6.0.0"
 
+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"
+
 semver@^7.3.7, semver@^7.5.3, semver@^7.5.4:
   version "7.5.4"
   resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
@@ -8322,6 +8422,11 @@ serve-static@1.14.2:
     parseurl "~1.3.3"
     send "0.17.2"
 
+set-blocking@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+  integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
+
 set-function-length@^1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed"
@@ -8931,6 +9036,11 @@ text-table@^0.2.0:
   resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
   integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
 
+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=
+
 titleize@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53"
@@ -8944,6 +9054,13 @@ tmp-promise@^1.0.5:
     bluebird "^3.5.0"
     tmp "0.0.33"
 
+tmp-promise@^2.0.1:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-2.0.2.tgz#ee605edb10f100954be5dd8b9dbe1bfd56194202"
+  integrity sha512-zl71nFWjPKW2KXs+73gEk8RmqvtAeXPxhWDkTUoa3MSMkjq3I+9OeknjF178MQoMYsdqL730hfzvNfEkePxq9Q==
+  dependencies:
+    tmp "0.1.0"
+
 tmp@0.0.33:
   version "0.0.33"
   resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
@@ -8951,6 +9068,13 @@ tmp@0.0.33:
   dependencies:
     os-tmpdir "~1.0.2"
 
+tmp@0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877"
+  integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==
+  dependencies:
+    rimraf "^2.6.3"
+
 tmpl@1.0.5:
   version "1.0.5"
   resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
@@ -9623,6 +9747,11 @@ which-collection@^1.0.1:
     is-weakmap "^2.0.1"
     is-weakset "^2.0.1"
 
+which-module@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409"
+  integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==
+
 which-typed-array@^1.1.11:
   version "1.1.11"
   resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a"
@@ -9669,6 +9798,11 @@ window-location-origin@^0.1.0:
   resolved "https://registry.yarnpkg.com/window-location-origin/-/window-location-origin-0.1.0.tgz#e0a0b3cbe8802c4966b358f859315355d3a15e04"
   integrity sha1-4KCzy+iALElms1j4WTFTVdOhXgQ=
 
+word-wrap@^1.2.3:
+  version "1.2.5"
+  resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
+  integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
+
 worker-farm@^1.3.1:
   version "1.5.1"
   resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.1.tgz#8e9f4a7da4f3c595aa600903051b969390423fa1"
@@ -9677,6 +9811,15 @@ worker-farm@^1.3.1:
     errno "^0.1.4"
     xtend "^4.0.1"
 
+wrap-ansi@^6.2.0:
+  version "6.2.0"
+  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
+  integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
+  dependencies:
+    ansi-styles "^4.0.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"
@@ -9750,6 +9893,11 @@ xvfb-maybe@^0.2.1:
     debug "^2.2.0"
     which "^1.2.4"
 
+y18n@^4.0.0:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf"
+  integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==
+
 y18n@^5.0.5:
   version "5.0.8"
   resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
@@ -9777,11 +9925,36 @@ yaml@^1.4.0:
   dependencies:
     "@babel/runtime" "^7.3.4"
 
+yargs-parser@^18.1.1:
+  version "18.1.2"
+  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.2.tgz#2f482bea2136dbde0861683abea7756d30b504f1"
+  integrity sha512-hlIPNR3IzC1YuL1c2UwwDKpXlNFBqD1Fswwh1khz5+d8Cq/8yc/Mn0i+rQXduu8hcrFKvO7Eryk+09NecTQAAQ==
+  dependencies:
+    camelcase "^5.0.0"
+    decamelize "^1.2.0"
+
 yargs-parser@^21.0.1, yargs-parser@^21.1.1:
   version "21.1.1"
   resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
   integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
 
+yargs@^15.0.1:
+  version "15.3.1"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b"
+  integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==
+  dependencies:
+    cliui "^6.0.0"
+    decamelize "^1.2.0"
+    find-up "^4.1.0"
+    get-caller-file "^2.0.1"
+    require-directory "^2.1.1"
+    require-main-filename "^2.0.0"
+    set-blocking "^2.0.0"
+    string-width "^4.2.0"
+    which-module "^2.0.0"
+    y18n "^4.0.0"
+    yargs-parser "^18.1.1"
+
 yargs@^17.3.1:
   version "17.7.2"
   resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"

From 5d6221900bdb4d76cf8a6cdd0aef2036802c8a0b Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Sun, 17 May 2020 14:42:40 -0300
Subject: [PATCH 11/97] move redhat packaging out to own step (#273)

---
 package.json                       |   3 +-
 script/electron-builder-linux.yml  |   1 -
 script/package-electron-builder.ts |  17 +----
 script/package-redhat.ts           | 102 +++++++++++++++++++++++++++++
 script/package.ts                  |  22 ++++---
 script/resources/rpm/post.sh       |  12 ++++
 script/resources/rpm/preun.sh      |   8 +++
 yarn.lock                          |  29 ++++++++
 8 files changed, 169 insertions(+), 25 deletions(-)
 create mode 100644 script/package-redhat.ts
 create mode 100755 script/resources/rpm/post.sh
 create mode 100755 script/resources/rpm/preun.sh

diff --git a/package.json b/package.json
index 5de0a137560..84eb6a0946c 100644
--- a/package.json
+++ b/package.json
@@ -168,6 +168,7 @@
     "tsconfig-paths": "^3.9.0"
   },
   "optionalDependencies": {
-    "electron-installer-debian": "3.0.0"
+    "electron-installer-debian": "3.0.0",
+    "electron-installer-redhat": "3.0.0"
   }
 }
diff --git a/script/electron-builder-linux.yml b/script/electron-builder-linux.yml
index c034288add1..4243b4961b3 100644
--- a/script/electron-builder-linux.yml
+++ b/script/electron-builder-linux.yml
@@ -7,7 +7,6 @@ linux:
     - x-scheme-handler/x-github-client
     - x-scheme-handler/x-github-desktop-auth
   target:
-    - rpm
     - AppImage
   maintainer: 'GitHub, Inc <opensource+desktop@github.com>'
 rpm:
diff --git a/script/package-electron-builder.ts b/script/package-electron-builder.ts
index daba1973377..7b26f48b2b5 100644
--- a/script/package-electron-builder.ts
+++ b/script/package-electron-builder.ts
@@ -40,7 +40,7 @@ export async function packageElectronBuilder(): Promise<Array<string>> {
 
   const appImageInstaller = `${distRoot}/GitHubDesktop-linux-*.AppImage`
 
-  let files = await globPromise(appImageInstaller)
+  const files = await globPromise(appImageInstaller)
   if (files.length !== 1) {
     return Promise.reject(
       `Expected one AppImage installer but instead found '${files.join(
@@ -51,18 +51,5 @@ export async function packageElectronBuilder(): Promise<Array<string>> {
 
   const appImageInstallerPath = files[0]
 
-  const rpmInstaller = `${distRoot}/GitHubDesktop-linux-*.rpm`
-
-  files = await globPromise(rpmInstaller)
-  if (files.length !== 1) {
-    return Promise.reject(
-      `Expected one RPM installer but instead found '${files.join(
-        ', '
-      )}' - exiting...`
-    )
-  }
-
-  const rpmInstallerPath = files[0]
-
-  return Promise.resolve([appImageInstallerPath, rpmInstallerPath])
+  return Promise.resolve([appImageInstallerPath])
 }
diff --git a/script/package-redhat.ts b/script/package-redhat.ts
new file mode 100644
index 00000000000..4903be3811d
--- /dev/null
+++ b/script/package-redhat.ts
@@ -0,0 +1,102 @@
+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<string>
+  icon?: any
+  scripts?: {
+    pre?: string
+    post?: string
+    preun?: string
+    postun?: string
+  }
+  homepage?: string
+  mimeType?: Array<string>
+  requires?: Array<string>
+}
+
+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: [
+    // default Electron dependencies
+    'libXScrnSaver',
+    'libappindicator',
+    'libX11-xcb',
+    'alsa-lib',
+    // dugite-native dependencies
+    'libcurl',
+    // keytar dependencies
+    'libsecret',
+    'gnome-keyring',
+  ],
+  icon: {
+    '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<string> {
+  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 72cfadafa60..26a54dd8484 100644
--- a/script/package.ts
+++ b/script/package.ts
@@ -32,6 +32,7 @@ import { assertNonNullable } from '../app/src/lib/fatal-error'
 
 import { packageElectronBuilder } from './package-electron-builder'
 import { packageDebian } from './package-debian'
+import { packageRedhat } from './package-redhat'
 
 const distPath = getDistPath()
 const productName = getProductName()
@@ -218,16 +219,21 @@ async function packageLinux() {
     console.log('Updating file mode for chrome-sandbox…')
     await chmod(helperPath, 0o4755)
   }
+  try {
+    const files = await packageElectronBuilder()
+    const debianPackage = await packageDebian()
+    const redhatPackage = await packageRedhat()
 
-  const files = await packageElectronBuilder()
-  const debianPackage = await packageDebian()
+    const installers = [...files, debianPackage, redhatPackage]
 
-  const installers = [...files, debianPackage]
+    console.log(`Installers created:`)
+    for (const installer of installers) {
+      console.log(` - ${installer}`)
+    }
 
-  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)
   }
-
-  generateChecksums(installers)
 }
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 abad00e1c6b..ffc2be4ce9d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3622,6 +3622,18 @@ electron-installer-debian@3.0.0:
     word-wrap "^1.2.3"
     yargs "^15.0.1"
 
+electron-installer-redhat@3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/electron-installer-redhat/-/electron-installer-redhat-3.0.0.tgz#0a066eb9f9b3e691d58c2b41eea1055e8d5ffa92"
+  integrity sha512-BtYh174AOIGq0iDges4/fihqJYw8WsWXRKuRpKvUlkqrwfeGMWqln28+kKV5IW6GPfHjRFeCO5dcMUioUDBo1A==
+  dependencies:
+    debug "^4.1.1"
+    electron-installer-common "^0.10.0"
+    fs-extra "^8.1.0"
+    lodash "^4.17.15"
+    word-wrap "^1.2.3"
+    yargs "^15.1.0"
+
 electron-packager@^17.1.1:
   version "17.1.1"
   resolved "https://registry.yarnpkg.com/electron-packager/-/electron-packager-17.1.1.tgz#f156fc63d3a66f4e902e4b42992550a172982d59"
@@ -9955,6 +9967,23 @@ yargs@^15.0.1:
     y18n "^4.0.0"
     yargs-parser "^18.1.1"
 
+yargs@^15.1.0:
+  version "15.4.1"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
+  integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
+  dependencies:
+    cliui "^6.0.0"
+    decamelize "^1.2.0"
+    find-up "^4.1.0"
+    get-caller-file "^2.0.1"
+    require-directory "^2.1.1"
+    require-main-filename "^2.0.0"
+    set-blocking "^2.0.0"
+    string-width "^4.2.0"
+    which-module "^2.0.0"
+    y18n "^4.0.0"
+    yargs-parser "^18.1.2"
+
 yargs@^17.3.1:
   version "17.7.2"
   resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"

From c93caef4088bd1c25224c937a7f428602956b097 Mon Sep 17 00:00:00 2001
From: Lukas Neubert <40118727+Serkonda@users.noreply.github.com>
Date: Sat, 30 May 2020 22:14:50 +0200
Subject: [PATCH 12/97] readme: add language property to code blocks (#287)

---
 README.md | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index 1cb904c65f7..355c3a1899b 100644
--- a/README.md
+++ b/README.md
@@ -41,7 +41,7 @@ the installers for Debian and RPM-based distributions.
 
 To setup the package repository, run these commands:
 
-```
+```sh
 $ wget -qO - https://packagecloud.io/shiftkey/desktop/gpgkey | sudo apt-key add -
 $ 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
@@ -49,7 +49,7 @@ $ sudo apt-get update
 
 Then install GitHub Desktop:
 
-```
+```sh
 $ sudo apt install github-desktop
 ```
 
@@ -57,16 +57,17 @@ $ sudo apt install github-desktop
 
 To setup the package repository, run these commands:
 
-```
+```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'
 ```
 
 Then install GitHub Desktop:
 
-```
+```sh
 # if yum is your package manager
 $ sudo yum install github-desktop
+
 # if dnf is your package manager
 $ sudo dnf install github-desktop
 ```

From 2095d7aae18763943eaadc9daacacaaee8676330 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Sun, 31 May 2020 10:10:54 -0300
Subject: [PATCH 13/97] wire up sponsorship details for the repository

---
 .github/FUNDING.yml | 1 +
 README.md           | 6 ++++--
 2 files changed, 5 insertions(+), 2 deletions(-)
 create mode 100644 .github/FUNDING.yml

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/README.md b/README.md
index 355c3a1899b..009033b41e5 100644
--- a/README.md
+++ b/README.md
@@ -34,8 +34,10 @@ help out with testing on your distribution.
 
 ## packagecloud
 
-We are trialing using [PackageCloud](https://packagecloud.io/) for distributing
-the installers for Debian and RPM-based distributions.
+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.
 
 ### Debian/Ubuntu distributions
 

From 04fc4213dac977afd533ab5b3599ed949a3717c4 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Wed, 24 Jun 2020 13:32:28 -0300
Subject: [PATCH 14/97] drop unnecessary libappindicator dependency for RPM
 package (#300)

---
 script/package-redhat.ts | 1 -
 1 file changed, 1 deletion(-)

diff --git a/script/package-redhat.ts b/script/package-redhat.ts
index 4903be3811d..fdf617d0a92 100644
--- a/script/package-redhat.ts
+++ b/script/package-redhat.ts
@@ -44,7 +44,6 @@ const options: RedhatOptions = {
   requires: [
     // default Electron dependencies
     'libXScrnSaver',
-    'libappindicator',
     'libX11-xcb',
     'alsa-lib',
     // dugite-native dependencies

From a6a8ca12bb56dee44815592dc2a301515c29c0b0 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Wed, 24 Jun 2020 13:51:38 -0300
Subject: [PATCH 15/97] run codeql on linux branch (#302)

---
 .github/workflows/codeql.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
index 3be1aff3bfc..7742c493b9b 100644
--- a/.github/workflows/codeql.yml
+++ b/.github/workflows/codeql.yml
@@ -2,7 +2,7 @@ name: 'Code scanning - action'
 
 on:
   push:
-    branches: ['development']
+    branches: ['development', 'linux']
   pull_request:
     branches: ['development']
   schedule:

From 6ace9371d16299a962b1a85f1acbb226de257842 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Mon, 27 Jul 2020 14:42:15 -0300
Subject: [PATCH 16/97] add in libcurl4 as optional dependency for RPM (#315)

---
 script/package-redhat.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/script/package-redhat.ts b/script/package-redhat.ts
index fdf617d0a92..939e576acdf 100644
--- a/script/package-redhat.ts
+++ b/script/package-redhat.ts
@@ -47,7 +47,7 @@ const options: RedhatOptions = {
     'libX11-xcb',
     'alsa-lib',
     // dugite-native dependencies
-    'libcurl',
+    '(libcurl or libcurl4)',
     // keytar dependencies
     'libsecret',
     'gnome-keyring',

From d4a06f33e661d6feea0d468c63215ef0bd0fb4ad Mon Sep 17 00:00:00 2001
From: Dan McCarthy <dan.willy.mccarthy@gmail.com>
Date: Tue, 4 Aug 2020 07:00:32 -0500
Subject: [PATCH 17/97] allow tilde character when specifying a local
 repository (#316)

There already exists a function that will convert a tilde path to an absolute path. It was originally used for this purpose, but the functionality was removed during a commit that changed which function was used to validate git repositories.

This reinstates that functionality and allows us to type a ~/ tilde path to get our home directories when typing in a path.
---
 app/src/ui/add-repository/add-existing-repository.tsx | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/app/src/ui/add-repository/add-existing-repository.tsx b/app/src/ui/add-repository/add-existing-repository.tsx
index 00ef8968bdc..2c97ae7e557 100644
--- a/app/src/ui/add-repository/add-existing-repository.tsx
+++ b/app/src/ui/add-repository/add-existing-repository.tsx
@@ -16,6 +16,7 @@ import { showOpenDialog } from '../main-process-proxy'
 import { Ref } from '../lib/ref'
 import { InputError } from '../lib/input-description/input-error'
 import { IAccessibleMessage } from '../../models/accessible-message'
+import { isGitRepository } from './create-repository'
 
 interface IAddExistingRepositoryProps {
   readonly dispatcher: Dispatcher
@@ -277,9 +278,9 @@ export class AddExistingRepository extends React.Component<
   }
 
   private onPathChanged = async (path: string) => {
-    if (this.state.path !== path) {
-      this.updatePath(path)
-    }
+    const isRepository = await isGitRepository(this.resolvedPath(path))
+
+    this.setState({ path, isRepository })
   }
 
   private showFilePicker = async () => {

From 25c4654f8a1b6eeef5dd0f9194401bdcd436c21a Mon Sep 17 00:00:00 2001
From: KrisAphalon <Krzysztof.Kacz@interia.pl>
Date: Sat, 24 Oct 2020 22:48:15 +0200
Subject: [PATCH 18/97] remove deprecated apt-key from installation setup
 (#354)

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 009033b41e5..18226e8b4f0 100644
--- a/README.md
+++ b/README.md
@@ -44,7 +44,7 @@ the project using the link in the header.
 To setup the package repository, run these commands:
 
 ```sh
-$ wget -qO - https://packagecloud.io/shiftkey/desktop/gpgkey | sudo apt-key add -
+$ 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
 ```

From e02616c494d1b70e2ef1a8e38c899a68ef4d6dae Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Thu, 5 Nov 2020 23:23:08 -0400
Subject: [PATCH 19/97] add optional x11 dependency for SUSE-based
 distributions (#369)

---
 script/package-redhat.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/script/package-redhat.ts b/script/package-redhat.ts
index 939e576acdf..6afc79c6fec 100644
--- a/script/package-redhat.ts
+++ b/script/package-redhat.ts
@@ -44,7 +44,7 @@ const options: RedhatOptions = {
   requires: [
     // default Electron dependencies
     'libXScrnSaver',
-    'libX11-xcb',
+    '(libX11-xcb or libX11-xcb1)',
     'alsa-lib',
     // dugite-native dependencies
     '(libcurl or libcurl4)',

From 22f0aa8e88c9c4e614ce3224034c0471dbfb8e2e Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Thu, 17 Dec 2020 15:03:36 -0400
Subject: [PATCH 20/97] align CI with the upstream settings for Actions (#393)

---
 .github/workflows/ci.yml | 83 +++++++---------------------------------
 1 file changed, 14 insertions(+), 69 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 4fcb1410ddd..4156ab9cae1 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -4,38 +4,14 @@ on:
   push:
     branches:
       - development
+      - linux
+      - 'linux-release-*'
+    tags:
+      - 'release-*.*.*-linux*'
   pull_request:
-  workflow_call:
-    inputs:
-      repository:
-        default: desktop/desktop
-        required: false
-        type: string
-      ref:
-        required: true
-        type: string
-      upload-artifacts:
-        default: false
-        required: false
-        type: boolean
-      environment:
-        type: string
-        required: true
-      sign:
-        type: boolean
-        default: true
-        required: false
-    secrets:
-      AZURE_CODE_SIGNING_TENANT_ID:
-      AZURE_CODE_SIGNING_CLIENT_ID:
-      AZURE_CODE_SIGNING_CLIENT_SECRET:
-      DESKTOP_OAUTH_CLIENT_ID:
-      DESKTOP_OAUTH_CLIENT_SECRET:
-      APPLE_ID:
-      APPLE_ID_PASSWORD:
-      APPLE_TEAM_ID:
-      APPLE_APPLICATION_CERT:
-      APPLE_APPLICATION_CERT_PASSWORD:
+    branches:
+      - linux
+      - 'linux-release-*'
 
 env:
   NODE_VERSION: 18.16.1
@@ -70,13 +46,18 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        os: [macos-13-xl-arm64, windows-2019]
+        os: [macos-13, windows-2019, ubuntu-20.04]
         arch: [x64, arm64]
         include:
-          - os: macos-13-xl-arm64
+          - os: macos-13
             friendlyName: macOS
           - os: windows-2019
             friendlyName: Windows
+          - os: ubuntu-20.04
+            friendlyName: Ubuntu
+        exclude:
+          - os: ubuntu-20.04
+            arch: arm64
     timeout-minutes: 60
     env:
       RELEASE_CHANNEL: ${{ inputs.environment }}
@@ -109,14 +90,6 @@ jobs:
       - 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 }}
-          APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
-          APPLE_APPLICATION_CERT: ${{ secrets.APPLE_APPLICATION_CERT }}
-          KEY_PASSWORD: ${{ secrets.APPLE_APPLICATION_CERT_PASSWORD }}
           npm_config_arch: ${{ matrix.arch }}
           TARGET_ARCH: ${{ matrix.arch }}
       - name: Prepare testing environment
@@ -130,31 +103,3 @@ jobs:
       - name: Run script tests
         if: matrix.arch == 'x64'
         run: yarn test:script
-      - name: Install Azure Code Signing Client
-        if: ${{ runner.os == 'Windows' && inputs.sign }}
-        run: |
-          $acsZip = Join-Path $env:RUNNER_TEMP "acs.zip"
-          $acsDir = Join-Path $env:RUNNER_TEMP "acs"
-          Invoke-WebRequest -Uri https://www.nuget.org/api/v2/package/Azure.CodeSigning.Client/1.0.38 -OutFile $acsZip -Verbose
-          Expand-Archive $acsZip -Destination $acsDir -Force -Verbose
-          # Replace ancient signtool in electron-winstall with one that supports ACS
-          Copy-Item -Path "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\*" -Include signtool.exe,signtool.exe.manifest,Microsoft.Windows.Build.Signing.mssign32.dll.manifest,mssign32.dll,Microsoft.Windows.Build.Signing.wintrust.dll.manifest,wintrust.dll,Microsoft.Windows.Build.Appx.AppxSip.dll.manifest,AppxSip.dll,Microsoft.Windows.Build.Appx.AppxPackaging.dll.manifest,AppxPackaging.dll,Microsoft.Windows.Build.Appx.OpcServices.dll.manifest,OpcServices.dll -Destination "node_modules\electron-winstaller\vendor" -Verbose
-      - name: Package production app
-        run: yarn package
-        env:
-          npm_config_arch: ${{ matrix.arch }}
-          AZURE_TENANT_ID: ${{ secrets.AZURE_CODE_SIGNING_TENANT_ID }}
-          AZURE_CLIENT_ID: ${{ secrets.AZURE_CODE_SIGNING_CLIENT_ID }}
-          AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CODE_SIGNING_CLIENT_SECRET }}
-      - name: Upload artifacts
-        uses: actions/upload-artifact@v3
-        if: ${{ inputs.upload-artifacts }}
-        with:
-          name: ${{matrix.friendlyName}}-${{matrix.arch}}
-          path: |
-            dist/GitHub Desktop-${{matrix.arch}}.zip
-            dist/GitHubDesktop-*.nupkg
-            dist/GitHubDesktopSetup-${{matrix.arch}}.exe
-            dist/GitHubDesktopSetup-${{matrix.arch}}.msi
-            dist/bundle-size.json
-          if-no-files-found: error

From bf3b649d5a1d6278a3fb8b6ba1aad8a9dcda0712 Mon Sep 17 00:00:00 2001
From: Kevin Evans <evans.kevinh@gmail.com>
Date: Sun, 27 Dec 2020 07:23:30 -0800
Subject: [PATCH 21/97] Add smaller icons (#395)

---
 app/static/logos/128x128.png | Bin 0 -> 25377 bytes
 app/static/logos/32x32.png   | Bin 0 -> 5333 bytes
 app/static/logos/64x64.png   | Bin 0 -> 13966 bytes
 script/package-debian.ts     |   3 +++
 script/package-redhat.ts     |   3 +++
 5 files changed, 6 insertions(+)
 create mode 100644 app/static/logos/128x128.png
 create mode 100644 app/static/logos/32x32.png
 create mode 100644 app/static/logos/64x64.png

diff --git a/app/static/logos/128x128.png b/app/static/logos/128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..97432b294a45b95a47ef38219a850bbf4ef01da9
GIT binary patch
literal 25377
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
Q4gdfE07*qoM6N<$g2sc5TL1t6

literal 0
HcmV?d00001

diff --git a/app/static/logos/32x32.png b/app/static/logos/32x32.png
new file mode 100644
index 0000000000000000000000000000000000000000..c3440dd18ef5588bfca4d332b57ad5021a76960d
GIT binary patch
literal 5333
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

literal 0
HcmV?d00001

diff --git a/app/static/logos/64x64.png b/app/static/logos/64x64.png
new file mode 100644
index 0000000000000000000000000000000000000000..2d8d61b8efc7b6ece2b8333ef18cd631e75ef80f
GIT binary patch
literal 13966
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

literal 0
HcmV?d00001

diff --git a/script/package-debian.ts b/script/package-debian.ts
index b6df4eb96f3..82f1bb775a8 100644
--- a/script/package-debian.ts
+++ b/script/package-debian.ts
@@ -57,6 +57,9 @@ const options: DebianOptions = {
     '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',
diff --git a/script/package-redhat.ts b/script/package-redhat.ts
index 6afc79c6fec..405c435f924 100644
--- a/script/package-redhat.ts
+++ b/script/package-redhat.ts
@@ -53,6 +53,9 @@ const options: RedhatOptions = {
     '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',

From d6f003ed6d8ed2eaf73e58458a70cf2618f2cc4e Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Sun, 24 Jan 2021 21:37:38 -0400
Subject: [PATCH 22/97] update tooling dependencies (#424)

---
 package.json                      |   4 +-
 script/electron-builder-linux.yml |   4 -
 script/package-debian.ts          |   4 -
 script/package-redhat.ts          |   4 -
 yarn.lock                         | 150 ++++++++++++++++++++++--------
 5 files changed, 111 insertions(+), 55 deletions(-)

diff --git a/package.json b/package.json
index 84eb6a0946c..d492989d86a 100644
--- a/package.json
+++ b/package.json
@@ -168,7 +168,7 @@
     "tsconfig-paths": "^3.9.0"
   },
   "optionalDependencies": {
-    "electron-installer-debian": "3.0.0",
-    "electron-installer-redhat": "3.0.0"
+    "electron-installer-debian": "3.1.0",
+    "electron-installer-redhat": "3.2.0"
   }
 }
diff --git a/script/electron-builder-linux.yml b/script/electron-builder-linux.yml
index 4243b4961b3..25d83af6cf4 100644
--- a/script/electron-builder-linux.yml
+++ b/script/electron-builder-linux.yml
@@ -11,10 +11,6 @@ linux:
   maintainer: 'GitHub, Inc <opensource+desktop@github.com>'
 rpm:
   depends:
-    # default Electron dependencies
-    - libXScrnSaver
-    - libappindicator
-    - libnotify
     # dugite-native dependencies
     - libcurl
     # keytar dependencies
diff --git a/script/package-debian.ts b/script/package-debian.ts
index 82f1bb775a8..35402cafaf2 100644
--- a/script/package-debian.ts
+++ b/script/package-debian.ts
@@ -47,10 +47,6 @@ const options: DebianOptions = {
   priority: 'extra',
   homepage: 'https://github.com/shiftkey/desktop',
   depends: [
-    // additional core dependencies - are these still needed?
-    'gconf2',
-    'gconf-service',
-    'libappindicator1',
     // Desktop-specific dependencies
     'libcurl3 | libcurl4',
     'libsecret-1-0',
diff --git a/script/package-redhat.ts b/script/package-redhat.ts
index 405c435f924..3b5a55b8a25 100644
--- a/script/package-redhat.ts
+++ b/script/package-redhat.ts
@@ -42,10 +42,6 @@ const options: RedhatOptions = {
     'This is the unofficial port of GitHub Desktop for Linux distributions',
   categories: ['GNOME', 'GTK', 'Development'],
   requires: [
-    // default Electron dependencies
-    'libXScrnSaver',
-    '(libX11-xcb or libX11-xcb1)',
-    'alsa-lib',
     // dugite-native dependencies
     '(libcurl or libcurl4)',
     // keytar dependencies
diff --git a/yarn.lock b/yarn.lock
index ffc2be4ce9d..7af151ce2db 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1236,6 +1236,13 @@
   dependencies:
     "@types/node" "*"
 
+"@types/fs-extra@^9.0.1":
+  version "9.0.13"
+  resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45"
+  integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==
+  dependencies:
+    "@types/node" "*"
+
 "@types/fuzzaldrin-plus@^0.0.1":
   version "0.0.1"
   resolved "https://registry.yarnpkg.com/@types/fuzzaldrin-plus/-/fuzzaldrin-plus-0.0.1.tgz#bfe5e25bc5b4066848171baf7a8aaf30e267d30a"
@@ -1250,6 +1257,14 @@
     "@types/minimatch" "*"
     "@types/node" "*"
 
+"@types/glob@^7.1.1":
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb"
+  integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==
+  dependencies:
+    "@types/minimatch" "*"
+    "@types/node" "*"
+
 "@types/graceful-fs@^4.1.3":
   version "4.1.9"
   resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4"
@@ -2492,6 +2507,18 @@ asar@^2.0.1:
     mkdirp "^0.5.1"
     tmp-promise "^1.0.5"
 
+asar@^3.0.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/asar/-/asar-3.2.0.tgz#e6edb5edd6f627ebef04db62f771c61bea9c1221"
+  integrity sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg==
+  dependencies:
+    chromium-pickle-js "^0.2.0"
+    commander "^5.0.0"
+    glob "^7.1.6"
+    minimatch "^3.0.4"
+  optionalDependencies:
+    "@types/glob" "^7.1.1"
+
 assign-symbols@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
@@ -3292,7 +3319,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:
   dependencies:
     ms "2.0.0"
 
-debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
+debug@4, debug@^4.3.1, debug@^4.3.4:
   version "4.3.4"
   resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
   integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
@@ -3306,6 +3333,27 @@ debug@^3.1.0, debug@^3.2.7:
   dependencies:
     ms "^2.1.1"
 
+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.3.2:
+  version "4.3.3"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664"
+  integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==
+  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"
@@ -3594,42 +3642,46 @@ ee-first@1.1.1:
   resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
   integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
 
-electron-installer-common@^0.10.0:
-  version "0.10.1"
-  resolved "https://registry.yarnpkg.com/electron-installer-common/-/electron-installer-common-0.10.1.tgz#42738f140c15270758681ac3f32039430b9fc023"
-  integrity sha512-d9gEXhfSSyMn8mkFNdbUdkqdLkxVZ8nO3NDso3nuSnG1+wy7cJuuCjutwR4+zsXdQuNFC1n/DxpTk4pBLZSCTQ==
+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 "^2.0.1"
+    asar "^3.0.0"
     debug "^4.1.1"
-    fs-extra "^8.0.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 "^2.0.1"
+    tmp-promise "^3.0.2"
+  optionalDependencies:
+    "@types/fs-extra" "^9.0.1"
 
-electron-installer-debian@3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/electron-installer-debian/-/electron-installer-debian-3.0.0.tgz#abd76db8e89bc1ba1e5366975a941461dda06e6d"
-  integrity sha512-91iiicfK5hq6D6Xit7SFCN2GpccFBQbZB1JpYaxFdaueEjM/1hSULtCPf4e5w/2vQKZ73AfBZrxxIJqO3DhGPw==
+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.0"
-    fs-extra "^8.0.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.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/electron-installer-redhat/-/electron-installer-redhat-3.0.0.tgz#0a066eb9f9b3e691d58c2b41eea1055e8d5ffa92"
-  integrity sha512-BtYh174AOIGq0iDges4/fihqJYw8WsWXRKuRpKvUlkqrwfeGMWqln28+kKV5IW6GPfHjRFeCO5dcMUioUDBo1A==
+electron-installer-redhat@3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/electron-installer-redhat/-/electron-installer-redhat-3.2.0.tgz#2c0f5da6f4a244453e4675ab1eca0877a66788c5"
+  integrity sha512-XMA+fQj3ULNVMl4eG+hIvrYITEqP1pfpERvx6kRwuPd06vdtB4KucL9241DAHT0NR5E9gnyJHM9Y6N24kk0mcA==
   dependencies:
+    "@malept/cross-spawn-promise" "^1.0.0"
     debug "^4.1.1"
-    electron-installer-common "^0.10.0"
-    fs-extra "^8.1.0"
+    electron-installer-common "^0.10.2"
+    fs-extra "^9.0.0"
     lodash "^4.17.15"
     word-wrap "^1.2.3"
     yargs "^15.1.0"
@@ -4722,7 +4774,7 @@ fs-extra@^7.0.1:
     jsonfile "^4.0.0"
     universalify "^0.1.0"
 
-fs-extra@^8.0.1, fs-extra@^8.1.0:
+fs-extra@^8.1.0:
   version "8.1.0"
   resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
   integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
@@ -4731,7 +4783,7 @@ fs-extra@^8.0.1, fs-extra@^8.1.0:
     jsonfile "^4.0.0"
     universalify "^0.1.0"
 
-fs-extra@^9.0.1:
+fs-extra@^9.0.0:
   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==
@@ -4741,6 +4793,16 @@ fs-extra@^9.0.1:
     jsonfile "^6.0.1"
     universalify "^1.0.0"
 
+fs-extra@^9.0.1:
+  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 "^2.0.0"
+
 fs-monkey@1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3"
@@ -8203,14 +8265,7 @@ rimraf@^2.5.2:
   dependencies:
     glob "^7.0.5"
 
-rimraf@^2.6.3:
-  version "2.7.1"
-  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
-  integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
-  dependencies:
-    glob "^7.1.3"
-
-rimraf@^3.0.2:
+rimraf@^3.0.0, rimraf@^3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
   integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
@@ -8350,7 +8405,12 @@ semver-compare@^1.0.0:
   resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
   integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
 
-"semver@2 || 3 || 4 || 5", semver@^5.7.2:
+"semver@2 || 3 || 4 || 5":
+  version "5.4.1"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
+  integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==
+
+semver@^5.7.2:
   version "5.7.2"
   resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
   integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
@@ -9066,12 +9126,12 @@ tmp-promise@^1.0.5:
     bluebird "^3.5.0"
     tmp "0.0.33"
 
-tmp-promise@^2.0.1:
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-2.0.2.tgz#ee605edb10f100954be5dd8b9dbe1bfd56194202"
-  integrity sha512-zl71nFWjPKW2KXs+73gEk8RmqvtAeXPxhWDkTUoa3MSMkjq3I+9OeknjF178MQoMYsdqL730hfzvNfEkePxq9Q==
+tmp-promise@^3.0.2:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-3.0.3.tgz#60a1a1cc98c988674fcbfd23b6e3367bdeac4ce7"
+  integrity sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==
   dependencies:
-    tmp "0.1.0"
+    tmp "^0.2.0"
 
 tmp@0.0.33:
   version "0.0.33"
@@ -9080,12 +9140,12 @@ tmp@0.0.33:
   dependencies:
     os-tmpdir "~1.0.2"
 
-tmp@0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877"
-  integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==
+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 "^2.6.3"
+    rimraf "^3.0.0"
 
 tmpl@1.0.5:
   version "1.0.5"
@@ -9945,6 +10005,14 @@ yargs-parser@^18.1.1:
     camelcase "^5.0.0"
     decamelize "^1.2.0"
 
+yargs-parser@^18.1.2:
+  version "18.1.3"
+  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
+  integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
+  dependencies:
+    camelcase "^5.0.0"
+    decamelize "^1.2.0"
+
 yargs-parser@^21.0.1, yargs-parser@^21.1.1:
   version "21.1.1"
   resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"

From e8d755b388f7494f0299a183072b5633451602d9 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Mon, 15 Feb 2021 10:46:08 -0400
Subject: [PATCH 23/97] run packaging step on Linux builds if all other CI
 steps pass (#435)

---
 .github/workflows/ci.yml | 24 +++++++++++++++++++++---
 1 file changed, 21 insertions(+), 3 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 4156ab9cae1..2fb62b7e5c7 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -46,17 +46,17 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        os: [macos-13, windows-2019, ubuntu-20.04]
+        os: [macos-13, windows-2019, ubuntu-18.04]
         arch: [x64, arm64]
         include:
           - os: macos-13
             friendlyName: macOS
           - os: windows-2019
             friendlyName: Windows
-          - os: ubuntu-20.04
+          - os: ubuntu-18.04
             friendlyName: Ubuntu
         exclude:
-          - os: ubuntu-20.04
+          - os: ubuntu-18.04
             arch: arm64
     timeout-minutes: 60
     env:
@@ -103,3 +103,21 @@ jobs:
       - name: Run script tests
         if: matrix.arch == 'x64'
         run: yarn test:script
+      - 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
+          prerelease: true
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

From f99def56d6fe59bbd1d36594959c6ca382e82897 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Mon, 15 Feb 2021 15:11:16 -0400
Subject: [PATCH 24/97] enable dependabot monitoring for specific dependencies
 in project (#440)

---
 .github/dependabot.yml | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index ca79ca5b4d5..0b10093544d 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -4,3 +4,13 @@ updates:
     directory: /
     schedule:
       interval: weekly
+
+  - 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-*'

From adeb09e26cf91d3a43ab61f339e3c38c6fd074dd Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Mon, 15 Feb 2021 15:22:09 -0400
Subject: [PATCH 25/97] bump electron-installer-redhat to latest version (#438)

---
 package.json |  2 +-
 yarn.lock    | 52 +++++++++++++++++++++++++++-------------------------
 2 files changed, 28 insertions(+), 26 deletions(-)

diff --git a/package.json b/package.json
index d492989d86a..46348b289c1 100644
--- a/package.json
+++ b/package.json
@@ -169,6 +169,6 @@
   },
   "optionalDependencies": {
     "electron-installer-debian": "3.1.0",
-    "electron-installer-redhat": "3.2.0"
+    "electron-installer-redhat": "3.3.0"
   }
 }
diff --git a/yarn.lock b/yarn.lock
index 7af151ce2db..0685260c7b5 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3018,6 +3018,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"
+
 cliui@^8.0.1:
   version "8.0.1"
   resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa"
@@ -3673,10 +3682,10 @@ electron-installer-debian@3.1.0:
     word-wrap "^1.2.3"
     yargs "^15.0.1"
 
-electron-installer-redhat@3.2.0:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/electron-installer-redhat/-/electron-installer-redhat-3.2.0.tgz#2c0f5da6f4a244453e4675ab1eca0877a66788c5"
-  integrity sha512-XMA+fQj3ULNVMl4eG+hIvrYITEqP1pfpERvx6kRwuPd06vdtB4KucL9241DAHT0NR5E9gnyJHM9Y6N24kk0mcA==
+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"
@@ -3684,7 +3693,7 @@ electron-installer-redhat@3.2.0:
     fs-extra "^9.0.0"
     lodash "^4.17.15"
     word-wrap "^1.2.3"
-    yargs "^15.1.0"
+    yargs "^16.0.2"
 
 electron-packager@^17.1.1:
   version "17.1.1"
@@ -10005,13 +10014,10 @@ yargs-parser@^18.1.1:
     camelcase "^5.0.0"
     decamelize "^1.2.0"
 
-yargs-parser@^18.1.2:
-  version "18.1.3"
-  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
-  integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
-  dependencies:
-    camelcase "^5.0.0"
-    decamelize "^1.2.0"
+yargs-parser@^20.2.2:
+  version "20.2.9"
+  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
+  integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
 
 yargs-parser@^21.0.1, yargs-parser@^21.1.1:
   version "21.1.1"
@@ -10035,22 +10041,18 @@ yargs@^15.0.1:
     y18n "^4.0.0"
     yargs-parser "^18.1.1"
 
-yargs@^15.1.0:
-  version "15.4.1"
-  resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
-  integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
+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 "^6.0.0"
-    decamelize "^1.2.0"
-    find-up "^4.1.0"
-    get-caller-file "^2.0.1"
+    cliui "^7.0.2"
+    escalade "^3.1.1"
+    get-caller-file "^2.0.5"
     require-directory "^2.1.1"
-    require-main-filename "^2.0.0"
-    set-blocking "^2.0.0"
     string-width "^4.2.0"
-    which-module "^2.0.0"
-    y18n "^4.0.0"
-    yargs-parser "^18.1.2"
+    y18n "^5.0.5"
+    yargs-parser "^20.2.2"
 
 yargs@^17.3.1:
   version "17.7.2"

From cdbf0cb73c7e17310aa73e33c4d29297c8e22846 Mon Sep 17 00:00:00 2001
From: Mrlinkwii <Mrlinkwii@users.noreply.github.com>
Date: Sat, 8 May 2021 22:41:34 +0100
Subject: [PATCH 26/97] add missing MIME type to AppImage package (#496)

---
 script/electron-builder-linux.yml | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/script/electron-builder-linux.yml b/script/electron-builder-linux.yml
index 25d83af6cf4..a7a35c6f34d 100644
--- a/script/electron-builder-linux.yml
+++ b/script/electron-builder-linux.yml
@@ -6,6 +6,10 @@ linux:
   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:
     - AppImage
   maintainer: 'GitHub, Inc <opensource+desktop@github.com>'

From 9d2478e755259fef7e1a8d3c0153e628266df498 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Tue, 22 Jun 2021 14:26:24 -0300
Subject: [PATCH 27/97] add section about known issues and add to Linux section
 (#537)

---
 README.md            |  5 +++++
 docs/known-issues.md | 10 ++++++++++
 2 files changed, 15 insertions(+)

diff --git a/README.md b/README.md
index 18226e8b4f0..5f84b021e2b 100644
--- a/README.md
+++ b/README.md
@@ -81,6 +81,11 @@ Arch Linux users can install GitHub Desktop from the
 
 `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.
 
+## Known issues
+
+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 information
 
 Please check out the [README](https://github.com/desktop/desktop#github-desktop)
diff --git a/docs/known-issues.md b/docs/known-issues.md
index 2a8d7b89cbe..6a0eb7938a0 100644
--- a/docs/known-issues.md
+++ b/docs/known-issues.md
@@ -11,6 +11,8 @@
   - [I get a black screen when launching Desktop](#i-get-a-black-screen-when-launching-desktop)
   - [Failed to open CA file after an update](#failed-to-open-ca-file-after-an-update)
   - [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)
 
 # Known Issues
 
@@ -225,3 +227,11 @@ Related issue: [#15217](https://github.com/desktop/desktop/issues/15217)
 If you see an error that says "Not enough resources are available to process this command" when signing in to GitHub Desktop, it's likely that you have too many credentials stored in Windows Credentials Manager.
 
 **Workaround:** open the Credential Manager application, click on Windows Credentials and go through the list to see if there are some you can delete.
+
+## 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.

From 16ce500e9452f9ed98dba5caa85c61ac07eb56c2 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Tue, 6 Jul 2021 16:06:28 -0300
Subject: [PATCH 28/97] drop prerelease: true from release step in workflow
 (#551)

---
 .github/workflows/ci.yml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 2fb62b7e5c7..0a731a0c68d 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -118,6 +118,5 @@ jobs:
             dist/*.rpm
             dist/*.txt
           draft: true
-          prerelease: true
         env:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

From 0c655b87ec70ab5aefb011c66c32556ab640483b Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Tue, 6 Jul 2021 16:24:46 -0300
Subject: [PATCH 29/97] refresh smaller icons to use new theme (#530)

* drop explicit window icon on Linux
* drop old icon used in app window
* regenerate smaller icons from new 256px source
---
 app/src/main-process/app-window.ts |   3 ---
 app/static/linux/icon-logo.png     | Bin 118370 -> 0 bytes
 app/static/logos/128x128.png       | Bin 25377 -> 12473 bytes
 app/static/logos/32x32.png         | Bin 5333 -> 1851 bytes
 app/static/logos/64x64.png         | Bin 13966 -> 4779 bytes
 5 files changed, 3 deletions(-)
 delete mode 100644 app/static/linux/icon-logo.png

diff --git a/app/src/main-process/app-window.ts b/app/src/main-process/app-window.ts
index 9f6137ab7e9..4466a45ca86 100644
--- a/app/src/main-process/app-window.ts
+++ b/app/src/main-process/app-window.ts
@@ -17,7 +17,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'
 import * as ipcMain from './ipc-main'
 import * as ipcWebContents from './ipc-webcontents'
@@ -75,8 +74,6 @@ export class AppWindow {
     } else if (__WIN32__) {
       windowOptions.frame = false
     } else if (__LINUX__) {
-      windowOptions.icon = path.join(__dirname, 'static', 'icon-logo.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
diff --git a/app/static/linux/icon-logo.png b/app/static/linux/icon-logo.png
deleted file mode 100644
index 7e598fe01189e9dc3d1c34bee0d850c54eb71c1e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 118370
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
Y1<fEy4<u|Di~s-t07*qoM6N<$f?UCJ-2eap

diff --git a/app/static/logos/128x128.png b/app/static/logos/128x128.png
index 97432b294a45b95a47ef38219a850bbf4ef01da9..af1e5cfcd8c41de553319b90559a5aa5d018df8d 100644
GIT binary patch
literal 12473
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

literal 25377
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
Q4gdfE07*qoM6N<$g2sc5TL1t6

diff --git a/app/static/logos/32x32.png b/app/static/logos/32x32.png
index c3440dd18ef5588bfca4d332b57ad5021a76960d..f1b5f9719eaf7f103ca6ebab3ca22fe6426e05fb 100644
GIT binary patch
delta 1837
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
bo$>lF<iabm#E~H_00000NkvXXu0mjfxV3#2

literal 5333
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

diff --git a/app/static/logos/64x64.png b/app/static/logos/64x64.png
index 2d8d61b8efc7b6ece2b8333ef18cd631e75ef80f..77fe2a72c18be8ac2d1de0140ae665f1e82346dc 100644
GIT binary patch
literal 4779
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
FV1jxK_(=c&

literal 13966
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


From 2b21cce1bef3fe32c282c8d6f1f23e4ae5b45b02 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Tue, 6 Jul 2021 17:57:09 -0300
Subject: [PATCH 30/97] [docs] add new section for org repos (#552)

---
 docs/known-issues.md | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/docs/known-issues.md b/docs/known-issues.md
index 6a0eb7938a0..e0cc67e722e 100644
--- a/docs/known-issues.md
+++ b/docs/known-issues.md
@@ -13,6 +13,7 @@
   - [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
 
@@ -235,3 +236,20 @@ If you see an error that says "Not enough resources are available to process thi
 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.

From 0fa549afbda0511c58b8597d1875d8e303f94f23 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Wed, 14 Jul 2021 11:53:03 -0300
Subject: [PATCH 31/97] introduce abstractions to make Flatpak integration
 easier (#555)

Co-Authored-By: nullrequest <30698906+advaithm@users.noreply.github.com>
---
 app/src/lib/editors/launch.ts       | 22 ++++++-
 app/src/lib/editors/linux.ts        |  3 +-
 app/src/lib/helpers/linux.ts        | 93 +++++++++++++++++++++++++++++
 app/src/lib/shells/linux.ts         | 26 ++++----
 app/src/lib/shells/shared.ts        | 20 ++++++-
 app/test/unit/helpers/linux-test.ts | 30 ++++++++++
 6 files changed, 180 insertions(+), 14 deletions(-)
 create mode 100644 app/src/lib/helpers/linux.ts
 create mode 100644 app/test/unit/helpers/linux-test.ts

diff --git a/app/src/lib/editors/launch.ts b/app/src/lib/editors/launch.ts
index 6e1f5ee73ff..ab0a1b14f5f 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 '../../ui/lib/path-exists'
+import { pathExists as pathExistsDefault } from '../../ui/lib/path-exists'
+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 025b6df0e6b..f8342446d49 100644
--- a/app/src/lib/editors/linux.ts
+++ b/app/src/lib/editors/linux.ts
@@ -1,4 +1,5 @@
-import { pathExists } from '../../ui/lib/path-exists'
+import { pathExists } from '../helpers/linux'
+
 import { IFoundEditor } from './found-editor'
 
 /** Represents an external editor on Linux */
diff --git a/app/src/lib/helpers/linux.ts b/app/src/lib/helpers/linux.ts
new file mode 100644
index 00000000000..73fe58887fe
--- /dev/null
+++ b/app/src/lib/helpers/linux.ts
@@ -0,0 +1,93 @@
+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)
+}
+
+/**
+ * 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<boolean> {
+  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()) {
+    return spawn(
+      'flatpak-spawn',
+      ['--host', path, `"${workingDirectory}"`],
+      options
+    )
+  } else {
+    return spawn(path, [workingDirectory], options)
+  }
+}
diff --git a/app/src/lib/shells/linux.ts b/app/src/lib/shells/linux.ts
index 7ab0a4a5e89..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 { ChildProcess } from 'child_process'
 import { assertNever } from '../fatal-error'
 import { IFoundShell } from './found-shell'
 import { parseEnumValue } from '../enum'
-import { pathExists } from '../../ui/lib/path-exists'
+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<string | null> {
-  return (await pathExists(path)) ? path : null
+  return (await pathExistsLinux(path)) ? path : null
 }
 
 function getShellPath(shell: Shell): Promise<string | null> {
@@ -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 2f8c8be10a8..c39e8d7dfe7 100644
--- a/app/src/lib/shells/shared.ts
+++ b/app/src/lib/shells/shared.ts
@@ -3,9 +3,10 @@ import { ChildProcess } from 'child_process'
 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'
-import { pathExists } from '../../ui/lib/path-exists'
+import { pathExists as pathExistsDefault } from '../../ui/lib/path-exists'
 
 export type Shell = Darwin.Shell | Win32.Shell | Linux.Shell
 
@@ -72,6 +73,23 @@ export async function findShellOrDefault(shell: Shell): Promise<FoundShell> {
   }
 }
 
+/**
+ * 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/test/unit/helpers/linux-test.ts b/app/test/unit/helpers/linux-test.ts
new file mode 100644
index 00000000000..df18564e441
--- /dev/null
+++ b/app/test/unit/helpers/linux-test.ts
@@ -0,0 +1,30 @@
+import { convertToFlatpakPath } 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)
+    })
+  }
+})

From 07026fe60396b324e9c7020d37c8601cd927d4d8 Mon Sep 17 00:00:00 2001
From: nullrequest <30698906+advaithm@users.noreply.github.com>
Date: Mon, 19 Jul 2021 17:49:26 +0530
Subject: [PATCH 32/97] escape paths with regex over quotes in flatpaks (#558)

---
 app/src/lib/helpers/linux.ts        |  9 +++++++--
 app/test/unit/helpers/linux-test.ts | 19 ++++++++++++++++++-
 2 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/app/src/lib/helpers/linux.ts b/app/src/lib/helpers/linux.ts
index 73fe58887fe..fbe3c7742e2 100644
--- a/app/src/lib/helpers/linux.ts
+++ b/app/src/lib/helpers/linux.ts
@@ -28,7 +28,9 @@ export function convertToFlatpakPath(path: string) {
 
   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
  *
@@ -82,9 +84,12 @@ export function spawnEditor(
   options: SpawnOptions
 ): ChildProcess {
   if (isFlatpakBuild()) {
+    const EscapedworkingDirectory = formatWorkingDirectoryForFlatpak(
+      workingDirectory
+    )
     return spawn(
       'flatpak-spawn',
-      ['--host', path, `"${workingDirectory}"`],
+      ['--host', path, EscapedworkingDirectory],
       options
     )
   } else {
diff --git a/app/test/unit/helpers/linux-test.ts b/app/test/unit/helpers/linux-test.ts
index df18564e441..52873f4e9d0 100644
--- a/app/test/unit/helpers/linux-test.ts
+++ b/app/test/unit/helpers/linux-test.ts
@@ -1,4 +1,7 @@
-import { convertToFlatpakPath } from '../../../src/lib/helpers/linux'
+import {
+  convertToFlatpakPath,
+  formatWorkingDirectoryForFlatpak,
+} from '../../../src/lib/helpers/linux'
 
 describe('convertToFlatpakPath()', () => {
   if (__LINUX__) {
@@ -28,3 +31,17 @@ describe('convertToFlatpakPath()', () => {
     })
   }
 })
+
+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)
+    })
+  }
+})

From 431739be259f6c8cfe12a212f391c942c7347290 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Mon, 19 Jul 2021 10:31:32 -0300
Subject: [PATCH 33/97] point window icon to new version (#561)

---
 app/src/main-process/app-window.ts | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/app/src/main-process/app-window.ts b/app/src/main-process/app-window.ts
index 4466a45ca86..0fabf6c23b1 100644
--- a/app/src/main-process/app-window.ts
+++ b/app/src/main-process/app-window.ts
@@ -7,6 +7,7 @@ import {
   nativeTheme,
 } from 'electron'
 import { Emitter, Disposable } from 'event-kit'
+import { join } from 'path'
 import { encodePathAsUrl } from '../lib/path'
 import {
   getWindowState,
@@ -74,6 +75,8 @@ export class AppWindow {
     } else if (__WIN32__) {
       windowOptions.frame = false
     } else if (__LINUX__) {
+      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

From 9b76e1f90f516d8b491d065affa34a963947f9bc Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Thu, 22 Jul 2021 12:21:27 -0300
Subject: [PATCH 34/97] detect and support running post-install script with
 offline yarn (#567)

---
 script/post-install.ts | 42 +++++++++++++++++++++++++++++-------------
 1 file changed, 29 insertions(+), 13 deletions(-)

diff --git a/script/post-install.ts b/script/post-install.ts
index 4d35d219a80..3d7d3586ff0 100644
--- a/script/post-install.ts
+++ b/script/post-install.ts
@@ -13,6 +13,22 @@ const options: SpawnSyncOptions = {
   stdio: 'inherit',
 }
 
+/** Check if the caller has set the OFFLINe environment variable */
+function isOffline() {
+  return process.env.OFFLINE === '1'
+}
+
+/** Format the arguments to ensure these work offline */
+function getYarnArgs(baseArgs: Array<string>): Array<string> {
+  const args = baseArgs
+
+  if (isOffline()) {
+    args.splice(1, 0, '--offline')
+  }
+
+  return args
+}
+
 function findYarnVersion(callback: (path: string) => void) {
   glob('vendor/yarn-*.js', (error, files) => {
     if (error != null) {
@@ -28,27 +44,27 @@ function findYarnVersion(callback: (path: string) => void) {
 }
 
 findYarnVersion(path => {
-  let result = spawnSync(
-    'node',
-    [path, '--cwd', 'app', 'install', '--force'],
-    options
-  )
+  const installArgs = getYarnArgs([path, '--cwd', 'app', 'install', '--force'])
+
+  let result = spawnSync('node', installArgs, 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)
+    if (result.status !== 0) {
+      process.exit(result.status || 1)
+    }
   }
 
-  result = spawnSync('node', [path, 'compile:script'], options)
+  result = spawnSync('node', getYarnArgs([path, 'compile:script']), options)
 
   if (result.status !== 0) {
     process.exit(result.status || 1)

From f957a1e30cb1ec4a2a4d6f1f196ae4e201bbbbc9 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Fri, 13 Aug 2021 13:49:01 -0300
Subject: [PATCH 35/97] assorted lint fixes not caught by CI


From e0dcd74075004a484ed776605094fd0238696b08 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Mon, 30 Aug 2021 08:57:56 -0300
Subject: [PATCH 36/97] submodules should be updated if OFFLINE=1 is not set
 (#587)

---
 script/post-install.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/script/post-install.ts b/script/post-install.ts
index 3d7d3586ff0..0665cc3bac8 100644
--- a/script/post-install.ts
+++ b/script/post-install.ts
@@ -52,7 +52,7 @@ findYarnVersion(path => {
     process.exit(result.status || 1)
   }
 
-  if (isOffline()) {
+  if (!isOffline()) {
     result = spawnSync(
       'git',
       ['submodule', 'update', '--recursive', '--init'],

From 74a2677079780489237871917084fcf211e418c3 Mon Sep 17 00:00:00 2001
From: Gagan Yadav <gaganyadav80@gmail.com>
Date: Sun, 5 Sep 2021 19:37:17 +0530
Subject: [PATCH 37/97] Add instructions for opensuse dist in README.md (#592)

---
 README.md | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/README.md b/README.md
index 5f84b021e2b..166d2fc9294 100644
--- a/README.md
+++ b/README.md
@@ -74,6 +74,19 @@ $ sudo yum install github-desktop
 $ sudo dnf install github-desktop
 ```
 
+### OpenSUSE distribution
+```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/zypp/repos.d/shiftkey-desktop.repo'
+```
+
+Then install GitHub Desktop:
+
+```sh
+# if zypper is your package manager
+$ sudo zypper ref && sudo zypper in github-desktop
+```
+
 ## Other Distributions
 
 Arch Linux users can install GitHub Desktop from the

From 2452b1531675148d4b6d0ea77477dfcf61646b35 Mon Sep 17 00:00:00 2001
From: Luna <30698906+Lunarequest@users.noreply.github.com>
Date: Thu, 30 Sep 2021 21:27:13 +0530
Subject: [PATCH 38/97] Flatpak: locate and launch flatpaked code editors
 (#602)

---
 app/src/lib/helpers/linux.ts | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/app/src/lib/helpers/linux.ts b/app/src/lib/helpers/linux.ts
index fbe3c7742e2..9a2f88c21f4 100644
--- a/app/src/lib/helpers/linux.ts
+++ b/app/src/lib/helpers/linux.ts
@@ -22,7 +22,7 @@ export function convertToFlatpakPath(path: string) {
     return path
   }
 
-  if (path.startsWith('/opt/')) {
+  if (path.startsWith('/opt/') || path.startsWith('/var/lib/flatpak')) {
     return path
   }
 
@@ -31,6 +31,13 @@ export function convertToFlatpakPath(path: string) {
 export function formatWorkingDirectoryForFlatpak(path: string): string {
   return path.replace(/(\s)/, ' ')
 }
+
+export function formatPathForFlatpak(path: string): string {
+  if (path.startsWith('/var/lib/flatpak/app')) {
+    return path.replace('/var/lib/flatpak/app/', '')
+  }
+  return path
+}
 /**
  * Checks the file path on disk exists before attempting to launch a specific shell
  *
@@ -84,12 +91,13 @@ export function spawnEditor(
   options: SpawnOptions
 ): ChildProcess {
   if (isFlatpakBuild()) {
+    const actualpath = formatPathForFlatpak(path)
     const EscapedworkingDirectory = formatWorkingDirectoryForFlatpak(
       workingDirectory
     )
     return spawn(
       'flatpak-spawn',
-      ['--host', path, EscapedworkingDirectory],
+      ['--host', actualpath, EscapedworkingDirectory],
       options
     )
   } else {

From 5765fbe2474ba05949aeb3952ec599c2765e72ec Mon Sep 17 00:00:00 2001
From: Foxler2010 <drew@drewssite.top>
Date: Thu, 30 Sep 2021 19:15:38 +0000
Subject: [PATCH 39/97] fixed a typo in the README (#605)

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 166d2fc9294..0f1476f185c 100644
--- a/README.md
+++ b/README.md
@@ -45,7 +45,7 @@ To setup the package repository, run these commands:
 
 ```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 sh -c 'echo "deb [arch=amd64] https://packagecloud.io/shiftkey/desktop/any/ any main" > /etc/apt/sources.list.d/packagecloud-shiftkey-desktop.list'
 $ sudo apt-get update
 ```
 

From 041ba1d6a5d9d0fa4dadbb7d87191bfeb22bd7a9 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Sun, 3 Oct 2021 18:49:32 -0300
Subject: [PATCH 40/97] move icons to correct location, update usages in
 tooling (#606)

---
 app/static/{ => linux}/logos/1024x1024.png | Bin
 app/static/{ => linux}/logos/128x128.png   | Bin
 app/static/{ => linux}/logos/256x256.png   | Bin
 app/static/{ => linux}/logos/32x32.png     | Bin
 app/static/{ => linux}/logos/512x512.png   | Bin
 app/static/{ => linux}/logos/64x64.png     | Bin
 script/build.ts                            |   9 ++++++++-
 script/electron-builder-linux.yml          |   2 +-
 script/package-debian.ts                   |  12 ++++++------
 script/package-redhat.ts                   |  12 ++++++------
 10 files changed, 21 insertions(+), 14 deletions(-)
 rename app/static/{ => linux}/logos/1024x1024.png (100%)
 rename app/static/{ => linux}/logos/128x128.png (100%)
 rename app/static/{ => linux}/logos/256x256.png (100%)
 rename app/static/{ => linux}/logos/32x32.png (100%)
 rename app/static/{ => linux}/logos/512x512.png (100%)
 rename app/static/{ => linux}/logos/64x64.png (100%)

diff --git a/app/static/logos/1024x1024.png b/app/static/linux/logos/1024x1024.png
similarity index 100%
rename from app/static/logos/1024x1024.png
rename to app/static/linux/logos/1024x1024.png
diff --git a/app/static/logos/128x128.png b/app/static/linux/logos/128x128.png
similarity index 100%
rename from app/static/logos/128x128.png
rename to app/static/linux/logos/128x128.png
diff --git a/app/static/logos/256x256.png b/app/static/linux/logos/256x256.png
similarity index 100%
rename from app/static/logos/256x256.png
rename to app/static/linux/logos/256x256.png
diff --git a/app/static/logos/32x32.png b/app/static/linux/logos/32x32.png
similarity index 100%
rename from app/static/logos/32x32.png
rename to app/static/linux/logos/32x32.png
diff --git a/app/static/logos/512x512.png b/app/static/linux/logos/512x512.png
similarity index 100%
rename from app/static/logos/512x512.png
rename to app/static/linux/logos/512x512.png
diff --git a/app/static/logos/64x64.png b/app/static/linux/logos/64x64.png
similarity index 100%
rename from app/static/logos/64x64.png
rename to app/static/linux/logos/64x64.png
diff --git a/script/build.ts b/script/build.ts
index 165461fc510..03a68e34dd3 100755
--- a/script/build.ts
+++ b/script/build.ts
@@ -160,13 +160,20 @@ function packageApp() {
     )
   }
 
+  // this setting only works for macOS and Windows, so let's clear it now to ensure
+  // the app is working as expected
+  const icon =
+    process.platform === 'linux'
+      ? undefined
+      : path.join(projectRoot, 'app', 'static', 'logos', getIconFileName())
+
   return packager({
     name: getExecutableName(),
     platform: toPackagePlatform(process.platform),
     arch: toPackageArch(process.env.TARGET_ARCH),
     asar: false, // TODO: Probably wanna enable this down the road.
     out: getDistRoot(),
-    icon: path.join(projectRoot, 'app', 'static', 'logos', getIconFileName()),
+    icon,
     dir: outRoot,
     overwrite: true,
     tmpdir: false,
diff --git a/script/electron-builder-linux.yml b/script/electron-builder-linux.yml
index a7a35c6f34d..bcaae41ee82 100644
--- a/script/electron-builder-linux.yml
+++ b/script/electron-builder-linux.yml
@@ -2,7 +2,7 @@ artifactName: 'GitHubDesktop-${os}-${version}.${ext}'
 linux:
   category: 'GNOME;GTK;Development'
   packageCategory: 'GNOME;GTK;Development'
-  icon: 'app/static/logos'
+  icon: 'app/static/linux/logos'
   mimeTypes:
     - x-scheme-handler/x-github-client
     - x-scheme-handler/x-github-desktop-auth
diff --git a/script/package-debian.ts b/script/package-debian.ts
index 35402cafaf2..15314d519dd 100644
--- a/script/package-debian.ts
+++ b/script/package-debian.ts
@@ -53,12 +53,12 @@ const options: DebianOptions = {
     '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',
+    '32x32': 'app/static/linux/logos/32x32.png',
+    '64x64': 'app/static/linux/logos/64x64.png',
+    '128x128': 'app/static/linux/logos/128x128.png',
+    '256x256': 'app/static/linux/logos/256x256.png',
+    '512x512': 'app/static/linux/logos/512x512.png',
+    '1024x1024': 'app/static/linux/logos/1024x1024.png',
   },
   scripts: {
     postinst: 'script/resources/deb/postinst.sh',
diff --git a/script/package-redhat.ts b/script/package-redhat.ts
index 3b5a55b8a25..66ef2f39f37 100644
--- a/script/package-redhat.ts
+++ b/script/package-redhat.ts
@@ -49,12 +49,12 @@ const options: RedhatOptions = {
     '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',
+    '32x32': 'app/static/linux/logos/32x32.png',
+    '64x64': 'app/static/linux/logos/64x64.png',
+    '128x128': 'app/static/linux/logos/128x128.png',
+    '256x256': 'app/static/linux/logos/256x256.png',
+    '512x512': 'app/static/linux/logos/512x512.png',
+    '1024x1024': 'app/static/linux/logos/1024x1024.png',
   },
   scripts: {
     post: 'script/resources/rpm/post.sh',

From 69190fa3b7b499d29adfa32422e6c7f969650aa8 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Fri, 22 Oct 2021 13:53:49 -0300
Subject: [PATCH 41/97] enable release job to access contents

---
 .github/workflows/ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 0a731a0c68d..27076ff7464 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -42,7 +42,7 @@ jobs:
     name: ${{ matrix.friendlyName }} ${{ matrix.arch }}
     runs-on: ${{ matrix.os }}
     permissions:
-      contents: read
+      contents: write
     strategy:
       fail-fast: false
       matrix:

From a0d842d053f5b81fe7e87818326984016e0f7e72 Mon Sep 17 00:00:00 2001
From: Reinaldo <reinaldoplacetas@gmail.com>
Date: Sun, 13 Feb 2022 12:02:15 -0500
Subject: [PATCH 42/97] Changed apt-get to apt in the debian installation
 section of the readme file (#656)

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 0f1476f185c..e585ba3bb9c 100644
--- a/README.md
+++ b/README.md
@@ -46,7 +46,7 @@ To setup the package repository, run these commands:
 ```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-shiftkey-desktop.list'
-$ sudo apt-get update
+$ sudo apt update
 ```
 
 Then install GitHub Desktop:

From de342d250f3dc4990c58e1a70067aa28e697e810 Mon Sep 17 00:00:00 2001
From: "Matthew W. Thomas" <matthew@mwt.me>
Date: Sat, 12 Mar 2022 12:08:56 -0600
Subject: [PATCH 43/97] Add mirror to README (#667)

* Update README.md to add mirror

I added `mirror.mwt.me` as a possible repo option. I tried to keep this stylistically consistent with the rest of the document.

I also offloaded the GPG key download to keys.openpgp.org. This allows this step to work even if PackageCloud is out of bandwidth. It also has the advantage of putting the key id in the README and does not require users to trust me.

* undo use of openpgp.org

* Mention AppImage and Flatpak
---
 README.md | 68 +++++++++++++++++++++++++++++++++++++++++++------------
 1 file changed, 54 insertions(+), 14 deletions(-)

diff --git a/README.md b/README.md
index e585ba3bb9c..c09be89ddc4 100644
--- a/README.md
+++ b/README.md
@@ -32,36 +32,61 @@ It also hosts preview packages for various Linux distributions:
 Check out the [latest releases](https://github.com/shiftkey/desktop/releases) to
 help out with testing on your distribution.
 
-## packagecloud
+## Repositories
 
-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.
+You can use your operating system's package manager to install `github-desktop` and
+keep it up to date on Debian/RPM based distributions. There are two options for this:
+
+* A [PackageCloud](https://packagecloud.io/) repository with excellent global connectivity
+  but very limited bandwidth. This option will stop working each month when the bandwidth
+  limit is reached.
+* A [mirror](https://mattwthomas.com/mirrors/) in the US which has effectively infinite
+  bandwidth and performs well in most regions (especially the Americas and Europe).
+
+PackageCloud, which both options depend on, is not a free service. 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.
 
 ### Debian/Ubuntu distributions
 
-To setup the package repository, run these commands:
+First install our GPG certificate:
+
+```sh
+$ wget -qO - https://mirror.mwt.me/ghd/gpgkey | sudo tee /etc/apt/trusted.gpg.d/shiftkey-desktop.asc > /dev/null
+```
+
+To setup the package repository, run one of these commands:
 
 ```sh
-$ wget -qO - https://packagecloud.io/shiftkey/desktop/gpgkey | sudo tee /etc/apt/trusted.gpg.d/shiftkey-desktop.asc > /dev/null
+# if you want to use packagecloud.io
 $ sudo sh -c 'echo "deb [arch=amd64] https://packagecloud.io/shiftkey/desktop/any/ any main" > /etc/apt/sources.list.d/packagecloud-shiftkey-desktop.list'
-$ sudo apt update
+
+# if you want to use the US mirror
+$ sudo sh -c 'echo "deb [arch=amd64] https://mirror.mwt.me/ghd/deb/ any main" > /etc/apt/sources.list.d/packagecloud-shiftkey-desktop.list'
 ```
 
 Then install GitHub Desktop:
 
 ```sh
-$ sudo apt install github-desktop
+$ sudo apt update && sudo apt install github-desktop
 ```
 
 ### Red Hat/CentOS/Fedora distributions
 
-To setup the package repository, run these commands:
+First install our GPG certificate:
 
 ```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'
+$ sudo rpm --import https://mirror.mwt.me/ghd/gpgkey
+```
+
+To setup the package repository, run one of these commands:
+
+```sh
+# if you want to use packagecloud.io
+$ 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://mirror.mwt.me/ghd/gpgkey" > /etc/yum.repos.d/shiftkey-desktop.repo'
+
+# if you want to use the US mirror
+$ sudo sh -c 'echo -e "[shiftkey]\nname=GitHub Desktop\nbaseurl=https://mirror.mwt.me/ghd/rpm\nenabled=1\ngpgcheck=0\nrepo_gpgcheck=1\ngpgkey=https://mirror.mwt.me/ghd/gpgkey" > /etc/yum.repos.d/shiftkey-desktop.repo'
 ```
 
 Then install GitHub Desktop:
@@ -75,9 +100,22 @@ $ sudo dnf install github-desktop
 ```
 
 ### OpenSUSE distribution
+
+
+First install our GPG certificate:
+
+```sh
+$ sudo rpm --import https://mirror.mwt.me/ghd/gpgkey
+```
+
+To setup the package repository, run one of these commands:
+
 ```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/zypp/repos.d/shiftkey-desktop.repo'
+# if you want to use packagecloud.io
+$ 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://mirror.mwt.me/ghd/gpgkey" > /etc/zypp/repos.d/shiftkey-desktop.repo'
+
+# if you want to use the US mirror
+$ sudo sh -c 'echo -e "[shiftkey]\nname=GitHub Desktop\nbaseurl=https://mirror.mwt.me/ghd/rpm\nenabled=1\ngpgcheck=0\nrepo_gpgcheck=1\ngpgkey=https://mirror.mwt.me/ghd/gpgkey" > /etc/zypp/repos.d/shiftkey-desktop.repo'
 ```
 
 Then install GitHub Desktop:
@@ -94,6 +132,8 @@ Arch Linux users can install GitHub Desktop from the
 
 `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.
 
+GitHub Desktop is also available cross-platform as a [Flatpak](https://github.com/flathub/io.github.shiftey.Desktop) and [AppImage](https://appimage.github.io/GitHubDesktop/).
+
 ## Known issues
 
 If you're having troubles with Desktop, please refer to the [Known issues](docs/known-issues.md#linux)

From 7f8aa9eab8c8301b93738f18796e7d6dc58812b3 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Sun, 3 Apr 2022 12:28:32 -0300
Subject: [PATCH 44/97] reformat helper file related to spawning flatpak

---
 app/src/lib/helpers/linux.ts | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/app/src/lib/helpers/linux.ts b/app/src/lib/helpers/linux.ts
index 9a2f88c21f4..5595d2a537e 100644
--- a/app/src/lib/helpers/linux.ts
+++ b/app/src/lib/helpers/linux.ts
@@ -92,9 +92,8 @@ export function spawnEditor(
 ): ChildProcess {
   if (isFlatpakBuild()) {
     const actualpath = formatPathForFlatpak(path)
-    const EscapedworkingDirectory = formatWorkingDirectoryForFlatpak(
-      workingDirectory
-    )
+    const EscapedworkingDirectory =
+      formatWorkingDirectoryForFlatpak(workingDirectory)
     return spawn(
       'flatpak-spawn',
       ['--host', actualpath, EscapedworkingDirectory],

From 988b869541b6271c9c4a6e568c2293307ad18f44 Mon Sep 17 00:00:00 2001
From: Brendan Forster <brendan@github.com>
Date: Sun, 3 Apr 2022 13:52:37 -0300
Subject: [PATCH 45/97] Add additional validation to find the app-specific
 argument we require (#687 #689)

---
 app/src/main-process/main.ts | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/app/src/main-process/main.ts b/app/src/main-process/main.ts
index 71e4d9c9529..35b7f3bd1df 100644
--- a/app/src/main-process/main.ts
+++ b/app/src/main-process/main.ts
@@ -269,6 +269,16 @@ function handlePossibleProtocolLauncherArgs(args: ReadonlyArray<string>) {
     } else {
       log.error(`Malformed launch arguments received: ${args}`)
     }
+  } else if (__LINUX__) {
+    // we expect this call to have several parameters before the URL we want,
+    // so we should filter out the program name as well as any parameters that
+    // look like arguments to Electron
+    const argsWithoutParameters = args.filter(
+      a => !a.endsWith('github-desktop') && !a.startsWith('--')
+    )
+    if (argsWithoutParameters.length > 0) {
+      handleAppURL(argsWithoutParameters[0])
+    }
   } else if (args.length > 1) {
     handleAppURL(args[1])
   }

From 2c4e2224a24b3665c8b364fe9f36e1368b677f4e Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Sun, 3 Apr 2022 17:51:22 -0300
Subject: [PATCH 46/97] update Actions CI status in README

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index c09be89ddc4..82c5ad9d987 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 # [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)
+[![CI](https://github.com/shiftkey/desktop/actions/workflows/ci.yml/badge.svg)](https://github.com/shiftkey/desktop/actions/workflows/ci.yml)
 
 [GitHub Desktop](https://desktop.github.com/) is an open source [Electron](https://www.electronjs.org/)-based
 GitHub app. It is written in [TypeScript](https://www.typescriptlang.org) and

From ea492a6a28c9ce3897af9f0d552db4bc5127ca17 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Fri, 15 Apr 2022 13:22:29 -0300
Subject: [PATCH 47/97] move electron-winstaller to optional dependency to not
 block arm32 usage

---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 46348b289c1..e148de86592 100644
--- a/package.json
+++ b/package.json
@@ -161,7 +161,6 @@
     "@types/xml2js": "^0.4.11",
     "electron": "26.2.4",
     "electron-packager": "^17.1.1",
-    "electron-winstaller": "^5.0.0",
     "eslint-plugin-github": "^4.10.1",
     "markdownlint-cli": "^0.32.2",
     "reserved-words": "^0.1.2",
@@ -169,6 +168,7 @@
   },
   "optionalDependencies": {
     "electron-installer-debian": "3.1.0",
-    "electron-installer-redhat": "3.3.0"
+    "electron-installer-redhat": "3.3.0",
+    "electron-winstaller": "^5.0.0"
   }
 }

From 9cb6010c6536c26734abd7a12ba3b8316ed36c9b Mon Sep 17 00:00:00 2001
From: Etaash-mathamsetty
 <45927311+Etaash-mathamsetty@users.noreply.github.com>
Date: Thu, 21 Apr 2022 17:10:20 +0000
Subject: [PATCH 48/97] Add support for GNOME console and newer GNOME editors
 (#700)

* add support for gnome console

* Delete configurationCache.log

* Update linux.ts

* fix cap of gnome

* support new GNOME Text Editor

* support GNOME builder
---
 app/src/lib/shells/linux.ts | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/app/src/lib/shells/linux.ts b/app/src/lib/shells/linux.ts
index 393e0bb7e30..28bdeb898b0 100644
--- a/app/src/lib/shells/linux.ts
+++ b/app/src/lib/shells/linux.ts
@@ -6,6 +6,7 @@ import { pathExists as pathExistsLinux, spawnShell } from '../helpers/linux'
 
 export enum Shell {
   Gnome = 'GNOME Terminal',
+  GnomeConsole = 'GNOME Console',
   Mate = 'MATE Terminal',
   Tilix = 'Tilix',
   Terminator = 'Terminator',
@@ -34,6 +35,8 @@ function getShellPath(shell: Shell): Promise<string | null> {
   switch (shell) {
     case Shell.Gnome:
       return getPathIfAvailable('/usr/bin/gnome-terminal')
+    case Shell.GnomeConsole:
+      return getPathIfAvailable('/usr/bin/kgx')
     case Shell.Mate:
       return getPathIfAvailable('/usr/bin/mate-terminal')
     case Shell.Tilix:
@@ -68,6 +71,7 @@ export async function getAvailableShells(): Promise<
 > {
   const [
     gnomeTerminalPath,
+    gnomeConsolePath,
     mateTerminalPath,
     tilixPath,
     terminatorPath,
@@ -82,6 +86,7 @@ export async function getAvailableShells(): Promise<
     kittyPath,
   ] = await Promise.all([
     getShellPath(Shell.Gnome),
+    getShellPath(Shell.GnomeConsole),
     getShellPath(Shell.Mate),
     getShellPath(Shell.Tilix),
     getShellPath(Shell.Terminator),
@@ -101,6 +106,10 @@ export async function getAvailableShells(): Promise<
     shells.push({ shell: Shell.Gnome, path: gnomeTerminalPath })
   }
 
+  if (gnomeConsolePath) {
+    shells.push({ shell: Shell.GnomeConsole, path: gnomeConsolePath })
+  }
+
   if (mateTerminalPath) {
     shells.push({ shell: Shell.Mate, path: mateTerminalPath })
   }
@@ -159,6 +168,7 @@ export function launch(
   const shell = foundShell.shell
   switch (shell) {
     case Shell.Gnome:
+    case Shell.GnomeConsole:
     case Shell.Mate:
     case Shell.Tilix:
     case Shell.Terminator:

From ae4112f0cec26132d31fe22f428796d6d8baf7d8 Mon Sep 17 00:00:00 2001
From: theofficialgman <28281419+theofficialgman@users.noreply.github.com>
Date: Sat, 7 May 2022 10:50:19 -0400
Subject: [PATCH 49/97] Adds LXTerminal to terminals and Geany and Mousepad to
 supported editors (#711)

* add LXTerminal to supported terminals

* add geany to supported editors list

* Update linux.ts

* add mousepad to supported editors

* lint changed files

Co-authored-by: Brendan Forster <github@brendanforster.com>
---
 app/src/lib/shells/linux.ts | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/app/src/lib/shells/linux.ts b/app/src/lib/shells/linux.ts
index 28bdeb898b0..2eb1aa3b824 100644
--- a/app/src/lib/shells/linux.ts
+++ b/app/src/lib/shells/linux.ts
@@ -19,6 +19,7 @@ export enum Shell {
   XFCE = 'XFCE Terminal',
   Alacritty = 'Alacritty',
   Kitty = 'Kitty',
+  LXTerminal = 'LXDE Terminal',
 }
 
 export const Default = Shell.Gnome
@@ -61,6 +62,8 @@ function getShellPath(shell: Shell): Promise<string | null> {
       return getPathIfAvailable('/usr/bin/alacritty')
     case Shell.Kitty:
       return getPathIfAvailable('/usr/bin/kitty')
+    case Shell.LXTerminal:
+      return getPathIfAvailable('/usr/bin/lxterminal')
     default:
       return assertNever(shell, `Unknown shell: ${shell}`)
   }
@@ -84,6 +87,7 @@ export async function getAvailableShells(): Promise<
     xfcePath,
     alacrittyPath,
     kittyPath,
+    lxterminalPath,
   ] = await Promise.all([
     getShellPath(Shell.Gnome),
     getShellPath(Shell.GnomeConsole),
@@ -99,6 +103,7 @@ export async function getAvailableShells(): Promise<
     getShellPath(Shell.XFCE),
     getShellPath(Shell.Alacritty),
     getShellPath(Shell.Kitty),
+    getShellPath(Shell.LXTerminal),
   ])
 
   const shells: Array<IFoundShell<Shell>> = []
@@ -158,6 +163,10 @@ export async function getAvailableShells(): Promise<
     shells.push({ shell: Shell.Kitty, path: kittyPath })
   }
 
+  if (lxterminalPath) {
+    shells.push({ shell: Shell.LXTerminal, path: lxterminalPath })
+  }
+
   return shells
 }
 
@@ -193,6 +202,8 @@ export function launch(
         '--directory',
         path,
       ])
+    case Shell.LXTerminal:
+      return spawnShell(foundShell.path, ['--working-directory=' + path])
     default:
       return assertNever(shell, `Unknown shell: ${shell}`)
   }

From 481ae0d4c580049beabb48cf3e00a476afcac9ae Mon Sep 17 00:00:00 2001
From: theofficialgman <28281419+theofficialgman@users.noreply.github.com>
Date: Sat, 7 May 2022 14:04:01 -0400
Subject: [PATCH 50/97] add armv7l support to scripts (#712)

* add armv7l support to scripts

* lint fix new files

Co-authored-by: Brendan Forster <github@brendanforster.com>
---
 script/build.ts          | 6 +++++-
 script/dist-info.ts      | 8 ++++++--
 script/package-debian.ts | 2 +-
 3 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/script/build.ts b/script/build.ts
index 03a68e34dd3..de2e6818688 100755
--- a/script/build.ts
+++ b/script/build.ts
@@ -136,7 +136,11 @@ function packageApp() {
       targetArch = os.arch()
     }
 
-    if (targetArch === 'arm64' || targetArch === 'x64') {
+    if (
+      targetArch === 'arm64' ||
+      targetArch === 'x64' ||
+      targetArch === 'armv7l'
+    ) {
       return targetArch
     }
 
diff --git a/script/dist-info.ts b/script/dist-info.ts
index 88a0bcbd4b4..74c4301673c 100644
--- a/script/dist-info.ts
+++ b/script/dist-info.ts
@@ -112,11 +112,12 @@ export const isPublishable = () =>
 export const getChannel = () =>
   process.env.RELEASE_CHANNEL ?? process.env.NODE_ENV ?? 'development'
 
-export function getDistArchitecture(): 'arm64' | 'x64' {
+export function getDistArchitecture(): 'arm64' | 'x64' | 'armv7l' {
   // If a specific npm_config_arch is set, we use that one instead of the OS arch (to support cross compilation)
   if (
     process.env.npm_config_arch === 'arm64' ||
-    process.env.npm_config_arch === 'x64'
+    process.env.npm_config_arch === 'x64' ||
+    process.env.npm_config_arch === 'armv7l'
   ) {
     return process.env.npm_config_arch
   }
@@ -124,6 +125,9 @@ export function getDistArchitecture(): 'arm64' | 'x64' {
   if (process.arch === 'arm64') {
     return 'arm64'
   }
+  if (process.arch === 'armv7l') {
+    return 'armv7l'
+  }
 
   // TODO: Check if it's x64 running on an arm64 Windows with IsWow64Process2
   // More info: https://www.rudyhuyn.com/blog/2017/12/13/how-to-detect-that-your-x86-application-runs-on-windows-on-arm/
diff --git a/script/package-debian.ts b/script/package-debian.ts
index 15314d519dd..fc6ae2cf57c 100644
--- a/script/package-debian.ts
+++ b/script/package-debian.ts
@@ -16,7 +16,7 @@ type DebianOptions = {
   // required
   src: string
   dest: string
-  arch: 'amd64' | 'i386' | 'arm64'
+  arch: 'amd64' | 'i386' | 'arm64' | 'armhf'
   // optional
   description?: string
   productDescription?: string

From f9e9dd40d5411922ab418e9f429732fc0e2df98f Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Wed, 20 Dec 2023 09:19:43 -0400
Subject: [PATCH 51/97] appease typechecker by detecting arm architecture when
 running Node 18

---
 script/dist-info.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/script/dist-info.ts b/script/dist-info.ts
index 74c4301673c..420444f7448 100644
--- a/script/dist-info.ts
+++ b/script/dist-info.ts
@@ -125,7 +125,7 @@ export function getDistArchitecture(): 'arm64' | 'x64' | 'armv7l' {
   if (process.arch === 'arm64') {
     return 'arm64'
   }
-  if (process.arch === 'armv7l') {
+  if (process.arch === 'arm') {
     return 'armv7l'
   }
 

From bf113217eac63a63214ff10bda04e7db848257bd Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Thu, 7 Jul 2022 12:46:31 -0300
Subject: [PATCH 52/97] Linux build does not have the equivalent of beta
 channel

---
 app/src/ui/about/about.tsx | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/app/src/ui/about/about.tsx b/app/src/ui/about/about.tsx
index 3da23954011..3c4abeeaf35 100644
--- a/app/src/ui/about/about.tsx
+++ b/app/src/ui/about/about.tsx
@@ -317,6 +317,10 @@ export class About extends React.Component<IAboutProps, IAboutState> {
       return
     }
 
+    if (__LINUX__) {
+      return
+    }
+
     return (
       <div>
         <p className="no-padding">Looking for the latest features?</p>

From d554aeb09028c7c1e01eb61258f33e467afcc245 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Sat, 15 Oct 2022 16:34:00 -0300
Subject: [PATCH 53/97] allow for packaging parameters to be derived from
 process.arch (#774)

---
 script/package-debian.ts           | 13 ++++++++++++-
 script/package-electron-builder.ts | 13 ++++++++++++-
 script/package-redhat.ts           | 15 +++++++++++++--
 3 files changed, 37 insertions(+), 4 deletions(-)

diff --git a/script/package-debian.ts b/script/package-debian.ts
index fc6ae2cf57c..9a918473070 100644
--- a/script/package-debian.ts
+++ b/script/package-debian.ts
@@ -9,6 +9,17 @@ import { rename } from 'fs-extra'
 import { getVersion } from '../app/package-info'
 import { getDistPath, getDistRoot } from './dist-info'
 
+function getArchitecture() {
+  switch (process.arch) {
+    case 'arm64':
+      return 'arm64'
+    case 'arm':
+      return 'armhf'
+    default:
+      return 'amd64'
+  }
+}
+
 const distRoot = getDistRoot()
 
 // best guess based on documentation
@@ -39,7 +50,7 @@ type DebianOptions = {
 const options: DebianOptions = {
   src: getDistPath(),
   dest: distRoot,
-  arch: 'amd64',
+  arch: getArchitecture(),
   description: 'Simple collaboration from your desktop',
   productDescription:
     'This is the unofficial port of GitHub Desktop for Linux distributions',
diff --git a/script/package-electron-builder.ts b/script/package-electron-builder.ts
index 7b26f48b2b5..6292c28b9f4 100644
--- a/script/package-electron-builder.ts
+++ b/script/package-electron-builder.ts
@@ -9,6 +9,17 @@ const globPromise = promisify(glob)
 
 import { getDistPath, getDistRoot } from './dist-info'
 
+function getArchitecture() {
+  switch (process.arch) {
+    case 'arm64':
+      return '--arm64'
+    case 'arm':
+      return '--armv7l'
+    default:
+      return '--x64'
+  }
+}
+
 export async function packageElectronBuilder(): Promise<Array<string>> {
   const distPath = getDistPath()
   const distRoot = getDistRoot()
@@ -27,7 +38,7 @@ export async function packageElectronBuilder(): Promise<Array<string>> {
     'build',
     '--prepackaged',
     distPath,
-    '--x64',
+    getArchitecture(),
     '--config',
     configPath,
   ]
diff --git a/script/package-redhat.ts b/script/package-redhat.ts
index 66ef2f39f37..37bd3819293 100644
--- a/script/package-redhat.ts
+++ b/script/package-redhat.ts
@@ -9,6 +9,17 @@ import { rename } from 'fs-extra'
 import { getVersion } from '../app/package-info'
 import { getDistPath, getDistRoot } from './dist-info'
 
+function getArchitecture() {
+  switch (process.arch) {
+    case 'arm64':
+      return 'aarch64'
+    case 'arm':
+      return 'armv7l'
+    default:
+      return 'x86_64'
+  }
+}
+
 const distRoot = getDistRoot()
 
 // best guess based on documentation
@@ -16,7 +27,7 @@ type RedhatOptions = {
   // required
   src: string
   dest: string
-  arch: 'x86_64'
+  arch: string
   // optional
   description?: string
   productDescription?: string
@@ -36,7 +47,7 @@ type RedhatOptions = {
 const options: RedhatOptions = {
   src: getDistPath(),
   dest: distRoot,
-  arch: 'x86_64',
+  arch: getArchitecture(),
   description: 'Simple collaboration from your desktop',
   productDescription:
     'This is the unofficial port of GitHub Desktop for Linux distributions',

From f2aa406b3c4ddf88898a2253b181a15a42312a1e Mon Sep 17 00:00:00 2001
From: Sarim Khan <sarim2005@gmail.com>
Date: Fri, 17 Feb 2023 19:43:51 +0600
Subject: [PATCH 54/97] Fix args processing on first launch on linux (#793)

---
 app/src/main-process/main.ts | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/app/src/main-process/main.ts b/app/src/main-process/main.ts
index 35b7f3bd1df..b484101b68c 100644
--- a/app/src/main-process/main.ts
+++ b/app/src/main-process/main.ts
@@ -151,6 +151,10 @@ if (__WIN32__ && process.argv.length > 1) {
   }
 }
 
+if (__LINUX__ && process.argv.length > 1) {
+  handlePossibleProtocolLauncherArgs(process.argv)
+}
+
 initializeDesktopNotifications()
 
 function handleAppURL(url: string) {

From f04f96b2fa1d7b665181e9a474760d1ad4d1c442 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Mon, 20 Feb 2023 15:38:16 -0400
Subject: [PATCH 55/97] refresh docs to move away from PackageCloud (#836)

---
 README.md            | 113 ++++++++++++++++++-------------------------
 docs/known-issues.md |  18 +++++++
 2 files changed, 66 insertions(+), 65 deletions(-)

diff --git a/README.md b/README.md
index 82c5ad9d987..c2e6ccd7b68 100644
--- a/README.md
+++ b/README.md
@@ -23,122 +23,105 @@ uses [React](https://reactjs.org/).
 This repository contains specific patches on top of the upstream
 `desktop/desktop` repository to support Linux usage.
 
-It also hosts preview packages for various Linux distributions:
+It also publishes [releases](https://github.com/shiftkey/desktop/releases) for various Linux distributions:
 
  - AppImage (`.AppImage`)
  - Debian (`.deb`)
  - RPM (`.rpm`)
 
-Check out the [latest releases](https://github.com/shiftkey/desktop/releases) to
-help out with testing on your distribution.
-
-## Repositories
+## Installation via package manager
 
 You can use your operating system's package manager to install `github-desktop` and
-keep it up to date on Debian/RPM based distributions. There are two options for this:
-
-* A [PackageCloud](https://packagecloud.io/) repository with excellent global connectivity
-  but very limited bandwidth. This option will stop working each month when the bandwidth
-  limit is reached.
-* A [mirror](https://mattwthomas.com/mirrors/) in the US which has effectively infinite
-  bandwidth and performs well in most regions (especially the Americas and Europe).
+keep it up to date on Debian and RPM-based distributions.
 
-PackageCloud, which both options depend on, is not a free service. 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.
+### Debian/Ubuntu
 
-### Debian/Ubuntu distributions
+There are two APT package feeds available, both hosted in the US. You only need
+to add one or the other here, as both of these are generated based on the
+releases from this repository.
 
-First install our GPG certificate:
+#### [@shiftkey](https://github.com/shiftkey) package feed
 
-```sh
-$ wget -qO - https://mirror.mwt.me/ghd/gpgkey | sudo tee /etc/apt/trusted.gpg.d/shiftkey-desktop.asc > /dev/null
 ```
-
-To setup the package repository, run one of these commands:
-
-```sh
-# if you want to use packagecloud.io
-$ sudo sh -c 'echo "deb [arch=amd64] https://packagecloud.io/shiftkey/desktop/any/ any main" > /etc/apt/sources.list.d/packagecloud-shiftkey-desktop.list'
-
-# if you want to use the US mirror
-$ sudo sh -c 'echo "deb [arch=amd64] https://mirror.mwt.me/ghd/deb/ any main" > /etc/apt/sources.list.d/packagecloud-shiftkey-desktop.list'
+wget -qO - https://apt.packages.shiftkey.dev/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/shiftkey-packages.asc > /dev/null
+sudo sh -c 'echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/shiftkey-packages.asc] https://apt.packages.shiftkey.dev/ubuntu/ any main" > /etc/apt/sources.list.d/shiftkey-packages.list'
 ```
 
-Then install GitHub Desktop:
+#### [@mwt](https://github.com/mwt) package feed
 
 ```sh
-$ sudo apt update && sudo apt install github-desktop
+wget -qO - https://mirror.mwt.me/ghd/gpgkey | gpg --dearmor | sudo tee /etc/apt/keyrings/mwt-desktop.asc > /dev/null
+sudo sh -c 'echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/mwt-desktop.asc] https://mirror.mwt.me/ghd/deb/ any main" > /etc/apt/sources.list.d/mwt-desktop.list'
 ```
 
-### Red Hat/CentOS/Fedora distributions
+#### Installation
 
-First install our GPG certificate:
+Once you have a feed configured, run this command to install the application:
 
 ```sh
-$ sudo rpm --import https://mirror.mwt.me/ghd/gpgkey
+sudo apt update && sudo apt install github-desktop
 ```
 
-To setup the package repository, run one of these commands:
+### Red Hat/CentOS/Fedora/OpenSUSE
 
-```sh
-# if you want to use packagecloud.io
-$ 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://mirror.mwt.me/ghd/gpgkey" > /etc/yum.repos.d/shiftkey-desktop.repo'
-
-# if you want to use the US mirror
-$ sudo sh -c 'echo -e "[shiftkey]\nname=GitHub Desktop\nbaseurl=https://mirror.mwt.me/ghd/rpm\nenabled=1\ngpgcheck=0\nrepo_gpgcheck=1\ngpgkey=https://mirror.mwt.me/ghd/gpgkey" > /etc/yum.repos.d/shiftkey-desktop.repo'
-```
+There are two RPM package feeds available, both hosted in the US. You only need
+to add one or the other here, as both of these are generated based on the
+releases from this repository.
 
-Then install GitHub Desktop:
+#### [@shiftkey](https://github.com/shiftkey) package feed
 
-```sh
-# if yum is your package manager
-$ sudo yum install github-desktop
-
-# if dnf is your package manager
-$ sudo dnf install github-desktop
+```
+sudo rpm --import https://rpm.packages.shiftkey.dev/gpg.key
+sudo sh -c 'echo -e "[shiftkey-packages]\nname=GitHub Desktop\nbaseurl=https://rpm.packages.shiftkey.dev/rpm/\nenabled=1\ngpgcheck=1\nrepo_gpgcheck=1\ngpgkey=https://rpm.packages.shiftkey.dev/gpg.key" > /etc/yum.repos.d/shiftkey-packages.repo'
 ```
 
-### OpenSUSE distribution
-
-
-First install our GPG certificate:
+#### [@mwt](https://github.com/mwt) package feed
 
 ```sh
-$ sudo rpm --import https://mirror.mwt.me/ghd/gpgkey
+sudo rpm --import https://mirror.mwt.me/ghd/gpgkey
+sudo sh -c 'echo -e "[mwt-packages]\nname=GitHub Desktop\nbaseurl=https://mirror.mwt.me/ghd/rpm\nenabled=1\ngpgcheck=0\nrepo_gpgcheck=1\ngpgkey=https://mirror.mwt.me/ghd/gpgkey" > /etc/yum.repos.d/mwt-packages.repo'
 ```
 
-To setup the package repository, run one of these commands:
+#### Installation
 
-```sh
-# if you want to use packagecloud.io
-$ 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://mirror.mwt.me/ghd/gpgkey" > /etc/zypp/repos.d/shiftkey-desktop.repo'
+Once you have a feed configured, run this command to install the application:
 
-# if you want to use the US mirror
-$ sudo sh -c 'echo -e "[shiftkey]\nname=GitHub Desktop\nbaseurl=https://mirror.mwt.me/ghd/rpm\nenabled=1\ngpgcheck=0\nrepo_gpgcheck=1\ngpgkey=https://mirror.mwt.me/ghd/gpgkey" > /etc/zypp/repos.d/shiftkey-desktop.repo'
-```
+```sh
+# if yum is your package manager
+sudo yum install github-desktop
 
-Then install GitHub Desktop:
+# if dnf is your package manager
+sudo dnf install github-desktop
 
-```sh
 # if zypper is your package manager
-$ sudo zypper ref && sudo zypper in github-desktop
+sudo zypper ref && sudo zypper in github-desktop
 ```
 
 ## Other Distributions
 
-Arch Linux users can install GitHub Desktop from the
-[AUR](https://aur.archlinux.org/packages/github-desktop-bin/).
+### Arch Linux
+
+Arch Linux users can install GitHub Desktop from the [AUR](https://aur.archlinux.org/packages/github-desktop-bin/).
 
 `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.
 
+### Cross-Distribution Packages
+
 GitHub Desktop is also available cross-platform as a [Flatpak](https://github.com/flathub/io.github.shiftey.Desktop) and [AppImage](https://appimage.github.io/GitHubDesktop/).
 
+### deb-get
+
+Debian/Ubuntu users can also install directly from this repository using [`deb-get`](https://github.com/wimpysworld/deb-get): `deb-get install github-desktop`.
+
 ## Known issues
 
 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.
 
+If your package manager is still trying to reach PackageCloud, refer to the
+[cleanup instructions](docs/known-issues.md#the-packagecloud-package-feed-is-no-longer-working)
+for details about migrating away.
+
 ## More information
 
 Please check out the [README](https://github.com/desktop/desktop#github-desktop)
diff --git a/docs/known-issues.md b/docs/known-issues.md
index e0cc67e722e..cbddf7f67ba 100644
--- a/docs/known-issues.md
+++ b/docs/known-issues.md
@@ -231,6 +231,24 @@ If you see an error that says "Not enough resources are available to process thi
 
 ## Linux
 
+### The PackageCloud package feed is no longer working
+
+The PackageCloud feed has been closed down. If you are seeing errors about this you should remove the configuration for this feed and refer to the [README](https://github.com/shiftkey/desktop#repositories)
+for the new settings.
+
+#### APT configuration
+
+```
+sudo rm /etc/apt/trusted.gpg.d/shiftkey-desktop.asc
+sudo rm /etc/apt/sources.list.d/packagecloud-shiftkey-desktop.list
+```
+
+#### RPM configuration
+
+```
+sudo rm /etc/apt/sources.list.d/packagecloud-shiftkey-desktop.list
+```
+
 ### 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.

From 7d152f68d2645f2be76f56893cef262b4c02dafb Mon Sep 17 00:00:00 2001
From: "Matthew W. Thomas" <matthew@mwt.me>
Date: Mon, 20 Feb 2023 16:11:29 -0600
Subject: [PATCH 56/97] Update readme to use new mirror origin (#838)

---
 README.md | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index c2e6ccd7b68..da50bdb43ba 100644
--- a/README.md
+++ b/README.md
@@ -50,8 +50,8 @@ sudo sh -c 'echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/shiftkey-packages.
 #### [@mwt](https://github.com/mwt) package feed
 
 ```sh
-wget -qO - https://mirror.mwt.me/ghd/gpgkey | gpg --dearmor | sudo tee /etc/apt/keyrings/mwt-desktop.asc > /dev/null
-sudo sh -c 'echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/mwt-desktop.asc] https://mirror.mwt.me/ghd/deb/ any main" > /etc/apt/sources.list.d/mwt-desktop.list'
+wget -qO - https://mirror.mwt.me/shiftkey-desktop/gpgkey | gpg --dearmor | sudo tee /etc/apt/keyrings/mwt-desktop.asc > /dev/null
+sudo sh -c 'echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/mwt-desktop.asc] https://mirror.mwt.me/shiftkey-desktop/deb/ any main" > /etc/apt/sources.list.d/mwt-desktop.list'
 ```
 
 #### Installation
@@ -78,8 +78,8 @@ sudo sh -c 'echo -e "[shiftkey-packages]\nname=GitHub Desktop\nbaseurl=https://r
 #### [@mwt](https://github.com/mwt) package feed
 
 ```sh
-sudo rpm --import https://mirror.mwt.me/ghd/gpgkey
-sudo sh -c 'echo -e "[mwt-packages]\nname=GitHub Desktop\nbaseurl=https://mirror.mwt.me/ghd/rpm\nenabled=1\ngpgcheck=0\nrepo_gpgcheck=1\ngpgkey=https://mirror.mwt.me/ghd/gpgkey" > /etc/yum.repos.d/mwt-packages.repo'
+sudo rpm --import https://mirror.mwt.me/shiftkey-desktop/gpgkey
+sudo sh -c 'echo -e "[mwt-packages]\nname=GitHub Desktop\nbaseurl=https://mirror.mwt.me/shiftkey-desktop/rpm\nenabled=1\ngpgcheck=1\nrepo_gpgcheck=1\ngpgkey=https://mirror.mwt.me/shiftkey-desktop/gpgkey" > /etc/yum.repos.d/mwt-packages.repo'
 ```
 
 #### Installation

From dc95aa254c3d03b9ccb3e221350a9c3cd0026b36 Mon Sep 17 00:00:00 2001
From: Jumpei Ogawa <phanect@users.noreply.github.com>
Date: Wed, 22 Feb 2023 10:10:26 +0900
Subject: [PATCH 57/97] doc: rename GPG public key file to use .gpg extension
 (#839)

See: https://github.com/shiftkey/desktop/issues/834#issuecomment-1439099319
---
 README.md | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index da50bdb43ba..89d78570ff4 100644
--- a/README.md
+++ b/README.md
@@ -43,15 +43,15 @@ releases from this repository.
 #### [@shiftkey](https://github.com/shiftkey) package feed
 
 ```
-wget -qO - https://apt.packages.shiftkey.dev/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/shiftkey-packages.asc > /dev/null
-sudo sh -c 'echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/shiftkey-packages.asc] https://apt.packages.shiftkey.dev/ubuntu/ any main" > /etc/apt/sources.list.d/shiftkey-packages.list'
+wget -qO - https://apt.packages.shiftkey.dev/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/shiftkey-packages.gpg > /dev/null
+sudo sh -c 'echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/shiftkey-packages.gpg] https://apt.packages.shiftkey.dev/ubuntu/ any main" > /etc/apt/sources.list.d/shiftkey-packages.list'
 ```
 
 #### [@mwt](https://github.com/mwt) package feed
 
 ```sh
-wget -qO - https://mirror.mwt.me/shiftkey-desktop/gpgkey | gpg --dearmor | sudo tee /etc/apt/keyrings/mwt-desktop.asc > /dev/null
-sudo sh -c 'echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/mwt-desktop.asc] https://mirror.mwt.me/shiftkey-desktop/deb/ any main" > /etc/apt/sources.list.d/mwt-desktop.list'
+wget -qO - https://mirror.mwt.me/shiftkey-desktop/gpgkey | gpg --dearmor | sudo tee /etc/apt/keyrings/mwt-desktop.gpg > /dev/null
+sudo sh -c 'echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/mwt-desktop.gpg] https://mirror.mwt.me/shiftkey-desktop/deb/ any main" > /etc/apt/sources.list.d/mwt-desktop.list'
 ```
 
 #### Installation

From 6f123161ba4359c9928b85b867a82c43212b9a4e Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Sun, 26 Feb 2023 10:36:24 -0400
Subject: [PATCH 58/97] patch `electron-installer-redhat` to disable
 `.build-id` links in directory (#837)

* add patch-package so we can patch a node_modules package

* generate patch to disable build-id contents for RPM package

* move patch-package command to post-install script

* regenerate patch file
---
 package.json                                  |   2 +
 patches/electron-installer-redhat+3.3.0.patch |  10 ++
 script/post-install.ts                        |   8 ++
 yarn.lock                                     | 133 +++++++++++++++---
 4 files changed, 135 insertions(+), 18 deletions(-)
 create mode 100644 patches/electron-installer-redhat+3.3.0.patch

diff --git a/package.json b/package.json
index e148de86592..c16043792a0 100644
--- a/package.json
+++ b/package.json
@@ -163,6 +163,8 @@
     "electron-packager": "^17.1.1",
     "eslint-plugin-github": "^4.10.1",
     "markdownlint-cli": "^0.32.2",
+    "patch-package": "^6.5.1",
+    "postinstall-postinstall": "^2.1.0",
     "reserved-words": "^0.1.2",
     "tsconfig-paths": "^3.9.0"
   },
diff --git a/patches/electron-installer-redhat+3.3.0.patch b/patches/electron-installer-redhat+3.3.0.patch
new file mode 100644
index 00000000000..1c89e87c8fc
--- /dev/null
+++ b/patches/electron-installer-redhat+3.3.0.patch
@@ -0,0 +1,10 @@
+diff --git a/node_modules/electron-installer-redhat/resources/spec.ejs b/node_modules/electron-installer-redhat/resources/spec.ejs
+index 48f1dfd..360aec5 100644
+--- a/node_modules/electron-installer-redhat/resources/spec.ejs
++++ b/node_modules/electron-installer-redhat/resources/spec.ejs
+@@ -1,4 +1,5 @@
+ %define _binary_payload w<%= compressionLevel %>.xzdio
++%define _build_id_links none
+ 
+ Name: <%= name %>
+ Version: <%= version %>
diff --git a/script/post-install.ts b/script/post-install.ts
index 0665cc3bac8..3f79a3d1f2d 100644
--- a/script/post-install.ts
+++ b/script/post-install.ts
@@ -69,4 +69,12 @@ findYarnVersion(path => {
   if (result.status !== 0) {
     process.exit(result.status || 1)
   }
+
+  if (process.platform === 'linux') {
+    result = spawnSync('node', getYarnArgs([path, 'patch-package']), options)
+
+    if (result.status !== 0) {
+      process.exit(result.status || 1)
+    }
+  }
 })
diff --git a/yarn.lock b/yarn.lock
index 0685260c7b5..7856f2e3d60 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2079,6 +2079,11 @@
   resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
   integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
 
+"@yarnpkg/lockfile@^1.1.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31"
+  integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==
+
 abab@^2.0.6:
   version "2.0.6"
   resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
@@ -2747,7 +2752,7 @@ braces@^2.3.1:
     split-string "^3.0.2"
     to-regex "^3.0.1"
 
-braces@^3.0.1, braces@~3.0.2:
+braces@^3.0.1, braces@^3.0.2, braces@~3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
   integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
@@ -2928,15 +2933,7 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.2.0, chalk@^2.4.2:
     escape-string-regexp "^1.0.5"
     supports-color "^5.3.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==
-  dependencies:
-    ansi-styles "^4.1.0"
-    supports-color "^7.1.0"
-
-chalk@^4.1.0:
+chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2:
   version "4.1.2"
   resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
   integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
@@ -2976,6 +2973,11 @@ chromium-pickle-js@^0.2.0:
   resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205"
   integrity sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=
 
+ci-info@^2.0.0:
+  version "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.2.0:
   version "3.9.0"
   resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4"
@@ -3227,6 +3229,17 @@ cross-spawn@^5.1.0:
     shebang-command "^1.2.0"
     which "^1.2.9"
 
+cross-spawn@^6.0.5:
+  version "6.0.5"
+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+  integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+  dependencies:
+    nice-try "^1.0.4"
+    path-key "^2.0.1"
+    semver "^5.5.0"
+    shebang-command "^1.2.0"
+    which "^1.2.9"
+
 cross-spawn@^7.0.1:
   version "7.0.2"
   resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.2.tgz#d0d7dcfa74e89115c7619f4f721a94e1fdb716d6"
@@ -4680,6 +4693,13 @@ find-up@^5.0.0:
     locate-path "^6.0.0"
     path-exists "^4.0.0"
 
+find-yarn-workspace-root@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz#f47fb8d239c900eb78179aa81b66673eac88f7bd"
+  integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==
+  dependencies:
+    micromatch "^4.0.2"
+
 flat-cache@^3.0.4:
   version "3.2.0"
   resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee"
@@ -5559,6 +5579,13 @@ is-callable@^1.2.7:
   resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
   integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
 
+is-ci@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
+  integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==
+  dependencies:
+    ci-info "^2.0.0"
+
 is-core-module@^2.13.0:
   version "2.13.1"
   resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384"
@@ -5859,7 +5886,7 @@ is-windows@^1.0.2:
   resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
   integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
 
-is-wsl@^2.2.0:
+is-wsl@^2.1.1, is-wsl@^2.2.0:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
   integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
@@ -6670,6 +6697,13 @@ klaw-sync@^3.0.0:
   dependencies:
     graceful-fs "^4.1.11"
 
+klaw-sync@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c"
+  integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==
+  dependencies:
+    graceful-fs "^4.1.11"
+
 kleur@^3.0.3:
   version "3.0.3"
   resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
@@ -7059,6 +7093,14 @@ micromatch@^4.0.0, micromatch@^4.0.4:
     braces "^3.0.1"
     picomatch "^2.2.3"
 
+micromatch@^4.0.2:
+  version "4.0.5"
+  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
+  integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
+  dependencies:
+    braces "^3.0.2"
+    picomatch "^2.3.1"
+
 mime-db@1.52.0:
   version "1.52.0"
   resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
@@ -7207,6 +7249,11 @@ neo-async@^2.6.2:
   resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
   integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
 
+nice-try@^1.0.4:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+  integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+
 no-case@^3.0.4:
   version "3.0.4"
   resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
@@ -7470,6 +7517,14 @@ onetime@^6.0.0:
   dependencies:
     mimic-fn "^4.0.0"
 
+open@^7.4.2:
+  version "7.4.2"
+  resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321"
+  integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==
+  dependencies:
+    is-docker "^2.0.0"
+    is-wsl "^2.1.1"
+
 open@^9.1.0:
   version "9.1.0"
   resolved "https://registry.yarnpkg.com/open/-/open-9.1.0.tgz#684934359c90ad25742f5a26151970ff8c6c80b6"
@@ -7634,6 +7689,26 @@ pascalcase@^0.1.1:
   resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
   integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
 
+patch-package@^6.5.1:
+  version "6.5.1"
+  resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.5.1.tgz#3e5d00c16997e6160291fee06a521c42ac99b621"
+  integrity sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA==
+  dependencies:
+    "@yarnpkg/lockfile" "^1.1.0"
+    chalk "^4.1.2"
+    cross-spawn "^6.0.5"
+    find-yarn-workspace-root "^2.0.0"
+    fs-extra "^9.0.0"
+    is-ci "^2.0.0"
+    klaw-sync "^6.0.0"
+    minimist "^1.2.6"
+    open "^7.4.2"
+    rimraf "^2.6.3"
+    semver "^5.6.0"
+    slash "^2.0.0"
+    tmp "^0.0.33"
+    yaml "^1.10.2"
+
 path-exists@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
@@ -7649,6 +7724,11 @@ path-is-absolute@^1.0.0:
   resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
   integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
 
+path-key@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+  integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==
+
 path-key@^3.0.0, path-key@^3.1.0:
   version "3.1.1"
   resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
@@ -7701,7 +7781,7 @@ picomatch@^2.0.4, picomatch@^2.2.1:
   resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
   integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
 
-picomatch@^2.2.3:
+picomatch@^2.2.3, picomatch@^2.3.1:
   version "2.3.1"
   resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
   integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
@@ -7791,6 +7871,11 @@ postcss@^8.4.7:
     picocolors "^1.0.0"
     source-map-js "^1.0.2"
 
+postinstall-postinstall@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz#4f7f77441ef539d1512c40bd04c71b06a4704ca3"
+  integrity sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ==
+
 prelude-ls@^1.2.1:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
@@ -8274,6 +8359,13 @@ rimraf@^2.5.2:
   dependencies:
     glob "^7.0.5"
 
+rimraf@^2.6.3:
+  version "2.7.1"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+  integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+  dependencies:
+    glob "^7.1.3"
+
 rimraf@^3.0.0, rimraf@^3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
@@ -8414,12 +8506,12 @@ semver-compare@^1.0.0:
   resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
   integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
 
-"semver@2 || 3 || 4 || 5":
-  version "5.4.1"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
-  integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==
+"semver@2 || 3 || 4 || 5", semver@^5.6.0:
+  version "5.7.1"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+  integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
 
-semver@^5.7.2:
+semver@^5.5.0, semver@^5.7.2:
   version "5.7.2"
   resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
   integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
@@ -9142,7 +9234,7 @@ tmp-promise@^3.0.2:
   dependencies:
     tmp "^0.2.0"
 
-tmp@0.0.33:
+tmp@0.0.33, tmp@^0.0.33:
   version "0.0.33"
   resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
   integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
@@ -9999,6 +10091,11 @@ yallist@^4.0.0:
   resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
   integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
 
+yaml@^1.10.2:
+  version "1.10.2"
+  resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
+  integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
+
 yaml@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.4.0.tgz#b729a3ef7e35bdc5ece8f28900e20a9b41510fc3"

From 7414e7f70e0711e28c3e80ce6215e18105a4935f Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Sun, 26 Feb 2023 12:45:52 -0400
Subject: [PATCH 59/97] Delete FUNDING.yml

---
 .github/FUNDING.yml | 1 -
 1 file changed, 1 deletion(-)
 delete mode 100644 .github/FUNDING.yml

diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
deleted file mode 100644
index 6905d384f6a..00000000000
--- a/.github/FUNDING.yml
+++ /dev/null
@@ -1 +0,0 @@
-github: shiftkey

From 2113e7723289c4d2c36782351fb71acdba42b997 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Wed, 1 Mar 2023 13:31:39 -0400
Subject: [PATCH 60/97] change keyring path to more predictable directory
 (#843)

---
 README.md | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index 89d78570ff4..d382f048941 100644
--- a/README.md
+++ b/README.md
@@ -43,15 +43,15 @@ releases from this repository.
 #### [@shiftkey](https://github.com/shiftkey) package feed
 
 ```
-wget -qO - https://apt.packages.shiftkey.dev/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/shiftkey-packages.gpg > /dev/null
-sudo sh -c 'echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/shiftkey-packages.gpg] https://apt.packages.shiftkey.dev/ubuntu/ any main" > /etc/apt/sources.list.d/shiftkey-packages.list'
+wget -qO - https://apt.packages.shiftkey.dev/gpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/shiftkey-packages.gpg > /dev/null
+sudo sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/shiftkey-packages.gpg] https://apt.packages.shiftkey.dev/ubuntu/ any main" > /etc/apt/sources.list.d/shiftkey-packages.list'
 ```
 
 #### [@mwt](https://github.com/mwt) package feed
 
 ```sh
-wget -qO - https://mirror.mwt.me/shiftkey-desktop/gpgkey | gpg --dearmor | sudo tee /etc/apt/keyrings/mwt-desktop.gpg > /dev/null
-sudo sh -c 'echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/mwt-desktop.gpg] https://mirror.mwt.me/shiftkey-desktop/deb/ any main" > /etc/apt/sources.list.d/mwt-desktop.list'
+wget -qO - https://mirror.mwt.me/shiftkey-desktop/gpgkey | gpg --dearmor | sudo tee /usr/share/keyrings/mwt-desktop.gpg > /dev/null
+sudo sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/mwt-desktop.gpg] https://mirror.mwt.me/shiftkey-desktop/deb/ any main" > /etc/apt/sources.list.d/mwt-desktop.list'
 ```
 
 #### Installation

From 89a82497343a916012cd2d4d3d913ee1c80ae7eb Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Fri, 7 Apr 2023 12:05:58 -0300
Subject: [PATCH 61/97] upgrade to supported Ubuntu runner (#863)

---
 .github/workflows/ci.yml | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 27076ff7464..c4af25d754c 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -46,17 +46,17 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        os: [macos-13, windows-2019, ubuntu-18.04]
+        os: [macos-13, windows-2019, ubuntu-20.04]
         arch: [x64, arm64]
         include:
           - os: macos-13
             friendlyName: macOS
           - os: windows-2019
             friendlyName: Windows
-          - os: ubuntu-18.04
+          - os: ubuntu-20.04
             friendlyName: Ubuntu
         exclude:
-          - os: ubuntu-18.04
+          - os: ubuntu-20.04
             arch: arm64
     timeout-minutes: 60
     env:
@@ -105,11 +105,11 @@ jobs:
         run: yarn test:script
       - name: Package application
         run: yarn run package
-        if: ${{ matrix.os == 'ubuntu-18.04' && matrix.arch == 'x64' }}
+        if: ${{ matrix.os == 'ubuntu-20.04' && matrix.arch == 'x64' }}
       - name: Create Release
         uses: softprops/action-gh-release@v1
         if:
-          ${{ matrix.os == 'ubuntu-18.04' && startsWith(github.ref,
+          ${{ matrix.os == 'ubuntu-20.04' && startsWith(github.ref,
           'refs/tags/') }}
         with:
           files: |

From d00af01a52bf2179896429bf8cb103301d422320 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 7 Apr 2023 15:24:34 +0000
Subject: [PATCH 62/97] Bump electron-installer-redhat from 3.3.0 to 3.4.0
 (#848)

* Bump electron-installer-redhat from 3.3.0 to 3.4.0

Dependabot couldn't find the original pull request head commit, 6b63cfc1af923f12c049530d60f311d5434c2e3f.

* regenerate patch file

---------

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Brendan Forster <github@brendanforster.com>
---
 package.json                                  |  2 +-
 ... => electron-installer-redhat+3.4.0.patch} |  6 ++--
 yarn.lock                                     | 36 ++++---------------
 3 files changed, 11 insertions(+), 33 deletions(-)
 rename patches/{electron-installer-redhat+3.3.0.patch => electron-installer-redhat+3.4.0.patch} (78%)

diff --git a/package.json b/package.json
index c16043792a0..e33b07d3db1 100644
--- a/package.json
+++ b/package.json
@@ -170,7 +170,7 @@
   },
   "optionalDependencies": {
     "electron-installer-debian": "3.1.0",
-    "electron-installer-redhat": "3.3.0",
+    "electron-installer-redhat": "3.4.0",
     "electron-winstaller": "^5.0.0"
   }
 }
diff --git a/patches/electron-installer-redhat+3.3.0.patch b/patches/electron-installer-redhat+3.4.0.patch
similarity index 78%
rename from patches/electron-installer-redhat+3.3.0.patch
rename to patches/electron-installer-redhat+3.4.0.patch
index 1c89e87c8fc..9f8d649ba51 100644
--- a/patches/electron-installer-redhat+3.3.0.patch
+++ b/patches/electron-installer-redhat+3.4.0.patch
@@ -1,10 +1,10 @@
 diff --git a/node_modules/electron-installer-redhat/resources/spec.ejs b/node_modules/electron-installer-redhat/resources/spec.ejs
-index 48f1dfd..360aec5 100644
+index e07a8a3..486f59e 100644
 --- a/node_modules/electron-installer-redhat/resources/spec.ejs
 +++ b/node_modules/electron-installer-redhat/resources/spec.ejs
 @@ -1,4 +1,5 @@
  %define _binary_payload w<%= compressionLevel %>.xzdio
 +%define _build_id_links none
  
- Name: <%= name %>
- Version: <%= version %>
+ %if "%{_host_cpu}" != "%{_target_cpu}"
+ %global __strip /bin/true
diff --git a/yarn.lock b/yarn.lock
index 7856f2e3d60..0c7f45aea42 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -969,14 +969,7 @@
     "@jridgewell/resolve-uri" "^3.0.3"
     "@jridgewell/sourcemap-codec" "^1.4.10"
 
-"@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":
+"@malept/cross-spawn-promise@^1.0.0", "@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==
@@ -3695,10 +3688,10 @@ electron-installer-debian@3.1.0:
     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==
+electron-installer-redhat@3.4.0:
+  version "3.4.0"
+  resolved "https://registry.yarnpkg.com/electron-installer-redhat/-/electron-installer-redhat-3.4.0.tgz#4a7f8d67b48b7d5b23bd1eb074f4b684ae43b192"
+  integrity sha512-gEISr3U32Sgtj+fjxUAlSDo3wyGGq6OBx7rF5UdpIgbnpUvMN4W5uYb0ThpnAZ42VEJh/3aODQXHbFS4f5J3Iw==
   dependencies:
     "@malept/cross-spawn-promise" "^1.0.0"
     debug "^4.1.1"
@@ -4812,17 +4805,7 @@ fs-extra@^8.1.0:
     jsonfile "^4.0.0"
     universalify "^0.1.0"
 
-fs-extra@^9.0.0:
-  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==
-  dependencies:
-    at-least-node "^1.0.0"
-    graceful-fs "^4.2.0"
-    jsonfile "^6.0.1"
-    universalify "^1.0.0"
-
-fs-extra@^9.0.1:
+fs-extra@^9.0.0, fs-extra@^9.0.1:
   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==
@@ -6891,16 +6874,11 @@ lodash.upperfirst@4.3.1:
   resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce"
   integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==
 
-lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4:
+lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4:
   version "4.17.21"
   resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
   integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
 
-lodash@^4.17.19:
-  version "4.17.19"
-  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
-  integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
-
 loose-envify@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"

From ff67ba9b2b0bb39f1c909eb720c2295110378f15 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Fri, 7 Apr 2023 17:09:47 -0300
Subject: [PATCH 63/97]  moved OpenSUSE instructions to separate steps (#864)

---
 README.md | 29 ++++++++++++++++++++++++++++-
 1 file changed, 28 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index d382f048941..ce8980a0c19 100644
--- a/README.md
+++ b/README.md
@@ -62,7 +62,7 @@ Once you have a feed configured, run this command to install the application:
 sudo apt update && sudo apt install github-desktop
 ```
 
-### Red Hat/CentOS/Fedora/OpenSUSE
+### Red Hat/CentOS/Fedora
 
 There are two RPM package feeds available, both hosted in the US. You only need
 to add one or the other here, as both of these are generated based on the
@@ -97,6 +97,33 @@ sudo dnf install github-desktop
 sudo zypper ref && sudo zypper in github-desktop
 ```
 
+#### OpenSUSE
+
+There are two RPM package feeds available, both hosted in the US. You only need
+to add one or the other here, as both of these are generated based on the
+releases from this repository.
+
+#### [@shiftkey](https://github.com/shiftkey) package feed
+
+```
+sudo rpm --import https://rpm.packages.shiftkey.dev/gpg.key
+sudo sh -c 'echo -e "[shiftkey-packages]\nname=GitHub Desktop\nbaseurl=https://rpm.packages.shiftkey.dev/rpm/\nenabled=1\ngpgcheck=1\nrepo_gpgcheck=1\ngpgkey=https://rpm.packages.shiftkey.dev/gpg.key" > /etc/zypp/repos.d/shiftkey-packages.repo'
+```
+
+#### [@mwt](https://github.com/mwt) package feed
+
+```sh
+sudo rpm --import https://mirror.mwt.me/shiftkey-desktop/gpgkey
+sudo sh -c 'echo -e "[mwt-packages]\nname=GitHub Desktop\nbaseurl=https://mirror.mwt.me/shiftkey-desktop/rpm\nenabled=1\ngpgcheck=1\nrepo_gpgcheck=1\ngpgkey=https://mirror.mwt.me/shiftkey-desktop/gpgkey" > /etc/zypp/repos.d/mwt-packages.repo'
+```
+
+#### Installation
+
+```sh
+sudo zypper ref && sudo zypper in github-desktop
+```
+
+
 ## Other Distributions
 
 ### Arch Linux

From 7db5585ddeae40bdb5b9ab6682f48219f9b300e2 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Mon, 3 Jul 2023 12:46:46 -0300
Subject: [PATCH 64/97] reformat changed files

---
 app/src/lib/editors/launch.ts | 1 -
 app/src/lib/helpers/linux.ts  | 1 -
 app/src/lib/shells/shared.ts  | 1 -
 3 files changed, 3 deletions(-)

diff --git a/app/src/lib/editors/launch.ts b/app/src/lib/editors/launch.ts
index ab0a1b14f5f..6a5a7afb1ff 100644
--- a/app/src/lib/editors/launch.ts
+++ b/app/src/lib/editors/launch.ts
@@ -10,7 +10,6 @@ import { ExternalEditorError, FoundEditor } from './shared'
  * @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__) {
diff --git a/app/src/lib/helpers/linux.ts b/app/src/lib/helpers/linux.ts
index 5595d2a537e..f7c4ea64006 100644
--- a/app/src/lib/helpers/linux.ts
+++ b/app/src/lib/helpers/linux.ts
@@ -15,7 +15,6 @@ export function isFlatpakBuild() {
  * 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__) {
diff --git a/app/src/lib/shells/shared.ts b/app/src/lib/shells/shared.ts
index c39e8d7dfe7..f58de03507b 100644
--- a/app/src/lib/shells/shared.ts
+++ b/app/src/lib/shells/shared.ts
@@ -80,7 +80,6 @@ export async function findShellOrDefault(shell: Shell): Promise<FoundShell> {
  * @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__) {

From aaa08a994b6a5c81f55434efde97aa4c1e23e357 Mon Sep 17 00:00:00 2001
From: "Cayden R. Haun" <floridaman7588@gmail.com>
Date: Mon, 3 Jul 2023 15:04:05 -0500
Subject: [PATCH 65/97] Add support for Flatpak installs of several editors
 (#887)

* Update linux.ts

Fix #885 for VSCode, VSCodium, and VSCode Insiders

* Use full path for Flatpak binaries

Adds full path, as previous method didn't function properly.
---
 app/src/lib/editors/linux.ts | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/app/src/lib/editors/linux.ts b/app/src/lib/editors/linux.ts
index f8342446d49..071e13fbeb6 100644
--- a/app/src/lib/editors/linux.ts
+++ b/app/src/lib/editors/linux.ts
@@ -43,18 +43,26 @@ const editors: ILinuxExternalEditor[] = [
       '/snap/bin/code',
       '/usr/bin/code',
       '/mnt/c/Program Files/Microsoft VS Code/bin/code',
+      '/var/lib/flatpak/app/com.visualstudio.code/current/active/export/bin/com.visualstudio.code',
+      '.local/share/flatpak/app/com.visualstudio.code/current/active/export/bin/com.visualstudio.code',
     ],
   },
   {
     name: 'Visual Studio Code (Insiders)',
-    paths: ['/snap/bin/code-insiders', '/usr/bin/code-insiders'],
+    paths: [
+      '/snap/bin/code-insiders',
+      '/usr/bin/code-insiders',
+      '/var/lib/flatpak/app/com.visualstudio.code.insiders/current/active/export/bin/com.visualstudio.code.insiders',
+      '.local/share/flatpak/app/com.visualstudio.code.insiders/current/active/export/bin/com.visualstudio.code.insiders',
+    ],
   },
   {
     name: 'VSCodium',
     paths: [
       '/usr/bin/codium',
-      '/var/lib/flatpak/app/com.vscodium.codium',
+      '/var/lib/flatpak/app/com.vscodium.codium/current/active/export/bin/com.vscodium.codium',
       '/usr/share/vscodium-bin/bin/codium',
+      '.local/share/flatpak/app/com.vscodium.codium/current/active/export/bin/com.vscodium.codium',
     ],
   },
   {

From f772584365e92b7da35bf801ed5ca5e4972cc6fd Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Mon, 3 Jul 2023 17:04:21 -0300
Subject: [PATCH 66/97] remove geany as supported editor because it doesn't
 work as expected (#894)

---
 app/src/lib/editors/linux.ts | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/app/src/lib/editors/linux.ts b/app/src/lib/editors/linux.ts
index 071e13fbeb6..ba8f33a7d0a 100644
--- a/app/src/lib/editors/linux.ts
+++ b/app/src/lib/editors/linux.ts
@@ -148,10 +148,6 @@ const editors: ILinuxExternalEditor[] = [
     name: 'Notepadqq',
     paths: ['/usr/bin/notepadqq'],
   },
-  {
-    name: 'Geany',
-    paths: ['/usr/bin/geany'],
-  },
   {
     name: 'Mousepad',
     paths: ['/usr/bin/mousepad'],

From 5fb282c9f38b5376042d140c53d6c6d08a164026 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Sat, 8 Jul 2023 10:35:26 -0300
Subject: [PATCH 67/97] bump dugite to v2.5.1 to get support for older glibc
 versions

---
 app/package.json | 2 +-
 app/yarn.lock    | 8 ++++----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/app/package.json b/app/package.json
index eaf5d6cca64..b5bef3005f9 100644
--- a/app/package.json
+++ b/app/package.json
@@ -31,7 +31,7 @@
     "desktop-trampoline": "desktop/desktop-trampoline#v0.9.8",
     "dexie": "^3.2.2",
     "dompurify": "^2.3.3",
-    "dugite": "^2.5.0",
+    "dugite": "^2.5.1",
     "electron-window-state": "^5.0.3",
     "event-kit": "^2.0.0",
     "focus-trap-react": "^8.1.0",
diff --git a/app/yarn.lock b/app/yarn.lock
index d471c794a96..af790743da8 100644
--- a/app/yarn.lock
+++ b/app/yarn.lock
@@ -360,10 +360,10 @@ dompurify@^2.3.3:
   resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.3.3.tgz#c1af3eb88be47324432964d8abc75cf4b98d634c"
   integrity sha512-dqnqRkPMAjOZE0FogZ+ceJNM2dZ3V/yNOuFB7+39qpO93hHhfRpHw3heYQC7DPK9FqbQTfBKUJhiSfz4MvXYwg==
 
-dugite@^2.5.0:
-  version "2.5.0"
-  resolved "https://registry.yarnpkg.com/dugite/-/dugite-2.5.0.tgz#8b235564fdf8692688283c714149a59d9da79865"
-  integrity sha512-sYsSOqV7NidthDtMUPgKCvqMGqswKkcyAxOMhwEswlcGZ+kHadT2SEDFUJOy0AVR/yTJL6wBF7q1OiySfU0gGA==
+dugite@^2.5.1:
+  version "2.5.1"
+  resolved "https://registry.yarnpkg.com/dugite/-/dugite-2.5.1.tgz#6ab808ebf321809edf42d974e62eea9c9e256722"
+  integrity sha512-9OjUguynzq8v3GSmp01kbVcMmErc65ZZ0OssO/0PM2RyhD8Dzb8cCuy3z72+IxLwPwNi754jZ0FtMLAFA3D0qA==
   dependencies:
     progress "^2.0.3"
     tar "^6.1.11"

From 4fae82b527d7532ab5e172b08ad69a116b18a9d1 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Sat, 8 Jul 2023 11:01:23 -0300
Subject: [PATCH 68/97] restore missing electron-builder package

---
 package.json |    1 +
 yarn.lock    | 1165 +++++++++++++++++++++++++++++++++++++++++++++++---
 2 files changed, 1099 insertions(+), 67 deletions(-)

diff --git a/package.json b/package.json
index e33b07d3db1..0de48579ea4 100644
--- a/package.json
+++ b/package.json
@@ -160,6 +160,7 @@
     "@types/webpack-merge": "^5.0.0",
     "@types/xml2js": "^0.4.11",
     "electron": "26.2.4",
+    "electron-builder": "^24.4.0",
     "electron-packager": "^17.1.1",
     "eslint-plugin-github": "^4.10.1",
     "markdownlint-cli": "^0.32.2",
diff --git a/yarn.lock b/yarn.lock
index 0c7f45aea42..867aac55f2a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,6 +2,11 @@
 # yarn lockfile v1
 
 
+"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==
+
 "@aashutoshrathi/word-wrap@^1.2.3":
   version "1.2.6"
   resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf"
@@ -515,6 +520,14 @@
   resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
   integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
 
+"@develar/schema-utils@~2.6.5":
+  version "2.6.5"
+  resolved "https://registry.yarnpkg.com/@develar/schema-utils/-/schema-utils-2.6.5.tgz#3ece22c5838402419a6e0425f85742b961d9b6c6"
+  integrity sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==
+  dependencies:
+    ajv "^6.12.0"
+    ajv-keywords "^3.4.1"
+
 "@electron/asar@^3.2.1":
   version "3.2.4"
   resolved "https://registry.yarnpkg.com/@electron/asar/-/asar-3.2.4.tgz#7e8635a3c4f6d8b3f8ae6efaf5ecb9fbf3bd9864"
@@ -548,7 +561,7 @@
     debug "^4.1.1"
     fs-extra "^9.0.1"
 
-"@electron/osx-sign@^1.0.1":
+"@electron/osx-sign@^1.0.1", "@electron/osx-sign@^1.0.4":
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/@electron/osx-sign/-/osx-sign-1.0.4.tgz#8e91442846471636ca0469426a82b253b9170151"
   integrity sha512-xfhdEcIOfAZg7scZ9RQPya1G1lWo8/zMCwUXAulq0SfY7ONIW+b9qGyKdMyuMctNYwllrIS+vmxfijSfjeh97g==
@@ -560,7 +573,26 @@
     minimist "^1.2.6"
     plist "^3.0.5"
 
-"@electron/universal@^1.3.2":
+"@electron/rebuild@^3.2.13":
+  version "3.2.13"
+  resolved "https://registry.yarnpkg.com/@electron/rebuild/-/rebuild-3.2.13.tgz#98fbb98981b1a86162546a2ab91b2355569cca4c"
+  integrity sha512-DH9Ol4JCnHDYVOD0fKWq+Qqbn/0WU1O6QR0mIpMXEVU4YFM4PlaqNC9K36mGShNBxxGFotZCMDrB1wl/iHM12g==
+  dependencies:
+    "@malept/cross-spawn-promise" "^2.0.0"
+    chalk "^4.0.0"
+    debug "^4.1.1"
+    detect-libc "^2.0.1"
+    fs-extra "^10.0.0"
+    got "^11.7.0"
+    node-abi "^3.0.0"
+    node-api-version "^0.1.4"
+    node-gyp "^9.0.0"
+    ora "^5.1.0"
+    semver "^7.3.5"
+    tar "^6.0.5"
+    yargs "^17.0.1"
+
+"@electron/universal@1.3.4", "@electron/universal@^1.3.2":
   version "1.3.4"
   resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.3.4.tgz#bccd94b635d7c85eeed5eabba457eb4ed2be2777"
   integrity sha512-BdhBgm2ZBnYyYRLRgOjM5VHkyFItsbggJ0MHycOjKWdFGYwK97ZFXH54dTvUWEfha81vfvwr5On6XBjt99uDcg==
@@ -650,6 +682,18 @@
   resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044"
   integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==
 
+"@isaacs/cliui@^8.0.2":
+  version "8.0.2"
+  resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
+  integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
+  dependencies:
+    string-width "^5.1.2"
+    string-width-cjs "npm:string-width@^4.2.0"
+    strip-ansi "^7.0.1"
+    strip-ansi-cjs "npm:strip-ansi@^6.0.1"
+    wrap-ansi "^8.1.0"
+    wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
+
 "@istanbuljs/load-nyc-config@^1.0.0":
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
@@ -976,6 +1020,23 @@
   dependencies:
     cross-spawn "^7.0.1"
 
+"@malept/cross-spawn-promise@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz#d0772de1aa680a0bfb9ba2f32b4c828c7857cb9d"
+  integrity sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==
+  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"
+
 "@nodelib/fs.scandir@2.1.5":
   version "2.1.5"
   resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
@@ -997,11 +1058,23 @@
     "@nodelib/fs.scandir" "2.1.5"
     fastq "^1.6.0"
 
+"@npmcli/fs@^3.1.0":
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e"
+  integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==
+  dependencies:
+    semver "^7.3.5"
+
 "@opentelemetry/api@^1.0.1":
   version "1.4.1"
   resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.4.1.tgz#ff22eb2e5d476fbc2450a196e40dd243cc20c28f"
   integrity sha512-O2yRJce1GOc6PAy3QxFM4NzFiWzvScDC1/5ihYBL6BUEVdq0XMWN01sppE+H6bBXbaFYipjwFLEWLg5PaSOThA==
 
+"@pkgjs/parseargs@^0.11.0":
+  version "0.11.0"
+  resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
+  integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
+
 "@pkgr/utils@^2.3.1":
   version "2.4.2"
   resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.2.tgz#9e638bbe9a6a6f165580dc943f138fd3309a2cbc"
@@ -1144,6 +1217,13 @@
   dependencies:
     "@types/node" "*"
 
+"@types/debug@^4.1.6":
+  version "4.1.8"
+  resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.8.tgz#cef723a5d0a90990313faec2d1e22aee5eecb317"
+  integrity sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==
+  dependencies:
+    "@types/ms" "*"
+
 "@types/deep-equal@^1.0.1":
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/@types/deep-equal/-/deep-equal-1.0.1.tgz#71cfabb247c22bcc16d536111f50c0ed12476b03"
@@ -1222,6 +1302,13 @@
   dependencies:
     "@types/node" "*"
 
+"@types/fs-extra@9.0.13", "@types/fs-extra@^9.0.1", "@types/fs-extra@^9.0.11":
+  version "9.0.13"
+  resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45"
+  integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==
+  dependencies:
+    "@types/node" "*"
+
 "@types/fs-extra@^7.0.0":
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-7.0.0.tgz#9c4ad9e1339e7448a76698829def1f159c1b636c"
@@ -1229,13 +1316,6 @@
   dependencies:
     "@types/node" "*"
 
-"@types/fs-extra@^9.0.1":
-  version "9.0.13"
-  resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45"
-  integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==
-  dependencies:
-    "@types/node" "*"
-
 "@types/fuzzaldrin-plus@^0.0.1":
   version "0.0.1"
   resolved "https://registry.yarnpkg.com/@types/fuzzaldrin-plus/-/fuzzaldrin-plus-0.0.1.tgz#bfe5e25bc5b4066848171baf7a8aaf30e267d30a"
@@ -1393,6 +1473,11 @@
   resolved "https://registry.yarnpkg.com/@types/mri/-/mri-1.1.0.tgz#66555e4d797713789ea0fefdae0898d8170bf5af"
   integrity sha512-fMl88ZoZXOB7VKazJ6wUMpZc9QIn+jcigSFRf2K/rrw4DcXn+/uGxlWX8DDlcE7JkwgIZ7BDH+JgxZPlc/Ap3g==
 
+"@types/ms@*":
+  version "0.7.31"
+  resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197"
+  integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==
+
 "@types/node-fetch@^2.5.0":
   version "2.6.3"
   resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.3.tgz#175d977f5e24d93ad0f57602693c435c57ad7e80"
@@ -1416,7 +1501,7 @@
   resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.3.tgz#6bda7819aae6ea0b386ebc5b24bdf602f1b42b01"
   integrity sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==
 
-"@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==
@@ -1646,6 +1731,11 @@
   resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-3.4.9.tgz#fcf01997bbc9f7c09ae5f91383af076d466594e1"
   integrity sha512-XDwyIlt/47l2kWLTzw/mtrpLdB+GPSskR2n/PIcPn+VYhVO77rGhRncIR5GPU0KRzXuqkDO+J5qqrG0Y8P6jzQ==
 
+"@types/verror@^1.10.3":
+  version "1.10.6"
+  resolved "https://registry.yarnpkg.com/@types/verror/-/verror-1.10.6.tgz#3e600c62d210c5826460858f84bcbb65805460bb"
+  integrity sha512-NNm+gdePAX1VGvPcGZCDKQZKYSiAWigKhKaz5KF94hG6f2s8de9Ow5+7AbXoeKxL8gavZfk4UquSAygOF2duEQ==
+
 "@types/webpack-bundle-analyzer@^4.4.1":
   version "4.4.1"
   resolved "https://registry.yarnpkg.com/@types/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.1.tgz#bcc2501be10c8cdd1d170bc6b7847b3321f20440"
@@ -2082,6 +2172,11 @@ abab@^2.0.6:
   resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
   integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==
 
+abbrev@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+  integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
+
 accepts@~1.3.8:
   version "1.3.8"
   resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
@@ -2128,13 +2223,30 @@ acorn@^8.1.0, acorn@^8.8.1, acorn@^8.9.0:
   resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b"
   integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==
 
-agent-base@6:
+agent-base@6, agent-base@^6.0.2:
   version "6.0.2"
   resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
   integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
   dependencies:
     debug "4"
 
+agentkeepalive@^4.2.1:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.3.0.tgz#bb999ff07412653c1803b3ced35e50729830a255"
+  integrity sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==
+  dependencies:
+    debug "^4.1.0"
+    depd "^2.0.0"
+    humanize-ms "^1.2.1"
+
+aggregate-error@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
+  integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
+  dependencies:
+    clean-stack "^2.0.0"
+    indent-string "^4.0.0"
+
 airbnb-browser-shims@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/airbnb-browser-shims/-/airbnb-browser-shims-3.0.0.tgz#7978e65fa106f7436a6ae2cad9ad871982e13c7d"
@@ -2180,7 +2292,7 @@ ajv-formats@^2.1.1:
   dependencies:
     ajv "^8.0.0"
 
-ajv-keywords@^3.5.2:
+ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
   version "3.5.2"
   resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
   integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
@@ -2200,20 +2312,20 @@ ajv@^4.9.2:
     co "^4.6.0"
     json-stable-stringify "^1.0.1"
 
-ajv@^6.12.3:
-  version "6.12.3"
-  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706"
-  integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==
+ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.4, ajv@^6.12.5:
+  version "6.12.6"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+  integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
   dependencies:
     fast-deep-equal "^3.1.1"
     fast-json-stable-stringify "^2.0.0"
     json-schema-traverse "^0.4.1"
     uri-js "^4.2.2"
 
-ajv@^6.12.4, ajv@^6.12.5:
-  version "6.12.6"
-  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
-  integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+ajv@^6.12.3:
+  version "6.12.3"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706"
+  integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==
   dependencies:
     fast-deep-equal "^3.1.1"
     fast-json-stable-stringify "^2.0.0"
@@ -2267,6 +2379,11 @@ ansi-regex@^5.0.1:
   resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
   integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
 
+ansi-regex@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
+  integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
+
 ansi-styles@^2.2.1:
   version "2.2.1"
   resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
@@ -2299,6 +2416,11 @@ ansi-styles@^5.0.0:
   resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
   integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
 
+ansi-styles@^6.1.0:
+  version "6.2.1"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
+  integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
+
 anymatch@^3.0.3, anymatch@~3.1.1:
   version "3.1.1"
   resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142"
@@ -2307,11 +2429,64 @@ anymatch@^3.0.3, anymatch@~3.1.1:
     normalize-path "^3.0.0"
     picomatch "^2.0.4"
 
+app-builder-bin@4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-4.0.0.tgz#1df8e654bd1395e4a319d82545c98667d7eed2f0"
+  integrity sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==
+
+app-builder-lib@24.4.0:
+  version "24.4.0"
+  resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-24.4.0.tgz#1606f94e99366eea9e7507228961b8396e40d546"
+  integrity sha512-EcdqtWvg1LAApKCfyRBukcVkmsa94s2e1VKHjZLpvA9/D14QEt8rHhffYeaA+cH/pVeoNVn2ob735KnfJKEEow==
+  dependencies:
+    "7zip-bin" "~5.1.1"
+    "@develar/schema-utils" "~2.6.5"
+    "@electron/notarize" "^1.2.3"
+    "@electron/osx-sign" "^1.0.4"
+    "@electron/rebuild" "^3.2.13"
+    "@electron/universal" "1.3.4"
+    "@malept/flatpak-bundler" "^0.4.0"
+    "@types/fs-extra" "9.0.13"
+    async-exit-hook "^2.0.1"
+    bluebird-lst "^1.0.9"
+    builder-util "24.4.0"
+    builder-util-runtime "9.2.1"
+    chromium-pickle-js "^0.2.0"
+    debug "^4.3.4"
+    ejs "^3.1.8"
+    electron-publish "24.4.0"
+    form-data "^4.0.0"
+    fs-extra "^10.1.0"
+    hosted-git-info "^4.1.0"
+    is-ci "^3.0.0"
+    isbinaryfile "^5.0.0"
+    js-yaml "^4.1.0"
+    lazy-val "^1.0.5"
+    minimatch "^5.1.1"
+    read-config-file "6.3.2"
+    sanitize-filename "^1.6.3"
+    semver "^7.3.8"
+    tar "^6.1.12"
+    temp-file "^3.4.0"
+
+"aproba@^1.0.3 || ^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc"
+  integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==
+
 are-docs-informative@^0.0.2:
   version "0.0.2"
   resolved "https://registry.yarnpkg.com/are-docs-informative/-/are-docs-informative-0.0.2.tgz#387f0e93f5d45280373d387a59d34c96db321963"
   integrity sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==
 
+are-we-there-yet@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd"
+  integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==
+  dependencies:
+    delegates "^1.0.0"
+    readable-stream "^3.6.0"
+
 argparse@^1.0.7:
   version "1.0.10"
   resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
@@ -2517,6 +2692,11 @@ asar@^3.0.0:
   optionalDependencies:
     "@types/glob" "^7.1.1"
 
+assert-plus@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+  integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==
+
 assign-symbols@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
@@ -2527,6 +2707,21 @@ ast-types-flow@^0.0.7:
   resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
   integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==
 
+astral-regex@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
+  integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
+
+async-exit-hook@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/async-exit-hook/-/async-exit-hook-2.0.1.tgz#8bd8b024b0ec9b1c01cccb9af9db29bd717dfaf3"
+  integrity sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==
+
+async@^3.2.3:
+  version "3.2.4"
+  resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c"
+  integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==
+
 asynciterator.prototype@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62"
@@ -2643,7 +2838,7 @@ balanced-match@^1.0.0:
   resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
   integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
 
-base64-js@^1.5.1:
+base64-js@^1.3.1, base64-js@^1.5.1:
   version "1.5.1"
   resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
   integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
@@ -2676,11 +2871,32 @@ binary-extensions@^2.0.0:
   resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9"
   integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==
 
+bl@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
+  integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
+  dependencies:
+    buffer "^5.5.0"
+    inherits "^2.0.4"
+    readable-stream "^3.4.0"
+
+bluebird-lst@^1.0.9:
+  version "1.0.9"
+  resolved "https://registry.yarnpkg.com/bluebird-lst/-/bluebird-lst-1.0.9.tgz#a64a0e4365658b9ab5fe875eb9dfb694189bb41c"
+  integrity sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==
+  dependencies:
+    bluebird "^3.5.5"
+
 bluebird@^3.0.6, bluebird@^3.1.1, bluebird@^3.5.0:
   version "3.5.1"
   resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
   integrity sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==
 
+bluebird@^3.5.5:
+  version "3.7.2"
+  resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+  integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
+
 body-parser@1.19.2:
   version "1.19.2"
   resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.2.tgz#4714ccd9c157d44797b8b5607d72c0b89952f26e"
@@ -2806,6 +3022,44 @@ buffer-from@^1.1.0:
   resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
   integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
 
+buffer@^5.1.0, buffer@^5.5.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"
+
+builder-util-runtime@9.2.1:
+  version "9.2.1"
+  resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.2.1.tgz#3184dcdf7ed6c47afb8df733813224ced4f624fd"
+  integrity sha512-2rLv/uQD2x+dJ0J3xtsmI12AlRyk7p45TEbE/6o/fbb633e/S3pPgm+ct+JHsoY7r39dKHnGEFk/AASRFdnXmA==
+  dependencies:
+    debug "^4.3.4"
+    sax "^1.2.4"
+
+builder-util@24.4.0:
+  version "24.4.0"
+  resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-24.4.0.tgz#dbb201a118fd573180e6a1070cf4c0be6de80cd7"
+  integrity sha512-tONb/GIK1MKa1BcOPHE1naId3o5nj6gdka5kP7yUJh2DOfF+jMq3laiu+UOZH6A7ZtkMtnGNMYFKFTIv408n/A==
+  dependencies:
+    "7zip-bin" "~5.1.1"
+    "@types/debug" "^4.1.6"
+    app-builder-bin "4.0.0"
+    bluebird-lst "^1.0.9"
+    builder-util-runtime "9.2.1"
+    chalk "^4.1.2"
+    cross-spawn "^7.0.3"
+    debug "^4.3.4"
+    fs-extra "^10.1.0"
+    http-proxy-agent "^5.0.0"
+    https-proxy-agent "^5.0.1"
+    is-ci "^3.0.0"
+    js-yaml "^4.1.0"
+    source-map-support "^0.5.19"
+    stat-mode "^1.0.0"
+    temp-file "^3.4.0"
+
 builtin-modules@^1.0.0:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
@@ -2823,6 +3077,24 @@ bytes@3.1.2:
   resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
   integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
 
+cacache@^17.0.0:
+  version "17.1.3"
+  resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.3.tgz#c6ac23bec56516a7c0c52020fd48b4909d7c7044"
+  integrity sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==
+  dependencies:
+    "@npmcli/fs" "^3.1.0"
+    fs-minipass "^3.0.0"
+    glob "^10.2.2"
+    lru-cache "^7.7.1"
+    minipass "^5.0.0"
+    minipass-collect "^1.0.2"
+    minipass-flush "^1.0.5"
+    minipass-pipeline "^1.2.4"
+    p-map "^4.0.0"
+    ssri "^10.0.0"
+    tar "^6.1.11"
+    unique-filename "^3.0.0"
+
 cache-base@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
@@ -2926,7 +3198,7 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.2.0, chalk@^2.4.2:
     escape-string-regexp "^1.0.5"
     supports-color "^5.3.0"
 
-chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2:
+chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2:
   version "4.1.2"
   resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
   integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
@@ -2954,6 +3226,11 @@ char-regex@^1.0.2:
   optionalDependencies:
     fsevents "~2.1.2"
 
+chownr@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
+  integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
+
 chrome-trace-event@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4"
@@ -2972,9 +3249,9 @@ ci-info@^2.0.0:
   integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
 
 ci-info@^3.2.0:
-  version "3.9.0"
-  resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4"
-  integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==
+  version "3.8.0"
+  resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91"
+  integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==
 
 cjs-module-lexer@^1.0.0:
   version "1.2.3"
@@ -3004,6 +3281,31 @@ clean-css@^5.2.2:
   dependencies:
     source-map "~0.6.0"
 
+clean-stack@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
+  integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
+
+cli-cursor@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
+  integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
+  dependencies:
+    restore-cursor "^3.1.0"
+
+cli-spinners@^2.5.0:
+  version "2.9.0"
+  resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db"
+  integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==
+
+cli-truncate@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
+  integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==
+  dependencies:
+    slice-ansi "^3.0.0"
+    string-width "^4.2.0"
+
 cliui@^6.0.0:
   version "6.0.0"
   resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
@@ -3047,6 +3349,11 @@ clone-response@^1.0.2:
   dependencies:
     mimic-response "^1.0.0"
 
+clone@^1.0.2:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
+  integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==
+
 co@^4.6.0:
   version "4.6.0"
   resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
@@ -3089,6 +3396,11 @@ color-name@~1.1.4:
   resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
   integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
 
+color-support@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
+  integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
+
 colorette@^2.0.10:
   version "2.0.16"
   resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da"
@@ -3146,6 +3458,19 @@ concat-map@0.0.1:
   resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
   integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
 
+config-file-ts@^0.2.4:
+  version "0.2.4"
+  resolved "https://registry.yarnpkg.com/config-file-ts/-/config-file-ts-0.2.4.tgz#6c0741fbe118a7cf786c65f139030f0448a2cc99"
+  integrity sha512-cKSW0BfrSaAUnxpgvpXPLaaW/umg4bqg4k3GO1JqlRfpx+d5W0GDXznCMkWotJQek5Mmz1MJVChQnz3IVaeMZQ==
+  dependencies:
+    glob "^7.1.6"
+    typescript "^4.0.2"
+
+console-control-strings@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+  integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==
+
 console-polyfill@^0.3.0:
   version "0.3.0"
   resolved "https://registry.yarnpkg.com/console-polyfill/-/console-polyfill-0.3.0.tgz#84900902a18c47a5eba932be75fa44d23e8af861"
@@ -3183,6 +3508,18 @@ copy-descriptor@^0.1.0:
   resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
   integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
 
+core-util-is@1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+  integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+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-jest@^29.7.0:
   version "29.7.0"
   resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320"
@@ -3233,19 +3570,19 @@ cross-spawn@^6.0.5:
     shebang-command "^1.2.0"
     which "^1.2.9"
 
-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==
+cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
+  version "7.0.3"
+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+  integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
   dependencies:
     path-key "^3.1.0"
     shebang-command "^2.0.0"
     which "^2.0.1"
 
-cross-spawn@^7.0.2, cross-spawn@^7.0.3:
-  version "7.0.3"
-  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
-  integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+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"
@@ -3334,7 +3671,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:
   dependencies:
     ms "2.0.0"
 
-debug@4, debug@^4.3.1, debug@^4.3.4:
+debug@4, debug@^4.3.1, debug@^4.3.3, debug@^4.3.4:
   version "4.3.4"
   resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
   integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
@@ -3434,6 +3771,13 @@ default-browser@^4.0.0:
     execa "^7.1.1"
     titleize "^3.0.0"
 
+defaults@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a"
+  integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==
+  dependencies:
+    clone "^1.0.2"
+
 defer-to-connect@^2.0.0:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587"
@@ -3513,6 +3857,16 @@ delayed-stream@~1.0.0:
   resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
   integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
 
+delegates@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+  integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==
+
+depd@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
+  integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
+
 depd@~1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
@@ -3528,6 +3882,11 @@ destroy@~1.0.4:
   resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
   integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
 
+detect-libc@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd"
+  integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==
+
 detect-newline@^3.0.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
@@ -3576,6 +3935,34 @@ dir-glob@^3.0.1:
   dependencies:
     path-type "^4.0.0"
 
+dmg-builder@24.4.0:
+  version "24.4.0"
+  resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-24.4.0.tgz#46c80f119465f6a7275766c72b4f3d514cc8013d"
+  integrity sha512-p5z9Cx539GSBYb+b09Z+hMhuBTh/BrI71VRg4rgF6f2xtIRK/YlTGVS/O08k5OojoyhZcpS7JXxDVSmQoWgiiQ==
+  dependencies:
+    app-builder-lib "24.4.0"
+    builder-util "24.4.0"
+    builder-util-runtime "9.2.1"
+    fs-extra "^10.1.0"
+    iconv-lite "^0.6.2"
+    js-yaml "^4.1.0"
+  optionalDependencies:
+    dmg-license "^1.0.11"
+
+dmg-license@^1.0.11:
+  version "1.0.11"
+  resolved "https://registry.yarnpkg.com/dmg-license/-/dmg-license-1.0.11.tgz#7b3bc3745d1b52be7506b4ee80cb61df6e4cd79a"
+  integrity sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==
+  dependencies:
+    "@types/plist" "^3.0.1"
+    "@types/verror" "^1.10.3"
+    ajv "^6.10.0"
+    crc "^3.8.0"
+    iconv-corefoundation "^1.1.7"
+    plist "^3.0.4"
+    smart-buffer "^4.0.2"
+    verror "^1.10.0"
+
 doctrine@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
@@ -3642,11 +4029,26 @@ dot-case@^3.0.4:
     no-case "^3.0.4"
     tslib "^2.0.3"
 
+dotenv-expand@^5.1.0:
+  version "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@^9.0.2:
+  version "9.0.2"
+  resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-9.0.2.tgz#dacc20160935a37dea6364aa1bef819fb9b6ab05"
+  integrity sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==
+
 duplexer@^0.1.2:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
   integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
 
+eastasianwidth@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
+  integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
+
 easy-stack@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/easy-stack/-/easy-stack-1.0.0.tgz#12c91b3085a37f0baa336e9486eac4bf94e3e788"
@@ -3657,6 +4059,30 @@ ee-first@1.1.1:
   resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
   integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
 
+ejs@^3.1.8:
+  version "3.1.9"
+  resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361"
+  integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==
+  dependencies:
+    jake "^10.8.5"
+
+electron-builder@^24.4.0:
+  version "24.4.0"
+  resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-24.4.0.tgz#8846efa45bac8f6b9afc181abf71a4e12530f045"
+  integrity sha512-D5INxodxaUIJgEX6p/fqBd8wQNS8XRAToNIJ9SQC+taNS5D73ZsjLuXiRraFGCB0cVk9KeKhEkdEOH5AaVya4g==
+  dependencies:
+    app-builder-lib "24.4.0"
+    builder-util "24.4.0"
+    builder-util-runtime "9.2.1"
+    chalk "^4.1.2"
+    dmg-builder "24.4.0"
+    fs-extra "^10.1.0"
+    is-ci "^3.0.0"
+    lazy-val "^1.0.5"
+    read-config-file "6.3.2"
+    simple-update-notifier "^1.1.0"
+    yargs "^17.6.2"
+
 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"
@@ -3726,6 +4152,19 @@ electron-packager@^17.1.1:
     semver "^7.1.3"
     yargs-parser "^21.1.1"
 
+electron-publish@24.4.0:
+  version "24.4.0"
+  resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-24.4.0.tgz#a58f49ecd727620f65372881788ebb1a9b853284"
+  integrity sha512-U3mnVSxIfNrLW7ZnwiedFhcLf6ExPFXgAsx89WpfQFsV4gFAt/LG+H74p0m9NSvsLXiZuF82yXoxi7Ou8GHq4Q==
+  dependencies:
+    "@types/fs-extra" "^9.0.11"
+    builder-util "24.4.0"
+    builder-util-runtime "9.2.1"
+    chalk "^4.1.2"
+    fs-extra "^10.1.0"
+    lazy-val "^1.0.5"
+    mime "^2.5.2"
+
 electron-to-chromium@^1.4.202:
   version "1.4.233"
   resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.233.tgz#aa142e45468bda111b88abc9cc59d573b75d6a60"
@@ -3786,6 +4225,13 @@ encodeurl@~1.0.2:
   resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
   integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
 
+encoding@^0.1.13:
+  version "0.1.13"
+  resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
+  integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
+  dependencies:
+    iconv-lite "^0.6.2"
+
 end-of-stream@^1.1.0:
   version "1.4.4"
   resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
@@ -3821,6 +4267,11 @@ env-paths@^2.2.0:
   resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43"
   integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==
 
+err-code@^2.0.2:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9"
+  integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==
+
 errno@^0.1.4:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
@@ -4468,6 +4919,11 @@ expect@^29.0.0, expect@^29.7.0:
     jest-message-util "^29.7.0"
     jest-util "^29.7.0"
 
+exponential-backoff@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6"
+  integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==
+
 express@^4.17.3:
   version "4.17.3"
   resolved "https://registry.yarnpkg.com/express/-/express-4.17.3.tgz#f6c7302194a4fb54271b73a1fe7a06478c8f85a1"
@@ -4544,6 +5000,11 @@ extract-zip@^2.0.0, extract-zip@^2.0.1:
   optionalDependencies:
     "@types/yauzl" "^2.9.1"
 
+extsprintf@^1.2.0:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07"
+  integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==
+
 fake-indexeddb@^5.0.1:
   version "5.0.1"
   resolved "https://registry.yarnpkg.com/fake-indexeddb/-/fake-indexeddb-5.0.1.tgz#1111a2b6981eaaad03027d816a8536a940d36cee"
@@ -4619,6 +5080,13 @@ file-entry-cache@^6.0.1:
   dependencies:
     flat-cache "^3.0.4"
 
+filelist@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5"
+  integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==
+  dependencies:
+    minimatch "^5.0.1"
+
 filename-reserved-regex@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229"
@@ -4727,6 +5195,14 @@ for-in@^1.0.2:
   resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
   integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
 
+foreground-child@^3.1.0:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d"
+  integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==
+  dependencies:
+    cross-spawn "^7.0.0"
+    signal-exit "^4.0.1"
+
 form-data@^3.0.0:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f"
@@ -4815,6 +5291,20 @@ fs-extra@^9.0.0, fs-extra@^9.0.1:
     jsonfile "^6.0.1"
     universalify "^2.0.0"
 
+fs-minipass@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
+  integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
+  dependencies:
+    minipass "^3.0.0"
+
+fs-minipass@^3.0.0:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.2.tgz#5b383858efa8c1eb8c33b39e994f7e8555b8b3a3"
+  integrity sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==
+  dependencies:
+    minipass "^5.0.0"
+
 fs-monkey@1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3"
@@ -4893,6 +5383,20 @@ gar@^1.0.4:
   resolved "https://registry.yarnpkg.com/gar/-/gar-1.0.4.tgz#f777bc7db425c0572fdeb52676172ca1ae9888b8"
   integrity sha512-w4n9cPWyP7aHxKxYHFQMegj7WIAsL/YX/C4Bs5Rr8s1H9M1rNtRWRsw+ovYMkXDQ5S4ZbYHsHAPmevPjPgw44w==
 
+gauge@^4.0.3:
+  version "4.0.4"
+  resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce"
+  integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==
+  dependencies:
+    aproba "^1.0.3 || ^2.0.0"
+    color-support "^1.1.3"
+    console-control-strings "^1.1.0"
+    has-unicode "^2.0.1"
+    signal-exit "^3.0.7"
+    string-width "^4.2.3"
+    strip-ansi "^6.0.1"
+    wide-align "^1.1.5"
+
 gensync@^1.0.0-beta.2:
   version "1.0.0-beta.2"
   resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
@@ -4999,6 +5503,17 @@ glob-to-regexp@^0.4.1:
   resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
   integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
 
+glob@^10.2.2:
+  version "10.3.2"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.2.tgz#04fe71118ec6d2f4cb761849acbacec14b06cb1e"
+  integrity sha512-vsuLzB3c/uyDLLEdBZtT8vGnN0z57rwOxHV2oYZib/7HWmBspUaja/McYIobBjC4qaUTuNpUyFO2IdqM4DZIJA==
+  dependencies:
+    foreground-child "^3.1.0"
+    jackspeak "^2.0.3"
+    minimatch "^9.0.1"
+    minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+    path-scurry "^1.10.1"
+
 glob@^7.0.5, glob@^7.1.1, glob@^7.1.2:
   version "7.1.2"
   resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
@@ -5103,7 +5618,7 @@ gopd@^1.0.1:
   dependencies:
     get-intrinsic "^1.1.3"
 
-got@^11.8.5:
+got@^11.7.0, got@^11.8.5:
   version "11.8.6"
   resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a"
   integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==
@@ -5125,6 +5640,11 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6
   resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96"
   integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==
 
+graceful-fs@^4.2.6:
+  version "4.2.11"
+  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
+  integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+
 graphemer@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
@@ -5208,6 +5728,11 @@ has-tostringtag@^1.0.0:
   dependencies:
     has-symbols "^1.0.2"
 
+has-unicode@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+  integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==
+
 has-value@^0.3.1:
   version "0.3.1"
   resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
@@ -5270,6 +5795,13 @@ 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@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224"
+  integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==
+  dependencies:
+    lru-cache "^6.0.0"
+
 html-encoding-sniffer@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9"
@@ -5321,7 +5853,7 @@ htmlparser2@^6.1.0:
     domutils "^2.5.2"
     entities "^2.0.0"
 
-http-cache-semantics@^4.0.0:
+http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.1:
   version "4.1.1"
   resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
   integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
@@ -5354,7 +5886,7 @@ http2-wrapper@^1.0.0-beta.5.2:
     quick-lru "^5.1.1"
     resolve-alpn "^1.0.0"
 
-https-proxy-agent@^5.0.1:
+https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1:
   version "5.0.1"
   resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
   integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
@@ -5372,6 +5904,21 @@ human-signals@^4.3.0:
   resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2"
   integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==
 
+humanize-ms@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
+  integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==
+  dependencies:
+    ms "^2.0.0"
+
+iconv-corefoundation@^1.1.7:
+  version "1.1.7"
+  resolved "https://registry.yarnpkg.com/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz#31065e6ab2c9272154c8b0821151e2c88f1b002a"
+  integrity sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==
+  dependencies:
+    cli-truncate "^2.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"
@@ -5379,7 +5926,7 @@ iconv-lite@0.4.24:
   dependencies:
     safer-buffer ">= 2.1.2 < 3"
 
-iconv-lite@0.6.3:
+iconv-lite@0.6.3, iconv-lite@^0.6.2:
   version "0.6.3"
   resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
   integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
@@ -5391,6 +5938,11 @@ icss-utils@^5.0.0, icss-utils@^5.1.0:
   resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae"
   integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==
 
+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==
+
 ignore@^5.0.5, ignore@^5.2.0, ignore@~5.2.0:
   version "5.2.0"
   resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
@@ -5427,6 +5979,11 @@ imurmurhash@^0.1.4:
   resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
   integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
 
+indent-string@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+  integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+
 inflight@^1.0.4:
   version "1.0.6"
   resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
@@ -5435,7 +5992,7 @@ inflight@^1.0.4:
     once "^1.3.0"
     wrappy "1"
 
-inherits@2, inherits@2.0.4, inherits@^2.0.3:
+inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4:
   version "2.0.4"
   resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
   integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -5468,6 +6025,11 @@ interpret@^1.0.1:
   resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.4.tgz#820cdd588b868ffb191a809506d6c9c8f212b1b0"
   integrity sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA=
 
+ip@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da"
+  integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==
+
 ipaddr.js@1.9.1:
   version "1.9.1"
   resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
@@ -5569,6 +6131,13 @@ is-ci@^2.0.0:
   dependencies:
     ci-info "^2.0.0"
 
+is-ci@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867"
+  integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==
+  dependencies:
+    ci-info "^3.2.0"
+
 is-core-module@^2.13.0:
   version "2.13.1"
   resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384"
@@ -5701,6 +6270,16 @@ is-inside-container@^1.0.0:
   dependencies:
     is-docker "^3.0.0"
 
+is-interactive@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e"
+  integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==
+
+is-lambda@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5"
+  integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==
+
 is-map@^2.0.1:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127"
@@ -5839,6 +6418,11 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9:
   dependencies:
     which-typed-array "^1.1.11"
 
+is-unicode-supported@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
+  integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
+
 is-weakmap@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2"
@@ -5891,6 +6475,11 @@ isbinaryfile@^4.0.8:
   resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3"
   integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==
 
+isbinaryfile@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-5.0.0.tgz#034b7e54989dab8986598cbcea41f66663c65234"
+  integrity sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg==
+
 isexe@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
@@ -5977,6 +6566,25 @@ iterator.prototype@^1.1.2:
     reflect.getprototypeof "^1.0.4"
     set-function-name "^2.0.1"
 
+jackspeak@^2.0.3:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.1.tgz#655e8cf025d872c9c03d3eb63e8f0c024fef16a6"
+  integrity sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==
+  dependencies:
+    "@isaacs/cliui" "^8.0.2"
+  optionalDependencies:
+    "@pkgjs/parseargs" "^0.11.0"
+
+jake@^10.8.5:
+  version "10.8.7"
+  resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f"
+  integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==
+  dependencies:
+    async "^3.2.3"
+    chalk "^4.0.2"
+    filelist "^1.0.4"
+    minimatch "^3.1.2"
+
 jest-changed-files@^29.7.0:
   version "29.7.0"
   resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a"
@@ -6568,7 +7176,7 @@ json5@^2.1.2:
   dependencies:
     minimist "^1.2.5"
 
-json5@^2.2.3:
+json5@^2.2.0, json5@^2.2.3:
   version "2.2.3"
   resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
   integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
@@ -6716,6 +7324,11 @@ lazy-cache@^2.0.2:
   dependencies:
     set-getter "^0.1.0"
 
+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==
+
 legal-eagle@0.16.0:
   version "0.16.0"
   resolved "https://registry.yarnpkg.com/legal-eagle/-/legal-eagle-0.16.0.tgz#bd3d136dd1b761a540bad898ace68f4009412575"
@@ -6879,6 +7492,14 @@ lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17
   resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
   integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
 
+log-symbols@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
+  integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
+  dependencies:
+    chalk "^4.1.0"
+    is-unicode-supported "^0.1.0"
+
 loose-envify@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
@@ -6920,6 +7541,16 @@ lru-cache@^6.0.0:
   dependencies:
     yallist "^4.0.0"
 
+lru-cache@^7.7.1:
+  version "7.18.3"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89"
+  integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==
+
+"lru-cache@^9.1.1 || ^10.0.0":
+  version "10.0.0"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.0.tgz#b9e2a6a72a129d81ab317202d93c7691df727e61"
+  integrity sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==
+
 make-dir@^3.0.0:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392"
@@ -6937,6 +7568,27 @@ make-error@^1.1.1:
   resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.0.tgz#52ad3a339ccf10ce62b4040b708fe707244b8b96"
   integrity sha1-Uq06M5zPEM5itAQLcI/nByRLi5Y=
 
+make-fetch-happen@^11.0.3:
+  version "11.1.1"
+  resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f"
+  integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==
+  dependencies:
+    agentkeepalive "^4.2.1"
+    cacache "^17.0.0"
+    http-cache-semantics "^4.1.1"
+    http-proxy-agent "^5.0.0"
+    https-proxy-agent "^5.0.0"
+    is-lambda "^1.0.1"
+    lru-cache "^7.7.1"
+    minipass "^5.0.0"
+    minipass-fetch "^3.0.0"
+    minipass-flush "^1.0.5"
+    minipass-pipeline "^1.2.4"
+    negotiator "^0.6.3"
+    promise-retry "^2.0.1"
+    socks-proxy-agent "^7.0.0"
+    ssri "^10.0.0"
+
 makeerror@1.0.12:
   version "1.0.12"
   resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a"
@@ -7096,6 +7748,11 @@ mime@1.6.0:
   resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
   integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
 
+mime@^2.5.2:
+  version "2.6.0"
+  resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367"
+  integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==
+
 mimic-fn@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
@@ -7137,6 +7794,20 @@ minimatch@^5.0.1:
   dependencies:
     brace-expansion "^2.0.1"
 
+minimatch@^5.1.1:
+  version "5.1.6"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96"
+  integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==
+  dependencies:
+    brace-expansion "^2.0.1"
+
+minimatch@^9.0.1:
+  version "9.0.3"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
+  integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
+  dependencies:
+    brace-expansion "^2.0.1"
+
 minimatch@~5.1.0:
   version "5.1.0"
   resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7"
@@ -7154,6 +7825,70 @@ minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6:
   resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18"
   integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==
 
+minipass-collect@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617"
+  integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass-fetch@^3.0.0:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.3.tgz#d9df70085609864331b533c960fd4ffaa78d15ce"
+  integrity sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==
+  dependencies:
+    minipass "^5.0.0"
+    minipass-sized "^1.0.3"
+    minizlib "^2.1.2"
+  optionalDependencies:
+    encoding "^0.1.13"
+
+minipass-flush@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373"
+  integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass-pipeline@^1.2.4:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c"
+  integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass-sized@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70"
+  integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass@^3.0.0:
+  version "3.3.6"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a"
+  integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==
+  dependencies:
+    yallist "^4.0.0"
+
+minipass@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d"
+  integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
+
+"minipass@^5.0.0 || ^6.0.2 || ^7.0.0":
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.1.tgz#dff63464407cd8b83d7f008c0f116fa8c9b77ebf"
+  integrity sha512-NQ8MCKimInjVlaIqx51RKJJB7mINVkLTJbsZKmto4UAAOC/CWXES8PGaOgoBZyqoUsUA/U3DToGK7GJkkHbjJw==
+
+minizlib@^2.1.1, minizlib@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
+  integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
+  dependencies:
+    minipass "^3.0.0"
+    yallist "^4.0.0"
+
 mixin-deep@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.2.0.tgz#d02b8c6f8b6d4b8f5982d3fd009c4919851c3fe2"
@@ -7169,6 +7904,11 @@ mkdirp@^0.5.1:
   dependencies:
     minimist "0.0.8"
 
+mkdirp@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
+  integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
+
 mrmime@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.0.tgz#14d387f0585a5233d291baba339b063752a2398b"
@@ -7184,7 +7924,7 @@ 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.3, ms@^2.1.1:
+ms@2.1.3, ms@^2.0.0, 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==
@@ -7217,7 +7957,7 @@ natural-compare@^1.4.0:
   resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
   integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
 
-negotiator@0.6.3:
+negotiator@0.6.3, negotiator@^0.6.3:
   version "0.6.3"
   resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
   integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
@@ -7240,6 +7980,25 @@ no-case@^3.0.4:
     lower-case "^2.0.2"
     tslib "^2.0.3"
 
+node-abi@^3.0.0:
+  version "3.45.0"
+  resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.45.0.tgz#f568f163a3bfca5aacfce1fbeee1fa2cc98441f5"
+  integrity sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ==
+  dependencies:
+    semver "^7.3.5"
+
+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-api-version@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/node-api-version/-/node-api-version-0.1.4.tgz#1ed46a485e462d55d66b5aa1fe2821720dedf080"
+  integrity sha512-KGXihXdUChwJAOHO53bv9/vXcLmdUsZ6jIptbvYvkpKfth+r7jw44JkVxQFA3kX5nQjzjmGu1uAu/xNNLNlI5g==
+  dependencies:
+    semver "^7.3.5"
+
 node-fetch@^2.6.7, node-fetch@^2.6.9:
   version "2.6.9"
   resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6"
@@ -7247,6 +8006,23 @@ node-fetch@^2.6.7, node-fetch@^2.6.9:
   dependencies:
     whatwg-url "^5.0.0"
 
+node-gyp@^9.0.0:
+  version "9.4.0"
+  resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.0.tgz#2a7a91c7cba4eccfd95e949369f27c9ba704f369"
+  integrity sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==
+  dependencies:
+    env-paths "^2.2.0"
+    exponential-backoff "^3.1.1"
+    glob "^7.1.4"
+    graceful-fs "^4.2.6"
+    make-fetch-happen "^11.0.3"
+    nopt "^6.0.0"
+    npmlog "^6.0.0"
+    rimraf "^3.0.2"
+    semver "^7.3.5"
+    tar "^6.1.2"
+    which "^2.0.2"
+
 node-int64@^0.4.0:
   version "0.4.0"
   resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
@@ -7271,6 +8047,13 @@ node-releases@^2.0.6:
   resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503"
   integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==
 
+nopt@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d"
+  integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==
+  dependencies:
+    abbrev "^1.0.0"
+
 normalize-package-data@^2.0.0, normalize-package-data@^2.3.2:
   version "2.4.0"
   resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
@@ -7305,6 +8088,16 @@ npm-run-path@^5.1.0:
   dependencies:
     path-key "^4.0.0"
 
+npmlog@^6.0.0:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830"
+  integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==
+  dependencies:
+    are-we-there-yet "^3.0.0"
+    console-control-strings "^1.1.0"
+    gauge "^4.0.3"
+    set-blocking "^2.0.0"
+
 nth-check@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2"
@@ -7481,7 +8274,7 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0:
   dependencies:
     wrappy "1"
 
-onetime@^5.1.2:
+onetime@^5.1.0, onetime@^5.1.2:
   version "5.1.2"
   resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
   integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
@@ -7530,6 +8323,21 @@ optionator@^0.9.3:
     prelude-ls "^1.2.1"
     type-check "^0.4.0"
 
+ora@^5.1.0:
+  version "5.4.1"
+  resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18"
+  integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==
+  dependencies:
+    bl "^4.1.0"
+    chalk "^4.1.0"
+    cli-cursor "^3.1.0"
+    cli-spinners "^2.5.0"
+    is-interactive "^1.0.0"
+    is-unicode-supported "^0.1.0"
+    log-symbols "^4.1.0"
+    strip-ansi "^6.0.0"
+    wcwidth "^1.0.1"
+
 os-tmpdir@~1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
@@ -7580,6 +8388,13 @@ p-locate@^5.0.0:
   dependencies:
     p-limit "^3.0.2"
 
+p-map@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
+  integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
+  dependencies:
+    aggregate-error "^3.0.0"
+
 p-try@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1"
@@ -7722,6 +8537,14 @@ path-parse@^1.0.5, path-parse@^1.0.7:
   resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
   integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
 
+path-scurry@^1.10.1:
+  version "1.10.1"
+  resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698"
+  integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==
+  dependencies:
+    lru-cache "^9.1.1 || ^10.0.0"
+    minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+
 path-to-regexp@0.1.7:
   version "0.1.7"
   resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
@@ -7921,6 +8744,14 @@ progress@^2.0.3:
   resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
   integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
 
+promise-retry@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22"
+  integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==
+  dependencies:
+    err-code "^2.0.2"
+    retry "^0.12.0"
+
 promise.prototype.finally@^3.1.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.0.tgz#66f161b1643636e50e7cf201dc1b84a857f3864e"
@@ -8069,6 +8900,18 @@ react-is@^18.0.0:
   resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
   integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
 
+read-config-file@6.3.2:
+  version "6.3.2"
+  resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-6.3.2.tgz#556891aa6ffabced916ed57457cb192e61880411"
+  integrity sha512-M80lpCjnE6Wt6zb98DoW8WHR09nzMSpu8XHtPkiTHrJ5Az9CybfeQhTJ8D7saeBHpGhLPIVyA8lcL6ZmdKwY6Q==
+  dependencies:
+    config-file-ts "^0.2.4"
+    dotenv "^9.0.2"
+    dotenv-expand "^5.1.0"
+    js-yaml "^4.1.0"
+    json5 "^2.2.0"
+    lazy-val "^1.0.4"
+
 read-installed@4.0.3:
   version "4.0.3"
   resolved "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067"
@@ -8121,6 +8964,15 @@ readable-stream@^3.0.0:
     string_decoder "^1.1.1"
     util-deprecate "^1.0.1"
 
+readable-stream@^3.4.0, readable-stream@^3.6.0:
+  version "3.6.2"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
+  integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
+  dependencies:
+    inherits "^2.0.3"
+    string_decoder "^1.1.1"
+    util-deprecate "^1.0.1"
+
 readdir-scoped-modules@^1.0.0:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747"
@@ -8315,11 +9167,24 @@ responselike@^2.0.0:
   dependencies:
     lowercase-keys "^2.0.0"
 
+restore-cursor@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
+  integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
+  dependencies:
+    onetime "^5.1.0"
+    signal-exit "^3.0.2"
+
 ret@~0.1.10:
   version "0.1.15"
   resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
   integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
 
+retry@^0.12.0:
+  version "0.12.0"
+  resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
+  integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==
+
 reusify@^1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
@@ -8430,6 +9295,13 @@ safe-regex@^1.1.0:
   resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
   integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
 
+sanitize-filename@^1.6.3:
+  version "1.6.3"
+  resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378"
+  integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==
+  dependencies:
+    truncate-utf8-bytes "^1.0.0"
+
 sass-loader@^10.0.3:
   version "10.0.3"
   resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.0.3.tgz#9e2f1bfdd6355f2adde4e4835d838b020bf800b0"
@@ -8448,7 +9320,7 @@ sass@^1.27.0:
   dependencies:
     chokidar ">=2.0.0 <4.0.0"
 
-sax@>=0.6.0:
+sax@>=0.6.0, sax@^1.2.4:
   version "1.2.4"
   resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
   integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
@@ -8523,13 +9395,18 @@ semver@^7.3.4, semver@^7.3.5:
   dependencies:
     lru-cache "^6.0.0"
 
-semver@^7.3.7, semver@^7.5.3, semver@^7.5.4:
+semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4:
   version "7.5.4"
   resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
   integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
   dependencies:
     lru-cache "^6.0.0"
 
+semver@~7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
+  integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
+
 send@0.17.2:
   version "0.17.2"
   resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820"
@@ -8669,11 +9546,23 @@ side-channel@^1.0.4:
     get-intrinsic "^1.0.2"
     object-inspect "^1.9.0"
 
-signal-exit@^3.0.3, signal-exit@^3.0.7:
+signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7:
   version "3.0.7"
   resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
   integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
 
+signal-exit@^4.0.1:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967"
+  integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==
+
+simple-update-notifier@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82"
+  integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==
+  dependencies:
+    semver "~7.0.0"
+
 sirv@^1.0.7:
   version "1.0.19"
   resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49"
@@ -8703,11 +9592,25 @@ slash@^3.0.0:
   resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
   integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
 
+slice-ansi@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787"
+  integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==
+  dependencies:
+    ansi-styles "^4.0.0"
+    astral-regex "^2.0.0"
+    is-fullwidth-code-point "^3.0.0"
+
 slide@~1.1.3:
   version "1.1.6"
   resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
   integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=
 
+smart-buffer@^4.0.2, smart-buffer@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
+  integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==
+
 smoothscroll-polyfill@^0.3.6:
   version "0.3.6"
   resolved "https://registry.yarnpkg.com/smoothscroll-polyfill/-/smoothscroll-polyfill-0.3.6.tgz#492be845195157cdc2fc529a95d89e7a71509172"
@@ -8743,6 +9646,23 @@ snapdragon@^0.8.1:
     source-map-resolve "^0.5.0"
     use "^2.0.0"
 
+socks-proxy-agent@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6"
+  integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==
+  dependencies:
+    agent-base "^6.0.2"
+    debug "^4.3.3"
+    socks "^2.6.2"
+
+socks@^2.6.2:
+  version "2.7.1"
+  resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55"
+  integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==
+  dependencies:
+    ip "^2.0.0"
+    smart-buffer "^4.2.0"
+
 source-map-js@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
@@ -8767,7 +9687,7 @@ source-map-support@0.5.13:
     buffer-from "^1.0.0"
     source-map "^0.6.0"
 
-source-map-support@^0.5.6, source-map-support@~0.5.20:
+source-map-support@^0.5.19, source-map-support@^0.5.6, source-map-support@~0.5.20:
   version "0.5.21"
   resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
   integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
@@ -8849,6 +9769,13 @@ sprintf-js@~1.0.2:
   resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
   integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
 
+ssri@^10.0.0:
+  version "10.0.4"
+  resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.4.tgz#5a20af378be586df139ddb2dfb3bf992cf0daba6"
+  integrity sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==
+  dependencies:
+    minipass "^5.0.0"
+
 stack-utils@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620"
@@ -8861,6 +9788,11 @@ stack-utils@^2.0.3:
   dependencies:
     escape-string-regexp "^2.0.0"
 
+stat-mode@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-1.0.0.tgz#68b55cb61ea639ff57136f36b216a291800d1465"
+  integrity sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==
+
 static-extend@^0.1.1:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
@@ -8882,6 +9814,15 @@ string-length@^4.0.1:
     char-regex "^1.0.2"
     strip-ansi "^6.0.0"
 
+"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3:
+  version "4.2.3"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+  integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+  dependencies:
+    emoji-regex "^8.0.0"
+    is-fullwidth-code-point "^3.0.0"
+    strip-ansi "^6.0.1"
+
 string-width@^4.1.0, string-width@^4.2.0:
   version "4.2.0"
   resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
@@ -8891,14 +9832,14 @@ string-width@^4.1.0, string-width@^4.2.0:
     is-fullwidth-code-point "^3.0.0"
     strip-ansi "^6.0.0"
 
-string-width@^4.2.3:
-  version "4.2.3"
-  resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
-  integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+string-width@^5.0.1, string-width@^5.1.2:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
+  integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
   dependencies:
-    emoji-regex "^8.0.0"
-    is-fullwidth-code-point "^3.0.0"
-    strip-ansi "^6.0.1"
+    eastasianwidth "^0.2.0"
+    emoji-regex "^9.2.2"
+    strip-ansi "^7.0.1"
 
 string.prototype.matchall@^3.0.0:
   version "3.0.0"
@@ -9012,6 +9953,13 @@ string_decoder@^1.1.1:
   dependencies:
     safe-buffer "~5.2.0"
 
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+  integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+  dependencies:
+    ansi-regex "^5.0.1"
+
 strip-ansi@^3.0.0:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
@@ -9026,12 +9974,12 @@ strip-ansi@^6.0.0:
   dependencies:
     ansi-regex "^5.0.0"
 
-strip-ansi@^6.0.1:
-  version "6.0.1"
-  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
-  integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+strip-ansi@^7.0.1:
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
+  integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
   dependencies:
-    ansi-regex "^5.0.1"
+    ansi-regex "^6.0.1"
 
 strip-bom@^3.0.0:
   version "3.0.0"
@@ -9145,6 +10093,26 @@ tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0:
   resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
   integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
 
+tar@^6.0.5, tar@^6.1.11, tar@^6.1.12, tar@^6.1.2:
+  version "6.1.15"
+  resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69"
+  integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==
+  dependencies:
+    chownr "^2.0.0"
+    fs-minipass "^2.0.0"
+    minipass "^5.0.0"
+    minizlib "^2.1.1"
+    mkdirp "^1.0.3"
+    yallist "^4.0.0"
+
+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 "^10.0.0"
+
 temp@^0.9.0:
   version "0.9.1"
   resolved "https://registry.yarnpkg.com/temp/-/temp-0.9.1.tgz#2d666114fafa26966cd4065996d7ceedd4dd4697"
@@ -9335,6 +10303,13 @@ trim-repeated@^1.0.0:
   dependencies:
     escape-string-regexp "^1.0.2"
 
+truncate-utf8-bytes@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b"
+  integrity sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==
+  dependencies:
+    utf8-byte-length "^1.0.1"
+
 ts-api-utils@^1.0.1:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331"
@@ -9509,6 +10484,11 @@ typed-array-length@^1.0.4:
     for-each "^0.3.3"
     is-typed-array "^1.1.9"
 
+typescript@^4.0.2:
+  version "4.9.5"
+  resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a"
+  integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==
+
 typescript@^5.3.2:
   version "5.3.2"
   resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.2.tgz#00d1c7c1c46928c5845c1ee8d0cc2791031d4c43"
@@ -9554,6 +10534,20 @@ union-value@^1.0.0:
     is-extendable "^0.1.1"
     set-value "^0.4.3"
 
+unique-filename@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea"
+  integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==
+  dependencies:
+    unique-slug "^4.0.0"
+
+unique-slug@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3"
+  integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==
+  dependencies:
+    imurmurhash "^0.1.4"
+
 universalify@^0.1.0:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
@@ -9637,6 +10631,11 @@ use@^2.0.0:
     isobject "^3.0.0"
     lazy-cache "^2.0.2"
 
+utf8-byte-length@^1.0.1:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61"
+  integrity sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==
+
 util-deprecate@^1.0.1, util-deprecate@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
@@ -9684,6 +10683,15 @@ vary@~1.1.2:
   resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
   integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
 
+verror@^1.10.0:
+  version "1.10.1"
+  resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.1.tgz#4bf09eeccf4563b109ed4b3d458380c972b0cdeb"
+  integrity sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==
+  dependencies:
+    assert-plus "^1.0.0"
+    core-util-is "1.0.2"
+    extsprintf "^1.2.0"
+
 vscode-json-languageservice@^3.7.0:
   version "3.8.0"
   resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-3.8.0.tgz#c7e7283f993e3db39fa5501407b023ada6fd3ae3"
@@ -9737,6 +10745,13 @@ watchpack@^2.4.0:
     glob-to-regexp "^0.4.1"
     graceful-fs "^4.1.2"
 
+wcwidth@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
+  integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==
+  dependencies:
+    defaults "^1.0.3"
+
 webidl-conversions@^3.0.0:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
@@ -9939,6 +10954,13 @@ which@^2.0.1, which@^2.0.2:
   dependencies:
     isexe "^2.0.0"
 
+wide-align@^1.1.5:
+  version "1.1.5"
+  resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3"
+  integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==
+  dependencies:
+    string-width "^1.0.2 || 2 || 3 || 4"
+
 wildcard@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec"
@@ -9962,6 +10984,15 @@ worker-farm@^1.3.1:
     errno "^0.1.4"
     xtend "^4.0.1"
 
+"wrap-ansi-cjs@npm:wrap-ansi@^7.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"
+
 wrap-ansi@^6.2.0:
   version "6.2.0"
   resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
@@ -9971,14 +11002,14 @@ 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==
+wrap-ansi@^8.1.0:
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
+  integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
   dependencies:
-    ansi-styles "^4.0.0"
-    string-width "^4.1.0"
-    strip-ansi "^6.0.0"
+    ansi-styles "^6.1.0"
+    string-width "^5.0.1"
+    strip-ansi "^7.0.1"
 
 wrappy@1:
   version "1.0.2"
@@ -10129,7 +11160,7 @@ yargs@^16.0.2:
     y18n "^5.0.5"
     yargs-parser "^20.2.2"
 
-yargs@^17.3.1:
+yargs@^17.0.1, yargs@^17.3.1, yargs@^17.6.2:
   version "17.7.2"
   resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
   integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==

From 6b37bfe07daacd96ca035b8768f84b700e86cfd5 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Sun, 9 Jul 2023 18:54:14 -0300
Subject: [PATCH 69/97] switch Linux build over to use configured docker image
 (#898)

Co-authored-by: theofficialgman <28281419+theofficialgman@users.noreply.github.com>
---
 .github/workflows/ci.yml           | 92 ++++++++++++++++++++++++++----
 script/build.ts                    | 23 ++++----
 script/dist-info.ts                | 15 ++---
 script/electron-builder-linux.yml  |  2 +-
 script/package-debian.ts           |  5 +-
 script/package-electron-builder.ts |  3 +-
 script/package-redhat.ts           |  5 +-
 7 files changed, 104 insertions(+), 41 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index c4af25d754c..2abad64c84e 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -41,6 +41,7 @@ jobs:
   build:
     name: ${{ matrix.friendlyName }} ${{ matrix.arch }}
     runs-on: ${{ matrix.os }}
+    container: ${{ matrix.image }}
     permissions:
       contents: write
     strategy:
@@ -55,14 +56,61 @@ jobs:
             friendlyName: Windows
           - os: ubuntu-20.04
             friendlyName: Ubuntu
+            image: ubuntu:18.04
+            arch: x64
+            environment:
+              AS: as
+              STRIP: strip
+              AR: ar
+              CC: gcc
+              CPP: cpp
+              CXX: g++
+              LD: ld
+              FC: gfortran
+              PKG_CONFIG_PATH: /usr/lib/x86_64-linux-gnu/pkgconfig
         exclude:
           - os: ubuntu-20.04
             arch: arm64
     timeout-minutes: 60
     env:
       RELEASE_CHANNEL: ${{ inputs.environment }}
+      AS: ${{ matrix.environment.AS }}
+      STRIP: ${{ matrix.environment.STRIP }}
+      AR: ${{ matrix.environment.AR }}
+      CC: ${{ matrix.environment.CC }}
+      CPP: ${{ matrix.environment.CPP }}
+      CXX: ${{ matrix.environment.CXX }}
+      LD: ${{ matrix.environment.LD }}
+      FC: ${{ matrix.environment.FC }}
+      PKG_CONFIG_PATH: ${{ matrix.environment.PKG_CONFIG_PATH }}
+      npm_config_arch: ${{ matrix.arch }}
     steps:
-      - uses: actions/checkout@v4
+      - name: Install dependencies into dockerfile on Ubuntu
+        if: matrix.friendlyName == 'Ubuntu'
+        run: |
+          # ubuntu dockerfile is very minimal (only 122 packages are installed)
+          # add dependencies expected by scripts
+          apt update
+          apt install -y software-properties-common lsb-release \
+          sudo wget curl build-essential jq autoconf automake \
+          pkg-config ca-certificates rpm
+          # install new enough git to run actions/checkout
+          sudo add-apt-repository ppa:git-core/ppa -y
+          sudo apt update
+          sudo apt install -y git
+          # avoid "fatal: detected dubious ownership in repository at '/__w/shiftkey/desktop'" error
+          git config --global --add safe.directory '*'
+      - name: Add additional dependencies for Ubuntu x64
+        if: ${{ matrix.friendlyName == 'Ubuntu' && matrix.arch == 'x64' }}
+        run: |
+          # add electron unit test dependencies
+          sudo apt install -y libasound2 libatk-bridge2.0-0 libatk1.0-0 \
+          libatspi2.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libdrm2 \
+          libexpat1 libgbm1 libgcc1 libglib2.0-0 libgtk-3-0 libnspr4 \
+          libnss3 libpango-1.0-0 libx11-6 libxcb1 libxcomposite1 \
+          libxdamage1 libxext6 libxfixes3 libxkbcommon0 libxrandr2 \
+          libsecret-1-0
+      - uses: actions/checkout@v3
         with:
           repository: ${{ inputs.repository || github.repository }}
           ref: ${{ inputs.ref }}
@@ -71,27 +119,37 @@ jobs:
         with:
           python-version: '3.11'
       - name: Use Node.js ${{ env.NODE_VERSION }}
+        if: matrix.friendlyName != 'Ubuntu'
         uses: actions/setup-node@v4
         with:
           node-version: ${{ env.NODE_VERSION }}
           cache: yarn
-
+      - name: Install unofficial-builds Node.js ${{ matrix.node }} on Ubuntu
+        if: matrix.friendlyName == 'Ubuntu'
+        run: |
+          # This version supports older GLIBC (official builds required a minimum of GLIBC 2.28)
+          # this might break if you bump the `matrix.node` version - ensure you are on the latest version
+          # of which ever major/minor release which should have this variant available
+          #
+          # See https://github.com/nodejs/unofficial-builds/ for more information on these versions.
+          #
+          curl -sL 'https://unofficial-builds.nodejs.org/download/release/v${{ matrix.node }}/node-v${{ matrix.node }}-linux-x64-glibc-217.tar.xz' | xzcat | sudo tar -vx  --strip-components=1 -C /usr/local/
+          sudo npm install --global yarn
       # This step can be removed as soon as official Windows arm64 builds are published:
       # https://github.com/nodejs/build/issues/2450#issuecomment-705853342
+      #
+      # This version is pinned to 18.16.0 as the later version does not have the required
+      # `win-arm64/node.lib` output that we can consume in this CI build.
       - name: Get NodeJS node-gyp lib for Windows arm64
         if: ${{ matrix.os == 'windows-2019' && matrix.arch == 'arm64' }}
-        run: .\script\download-nodejs-win-arm64.ps1 ${{ env.NODE_VERSION }}
-
+        run: .\script\download-nodejs-win-arm64.ps1 18.16.0
+      - name: Get app version
+        id: version
+        run: echo version=$(jq -r ".version" app/package.json) >> $GITHUB_OUTPUT
       - name: Install and build dependencies
         run: yarn
-        env:
-          npm_config_arch: ${{ matrix.arch }}
-          TARGET_ARCH: ${{ matrix.arch }}
       - name: Build production app
         run: yarn build:prod
-        env:
-          npm_config_arch: ${{ matrix.arch }}
-          TARGET_ARCH: ${{ matrix.arch }}
       - name: Prepare testing environment
         if: matrix.arch == 'x64'
         run: yarn test:setup
@@ -105,11 +163,11 @@ jobs:
         run: yarn test:script
       - name: Package application
         run: yarn run package
-        if: ${{ matrix.os == 'ubuntu-20.04' && matrix.arch == 'x64' }}
+        if: ${{ matrix.friendlyName == 'Ubuntu' }}
       - name: Create Release
         uses: softprops/action-gh-release@v1
         if:
-          ${{ matrix.os == 'ubuntu-20.04' && startsWith(github.ref,
+          ${{ matrix.friendlyName == 'Ubuntu' && startsWith(github.ref,
           'refs/tags/') }}
         with:
           files: |
@@ -120,3 +178,13 @@ jobs:
           draft: true
         env:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+      - name: Upload output artifacts
+        uses: actions/upload-artifact@v3
+        if: matrix.friendlyName == 'Ubuntu'
+        with:
+          name: ${{ matrix.friendlyName }}-${{ matrix.arch }}-artifacts
+          path: |
+            dist/*.AppImage
+            dist/*.deb
+            dist/*.rpm
+          retention-days: 5
diff --git a/script/build.ts b/script/build.ts
index de2e6818688..7fbc21fe751 100755
--- a/script/build.ts
+++ b/script/build.ts
@@ -3,8 +3,7 @@
 
 import * as path from 'path'
 import * as cp from 'child_process'
-import * as os from 'os'
-import packager, { OfficialArch, OsxNotarizeOptions } from 'electron-packager'
+import packager, { OsxNotarizeOptions } from 'electron-packager'
 import frontMatter from 'front-matter'
 import { externals } from '../app/webpack.common'
 
@@ -131,21 +130,19 @@ function packageApp() {
     )
   }
 
-  const toPackageArch = (targetArch: string | undefined): OfficialArch => {
-    if (targetArch === undefined) {
-      targetArch = os.arch()
+  const getPackageArch = (): 'arm64' | 'x64' | 'armv7l' => {
+    const arch = process.env.npm_config_arch || process.arch
+
+    if (arch === 'arm64' || arch === 'x64') {
+      return arch
     }
 
-    if (
-      targetArch === 'arm64' ||
-      targetArch === 'x64' ||
-      targetArch === 'armv7l'
-    ) {
-      return targetArch
+    if (arch === 'arm') {
+      return 'armv7l'
     }
 
     throw new Error(
-      `Building Desktop for architecture '${targetArch}' is not supported`
+      `Building Desktop for architecture '${arch}' is not supported. Currently these architectures are supported: arm, arm64, x64`
     )
   }
 
@@ -174,7 +171,7 @@ function packageApp() {
   return packager({
     name: getExecutableName(),
     platform: toPackagePlatform(process.platform),
-    arch: toPackageArch(process.env.TARGET_ARCH),
+    arch: getPackageArch(),
     asar: false, // TODO: Probably wanna enable this down the road.
     out: getDistRoot(),
     icon,
diff --git a/script/dist-info.ts b/script/dist-info.ts
index 420444f7448..459f01db905 100644
--- a/script/dist-info.ts
+++ b/script/dist-info.ts
@@ -114,18 +114,13 @@ export const getChannel = () =>
 
 export function getDistArchitecture(): 'arm64' | 'x64' | 'armv7l' {
   // If a specific npm_config_arch is set, we use that one instead of the OS arch (to support cross compilation)
-  if (
-    process.env.npm_config_arch === 'arm64' ||
-    process.env.npm_config_arch === 'x64' ||
-    process.env.npm_config_arch === 'armv7l'
-  ) {
-    return process.env.npm_config_arch
-  }
+  const arch = process.env.npm_config_arch || process.arch
 
-  if (process.arch === 'arm64') {
-    return 'arm64'
+  if (arch === 'arm64' || arch === 'x64' || arch === 'armv7l') {
+    return arch
   }
-  if (process.arch === 'arm') {
+
+  if (arch === 'arm') {
     return 'armv7l'
   }
 
diff --git a/script/electron-builder-linux.yml b/script/electron-builder-linux.yml
index bcaae41ee82..c40d57c7e98 100644
--- a/script/electron-builder-linux.yml
+++ b/script/electron-builder-linux.yml
@@ -1,4 +1,4 @@
-artifactName: 'GitHubDesktop-${os}-${version}.${ext}'
+artifactName: 'GitHubDesktop-${os}-${arch}-${version}.${ext}'
 linux:
   category: 'GNOME;GTK;Development'
   packageCategory: 'GNOME;GTK;Development'
diff --git a/script/package-debian.ts b/script/package-debian.ts
index 9a918473070..b184481843d 100644
--- a/script/package-debian.ts
+++ b/script/package-debian.ts
@@ -10,7 +10,8 @@ import { getVersion } from '../app/package-info'
 import { getDistPath, getDistRoot } from './dist-info'
 
 function getArchitecture() {
-  switch (process.arch) {
+  const arch = process.env.npm_config_arch || process.arch
+  switch (arch) {
     case 'arm64':
       return 'arm64'
     case 'arm':
@@ -107,7 +108,7 @@ export async function packageDebian(): Promise<string> {
 
   const oldPath = files[0]
 
-  const newFileName = `GitHubDesktop-linux-${getVersion()}.deb`
+  const newFileName = `GitHubDesktop-linux-${getArchitecture()}-${getVersion()}.deb`
   const newPath = join(distRoot, newFileName)
   await rename(oldPath, newPath)
 
diff --git a/script/package-electron-builder.ts b/script/package-electron-builder.ts
index 6292c28b9f4..2f56e73fba5 100644
--- a/script/package-electron-builder.ts
+++ b/script/package-electron-builder.ts
@@ -10,7 +10,8 @@ const globPromise = promisify(glob)
 import { getDistPath, getDistRoot } from './dist-info'
 
 function getArchitecture() {
-  switch (process.arch) {
+  const arch = process.env.npm_config_arch || process.arch
+  switch (arch) {
     case 'arm64':
       return '--arm64'
     case 'arm':
diff --git a/script/package-redhat.ts b/script/package-redhat.ts
index 37bd3819293..61fe4a1162e 100644
--- a/script/package-redhat.ts
+++ b/script/package-redhat.ts
@@ -10,7 +10,8 @@ import { getVersion } from '../app/package-info'
 import { getDistPath, getDistRoot } from './dist-info'
 
 function getArchitecture() {
-  switch (process.arch) {
+  const arch = process.env.npm_config_arch || process.arch
+  switch (arch) {
     case 'arm64':
       return 'aarch64'
     case 'arm':
@@ -103,7 +104,7 @@ export async function packageRedhat(): Promise<string> {
 
   const oldPath = files[0]
 
-  const newFileName = `GitHubDesktop-linux-${getVersion()}.rpm`
+  const newFileName = `GitHubDesktop-linux-${getArchitecture()}-${getVersion()}.rpm`
   const newPath = join(distRoot, newFileName)
   await rename(oldPath, newPath)
 

From e3a588c578d5a5a1c4f66a83cf4fc9e230f4d11d Mon Sep 17 00:00:00 2001
From: theofficialgman <28281419+theofficialgman@users.noreply.github.com>
Date: Sun, 9 Jul 2023 19:09:35 -0400
Subject: [PATCH 70/97] enable workflow for ARM32/ARM64 on Ubuntu (#897)

---
 .github/workflows/ci.yml | 43 +++++++++++++++++++++++++++++++++++++++-
 1 file changed, 42 insertions(+), 1 deletion(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 2abad64c84e..6d95f717962 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -68,9 +68,36 @@ jobs:
               LD: ld
               FC: gfortran
               PKG_CONFIG_PATH: /usr/lib/x86_64-linux-gnu/pkgconfig
-        exclude:
           - os: ubuntu-20.04
+            friendlyName: Ubuntu
+            image: ubuntu:18.04
             arch: arm64
+            environment:
+              AS: aarch64-linux-gnu-as
+              STRIP: aarch64-linux-gnu-strip
+              AR: aarch64-linux-gnu-ar
+              CC: aarch64-linux-gnu-gcc
+              CPP: aarch64-linux-gnu-cpp
+              CXX: aarch64-linux-gnu-g++
+              LD: aarch64-linux-gnu-ld
+              FC: aarch64-linux-gnu-gfortran
+              PKG_CONFIG_PATH: /usr/lib/aarch64-linux-gnu/pkgconfig
+          - os: ubuntu-20.04
+            friendlyName: Ubuntu
+            image: ubuntu:18.04
+            arch: arm
+            node: 18.16.1
+            environment:
+              AS: arm-linux-gnueabihf-as
+              STRIP: arm-linux-gnueabihf-strip
+              AR: arm-linux-gnueabihf-ar
+              CC: arm-linux-gnueabihf-gcc
+              CPP: arm-linux-gnueabihf-cpp
+              CXX: arm-linux-gnueabihf-g++
+              LD: arm-linux-gnueabihf-ld
+              FC: arm-linux-gnueabihf-gfortran
+              PKG_CONFIG_PATH: /usr/lib/arm-linux-gnueabihf/pkgconfig
+
     timeout-minutes: 60
     env:
       RELEASE_CHANNEL: ${{ inputs.environment }}
@@ -110,6 +137,20 @@ jobs:
           libnss3 libpango-1.0-0 libx11-6 libxcb1 libxcomposite1 \
           libxdamage1 libxext6 libxfixes3 libxkbcommon0 libxrandr2 \
           libsecret-1-0
+      - name: Add additional dependencies for Ubuntu arm64
+        if: ${{ matrix.friendlyName == 'Ubuntu' && matrix.arch == 'arm64' }}
+        run: |
+          sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu
+      - name: Add additional dependencies for Ubuntu arm
+        if: ${{ matrix.friendlyName == 'Ubuntu' && matrix.arch == 'arm' }}
+        run: |
+          sudo apt-get install -y gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf binutils-arm-linux-gnueabihf pkg-config-arm-linux-gnueabihf
+          sudo sed -i "s/^deb/deb [arch=amd64,i386]/g" /etc/apt/sources.list
+          echo "deb [arch=arm64,armhf] http://ports.ubuntu.com/ $(lsb_release -s -c) main universe multiverse restricted" | sudo tee -a /etc/apt/sources.list
+          echo "deb [arch=arm64,armhf] http://ports.ubuntu.com/ $(lsb_release -s -c)-updates main universe multiverse restricted" | sudo tee -a /etc/apt/sources.list
+          sudo dpkg --add-architecture armhf
+          sudo apt-get update
+          sudo apt-get install -y libx11-dev:armhf libx11-xcb-dev:armhf libxkbfile-dev:armhf libsecret-1-dev:armhf
       - uses: actions/checkout@v3
         with:
           repository: ${{ inputs.repository || github.repository }}

From e11edac4ce83cf0db64f7a532c00bd5dcf47146a Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Mon, 10 Jul 2023 08:50:35 -0300
Subject: [PATCH 71/97] introduce separate publish step which runs after build
 (#899)

---
 .github/workflows/ci.yml         |  73 ++++++++++++----
 .gitignore                       |   1 +
 script/generate-release-notes.ts | 140 +++++++++++++++++++++++++++++++
 script/package.ts                |   3 +
 4 files changed, 203 insertions(+), 14 deletions(-)
 create mode 100644 script/generate-release-notes.ts

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 6d95f717962..0a9e715c0c5 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -8,6 +8,7 @@ on:
       - 'linux-release-*'
     tags:
       - 'release-*.*.*-linux*'
+      - 'release-*.*.*-test*'
   pull_request:
     branches:
       - linux
@@ -205,20 +206,6 @@ jobs:
       - name: Package application
         run: yarn run package
         if: ${{ matrix.friendlyName == 'Ubuntu' }}
-      - name: Create Release
-        uses: softprops/action-gh-release@v1
-        if:
-          ${{ matrix.friendlyName == 'Ubuntu' && startsWith(github.ref,
-          'refs/tags/') }}
-        with:
-          files: |
-            dist/*.AppImage
-            dist/*.deb
-            dist/*.rpm
-            dist/*.txt
-          draft: true
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
       - name: Upload output artifacts
         uses: actions/upload-artifact@v3
         if: matrix.friendlyName == 'Ubuntu'
@@ -228,4 +215,62 @@ jobs:
             dist/*.AppImage
             dist/*.deb
             dist/*.rpm
+            dist/*.sha256
           retention-days: 5
+
+  publish:
+    name: Create GitHub release
+    needs: [build, lint]
+    runs-on: ubuntu-latest
+    if: startsWith(github.ref, 'refs/tags/')
+    permissions:
+      contents: write
+    steps:
+      - uses: actions/checkout@v3
+
+      - name: Download all artifacts
+        uses: actions/download-artifact@v2
+        with:
+          path: './artifacts'
+
+      - name: Display structure of downloaded files
+        run: ls -R
+        working-directory: './artifacts'
+
+      - name: Get tag name without prefix
+        run: |
+          RELEASE_TAG=${GITHUB_REF/refs\/tags\//}
+          echo "RELEASE_TAG=${RELEASE_TAG}" >> $GITHUB_ENV
+          tagNameWithoutPrefix="${RELEASE_TAG:1}"
+          echo "RELEASE_TAG_WITHOUT_PREFIX=${tagNameWithoutPrefix}" >> $GITHUB_ENV
+
+      # TODO: generate release notes
+      #    - pull in default if version matches X.Y.Z-linux1
+      #    - otherwise stub template
+
+      - name: Generate release notes
+        run: |
+          yarn
+          node -r ts-node/register script/generate-release-notes.ts "${{ github.workspace }}/artifacts" "${{ env.RELEASE_TAG_WITHOUT_PREFIX }}"
+          RELEASE_NOTES_FILE=script/release_notes.txt
+          if [[ ! -f "$RELEASE_NOTES_FILE" ]]; then
+              echo "$RELEASE_NOTES_FILE does not exist. Something might have gone wrong while generating the release notes."
+              exit 1
+          fi
+          echo "Release notes:"
+          echo "---"
+          cat ${RELEASE_NOTES_FILE}
+          echo "---"
+
+      - name: Create Release
+        uses: softprops/action-gh-release@v1
+        with:
+          name: GitHub Desktop for Linux ${{ env.RELEASE_TAG_WITHOUT_PREFIX }}
+          body_path: script/release_notes.txt
+          files: |
+            artifacts/*.AppImage
+            artifacts/*.deb
+            artifacts/*.rpm
+          draft: true
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.gitignore b/.gitignore
index 30a0037ef0b..4b8a3b69fe7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,3 +16,4 @@ app/node_modules/
 junit*.xml
 *.swp
 tslint-rules/
+script/release_notes.txt
diff --git a/script/generate-release-notes.ts b/script/generate-release-notes.ts
new file mode 100644
index 00000000000..b52d4f622a4
--- /dev/null
+++ b/script/generate-release-notes.ts
@@ -0,0 +1,140 @@
+/* eslint-disable no-sync */
+
+const glob = require('glob')
+const { basename } = require('path')
+const fs = require('fs')
+
+type ChecksumEntry = { filename: string; checksum: string }
+
+type ChecksumGroups = Record<'x64' | 'arm' | 'arm64', Array<ChecksumEntry>>
+
+// 3 architectures * 3 package formats * 2 files (package + checksum file)
+const SUCCESSFUL_RELEASE_FILE_COUNT = 3 * 3 * 2
+
+const Glob = glob.GlobSync
+
+const args = process.argv.slice(2)
+const artifactsDir = args[0]
+
+if (!artifactsDir) {
+  console.error(
+    `🔴 First parameter with artifacts directory not found. Aborting...`
+  )
+  process.exit(1)
+}
+
+const releaseTagWithoutPrefix = args[1]
+if (!releaseTagWithoutPrefix) {
+  console.error(`🔴 Second parameter with release tag not found. Aborting...`)
+  process.exit(1)
+}
+
+console.log(
+  `Preparing release notes for release tag ${releaseTagWithoutPrefix}`
+)
+
+const files = new Glob(artifactsDir + '/**/*', { nodir: true })
+
+let countFiles = 0
+const shaEntries = new Array<ChecksumEntry>()
+
+for (const file of files.found) {
+  if (file.endsWith('.sha256')) {
+    shaEntries.push(getShaContents(file))
+  }
+
+  countFiles++
+}
+
+if (SUCCESSFUL_RELEASE_FILE_COUNT !== countFiles) {
+  console.error(
+    `🔴 Artifacts folder has ${countFiles} assets, expecting ${SUCCESSFUL_RELEASE_FILE_COUNT}. Please check the GH Actions artifacts to see which are missing.`
+  )
+  process.exit(1)
+}
+
+const shaEntriesByArchitecture: ChecksumGroups = {
+  x64: shaEntries.filter(
+    e =>
+      e.filename.includes('-linux-x86_64-') ||
+      e.filename.includes('-linux-amd64-')
+  ),
+  arm: shaEntries.filter(
+    e =>
+      e.filename.includes('-linux-armv7l-') ||
+      e.filename.includes('-linux-armhf-')
+  ),
+  arm64: shaEntries.filter(
+    e =>
+      e.filename.includes('-linux-aarch64-') ||
+      e.filename.includes('-linux-arm64-')
+  ),
+}
+
+console.log(`Found ${countFiles} files in artifacts directory`)
+console.log(shaEntriesByArchitecture)
+
+const draftReleaseNotes = generateDraftReleaseNotes(
+  [],
+  shaEntriesByArchitecture
+)
+const releaseNotesPath = __dirname + '/release_notes.txt'
+
+fs.writeFileSync(releaseNotesPath, draftReleaseNotes, { encoding: 'utf8' })
+
+console.log(
+  `✅ All done! The release notes have been written to ${releaseNotesPath}`
+)
+
+/**
+ * Returns the filename (excluding .sha256) and its contents (a SHA256 checksum).
+ */
+function getShaContents(filePath: string): {
+  filename: string
+  checksum: string
+} {
+  const filename = basename(filePath).slice(0, -7)
+  const checksum = fs.readFileSync(filePath, 'utf8')
+
+  return { filename, checksum }
+}
+
+function formatEntry(e: ChecksumEntry): string {
+  return `**${e.filename}**\n${e.checksum}\n`
+}
+
+/**
+ * Takes the release notes entries and the SHA entries, then merges them into the full draft release notes ✨
+ */
+function generateDraftReleaseNotes(
+  releaseNotesEntries: Array<string>,
+  shaEntries: ChecksumGroups
+): string {
+  const changelogText = releaseNotesEntries.join('\n')
+
+  const x64Section = shaEntries.x64.map(formatEntry).join('\n')
+  const armSection = shaEntries.arm.map(formatEntry).join('\n')
+  const arm64Section = shaEntries.arm64.map(formatEntry).join('\n')
+
+  const draftReleaseNotes = `${changelogText}
+
+## Fixes and improvements
+
+TODO
+
+## SHA-256 checksums
+
+### x64
+
+${x64Section}
+
+### ARM64
+
+${arm64Section}
+
+### ARM
+
+${armSection}`
+
+  return draftReleaseNotes
+}
diff --git a/script/package.ts b/script/package.ts
index 26a54dd8484..5ac81ba677f 100644
--- a/script/package.ts
+++ b/script/package.ts
@@ -204,6 +204,9 @@ async function generateChecksums(files: Array<string>) {
   for (const [fullPath, checksum] of checksums) {
     const fileName = path.basename(fullPath)
     checksumsText += `${checksum} - ${fileName}\n`
+
+    const checksumFilePath = `${fullPath}.sha256`
+    await writeFile(checksumFilePath, checksum)
   }
 
   const checksumFile = path.join(distRoot, 'checksums.txt')

From b3eb4768ace1b9e68adff76399ae4343f260074a Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Mon, 10 Jul 2023 11:05:10 -0300
Subject: [PATCH 72/97] add support for generating release notes from upstream
 release (#900)

---
 script/generate-release-notes.ts | 209 +++++++++++++++++++++++++++----
 1 file changed, 184 insertions(+), 25 deletions(-)

diff --git a/script/generate-release-notes.ts b/script/generate-release-notes.ts
index b52d4f622a4..a299e3f860a 100644
--- a/script/generate-release-notes.ts
+++ b/script/generate-release-notes.ts
@@ -1,13 +1,23 @@
 /* eslint-disable no-sync */
 
 const glob = require('glob')
-const { basename } = require('path')
+const { basename, dirname, join } = require('path')
 const fs = require('fs')
 
 type ChecksumEntry = { filename: string; checksum: string }
 
 type ChecksumGroups = Record<'x64' | 'arm' | 'arm64', Array<ChecksumEntry>>
 
+type ReleaseNotesGroupType = 'new' | 'added' | 'fixed' | 'improved' | 'removed'
+
+type ReleaseNotesGroups = Record<ReleaseNotesGroupType, Array<ReleaseNoteEntry>>
+
+type ReleaseNoteEntry = {
+  text: string
+  ids: Array<number>
+  contributor?: string
+}
+
 // 3 architectures * 3 package formats * 2 files (package + checksum file)
 const SUCCESSFUL_RELEASE_FILE_COUNT = 3 * 3 * 2
 
@@ -74,11 +84,13 @@ const shaEntriesByArchitecture: ChecksumGroups = {
 console.log(`Found ${countFiles} files in artifacts directory`)
 console.log(shaEntriesByArchitecture)
 
+const releaseNotesByGroup = getReleaseGroups(releaseTagWithoutPrefix)
+
 const draftReleaseNotes = generateDraftReleaseNotes(
-  [],
+  releaseNotesByGroup,
   shaEntriesByArchitecture
 )
-const releaseNotesPath = __dirname + '/release_notes.txt'
+const releaseNotesPath = join(__dirname, 'release_notes.txt')
 
 fs.writeFileSync(releaseNotesPath, draftReleaseNotes, { encoding: 'utf8' })
 
@@ -99,42 +111,189 @@ function getShaContents(filePath: string): {
   return { filename, checksum }
 }
 
-function formatEntry(e: ChecksumEntry): string {
-  return `**${e.filename}**\n${e.checksum}\n`
+function extractIds(str: string): Array<number> {
+  const idRegex = /#(\d+)/g
+
+  const idArray = new Array<number>()
+  let match
+
+  while ((match = idRegex.exec(str))) {
+    const textValue = match[1].trim()
+    const numValue = parseInt(textValue, 10)
+    if (!isNaN(numValue)) {
+      idArray.push(numValue)
+    }
+  }
+
+  return idArray
 }
 
-/**
- * Takes the release notes entries and the SHA entries, then merges them into the full draft release notes ✨
- */
-function generateDraftReleaseNotes(
-  releaseNotesEntries: Array<string>,
-  shaEntries: ChecksumGroups
+function parseCategory(str: string): ReleaseNotesGroupType | null {
+  const input = str.toLocaleLowerCase()
+  switch (input) {
+    case 'added':
+    case 'fixed':
+    case 'improved':
+    case 'new':
+    case 'removed':
+      return input
+    default:
+      return null
+  }
+}
+
+function getReleaseGroups(version: string): ReleaseNotesGroups {
+  if (!version.endsWith('-linux1')) {
+    return {
+      new: [],
+      added: [],
+      fixed: [],
+      improved: [],
+      removed: [],
+    }
+  }
+
+  const upstreamVersion = version.replace('-linux1', '')
+  const rootDir = dirname(__dirname)
+  const changelogFile = fs.readFileSync(join(rootDir, 'changelog.json'))
+  const changelogJson = JSON.parse(changelogFile)
+  const releases = changelogJson['releases']
+  const changelogForVersion: Array<string> | undefined =
+    releases[upstreamVersion]
+
+  if (!changelogForVersion) {
+    console.error(
+      `🔴 Changelog version ${upstreamVersion} not found in changelog.json, which is required for publishing a release based off an upstream releease. Aborting...`
+    )
+    process.exit(1)
+  }
+
+  console.log(`found release notes`, changelogForVersion)
+
+  const releaseNotesByGroup: ReleaseNotesGroups = {
+    new: [],
+    added: [],
+    fixed: [],
+    improved: [],
+    removed: [],
+  }
+
+  const releaseEntryExternalContributor = /\[(.*)\](.*)- (.*)\. Thanks (.*)!/
+  const releaseEntryRegex = /\[(.*)\](.*)- (.*)/
+
+  for (const entry of changelogForVersion) {
+    const externalMatch = releaseEntryExternalContributor.exec(entry)
+    if (externalMatch) {
+      const category = parseCategory(externalMatch[1])
+      const text = externalMatch[2].trim()
+      const ids = extractIds(externalMatch[3])
+      const contributor = externalMatch[4]
+
+      if (!category) {
+        console.warn(`unable to identify category for '${entry}'`)
+      } else {
+        releaseNotesByGroup[category].push({
+          text,
+          ids,
+          contributor,
+        })
+      }
+    } else {
+      const match = releaseEntryRegex.exec(entry)
+      if (match) {
+        const category = parseCategory(match[1])
+        const text = match[2].trim()
+        const ids = extractIds(match[3])
+        if (!category) {
+          console.warn(`unable to identify category for '${entry}'`)
+        } else {
+          releaseNotesByGroup[category].push({
+            text,
+            ids,
+          })
+        }
+      } else {
+        console.warn(`release entry does not match any format: '${entry}'`)
+      }
+    }
+  }
+
+  return releaseNotesByGroup
+}
+
+function formatReleaseNote(note: ReleaseNoteEntry): string {
+  const idsAsUrls = note.ids
+    .map(id => `https://github.com/desktop/desktop/issues/${id}`)
+    .join(' ')
+  const contributorNote = note.contributor
+    ? `. Thanks ${note.contributor}!`
+    : ''
+
+  const template = ` - ${note.text} - ${idsAsUrls}${contributorNote}`
+
+  return template.trim()
+}
+
+function renderSection(
+  name: string,
+  items: Array<ReleaseNoteEntry>,
+  omitIfEmpty: boolean = true
 ): string {
-  const changelogText = releaseNotesEntries.join('\n')
+  if (items.length === 0 && omitIfEmpty) {
+    return ''
+  }
 
-  const x64Section = shaEntries.x64.map(formatEntry).join('\n')
-  const armSection = shaEntries.arm.map(formatEntry).join('\n')
-  const arm64Section = shaEntries.arm64.map(formatEntry).join('\n')
+  const itemsText =
+    items.length === 0 ? 'TODO' : items.map(formatReleaseNote).join('\n')
 
-  const draftReleaseNotes = `${changelogText}
+  return `
+## ${name}
 
-## Fixes and improvements
+${itemsText}
+  `
+}
 
-TODO
+function formatEntry(e: ChecksumEntry): string {
+  return `**${e.filename}**\n${e.checksum}\n`
+}
 
-## SHA-256 checksums
+function renderArchitectureIfNotEmpty(
+  name: string,
+  items: Array<ChecksumEntry>
+): string {
+  if (items.length === 0) {
+    return ''
+  }
 
-### x64
+  const itemsText = items.map(formatEntry).join('\n')
 
-${x64Section}
+  return `
+  
+## ${name}
 
-### ARM64
+${itemsText}
+  `
+}
 
-${arm64Section}
+/**
+ * Takes the release notes entries and the SHA entries, then merges them into the full draft release notes ✨
+ */
+function generateDraftReleaseNotes(
+  releaseNotesGroups: ReleaseNotesGroups,
+  shaEntries: ChecksumGroups
+): string {
+  const draftReleaseNotes = `
+${renderSection('New', releaseNotesGroups.new)}
+${renderSection('Added', releaseNotesGroups.added)}
+${renderSection('Fixed', releaseNotesGroups.fixed, false)}
+${renderSection('Improved', releaseNotesGroups.improved, false)}
+${renderSection('Removed', releaseNotesGroups.removed)}
 
-### ARM
+## SHA-256 checksums
 
-${armSection}`
+${renderArchitectureIfNotEmpty('x64', shaEntries.x64)}
+${renderArchitectureIfNotEmpty('ARM64', shaEntries.arm64)}
+${renderArchitectureIfNotEmpty('ARM', shaEntries.arm)}`
 
   return draftReleaseNotes
 }

From 69d9220170e3592cacb819acad7435e8d1024705 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Tue, 11 Jul 2023 16:54:23 -0300
Subject: [PATCH 73/97] allow for -test1 versioning with release tag

---
 script/generate-release-notes.ts | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/script/generate-release-notes.ts b/script/generate-release-notes.ts
index a299e3f860a..d263954e079 100644
--- a/script/generate-release-notes.ts
+++ b/script/generate-release-notes.ts
@@ -142,8 +142,16 @@ function parseCategory(str: string): ReleaseNotesGroupType | null {
   }
 }
 
+function isInitialTag(tag: string): boolean {
+  return tag.endsWith('-linux1') || tag.endsWith('-test1')
+}
+
+function getVersionWithoutSuffix(tag: string): string {
+  return tag.replace('-linux1', '').replace('-test1', '')
+}
+
 function getReleaseGroups(version: string): ReleaseNotesGroups {
-  if (!version.endsWith('-linux1')) {
+  if (!isInitialTag(version)) {
     return {
       new: [],
       added: [],
@@ -153,7 +161,7 @@ function getReleaseGroups(version: string): ReleaseNotesGroups {
     }
   }
 
-  const upstreamVersion = version.replace('-linux1', '')
+  const upstreamVersion = getVersionWithoutSuffix(version)
   const rootDir = dirname(__dirname)
   const changelogFile = fs.readFileSync(join(rootDir, 'changelog.json'))
   const changelogJson = JSON.parse(changelogFile)

From 9bafea26759f9131f28f3d1f96da23c113ec2dd2 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Tue, 11 Jul 2023 16:56:11 -0300
Subject: [PATCH 74/97] tweak release notes output so that checksum is before
 file name

---
 script/generate-release-notes.ts | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/script/generate-release-notes.ts b/script/generate-release-notes.ts
index d263954e079..edbdce15954 100644
--- a/script/generate-release-notes.ts
+++ b/script/generate-release-notes.ts
@@ -262,7 +262,7 @@ ${itemsText}
 }
 
 function formatEntry(e: ChecksumEntry): string {
-  return `**${e.filename}**\n${e.checksum}\n`
+  return `${e.checksum} ${e.filename}`
 }
 
 function renderArchitectureIfNotEmpty(
@@ -276,11 +276,9 @@ function renderArchitectureIfNotEmpty(
   const itemsText = items.map(formatEntry).join('\n')
 
   return `
-  
 ## ${name}
 
-${itemsText}
-  `
+${itemsText}`
 }
 
 /**
@@ -298,7 +296,6 @@ ${renderSection('Improved', releaseNotesGroups.improved, false)}
 ${renderSection('Removed', releaseNotesGroups.removed)}
 
 ## SHA-256 checksums
-
 ${renderArchitectureIfNotEmpty('x64', shaEntries.x64)}
 ${renderArchitectureIfNotEmpty('ARM64', shaEntries.arm64)}
 ${renderArchitectureIfNotEmpty('ARM', shaEntries.arm)}`

From 6e898011d3c2ba2b9f033a1c9ce4fd964ccdde77 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Thu, 13 Jul 2023 13:37:56 -0300
Subject: [PATCH 75/97] backport some release fixes after initial testing
 (#905)

* adjust release flow to skip the release- prefix

* aupdate glob to look recursively for artifacts

* fail when the files cannot be found
---
 .github/workflows/ci.yml | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 0a9e715c0c5..53966bd08b0 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -241,7 +241,7 @@ jobs:
         run: |
           RELEASE_TAG=${GITHUB_REF/refs\/tags\//}
           echo "RELEASE_TAG=${RELEASE_TAG}" >> $GITHUB_ENV
-          tagNameWithoutPrefix="${RELEASE_TAG:1}"
+          tagNameWithoutPrefix="${RELEASE_TAG:8}"
           echo "RELEASE_TAG_WITHOUT_PREFIX=${tagNameWithoutPrefix}" >> $GITHUB_ENV
 
       # TODO: generate release notes
@@ -268,9 +268,10 @@ jobs:
           name: GitHub Desktop for Linux ${{ env.RELEASE_TAG_WITHOUT_PREFIX }}
           body_path: script/release_notes.txt
           files: |
-            artifacts/*.AppImage
-            artifacts/*.deb
-            artifacts/*.rpm
+            artifacts/**/*.AppImage
+            artifacts/**/*.deb
+            artifacts/**/*.rpm
           draft: true
+          fail_on_unmatched_files: true
         env:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

From 2d20c7462b1a97ff40f0c772c23e0633e0c9a78b Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 17 Jul 2023 09:00:33 -0300
Subject: [PATCH 76/97] Bump actions/download-artifact from 2 to 3 (#907)

Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 2 to 3.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
 .github/workflows/ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 53966bd08b0..00af65b6a56 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -229,7 +229,7 @@ jobs:
       - uses: actions/checkout@v3
 
       - name: Download all artifacts
-        uses: actions/download-artifact@v2
+        uses: actions/download-artifact@v3
         with:
           path: './artifacts'
 

From 4811c3f194d9f78ebc7d98f05321f5b2611139bb Mon Sep 17 00:00:00 2001
From: Ken Hawkins <khawkins98@gmail.com>
Date: Sat, 29 Jul 2023 21:29:58 +0200
Subject: [PATCH 77/97] Docs: add GNOME Terminal immutability to known issues.
 (#910)

Addresses issue described at https://github.com/shiftkey/desktop/issues/344
---
 docs/known-issues.md | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/docs/known-issues.md b/docs/known-issues.md
index cbddf7f67ba..b810f4ce792 100644
--- a/docs/known-issues.md
+++ b/docs/known-issues.md
@@ -14,6 +14,7 @@
 - [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)
+   - [My shell/terminal is not detected and is stuck on "GNOME Terminal"](#my-shellterminal-is-not-detected-and-is-stuck-on-gnome-terminal)
 
 # Known Issues
 
@@ -271,3 +272,16 @@ 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.
+
+### My shell/terminal is not detected and is stuck on GNOME Terminal
+
+On non-GNOME desktop's the GitHub Desktop application may not correctly set the 
+environment's shell, despite the shell being selected in the application settings.
+
+Attempting to launch the shell from the application will show the error  
+"cannot read property 'path' of undefined".
+
+**Workarounds:** 
+
+- Option 1: install a second different terminal, switch to it, then switch to the terminal you want to use, and then uninstall the second terminal.
+- Option 2: open the application's developer tools and step through the JS calls to correctly set the shell. Further details at https://github.com/shiftkey/desktop/issues/344#issuecomment-1001287110

From f36b22efcad0c2c5e32568274ae8451287aa0fd7 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 31 Jul 2023 13:29:29 -0300
Subject: [PATCH 78/97] Bump electron-builder from 24.4.0 to 24.6.3 (#914)

Bumps [electron-builder](https://github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-builder) from 24.4.0 to 24.6.3.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/packages/electron-builder/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/commits/v24.6.3/packages/electron-builder)

---
updated-dependencies:
- dependency-name: electron-builder
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
 package.json |   2 +-
 yarn.lock    | 743 ++++++---------------------------------------------
 2 files changed, 85 insertions(+), 660 deletions(-)

diff --git a/package.json b/package.json
index 0de48579ea4..c4df06fb03c 100644
--- a/package.json
+++ b/package.json
@@ -160,7 +160,7 @@
     "@types/webpack-merge": "^5.0.0",
     "@types/xml2js": "^0.4.11",
     "electron": "26.2.4",
-    "electron-builder": "^24.4.0",
+    "electron-builder": "^24.6.3",
     "electron-packager": "^17.1.1",
     "eslint-plugin-github": "^4.10.1",
     "markdownlint-cli": "^0.32.2",
diff --git a/yarn.lock b/yarn.lock
index 867aac55f2a..f71e8d46921 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -573,25 +573,6 @@
     minimist "^1.2.6"
     plist "^3.0.5"
 
-"@electron/rebuild@^3.2.13":
-  version "3.2.13"
-  resolved "https://registry.yarnpkg.com/@electron/rebuild/-/rebuild-3.2.13.tgz#98fbb98981b1a86162546a2ab91b2355569cca4c"
-  integrity sha512-DH9Ol4JCnHDYVOD0fKWq+Qqbn/0WU1O6QR0mIpMXEVU4YFM4PlaqNC9K36mGShNBxxGFotZCMDrB1wl/iHM12g==
-  dependencies:
-    "@malept/cross-spawn-promise" "^2.0.0"
-    chalk "^4.0.0"
-    debug "^4.1.1"
-    detect-libc "^2.0.1"
-    fs-extra "^10.0.0"
-    got "^11.7.0"
-    node-abi "^3.0.0"
-    node-api-version "^0.1.4"
-    node-gyp "^9.0.0"
-    ora "^5.1.0"
-    semver "^7.3.5"
-    tar "^6.0.5"
-    yargs "^17.0.1"
-
 "@electron/universal@1.3.4", "@electron/universal@^1.3.2":
   version "1.3.4"
   resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.3.4.tgz#bccd94b635d7c85eeed5eabba457eb4ed2be2777"
@@ -682,18 +663,6 @@
   resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044"
   integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==
 
-"@isaacs/cliui@^8.0.2":
-  version "8.0.2"
-  resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
-  integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
-  dependencies:
-    string-width "^5.1.2"
-    string-width-cjs "npm:string-width@^4.2.0"
-    strip-ansi "^7.0.1"
-    strip-ansi-cjs "npm:strip-ansi@^6.0.1"
-    wrap-ansi "^8.1.0"
-    wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
-
 "@istanbuljs/load-nyc-config@^1.0.0":
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
@@ -1020,13 +989,6 @@
   dependencies:
     cross-spawn "^7.0.1"
 
-"@malept/cross-spawn-promise@^2.0.0":
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz#d0772de1aa680a0bfb9ba2f32b4c828c7857cb9d"
-  integrity sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==
-  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"
@@ -1058,23 +1020,11 @@
     "@nodelib/fs.scandir" "2.1.5"
     fastq "^1.6.0"
 
-"@npmcli/fs@^3.1.0":
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e"
-  integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==
-  dependencies:
-    semver "^7.3.5"
-
 "@opentelemetry/api@^1.0.1":
   version "1.4.1"
   resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.4.1.tgz#ff22eb2e5d476fbc2450a196e40dd243cc20c28f"
   integrity sha512-O2yRJce1GOc6PAy3QxFM4NzFiWzvScDC1/5ihYBL6BUEVdq0XMWN01sppE+H6bBXbaFYipjwFLEWLg5PaSOThA==
 
-"@pkgjs/parseargs@^0.11.0":
-  version "0.11.0"
-  resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
-  integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
-
 "@pkgr/utils@^2.3.1":
   version "2.4.2"
   resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.2.tgz#9e638bbe9a6a6f165580dc943f138fd3309a2cbc"
@@ -2172,11 +2122,6 @@ abab@^2.0.6:
   resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
   integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==
 
-abbrev@^1.0.0:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
-  integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
-
 accepts@~1.3.8:
   version "1.3.8"
   resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
@@ -2223,30 +2168,13 @@ acorn@^8.1.0, acorn@^8.8.1, acorn@^8.9.0:
   resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b"
   integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==
 
-agent-base@6, agent-base@^6.0.2:
+agent-base@6:
   version "6.0.2"
   resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
   integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
   dependencies:
     debug "4"
 
-agentkeepalive@^4.2.1:
-  version "4.3.0"
-  resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.3.0.tgz#bb999ff07412653c1803b3ced35e50729830a255"
-  integrity sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==
-  dependencies:
-    debug "^4.1.0"
-    depd "^2.0.0"
-    humanize-ms "^1.2.1"
-
-aggregate-error@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
-  integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
-  dependencies:
-    clean-stack "^2.0.0"
-    indent-string "^4.0.0"
-
 airbnb-browser-shims@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/airbnb-browser-shims/-/airbnb-browser-shims-3.0.0.tgz#7978e65fa106f7436a6ae2cad9ad871982e13c7d"
@@ -2379,11 +2307,6 @@ ansi-regex@^5.0.1:
   resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
   integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
 
-ansi-regex@^6.0.1:
-  version "6.0.1"
-  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
-  integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
-
 ansi-styles@^2.2.1:
   version "2.2.1"
   resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
@@ -2416,11 +2339,6 @@ ansi-styles@^5.0.0:
   resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
   integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
 
-ansi-styles@^6.1.0:
-  version "6.2.1"
-  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
-  integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
-
 anymatch@^3.0.3, anymatch@~3.1.1:
   version "3.1.1"
   resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142"
@@ -2434,27 +2352,26 @@ app-builder-bin@4.0.0:
   resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-4.0.0.tgz#1df8e654bd1395e4a319d82545c98667d7eed2f0"
   integrity sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==
 
-app-builder-lib@24.4.0:
-  version "24.4.0"
-  resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-24.4.0.tgz#1606f94e99366eea9e7507228961b8396e40d546"
-  integrity sha512-EcdqtWvg1LAApKCfyRBukcVkmsa94s2e1VKHjZLpvA9/D14QEt8rHhffYeaA+cH/pVeoNVn2ob735KnfJKEEow==
+app-builder-lib@24.6.3:
+  version "24.6.3"
+  resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-24.6.3.tgz#5fe7027ec81ea35d5875a6e193c95cbb932eaa2e"
+  integrity sha512-++0Zp7vcCHfXMBGVj7luFxpqvMPk5mcWeTuw7OK0xNAaNtYQTTN0d9YfWRsb1MvviTOOhyHeULWz1CaixrdrDg==
   dependencies:
     "7zip-bin" "~5.1.1"
     "@develar/schema-utils" "~2.6.5"
     "@electron/notarize" "^1.2.3"
     "@electron/osx-sign" "^1.0.4"
-    "@electron/rebuild" "^3.2.13"
     "@electron/universal" "1.3.4"
     "@malept/flatpak-bundler" "^0.4.0"
     "@types/fs-extra" "9.0.13"
     async-exit-hook "^2.0.1"
     bluebird-lst "^1.0.9"
-    builder-util "24.4.0"
+    builder-util "24.5.0"
     builder-util-runtime "9.2.1"
     chromium-pickle-js "^0.2.0"
     debug "^4.3.4"
     ejs "^3.1.8"
-    electron-publish "24.4.0"
+    electron-publish "24.5.0"
     form-data "^4.0.0"
     fs-extra "^10.1.0"
     hosted-git-info "^4.1.0"
@@ -2469,24 +2386,11 @@ app-builder-lib@24.4.0:
     tar "^6.1.12"
     temp-file "^3.4.0"
 
-"aproba@^1.0.3 || ^2.0.0":
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc"
-  integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==
-
 are-docs-informative@^0.0.2:
   version "0.0.2"
   resolved "https://registry.yarnpkg.com/are-docs-informative/-/are-docs-informative-0.0.2.tgz#387f0e93f5d45280373d387a59d34c96db321963"
   integrity sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==
 
-are-we-there-yet@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd"
-  integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==
-  dependencies:
-    delegates "^1.0.0"
-    readable-stream "^3.6.0"
-
 argparse@^1.0.7:
   version "1.0.10"
   resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
@@ -2871,15 +2775,6 @@ binary-extensions@^2.0.0:
   resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9"
   integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==
 
-bl@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
-  integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
-  dependencies:
-    buffer "^5.5.0"
-    inherits "^2.0.4"
-    readable-stream "^3.4.0"
-
 bluebird-lst@^1.0.9:
   version "1.0.9"
   resolved "https://registry.yarnpkg.com/bluebird-lst/-/bluebird-lst-1.0.9.tgz#a64a0e4365658b9ab5fe875eb9dfb694189bb41c"
@@ -3022,7 +2917,7 @@ buffer-from@^1.1.0:
   resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
   integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
 
-buffer@^5.1.0, buffer@^5.5.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==
@@ -3038,10 +2933,10 @@ builder-util-runtime@9.2.1:
     debug "^4.3.4"
     sax "^1.2.4"
 
-builder-util@24.4.0:
-  version "24.4.0"
-  resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-24.4.0.tgz#dbb201a118fd573180e6a1070cf4c0be6de80cd7"
-  integrity sha512-tONb/GIK1MKa1BcOPHE1naId3o5nj6gdka5kP7yUJh2DOfF+jMq3laiu+UOZH6A7ZtkMtnGNMYFKFTIv408n/A==
+builder-util@24.5.0:
+  version "24.5.0"
+  resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-24.5.0.tgz#8683c9a7a1c5c9f9a4c4d2789ecca0e47dddd3f9"
+  integrity sha512-STnBmZN/M5vGcv01u/K8l+H+kplTaq4PAIn3yeuufUKSpcdro0DhJWxPI81k5XcNfC//bjM3+n9nr8F9uV4uAQ==
   dependencies:
     "7zip-bin" "~5.1.1"
     "@types/debug" "^4.1.6"
@@ -3077,24 +2972,6 @@ bytes@3.1.2:
   resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
   integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
 
-cacache@^17.0.0:
-  version "17.1.3"
-  resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.3.tgz#c6ac23bec56516a7c0c52020fd48b4909d7c7044"
-  integrity sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==
-  dependencies:
-    "@npmcli/fs" "^3.1.0"
-    fs-minipass "^3.0.0"
-    glob "^10.2.2"
-    lru-cache "^7.7.1"
-    minipass "^5.0.0"
-    minipass-collect "^1.0.2"
-    minipass-flush "^1.0.5"
-    minipass-pipeline "^1.2.4"
-    p-map "^4.0.0"
-    ssri "^10.0.0"
-    tar "^6.1.11"
-    unique-filename "^3.0.0"
-
 cache-base@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
@@ -3281,23 +3158,6 @@ clean-css@^5.2.2:
   dependencies:
     source-map "~0.6.0"
 
-clean-stack@^2.0.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
-  integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
-
-cli-cursor@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
-  integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
-  dependencies:
-    restore-cursor "^3.1.0"
-
-cli-spinners@^2.5.0:
-  version "2.9.0"
-  resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db"
-  integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==
-
 cli-truncate@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
@@ -3349,11 +3209,6 @@ clone-response@^1.0.2:
   dependencies:
     mimic-response "^1.0.0"
 
-clone@^1.0.2:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
-  integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==
-
 co@^4.6.0:
   version "4.6.0"
   resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
@@ -3396,11 +3251,6 @@ color-name@~1.1.4:
   resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
   integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
 
-color-support@^1.1.3:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
-  integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
-
 colorette@^2.0.10:
   version "2.0.16"
   resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da"
@@ -3466,11 +3316,6 @@ config-file-ts@^0.2.4:
     glob "^7.1.6"
     typescript "^4.0.2"
 
-console-control-strings@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
-  integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==
-
 console-polyfill@^0.3.0:
   version "0.3.0"
   resolved "https://registry.yarnpkg.com/console-polyfill/-/console-polyfill-0.3.0.tgz#84900902a18c47a5eba932be75fa44d23e8af861"
@@ -3570,19 +3415,19 @@ cross-spawn@^6.0.5:
     shebang-command "^1.2.0"
     which "^1.2.9"
 
-cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
-  version "7.0.3"
-  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
-  integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+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"
 
-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==
+cross-spawn@^7.0.2, cross-spawn@^7.0.3:
+  version "7.0.3"
+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+  integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
   dependencies:
     path-key "^3.1.0"
     shebang-command "^2.0.0"
@@ -3671,7 +3516,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:
   dependencies:
     ms "2.0.0"
 
-debug@4, debug@^4.3.1, debug@^4.3.3, debug@^4.3.4:
+debug@4, debug@^4.3.1, debug@^4.3.4:
   version "4.3.4"
   resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
   integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
@@ -3771,13 +3616,6 @@ default-browser@^4.0.0:
     execa "^7.1.1"
     titleize "^3.0.0"
 
-defaults@^1.0.3:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a"
-  integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==
-  dependencies:
-    clone "^1.0.2"
-
 defer-to-connect@^2.0.0:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587"
@@ -3857,16 +3695,6 @@ delayed-stream@~1.0.0:
   resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
   integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
 
-delegates@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
-  integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==
-
-depd@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
-  integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
-
 depd@~1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
@@ -3882,11 +3710,6 @@ destroy@~1.0.4:
   resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
   integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
 
-detect-libc@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd"
-  integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==
-
 detect-newline@^3.0.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
@@ -3935,13 +3758,13 @@ dir-glob@^3.0.1:
   dependencies:
     path-type "^4.0.0"
 
-dmg-builder@24.4.0:
-  version "24.4.0"
-  resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-24.4.0.tgz#46c80f119465f6a7275766c72b4f3d514cc8013d"
-  integrity sha512-p5z9Cx539GSBYb+b09Z+hMhuBTh/BrI71VRg4rgF6f2xtIRK/YlTGVS/O08k5OojoyhZcpS7JXxDVSmQoWgiiQ==
+dmg-builder@24.6.3:
+  version "24.6.3"
+  resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-24.6.3.tgz#508a9516e30b294d18ec466ce3f61b496aa40c0b"
+  integrity sha512-O7KNT7OKqtV54fMYUpdlyTOCP5DoPuRMLqMTgxxV2PO8Hj/so6zOl5o8GTs8pdDkeAhJzCFOUNB3BDhgXbUbJg==
   dependencies:
-    app-builder-lib "24.4.0"
-    builder-util "24.4.0"
+    app-builder-lib "24.6.3"
+    builder-util "24.5.0"
     builder-util-runtime "9.2.1"
     fs-extra "^10.1.0"
     iconv-lite "^0.6.2"
@@ -4044,11 +3867,6 @@ duplexer@^0.1.2:
   resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
   integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
 
-eastasianwidth@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
-  integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
-
 easy-stack@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/easy-stack/-/easy-stack-1.0.0.tgz#12c91b3085a37f0baa336e9486eac4bf94e3e788"
@@ -4066,21 +3884,21 @@ ejs@^3.1.8:
   dependencies:
     jake "^10.8.5"
 
-electron-builder@^24.4.0:
-  version "24.4.0"
-  resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-24.4.0.tgz#8846efa45bac8f6b9afc181abf71a4e12530f045"
-  integrity sha512-D5INxodxaUIJgEX6p/fqBd8wQNS8XRAToNIJ9SQC+taNS5D73ZsjLuXiRraFGCB0cVk9KeKhEkdEOH5AaVya4g==
+electron-builder@^24.6.3:
+  version "24.6.3"
+  resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-24.6.3.tgz#f4f69dd4fae9f80bc9c1ec74d6fe47565ec50cd5"
+  integrity sha512-O6PqhRXwfxCNTXI4BlhELSeYYO6/tqlxRuy+4+xKBokQvwDDjDgZMMoSgAmanVSCuzjE7MZldI9XYrKFk+EQDw==
   dependencies:
-    app-builder-lib "24.4.0"
-    builder-util "24.4.0"
+    app-builder-lib "24.6.3"
+    builder-util "24.5.0"
     builder-util-runtime "9.2.1"
     chalk "^4.1.2"
-    dmg-builder "24.4.0"
+    dmg-builder "24.6.3"
     fs-extra "^10.1.0"
     is-ci "^3.0.0"
     lazy-val "^1.0.5"
     read-config-file "6.3.2"
-    simple-update-notifier "^1.1.0"
+    simple-update-notifier "2.0.0"
     yargs "^17.6.2"
 
 electron-installer-common@^0.10.2:
@@ -4152,13 +3970,13 @@ electron-packager@^17.1.1:
     semver "^7.1.3"
     yargs-parser "^21.1.1"
 
-electron-publish@24.4.0:
-  version "24.4.0"
-  resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-24.4.0.tgz#a58f49ecd727620f65372881788ebb1a9b853284"
-  integrity sha512-U3mnVSxIfNrLW7ZnwiedFhcLf6ExPFXgAsx89WpfQFsV4gFAt/LG+H74p0m9NSvsLXiZuF82yXoxi7Ou8GHq4Q==
+electron-publish@24.5.0:
+  version "24.5.0"
+  resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-24.5.0.tgz#492a4d7caa232e88ee3c18f5c3b4dc637e5e1b3a"
+  integrity sha512-zwo70suH15L15B4ZWNDoEg27HIYoPsGJUF7xevLJLSI7JUPC8l2yLBdLGwqueJ5XkDL7ucYyRZzxJVR8ElV9BA==
   dependencies:
     "@types/fs-extra" "^9.0.11"
-    builder-util "24.4.0"
+    builder-util "24.5.0"
     builder-util-runtime "9.2.1"
     chalk "^4.1.2"
     fs-extra "^10.1.0"
@@ -4225,13 +4043,6 @@ encodeurl@~1.0.2:
   resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
   integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
 
-encoding@^0.1.13:
-  version "0.1.13"
-  resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
-  integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
-  dependencies:
-    iconv-lite "^0.6.2"
-
 end-of-stream@^1.1.0:
   version "1.4.4"
   resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
@@ -4267,11 +4078,6 @@ env-paths@^2.2.0:
   resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43"
   integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==
 
-err-code@^2.0.2:
-  version "2.0.3"
-  resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9"
-  integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==
-
 errno@^0.1.4:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
@@ -4919,11 +4725,6 @@ expect@^29.0.0, expect@^29.7.0:
     jest-message-util "^29.7.0"
     jest-util "^29.7.0"
 
-exponential-backoff@^3.1.1:
-  version "3.1.1"
-  resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6"
-  integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==
-
 express@^4.17.3:
   version "4.17.3"
   resolved "https://registry.yarnpkg.com/express/-/express-4.17.3.tgz#f6c7302194a4fb54271b73a1fe7a06478c8f85a1"
@@ -5195,14 +4996,6 @@ for-in@^1.0.2:
   resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
   integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
 
-foreground-child@^3.1.0:
-  version "3.1.1"
-  resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d"
-  integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==
-  dependencies:
-    cross-spawn "^7.0.0"
-    signal-exit "^4.0.1"
-
 form-data@^3.0.0:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f"
@@ -5298,13 +5091,6 @@ fs-minipass@^2.0.0:
   dependencies:
     minipass "^3.0.0"
 
-fs-minipass@^3.0.0:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.2.tgz#5b383858efa8c1eb8c33b39e994f7e8555b8b3a3"
-  integrity sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==
-  dependencies:
-    minipass "^5.0.0"
-
 fs-monkey@1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3"
@@ -5383,20 +5169,6 @@ gar@^1.0.4:
   resolved "https://registry.yarnpkg.com/gar/-/gar-1.0.4.tgz#f777bc7db425c0572fdeb52676172ca1ae9888b8"
   integrity sha512-w4n9cPWyP7aHxKxYHFQMegj7WIAsL/YX/C4Bs5Rr8s1H9M1rNtRWRsw+ovYMkXDQ5S4ZbYHsHAPmevPjPgw44w==
 
-gauge@^4.0.3:
-  version "4.0.4"
-  resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce"
-  integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==
-  dependencies:
-    aproba "^1.0.3 || ^2.0.0"
-    color-support "^1.1.3"
-    console-control-strings "^1.1.0"
-    has-unicode "^2.0.1"
-    signal-exit "^3.0.7"
-    string-width "^4.2.3"
-    strip-ansi "^6.0.1"
-    wide-align "^1.1.5"
-
 gensync@^1.0.0-beta.2:
   version "1.0.0-beta.2"
   resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
@@ -5503,17 +5275,6 @@ glob-to-regexp@^0.4.1:
   resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
   integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
 
-glob@^10.2.2:
-  version "10.3.2"
-  resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.2.tgz#04fe71118ec6d2f4cb761849acbacec14b06cb1e"
-  integrity sha512-vsuLzB3c/uyDLLEdBZtT8vGnN0z57rwOxHV2oYZib/7HWmBspUaja/McYIobBjC4qaUTuNpUyFO2IdqM4DZIJA==
-  dependencies:
-    foreground-child "^3.1.0"
-    jackspeak "^2.0.3"
-    minimatch "^9.0.1"
-    minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
-    path-scurry "^1.10.1"
-
 glob@^7.0.5, glob@^7.1.1, glob@^7.1.2:
   version "7.1.2"
   resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
@@ -5618,7 +5379,7 @@ gopd@^1.0.1:
   dependencies:
     get-intrinsic "^1.1.3"
 
-got@^11.7.0, got@^11.8.5:
+got@^11.8.5:
   version "11.8.6"
   resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a"
   integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==
@@ -5640,11 +5401,6 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6
   resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96"
   integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==
 
-graceful-fs@^4.2.6:
-  version "4.2.11"
-  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
-  integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
-
 graphemer@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
@@ -5728,11 +5484,6 @@ has-tostringtag@^1.0.0:
   dependencies:
     has-symbols "^1.0.2"
 
-has-unicode@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
-  integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==
-
 has-value@^0.3.1:
   version "0.3.1"
   resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
@@ -5853,7 +5604,7 @@ htmlparser2@^6.1.0:
     domutils "^2.5.2"
     entities "^2.0.0"
 
-http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.1:
+http-cache-semantics@^4.0.0:
   version "4.1.1"
   resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
   integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
@@ -5886,7 +5637,7 @@ http2-wrapper@^1.0.0-beta.5.2:
     quick-lru "^5.1.1"
     resolve-alpn "^1.0.0"
 
-https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1:
+https-proxy-agent@^5.0.1:
   version "5.0.1"
   resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
   integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
@@ -5904,13 +5655,6 @@ human-signals@^4.3.0:
   resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2"
   integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==
 
-humanize-ms@^1.2.1:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
-  integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==
-  dependencies:
-    ms "^2.0.0"
-
 iconv-corefoundation@^1.1.7:
   version "1.1.7"
   resolved "https://registry.yarnpkg.com/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz#31065e6ab2c9272154c8b0821151e2c88f1b002a"
@@ -5979,11 +5723,6 @@ imurmurhash@^0.1.4:
   resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
   integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
 
-indent-string@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
-  integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
-
 inflight@^1.0.4:
   version "1.0.6"
   resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
@@ -5992,7 +5731,7 @@ inflight@^1.0.4:
     once "^1.3.0"
     wrappy "1"
 
-inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4:
+inherits@2, inherits@2.0.4, inherits@^2.0.3:
   version "2.0.4"
   resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
   integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -6025,11 +5764,6 @@ interpret@^1.0.1:
   resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.4.tgz#820cdd588b868ffb191a809506d6c9c8f212b1b0"
   integrity sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA=
 
-ip@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da"
-  integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==
-
 ipaddr.js@1.9.1:
   version "1.9.1"
   resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
@@ -6270,16 +6004,6 @@ is-inside-container@^1.0.0:
   dependencies:
     is-docker "^3.0.0"
 
-is-interactive@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e"
-  integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==
-
-is-lambda@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5"
-  integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==
-
 is-map@^2.0.1:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127"
@@ -6418,11 +6142,6 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9:
   dependencies:
     which-typed-array "^1.1.11"
 
-is-unicode-supported@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
-  integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
-
 is-weakmap@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2"
@@ -6566,15 +6285,6 @@ iterator.prototype@^1.1.2:
     reflect.getprototypeof "^1.0.4"
     set-function-name "^2.0.1"
 
-jackspeak@^2.0.3:
-  version "2.2.1"
-  resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.1.tgz#655e8cf025d872c9c03d3eb63e8f0c024fef16a6"
-  integrity sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==
-  dependencies:
-    "@isaacs/cliui" "^8.0.2"
-  optionalDependencies:
-    "@pkgjs/parseargs" "^0.11.0"
-
 jake@^10.8.5:
   version "10.8.7"
   resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f"
@@ -7492,14 +7202,6 @@ lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17
   resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
   integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
 
-log-symbols@^4.1.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
-  integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
-  dependencies:
-    chalk "^4.1.0"
-    is-unicode-supported "^0.1.0"
-
 loose-envify@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
@@ -7541,16 +7243,6 @@ lru-cache@^6.0.0:
   dependencies:
     yallist "^4.0.0"
 
-lru-cache@^7.7.1:
-  version "7.18.3"
-  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89"
-  integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==
-
-"lru-cache@^9.1.1 || ^10.0.0":
-  version "10.0.0"
-  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.0.tgz#b9e2a6a72a129d81ab317202d93c7691df727e61"
-  integrity sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==
-
 make-dir@^3.0.0:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392"
@@ -7568,27 +7260,6 @@ make-error@^1.1.1:
   resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.0.tgz#52ad3a339ccf10ce62b4040b708fe707244b8b96"
   integrity sha1-Uq06M5zPEM5itAQLcI/nByRLi5Y=
 
-make-fetch-happen@^11.0.3:
-  version "11.1.1"
-  resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f"
-  integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==
-  dependencies:
-    agentkeepalive "^4.2.1"
-    cacache "^17.0.0"
-    http-cache-semantics "^4.1.1"
-    http-proxy-agent "^5.0.0"
-    https-proxy-agent "^5.0.0"
-    is-lambda "^1.0.1"
-    lru-cache "^7.7.1"
-    minipass "^5.0.0"
-    minipass-fetch "^3.0.0"
-    minipass-flush "^1.0.5"
-    minipass-pipeline "^1.2.4"
-    negotiator "^0.6.3"
-    promise-retry "^2.0.1"
-    socks-proxy-agent "^7.0.0"
-    ssri "^10.0.0"
-
 makeerror@1.0.12:
   version "1.0.12"
   resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a"
@@ -7801,13 +7472,6 @@ minimatch@^5.1.1:
   dependencies:
     brace-expansion "^2.0.1"
 
-minimatch@^9.0.1:
-  version "9.0.3"
-  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
-  integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
-  dependencies:
-    brace-expansion "^2.0.1"
-
 minimatch@~5.1.0:
   version "5.1.0"
   resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7"
@@ -7825,45 +7489,6 @@ minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6:
   resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18"
   integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==
 
-minipass-collect@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617"
-  integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==
-  dependencies:
-    minipass "^3.0.0"
-
-minipass-fetch@^3.0.0:
-  version "3.0.3"
-  resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.3.tgz#d9df70085609864331b533c960fd4ffaa78d15ce"
-  integrity sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==
-  dependencies:
-    minipass "^5.0.0"
-    minipass-sized "^1.0.3"
-    minizlib "^2.1.2"
-  optionalDependencies:
-    encoding "^0.1.13"
-
-minipass-flush@^1.0.5:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373"
-  integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==
-  dependencies:
-    minipass "^3.0.0"
-
-minipass-pipeline@^1.2.4:
-  version "1.2.4"
-  resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c"
-  integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==
-  dependencies:
-    minipass "^3.0.0"
-
-minipass-sized@^1.0.3:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70"
-  integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==
-  dependencies:
-    minipass "^3.0.0"
-
 minipass@^3.0.0:
   version "3.3.6"
   resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a"
@@ -7876,12 +7501,7 @@ minipass@^5.0.0:
   resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d"
   integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
 
-"minipass@^5.0.0 || ^6.0.2 || ^7.0.0":
-  version "7.0.1"
-  resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.1.tgz#dff63464407cd8b83d7f008c0f116fa8c9b77ebf"
-  integrity sha512-NQ8MCKimInjVlaIqx51RKJJB7mINVkLTJbsZKmto4UAAOC/CWXES8PGaOgoBZyqoUsUA/U3DToGK7GJkkHbjJw==
-
-minizlib@^2.1.1, minizlib@^2.1.2:
+minizlib@^2.1.1:
   version "2.1.2"
   resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
   integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
@@ -7924,7 +7544,7 @@ 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.3, ms@^2.0.0, ms@^2.1.1:
+ms@2.1.3, 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==
@@ -7957,7 +7577,7 @@ natural-compare@^1.4.0:
   resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
   integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
 
-negotiator@0.6.3, negotiator@^0.6.3:
+negotiator@0.6.3:
   version "0.6.3"
   resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
   integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
@@ -7980,25 +7600,11 @@ no-case@^3.0.4:
     lower-case "^2.0.2"
     tslib "^2.0.3"
 
-node-abi@^3.0.0:
-  version "3.45.0"
-  resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.45.0.tgz#f568f163a3bfca5aacfce1fbeee1fa2cc98441f5"
-  integrity sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ==
-  dependencies:
-    semver "^7.3.5"
-
 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-api-version@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/node-api-version/-/node-api-version-0.1.4.tgz#1ed46a485e462d55d66b5aa1fe2821720dedf080"
-  integrity sha512-KGXihXdUChwJAOHO53bv9/vXcLmdUsZ6jIptbvYvkpKfth+r7jw44JkVxQFA3kX5nQjzjmGu1uAu/xNNLNlI5g==
-  dependencies:
-    semver "^7.3.5"
-
 node-fetch@^2.6.7, node-fetch@^2.6.9:
   version "2.6.9"
   resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6"
@@ -8006,23 +7612,6 @@ node-fetch@^2.6.7, node-fetch@^2.6.9:
   dependencies:
     whatwg-url "^5.0.0"
 
-node-gyp@^9.0.0:
-  version "9.4.0"
-  resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.0.tgz#2a7a91c7cba4eccfd95e949369f27c9ba704f369"
-  integrity sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==
-  dependencies:
-    env-paths "^2.2.0"
-    exponential-backoff "^3.1.1"
-    glob "^7.1.4"
-    graceful-fs "^4.2.6"
-    make-fetch-happen "^11.0.3"
-    nopt "^6.0.0"
-    npmlog "^6.0.0"
-    rimraf "^3.0.2"
-    semver "^7.3.5"
-    tar "^6.1.2"
-    which "^2.0.2"
-
 node-int64@^0.4.0:
   version "0.4.0"
   resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
@@ -8047,13 +7636,6 @@ node-releases@^2.0.6:
   resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503"
   integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==
 
-nopt@^6.0.0:
-  version "6.0.0"
-  resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d"
-  integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==
-  dependencies:
-    abbrev "^1.0.0"
-
 normalize-package-data@^2.0.0, normalize-package-data@^2.3.2:
   version "2.4.0"
   resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
@@ -8088,16 +7670,6 @@ npm-run-path@^5.1.0:
   dependencies:
     path-key "^4.0.0"
 
-npmlog@^6.0.0:
-  version "6.0.2"
-  resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830"
-  integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==
-  dependencies:
-    are-we-there-yet "^3.0.0"
-    console-control-strings "^1.1.0"
-    gauge "^4.0.3"
-    set-blocking "^2.0.0"
-
 nth-check@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2"
@@ -8274,7 +7846,7 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0:
   dependencies:
     wrappy "1"
 
-onetime@^5.1.0, onetime@^5.1.2:
+onetime@^5.1.2:
   version "5.1.2"
   resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
   integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
@@ -8323,21 +7895,6 @@ optionator@^0.9.3:
     prelude-ls "^1.2.1"
     type-check "^0.4.0"
 
-ora@^5.1.0:
-  version "5.4.1"
-  resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18"
-  integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==
-  dependencies:
-    bl "^4.1.0"
-    chalk "^4.1.0"
-    cli-cursor "^3.1.0"
-    cli-spinners "^2.5.0"
-    is-interactive "^1.0.0"
-    is-unicode-supported "^0.1.0"
-    log-symbols "^4.1.0"
-    strip-ansi "^6.0.0"
-    wcwidth "^1.0.1"
-
 os-tmpdir@~1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
@@ -8388,13 +7945,6 @@ p-locate@^5.0.0:
   dependencies:
     p-limit "^3.0.2"
 
-p-map@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
-  integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
-  dependencies:
-    aggregate-error "^3.0.0"
-
 p-try@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1"
@@ -8537,14 +8087,6 @@ path-parse@^1.0.5, path-parse@^1.0.7:
   resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
   integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
 
-path-scurry@^1.10.1:
-  version "1.10.1"
-  resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698"
-  integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==
-  dependencies:
-    lru-cache "^9.1.1 || ^10.0.0"
-    minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
-
 path-to-regexp@0.1.7:
   version "0.1.7"
   resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
@@ -8744,14 +8286,6 @@ progress@^2.0.3:
   resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
   integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
 
-promise-retry@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22"
-  integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==
-  dependencies:
-    err-code "^2.0.2"
-    retry "^0.12.0"
-
 promise.prototype.finally@^3.1.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.0.tgz#66f161b1643636e50e7cf201dc1b84a857f3864e"
@@ -8964,15 +8498,6 @@ readable-stream@^3.0.0:
     string_decoder "^1.1.1"
     util-deprecate "^1.0.1"
 
-readable-stream@^3.4.0, readable-stream@^3.6.0:
-  version "3.6.2"
-  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
-  integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
-  dependencies:
-    inherits "^2.0.3"
-    string_decoder "^1.1.1"
-    util-deprecate "^1.0.1"
-
 readdir-scoped-modules@^1.0.0:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747"
@@ -9167,24 +8692,11 @@ responselike@^2.0.0:
   dependencies:
     lowercase-keys "^2.0.0"
 
-restore-cursor@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
-  integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
-  dependencies:
-    onetime "^5.1.0"
-    signal-exit "^3.0.2"
-
 ret@~0.1.10:
   version "0.1.15"
   resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
   integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
 
-retry@^0.12.0:
-  version "0.12.0"
-  resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
-  integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==
-
 reusify@^1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
@@ -9402,11 +8914,6 @@ semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4:
   dependencies:
     lru-cache "^6.0.0"
 
-semver@~7.0.0:
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
-  integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
-
 send@0.17.2:
   version "0.17.2"
   resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820"
@@ -9546,22 +9053,17 @@ side-channel@^1.0.4:
     get-intrinsic "^1.0.2"
     object-inspect "^1.9.0"
 
-signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7:
+signal-exit@^3.0.3, signal-exit@^3.0.7:
   version "3.0.7"
   resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
   integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
 
-signal-exit@^4.0.1:
-  version "4.0.2"
-  resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967"
-  integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==
-
-simple-update-notifier@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82"
-  integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==
+simple-update-notifier@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb"
+  integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==
   dependencies:
-    semver "~7.0.0"
+    semver "^7.5.3"
 
 sirv@^1.0.7:
   version "1.0.19"
@@ -9606,7 +9108,7 @@ slide@~1.1.3:
   resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
   integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=
 
-smart-buffer@^4.0.2, smart-buffer@^4.2.0:
+smart-buffer@^4.0.2:
   version "4.2.0"
   resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
   integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==
@@ -9646,23 +9148,6 @@ snapdragon@^0.8.1:
     source-map-resolve "^0.5.0"
     use "^2.0.0"
 
-socks-proxy-agent@^7.0.0:
-  version "7.0.0"
-  resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6"
-  integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==
-  dependencies:
-    agent-base "^6.0.2"
-    debug "^4.3.3"
-    socks "^2.6.2"
-
-socks@^2.6.2:
-  version "2.7.1"
-  resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55"
-  integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==
-  dependencies:
-    ip "^2.0.0"
-    smart-buffer "^4.2.0"
-
 source-map-js@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
@@ -9769,13 +9254,6 @@ sprintf-js@~1.0.2:
   resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
   integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
 
-ssri@^10.0.0:
-  version "10.0.4"
-  resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.4.tgz#5a20af378be586df139ddb2dfb3bf992cf0daba6"
-  integrity sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==
-  dependencies:
-    minipass "^5.0.0"
-
 stack-utils@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620"
@@ -9814,15 +9292,6 @@ string-length@^4.0.1:
     char-regex "^1.0.2"
     strip-ansi "^6.0.0"
 
-"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3:
-  version "4.2.3"
-  resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
-  integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
-  dependencies:
-    emoji-regex "^8.0.0"
-    is-fullwidth-code-point "^3.0.0"
-    strip-ansi "^6.0.1"
-
 string-width@^4.1.0, string-width@^4.2.0:
   version "4.2.0"
   resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
@@ -9832,14 +9301,14 @@ string-width@^4.1.0, string-width@^4.2.0:
     is-fullwidth-code-point "^3.0.0"
     strip-ansi "^6.0.0"
 
-string-width@^5.0.1, string-width@^5.1.2:
-  version "5.1.2"
-  resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
-  integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
+string-width@^4.2.3:
+  version "4.2.3"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+  integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
   dependencies:
-    eastasianwidth "^0.2.0"
-    emoji-regex "^9.2.2"
-    strip-ansi "^7.0.1"
+    emoji-regex "^8.0.0"
+    is-fullwidth-code-point "^3.0.0"
+    strip-ansi "^6.0.1"
 
 string.prototype.matchall@^3.0.0:
   version "3.0.0"
@@ -9953,13 +9422,6 @@ string_decoder@^1.1.1:
   dependencies:
     safe-buffer "~5.2.0"
 
-"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.1:
-  version "6.0.1"
-  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
-  integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
-  dependencies:
-    ansi-regex "^5.0.1"
-
 strip-ansi@^3.0.0:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
@@ -9974,12 +9436,12 @@ strip-ansi@^6.0.0:
   dependencies:
     ansi-regex "^5.0.0"
 
-strip-ansi@^7.0.1:
-  version "7.1.0"
-  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
-  integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
+strip-ansi@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+  integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
   dependencies:
-    ansi-regex "^6.0.1"
+    ansi-regex "^5.0.1"
 
 strip-bom@^3.0.0:
   version "3.0.0"
@@ -10093,7 +9555,7 @@ tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0:
   resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
   integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
 
-tar@^6.0.5, tar@^6.1.11, tar@^6.1.12, tar@^6.1.2:
+tar@^6.1.12:
   version "6.1.15"
   resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69"
   integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==
@@ -10534,20 +9996,6 @@ union-value@^1.0.0:
     is-extendable "^0.1.1"
     set-value "^0.4.3"
 
-unique-filename@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea"
-  integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==
-  dependencies:
-    unique-slug "^4.0.0"
-
-unique-slug@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3"
-  integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==
-  dependencies:
-    imurmurhash "^0.1.4"
-
 universalify@^0.1.0:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
@@ -10745,13 +10193,6 @@ watchpack@^2.4.0:
     glob-to-regexp "^0.4.1"
     graceful-fs "^4.1.2"
 
-wcwidth@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
-  integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==
-  dependencies:
-    defaults "^1.0.3"
-
 webidl-conversions@^3.0.0:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
@@ -10954,13 +10395,6 @@ which@^2.0.1, which@^2.0.2:
   dependencies:
     isexe "^2.0.0"
 
-wide-align@^1.1.5:
-  version "1.1.5"
-  resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3"
-  integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==
-  dependencies:
-    string-width "^1.0.2 || 2 || 3 || 4"
-
 wildcard@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec"
@@ -10984,15 +10418,6 @@ worker-farm@^1.3.1:
     errno "^0.1.4"
     xtend "^4.0.1"
 
-"wrap-ansi-cjs@npm:wrap-ansi@^7.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"
-
 wrap-ansi@^6.2.0:
   version "6.2.0"
   resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
@@ -11002,14 +10427,14 @@ wrap-ansi@^6.2.0:
     string-width "^4.1.0"
     strip-ansi "^6.0.0"
 
-wrap-ansi@^8.1.0:
-  version "8.1.0"
-  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
-  integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
+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 "^6.1.0"
-    string-width "^5.0.1"
-    strip-ansi "^7.0.1"
+    ansi-styles "^4.0.0"
+    string-width "^4.1.0"
+    strip-ansi "^6.0.0"
 
 wrappy@1:
   version "1.0.2"
@@ -11112,10 +10537,10 @@ yaml@^1.4.0:
   dependencies:
     "@babel/runtime" "^7.3.4"
 
-yargs-parser@^18.1.1:
-  version "18.1.2"
-  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.2.tgz#2f482bea2136dbde0861683abea7756d30b504f1"
-  integrity sha512-hlIPNR3IzC1YuL1c2UwwDKpXlNFBqD1Fswwh1khz5+d8Cq/8yc/Mn0i+rQXduu8hcrFKvO7Eryk+09NecTQAAQ==
+yargs-parser@^18.1.2:
+  version "18.1.3"
+  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
+  integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
   dependencies:
     camelcase "^5.0.0"
     decamelize "^1.2.0"
@@ -11131,9 +10556,9 @@ yargs-parser@^21.0.1, yargs-parser@^21.1.1:
   integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
 
 yargs@^15.0.1:
-  version "15.3.1"
-  resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b"
-  integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==
+  version "15.4.1"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
+  integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
   dependencies:
     cliui "^6.0.0"
     decamelize "^1.2.0"
@@ -11145,7 +10570,7 @@ yargs@^15.0.1:
     string-width "^4.2.0"
     which-module "^2.0.0"
     y18n "^4.0.0"
-    yargs-parser "^18.1.1"
+    yargs-parser "^18.1.2"
 
 yargs@^16.0.2:
   version "16.2.0"
@@ -11160,7 +10585,7 @@ yargs@^16.0.2:
     y18n "^5.0.5"
     yargs-parser "^20.2.2"
 
-yargs@^17.0.1, yargs@^17.3.1, yargs@^17.6.2:
+yargs@^17.3.1, yargs@^17.6.2:
   version "17.7.2"
   resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
   integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==

From 2e4e584d330c546fde2f52f0adfa84ab75be9465 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Sun, 6 Aug 2023 11:24:07 -0300
Subject: [PATCH 79/97] backport patches from previous release (#915)

* remove rpm section as unnecessary

* strip out checksum generation for release

* include .sha256 artifacts in release

* update electron to latest minor release

* Apply suggestions from code review
---
 .github/workflows/ci.yml          |  1 +
 docs/installation.md              | 12 ----
 script/electron-builder-linux.yml |  9 +--
 script/generate-release-notes.ts  | 94 ++++---------------------------
 4 files changed, 12 insertions(+), 104 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 00af65b6a56..1ccaec744ae 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -271,6 +271,7 @@ jobs:
             artifacts/**/*.AppImage
             artifacts/**/*.deb
             artifacts/**/*.rpm
+            artifacts/**/*.sha256
           draft: true
           fail_on_unmatched_files: true
         env:
diff --git a/docs/installation.md b/docs/installation.md
index af08c517d13..e931a69ab89 100644
--- a/docs/installation.md
+++ b/docs/installation.md
@@ -21,17 +21,6 @@ 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
 
@@ -50,7 +39,6 @@ GitHub Desktop will create directories to manage the files and data it needs to
 This varies based on the installer chosen:
 
  - AppImage, Debian and RPM: `~/.config/GitHub Desktop/`
- - Snap: `~/snap/github-desktop/current/.config/GitHub Desktop/`
 
 ## Log Files
 
diff --git a/script/electron-builder-linux.yml b/script/electron-builder-linux.yml
index c40d57c7e98..77203eb0b46 100644
--- a/script/electron-builder-linux.yml
+++ b/script/electron-builder-linux.yml
@@ -12,11 +12,4 @@ linux:
     - x-scheme-handler/x-github-desktop-dev-auth
   target:
     - AppImage
-  maintainer: 'GitHub, Inc <opensource+desktop@github.com>'
-rpm:
-  depends:
-    # dugite-native dependencies
-    - libcurl
-    # keytar dependencies
-    - libsecret
-    - gnome-keyring
+  maintainer: 'Brendan Forster<github@brendanforster.com>'
diff --git a/script/generate-release-notes.ts b/script/generate-release-notes.ts
index edbdce15954..31183e51bd1 100644
--- a/script/generate-release-notes.ts
+++ b/script/generate-release-notes.ts
@@ -1,13 +1,9 @@
 /* eslint-disable no-sync */
 
 const glob = require('glob')
-const { basename, dirname, join } = require('path')
+const { dirname, join } = require('path')
 const fs = require('fs')
 
-type ChecksumEntry = { filename: string; checksum: string }
-
-type ChecksumGroups = Record<'x64' | 'arm' | 'arm64', Array<ChecksumEntry>>
-
 type ReleaseNotesGroupType = 'new' | 'added' | 'fixed' | 'improved' | 'removed'
 
 type ReleaseNotesGroups = Record<ReleaseNotesGroupType, Array<ReleaseNoteEntry>>
@@ -45,51 +41,22 @@ console.log(
 
 const files = new Glob(artifactsDir + '/**/*', { nodir: true })
 
-let countFiles = 0
-const shaEntries = new Array<ChecksumEntry>()
+const matches = files.found as Array<string>
 
-for (const file of files.found) {
-  if (file.endsWith('.sha256')) {
-    shaEntries.push(getShaContents(file))
-  }
+const fileCount = matches.length
 
-  countFiles++
-}
-
-if (SUCCESSFUL_RELEASE_FILE_COUNT !== countFiles) {
+if (SUCCESSFUL_RELEASE_FILE_COUNT !== fileCount) {
   console.error(
-    `🔴 Artifacts folder has ${countFiles} assets, expecting ${SUCCESSFUL_RELEASE_FILE_COUNT}. Please check the GH Actions artifacts to see which are missing.`
+    `🔴 Artifacts folder has ${fileCount} assets, expecting ${SUCCESSFUL_RELEASE_FILE_COUNT}. Please check the GH Actions artifacts to see which are missing.`
   )
   process.exit(1)
 }
 
-const shaEntriesByArchitecture: ChecksumGroups = {
-  x64: shaEntries.filter(
-    e =>
-      e.filename.includes('-linux-x86_64-') ||
-      e.filename.includes('-linux-amd64-')
-  ),
-  arm: shaEntries.filter(
-    e =>
-      e.filename.includes('-linux-armv7l-') ||
-      e.filename.includes('-linux-armhf-')
-  ),
-  arm64: shaEntries.filter(
-    e =>
-      e.filename.includes('-linux-aarch64-') ||
-      e.filename.includes('-linux-arm64-')
-  ),
-}
-
-console.log(`Found ${countFiles} files in artifacts directory`)
-console.log(shaEntriesByArchitecture)
+console.log(`Found ${fileCount} files in artifacts directory`)
 
 const releaseNotesByGroup = getReleaseGroups(releaseTagWithoutPrefix)
 
-const draftReleaseNotes = generateDraftReleaseNotes(
-  releaseNotesByGroup,
-  shaEntriesByArchitecture
-)
+const draftReleaseNotes = generateDraftReleaseNotes(releaseNotesByGroup)
 const releaseNotesPath = join(__dirname, 'release_notes.txt')
 
 fs.writeFileSync(releaseNotesPath, draftReleaseNotes, { encoding: 'utf8' })
@@ -98,19 +65,6 @@ console.log(
   `✅ All done! The release notes have been written to ${releaseNotesPath}`
 )
 
-/**
- * Returns the filename (excluding .sha256) and its contents (a SHA256 checksum).
- */
-function getShaContents(filePath: string): {
-  filename: string
-  checksum: string
-} {
-  const filename = basename(filePath).slice(0, -7)
-  const checksum = fs.readFileSync(filePath, 'utf8')
-
-  return { filename, checksum }
-}
-
 function extractIds(str: string): Array<number> {
   const idRegex = /#(\d+)/g
 
@@ -261,44 +215,16 @@ ${itemsText}
   `
 }
 
-function formatEntry(e: ChecksumEntry): string {
-  return `${e.checksum} ${e.filename}`
-}
-
-function renderArchitectureIfNotEmpty(
-  name: string,
-  items: Array<ChecksumEntry>
-): string {
-  if (items.length === 0) {
-    return ''
-  }
-
-  const itemsText = items.map(formatEntry).join('\n')
-
-  return `
-## ${name}
-
-${itemsText}`
-}
-
 /**
  * Takes the release notes entries and the SHA entries, then merges them into the full draft release notes ✨
  */
 function generateDraftReleaseNotes(
-  releaseNotesGroups: ReleaseNotesGroups,
-  shaEntries: ChecksumGroups
+  releaseNotesGroups: ReleaseNotesGroups
 ): string {
-  const draftReleaseNotes = `
+  return `
 ${renderSection('New', releaseNotesGroups.new)}
 ${renderSection('Added', releaseNotesGroups.added)}
 ${renderSection('Fixed', releaseNotesGroups.fixed, false)}
 ${renderSection('Improved', releaseNotesGroups.improved, false)}
-${renderSection('Removed', releaseNotesGroups.removed)}
-
-## SHA-256 checksums
-${renderArchitectureIfNotEmpty('x64', shaEntries.x64)}
-${renderArchitectureIfNotEmpty('ARM64', shaEntries.arm64)}
-${renderArchitectureIfNotEmpty('ARM', shaEntries.arm)}`
-
-  return draftReleaseNotes
+${renderSection('Removed', releaseNotesGroups.removed)}`
 }

From 867c239ceccd597fc78e6ad0ee850652f070e076 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 21 Aug 2023 10:07:35 -0300
Subject: [PATCH 80/97] Bump electron-packager from 17.1.1 to 17.1.2 (#916)

Bumps [electron-packager](https://github.com/electron/electron-packager) from 17.1.1 to 17.1.2.
- [Release notes](https://github.com/electron/electron-packager/releases)
- [Changelog](https://github.com/electron/electron-packager/blob/main/NEWS.md)
- [Commits](https://github.com/electron/electron-packager/compare/v17.1.1...v17.1.2)

---
updated-dependencies:
- dependency-name: electron-packager
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
 package.json |   2 +-
 yarn.lock    | 126 +++++++++++++++------------------------------------
 2 files changed, 38 insertions(+), 90 deletions(-)

diff --git a/package.json b/package.json
index c4df06fb03c..f1ea0f1fec0 100644
--- a/package.json
+++ b/package.json
@@ -161,7 +161,7 @@
     "@types/xml2js": "^0.4.11",
     "electron": "26.2.4",
     "electron-builder": "^24.6.3",
-    "electron-packager": "^17.1.1",
+    "electron-packager": "^17.1.2",
     "eslint-plugin-github": "^4.10.1",
     "markdownlint-cli": "^0.32.2",
     "patch-package": "^6.5.1",
diff --git a/yarn.lock b/yarn.lock
index f71e8d46921..d5f6f57e3fc 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -561,10 +561,10 @@
     debug "^4.1.1"
     fs-extra "^9.0.1"
 
-"@electron/osx-sign@^1.0.1", "@electron/osx-sign@^1.0.4":
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/@electron/osx-sign/-/osx-sign-1.0.4.tgz#8e91442846471636ca0469426a82b253b9170151"
-  integrity sha512-xfhdEcIOfAZg7scZ9RQPya1G1lWo8/zMCwUXAulq0SfY7ONIW+b9qGyKdMyuMctNYwllrIS+vmxfijSfjeh97g==
+"@electron/osx-sign@^1.0.4", "@electron/osx-sign@^1.0.5":
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/@electron/osx-sign/-/osx-sign-1.0.5.tgz#0af7149f2fce44d1a8215660fd25a9fb610454d8"
+  integrity sha512-k9ZzUQtamSoweGQDV2jILiRIHUu7lYlJ3c6IEmjv1hC17rclE+eb9U+f6UFlOOETo0JzY1HNlXy4YOlCvl+Lww==
   dependencies:
     compare-version "^0.1.2"
     debug "^4.3.4"
@@ -3516,41 +3516,20 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:
   dependencies:
     ms "2.0.0"
 
-debug@4, debug@^4.3.1, debug@^4.3.4:
+debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
   version "4.3.4"
   resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
   integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
   dependencies:
     ms "2.1.2"
 
-debug@^3.1.0, debug@^3.2.7:
+debug@^3.2.7:
   version "3.2.7"
   resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
   integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
   dependencies:
     ms "^2.1.1"
 
-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.3.2:
-  version "4.3.3"
-  resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664"
-  integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==
-  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"
@@ -3945,22 +3924,22 @@ electron-installer-redhat@3.4.0:
     word-wrap "^1.2.3"
     yargs "^16.0.2"
 
-electron-packager@^17.1.1:
-  version "17.1.1"
-  resolved "https://registry.yarnpkg.com/electron-packager/-/electron-packager-17.1.1.tgz#f156fc63d3a66f4e902e4b42992550a172982d59"
-  integrity sha512-r1NDtlajsq7gf2EXgjRfblCVPquvD2yeg+6XGErOKblvxOpDi0iulZLVhgYDP4AEF1P5/HgbX/vwjlkEv7PEIQ==
+electron-packager@^17.1.2:
+  version "17.1.2"
+  resolved "https://registry.yarnpkg.com/electron-packager/-/electron-packager-17.1.2.tgz#18030b28024d242b706d0a8a67ed4cd1a57311aa"
+  integrity sha512-XofXdikjYI7MVBcnXeoOvRR+yFFFHOLs3J7PF5KYQweigtgLshcH4W660PsvHr4lYZ03JBpLyEcUB8DzHZ+BNw==
   dependencies:
     "@electron/asar" "^3.2.1"
     "@electron/get" "^2.0.0"
     "@electron/notarize" "^1.2.3"
-    "@electron/osx-sign" "^1.0.1"
+    "@electron/osx-sign" "^1.0.5"
     "@electron/universal" "^1.3.2"
     cross-spawn-windows-exe "^1.2.0"
     debug "^4.0.1"
     extract-zip "^2.0.0"
     filenamify "^4.1.0"
-    fs-extra "^10.1.0"
-    galactus "^0.2.1"
+    fs-extra "^11.1.0"
+    galactus "^1.0.0"
     get-package-info "^1.0.0"
     junk "^3.1.0"
     parse-author "^2.0.0"
@@ -4976,13 +4955,13 @@ flatted@^3.2.9:
   resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf"
   integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==
 
-flora-colossus@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/flora-colossus/-/flora-colossus-1.0.0.tgz#54729c361edecee014dd441679e1a37c1d773a45"
-  integrity sha1-VHKcNh7ezuAU3UQWeeGjfB13OkU=
+flora-colossus@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/flora-colossus/-/flora-colossus-2.0.0.tgz#af1e85db0a8256ef05f3fb531c1235236c97220a"
+  integrity sha512-dz4HxH6pOvbUzZpZ/yXhafjbR2I8cenK5xL0KtBFb7U2ADsR+OwXifnxZjij/pZWF775uSCMzWVd+jDik2H2IA==
   dependencies:
-    debug "^3.1.0"
-    fs-extra "^4.0.0"
+    debug "^4.3.4"
+    fs-extra "^10.1.0"
 
 for-each@^0.3.3:
   version "0.3.3"
@@ -5047,14 +5026,14 @@ fs-extra@^10.0.0, fs-extra@^10.1.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"
-  integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==
+fs-extra@^11.1.0:
+  version "11.1.1"
+  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d"
+  integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==
   dependencies:
-    graceful-fs "^4.1.2"
-    jsonfile "^4.0.0"
-    universalify "^0.1.0"
+    graceful-fs "^4.2.0"
+    jsonfile "^6.0.1"
+    universalify "^2.0.0"
 
 fs-extra@^7.0.1:
   version "7.0.1"
@@ -5155,14 +5134,14 @@ functions-have-names@^1.2.2, functions-have-names@^1.2.3:
   resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
   integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
 
-galactus@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/galactus/-/galactus-0.2.1.tgz#cbed2d20a40c1f5679a35908e2b9415733e78db9"
-  integrity sha1-y+0tIKQMH1Z5o1kI4rlBVzPnjbk=
+galactus@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/galactus/-/galactus-1.0.0.tgz#c2615182afa0c6d0859b92e56ae36d052827db7e"
+  integrity sha512-R1fam6D4CyKQGNlvJne4dkNF+PvUUl7TAJInvTGa9fti9qAv95quQz29GXapA4d8Ec266mJJxFVh82M4GIIGDQ==
   dependencies:
-    debug "^3.1.0"
-    flora-colossus "^1.0.0"
-    fs-extra "^4.0.0"
+    debug "^4.3.4"
+    flora-colossus "^2.0.0"
+    fs-extra "^10.1.0"
 
 gar@^1.0.4:
   version "1.0.4"
@@ -8082,7 +8061,7 @@ path-key@^4.0.0:
   resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18"
   integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==
 
-path-parse@^1.0.5, path-parse@^1.0.7:
+path-parse@^1.0.7:
   version "1.0.7"
   resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
   integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
@@ -8660,14 +8639,7 @@ resolve.exports@^2.0.0:
   resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800"
   integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==
 
-resolve@^1.1.6:
-  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.20.0, resolve@^1.22.0:
+resolve@^1.1.6, resolve@^1.20.0, resolve@^1.22.0:
   version "1.22.1"
   resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
   integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
@@ -8868,12 +8840,7 @@ semver-compare@^1.0.0:
   resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
   integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
 
-"semver@2 || 3 || 4 || 5", semver@^5.6.0:
-  version "5.7.1"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
-  integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
-
-semver@^5.5.0, semver@^5.7.2:
+"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0, semver@^5.7.2:
   version "5.7.2"
   resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
   integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
@@ -8888,26 +8855,7 @@ semver@^6.3.1:
   resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
   integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
 
-semver@^7.1.1:
-  version "7.1.3"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-7.1.3.tgz#e4345ce73071c53f336445cfc19efb1c311df2a6"
-  integrity sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA==
-
-semver@^7.1.3, semver@^7.3.2, semver@^7.5.0:
-  version "7.5.0"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.0.tgz#ed8c5dc8efb6c629c88b23d41dc9bf40c1d96cd0"
-  integrity sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==
-  dependencies:
-    lru-cache "^6.0.0"
-
-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"
-
-semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4:
+semver@^7.1.1, semver@^7.1.3, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.0, semver@^7.5.3, semver@^7.5.4:
   version "7.5.4"
   resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
   integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==

From ff46c2fc06881ae25bb36f9a6d42df6d98b7bdd6 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sat, 26 Aug 2023 11:24:26 -0300
Subject: [PATCH 81/97] Bump electron-installer-debian from 3.1.0 to 3.2.0
 (#917)

Bumps [electron-installer-debian](https://github.com/electron-userland/electron-installer-debian) from 3.1.0 to 3.2.0.
- [Release notes](https://github.com/electron-userland/electron-installer-debian/releases)
- [Changelog](https://github.com/electron-userland/electron-installer-debian/blob/main/NEWS.md)
- [Commits](https://github.com/electron-userland/electron-installer-debian/compare/v3.1.0...v3.2.0)

---
updated-dependencies:
- dependency-name: electron-installer-debian
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
 package.json |  2 +-
 yarn.lock    | 82 +++++-----------------------------------------------
 2 files changed, 8 insertions(+), 76 deletions(-)

diff --git a/package.json b/package.json
index f1ea0f1fec0..2217c225f0d 100644
--- a/package.json
+++ b/package.json
@@ -170,7 +170,7 @@
     "tsconfig-paths": "^3.9.0"
   },
   "optionalDependencies": {
-    "electron-installer-debian": "3.1.0",
+    "electron-installer-debian": "3.2.0",
     "electron-installer-redhat": "3.4.0",
     "electron-winstaller": "^5.0.0"
   }
diff --git a/yarn.lock b/yarn.lock
index d5f6f57e3fc..9768a436f9e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3035,7 +3035,7 @@ camel-case@^4.1.2:
     pascal-case "^3.1.2"
     tslib "^2.0.3"
 
-camelcase@^5.0.0, camelcase@^5.3.1:
+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==
@@ -3166,15 +3166,6 @@ cli-truncate@^2.1.0:
     slice-ansi "^3.0.0"
     string-width "^4.2.0"
 
-cliui@^6.0.0:
-  version "6.0.0"
-  resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
-  integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
-  dependencies:
-    string-width "^4.2.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"
@@ -3535,11 +3526,6 @@ debuglog@^1.0.1:
   resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
   integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=
 
-decamelize@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
-  integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==
-
 decimal.js@^10.4.2:
   version "10.4.3"
   resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23"
@@ -3897,10 +3883,10 @@ electron-installer-common@^0.10.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==
+electron-installer-debian@3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/electron-installer-debian/-/electron-installer-debian-3.2.0.tgz#2a9c8220f50a57807de8f93619a0d61ec41271e0"
+  integrity sha512-58ZrlJ1HQY80VucsEIG9tQ//HrTlG6sfofA3nRGr6TmkX661uJyu4cMPPh6kXW+aHdq/7+q25KyQhDrXvRL7jw==
   dependencies:
     "@malept/cross-spawn-promise" "^1.0.0"
     debug "^4.1.1"
@@ -3909,7 +3895,7 @@ electron-installer-debian@3.1.0:
     get-folder-size "^2.0.1"
     lodash "^4.17.4"
     word-wrap "^1.2.3"
-    yargs "^15.0.1"
+    yargs "^16.0.2"
 
 electron-installer-redhat@3.4.0:
   version "3.4.0"
@@ -5153,7 +5139,7 @@ gensync@^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.5:
+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==
@@ -8592,11 +8578,6 @@ require-from-string@^2.0.2:
   resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
   integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
 
-require-main-filename@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
-  integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
-
 requires-port@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
@@ -8905,11 +8886,6 @@ serve-static@1.14.2:
     parseurl "~1.3.3"
     send "0.17.2"
 
-set-blocking@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
-  integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
-
 set-function-length@^1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed"
@@ -10302,11 +10278,6 @@ which-collection@^1.0.1:
     is-weakmap "^2.0.1"
     is-weakset "^2.0.1"
 
-which-module@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409"
-  integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==
-
 which-typed-array@^1.1.11:
   version "1.1.11"
   resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a"
@@ -10366,15 +10337,6 @@ worker-farm@^1.3.1:
     errno "^0.1.4"
     xtend "^4.0.1"
 
-wrap-ansi@^6.2.0:
-  version "6.2.0"
-  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
-  integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
-  dependencies:
-    ansi-styles "^4.0.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"
@@ -10448,11 +10410,6 @@ xvfb-maybe@^0.2.1:
     debug "^2.2.0"
     which "^1.2.4"
 
-y18n@^4.0.0:
-  version "4.0.3"
-  resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf"
-  integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==
-
 y18n@^5.0.5:
   version "5.0.8"
   resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
@@ -10485,14 +10442,6 @@ yaml@^1.4.0:
   dependencies:
     "@babel/runtime" "^7.3.4"
 
-yargs-parser@^18.1.2:
-  version "18.1.3"
-  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
-  integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
-  dependencies:
-    camelcase "^5.0.0"
-    decamelize "^1.2.0"
-
 yargs-parser@^20.2.2:
   version "20.2.9"
   resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
@@ -10503,23 +10452,6 @@ yargs-parser@^21.0.1, yargs-parser@^21.1.1:
   resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
   integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
 
-yargs@^15.0.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==
-  dependencies:
-    cliui "^6.0.0"
-    decamelize "^1.2.0"
-    find-up "^4.1.0"
-    get-caller-file "^2.0.1"
-    require-directory "^2.1.1"
-    require-main-filename "^2.0.0"
-    set-blocking "^2.0.0"
-    string-width "^4.2.0"
-    which-module "^2.0.0"
-    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"

From a3780696d260f089be6cdd65e1a80ca7e57964d4 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 4 Sep 2023 12:58:52 -0300
Subject: [PATCH 82/97] Bump electron-builder from 24.6.3 to 24.6.4 (#926)

Bumps [electron-builder](https://github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-builder) from 24.6.3 to 24.6.4.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/packages/electron-builder/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/commits/v24.6.4/packages/electron-builder)

---
updated-dependencies:
- dependency-name: electron-builder
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
 package.json |  2 +-
 yarn.lock    | 80 +++++++++++++++++++++++++++++++++++++++-------------
 2 files changed, 61 insertions(+), 21 deletions(-)

diff --git a/package.json b/package.json
index 2217c225f0d..0f93caa85dc 100644
--- a/package.json
+++ b/package.json
@@ -160,7 +160,7 @@
     "@types/webpack-merge": "^5.0.0",
     "@types/xml2js": "^0.4.11",
     "electron": "26.2.4",
-    "electron-builder": "^24.6.3",
+    "electron-builder": "^24.6.4",
     "electron-packager": "^17.1.2",
     "eslint-plugin-github": "^4.10.1",
     "markdownlint-cli": "^0.32.2",
diff --git a/yarn.lock b/yarn.lock
index 9768a436f9e..5d7a73cb5d2 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -553,6 +553,15 @@
   optionalDependencies:
     global-agent "^3.0.0"
 
+"@electron/notarize@2.1.0":
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/@electron/notarize/-/notarize-2.1.0.tgz#76aaec10c8687225e8d0a427cc9df67611c46ff3"
+  integrity sha512-Q02xem1D0sg4v437xHgmBLxI2iz/fc0D4K7fiVWHa/AnW8o7D751xyKNXgziA6HrTOme9ul1JfWN5ark8WH1xA==
+  dependencies:
+    debug "^4.1.1"
+    fs-extra "^9.0.1"
+    promise-retry "^2.0.1"
+
 "@electron/notarize@^1.2.3":
   version "1.2.3"
   resolved "https://registry.yarnpkg.com/@electron/notarize/-/notarize-1.2.3.tgz#38056a629e5a0b5fd56c975c4828c0f74285b644"
@@ -561,7 +570,7 @@
     debug "^4.1.1"
     fs-extra "^9.0.1"
 
-"@electron/osx-sign@^1.0.4", "@electron/osx-sign@^1.0.5":
+"@electron/osx-sign@1.0.5", "@electron/osx-sign@^1.0.5":
   version "1.0.5"
   resolved "https://registry.yarnpkg.com/@electron/osx-sign/-/osx-sign-1.0.5.tgz#0af7149f2fce44d1a8215660fd25a9fb610454d8"
   integrity sha512-k9ZzUQtamSoweGQDV2jILiRIHUu7lYlJ3c6IEmjv1hC17rclE+eb9U+f6UFlOOETo0JzY1HNlXy4YOlCvl+Lww==
@@ -573,7 +582,20 @@
     minimist "^1.2.6"
     plist "^3.0.5"
 
-"@electron/universal@1.3.4", "@electron/universal@^1.3.2":
+"@electron/universal@1.4.1":
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.4.1.tgz#3fbda2a5ed9ff9f3304c8e8316b94c1e3a7b3785"
+  integrity sha512-lE/U3UNw1YHuowNbTmKNs9UlS3En3cPgwM5MI+agIgr/B1hSze9NdOP0qn7boZaI9Lph8IDv3/24g9IxnJP7aQ==
+  dependencies:
+    "@electron/asar" "^3.2.1"
+    "@malept/cross-spawn-promise" "^1.1.0"
+    debug "^4.3.1"
+    dir-compare "^3.0.0"
+    fs-extra "^9.0.1"
+    minimatch "^3.0.4"
+    plist "^3.0.4"
+
+"@electron/universal@^1.3.2":
   version "1.3.4"
   resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.3.4.tgz#bccd94b635d7c85eeed5eabba457eb4ed2be2777"
   integrity sha512-BdhBgm2ZBnYyYRLRgOjM5VHkyFItsbggJ0MHycOjKWdFGYwK97ZFXH54dTvUWEfha81vfvwr5On6XBjt99uDcg==
@@ -2352,16 +2374,16 @@ app-builder-bin@4.0.0:
   resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-4.0.0.tgz#1df8e654bd1395e4a319d82545c98667d7eed2f0"
   integrity sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==
 
-app-builder-lib@24.6.3:
-  version "24.6.3"
-  resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-24.6.3.tgz#5fe7027ec81ea35d5875a6e193c95cbb932eaa2e"
-  integrity sha512-++0Zp7vcCHfXMBGVj7luFxpqvMPk5mcWeTuw7OK0xNAaNtYQTTN0d9YfWRsb1MvviTOOhyHeULWz1CaixrdrDg==
+app-builder-lib@24.6.4:
+  version "24.6.4"
+  resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-24.6.4.tgz#5bf77dd89d3ee557bc615b9ddfaf383f3e51577b"
+  integrity sha512-m9931WXb83teb32N0rKg+ulbn6+Hl8NV5SUpVDOVz9MWOXfhV6AQtTdftf51zJJvCQnQugGtSqoLvgw6mdF/Rg==
   dependencies:
     "7zip-bin" "~5.1.1"
     "@develar/schema-utils" "~2.6.5"
-    "@electron/notarize" "^1.2.3"
-    "@electron/osx-sign" "^1.0.4"
-    "@electron/universal" "1.3.4"
+    "@electron/notarize" "2.1.0"
+    "@electron/osx-sign" "1.0.5"
+    "@electron/universal" "1.4.1"
     "@malept/flatpak-bundler" "^0.4.0"
     "@types/fs-extra" "9.0.13"
     async-exit-hook "^2.0.1"
@@ -3723,12 +3745,12 @@ dir-glob@^3.0.1:
   dependencies:
     path-type "^4.0.0"
 
-dmg-builder@24.6.3:
-  version "24.6.3"
-  resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-24.6.3.tgz#508a9516e30b294d18ec466ce3f61b496aa40c0b"
-  integrity sha512-O7KNT7OKqtV54fMYUpdlyTOCP5DoPuRMLqMTgxxV2PO8Hj/so6zOl5o8GTs8pdDkeAhJzCFOUNB3BDhgXbUbJg==
+dmg-builder@24.6.4:
+  version "24.6.4"
+  resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-24.6.4.tgz#e19b8305f7e1ea0b4faaa30382c81b9d6de39863"
+  integrity sha512-BNcHRc9CWEuI9qt0E655bUBU/j/3wUCYBVKGu1kVpbN5lcUdEJJJeiO0NHK3dgKmra6LUUZlo+mWqc+OCbi0zw==
   dependencies:
-    app-builder-lib "24.6.3"
+    app-builder-lib "24.6.4"
     builder-util "24.5.0"
     builder-util-runtime "9.2.1"
     fs-extra "^10.1.0"
@@ -3849,16 +3871,16 @@ ejs@^3.1.8:
   dependencies:
     jake "^10.8.5"
 
-electron-builder@^24.6.3:
-  version "24.6.3"
-  resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-24.6.3.tgz#f4f69dd4fae9f80bc9c1ec74d6fe47565ec50cd5"
-  integrity sha512-O6PqhRXwfxCNTXI4BlhELSeYYO6/tqlxRuy+4+xKBokQvwDDjDgZMMoSgAmanVSCuzjE7MZldI9XYrKFk+EQDw==
+electron-builder@^24.6.4:
+  version "24.6.4"
+  resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-24.6.4.tgz#c51271e49b9a02c9a3ec444f866b6008c4d98a1d"
+  integrity sha512-uNWQoU7pE7qOaIQ6CJHpBi44RJFVG8OHRBIadUxrsDJVwLLo8Nma3K/EEtx5/UyWAQYdcK4nVPYKoRqBb20hbA==
   dependencies:
-    app-builder-lib "24.6.3"
+    app-builder-lib "24.6.4"
     builder-util "24.5.0"
     builder-util-runtime "9.2.1"
     chalk "^4.1.2"
-    dmg-builder "24.6.3"
+    dmg-builder "24.6.4"
     fs-extra "^10.1.0"
     is-ci "^3.0.0"
     lazy-val "^1.0.5"
@@ -4043,6 +4065,11 @@ env-paths@^2.2.0:
   resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43"
   integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==
 
+err-code@^2.0.2:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9"
+  integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==
+
 errno@^0.1.4:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
@@ -8251,6 +8278,14 @@ progress@^2.0.3:
   resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
   integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
 
+promise-retry@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22"
+  integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==
+  dependencies:
+    err-code "^2.0.2"
+    retry "^0.12.0"
+
 promise.prototype.finally@^3.1.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.0.tgz#66f161b1643636e50e7cf201dc1b84a857f3864e"
@@ -8650,6 +8685,11 @@ ret@~0.1.10:
   resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
   integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
 
+retry@^0.12.0:
+  version "0.12.0"
+  resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
+  integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==
+
 reusify@^1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"

From afa95c7d965903d83b0d4399bb9eb9185c2cb84f Mon Sep 17 00:00:00 2001
From: mon-jai <91261297+mon-jai@users.noreply.github.com>
Date: Sun, 8 Oct 2023 23:26:22 +0800
Subject: [PATCH 83/97] Add an option to use the Windows title bar (#912)

Co-authored-by: Brendan Forster <github@brendanforster.com>
---
 app/src/lib/app-state.ts                   |  4 ++
 app/src/lib/get-title-bar-config.ts        | 48 +++++++++++++++
 app/src/lib/ipc-shared.ts                  |  4 ++
 app/src/lib/stores/app-store.ts            | 15 +++++
 app/src/main-process/app-window.ts         |  4 ++
 app/src/main-process/main.ts               | 19 ++++++
 app/src/models/popup.ts                    |  2 +
 app/src/ui/app.tsx                         | 20 ++++---
 app/src/ui/dispatcher/dispatcher.ts        |  9 +++
 app/src/ui/lib/title-bar-style.ts          | 17 ++++++
 app/src/ui/main-process-proxy.ts           |  7 +++
 app/src/ui/preferences/appearance.tsx      | 69 ++++++++++++++++++----
 app/src/ui/preferences/confirm-restart.tsx | 58 ++++++++++++++++++
 app/src/ui/preferences/preferences.tsx     | 11 ++++
 app/src/ui/window/title-bar.tsx            | 12 ++--
 app/src/ui/window/window-controls.tsx      |  5 --
 app/styles/ui/window/_title-bar.scss       | 10 +++-
 17 files changed, 286 insertions(+), 28 deletions(-)
 create mode 100644 app/src/lib/get-title-bar-config.ts
 create mode 100644 app/src/ui/lib/title-bar-style.ts
 create mode 100644 app/src/ui/preferences/confirm-restart.tsx

diff --git a/app/src/lib/app-state.ts b/app/src/lib/app-state.ts
index 571b6d9397a..5a9a2a6e74f 100644
--- a/app/src/lib/app-state.ts
+++ b/app/src/lib/app-state.ts
@@ -32,6 +32,7 @@ import { WindowState } from './window-state'
 import { Shell } from './shells'
 
 import { ApplicableTheme, ApplicationTheme } from '../ui/lib/application-theme'
+import { TitleBarStyle } from '../ui/lib/title-bar-style'
 import { IAccountRepositories } from './stores/api-repositories-store'
 import { ManualConflictResolution } from '../models/manual-conflict-resolution'
 import { Banner } from '../models/banner'
@@ -278,6 +279,9 @@ export interface IAppState {
   /** The currently applied appearance (aka theme) */
   readonly currentTheme: ApplicableTheme
 
+  /** The selected title bar style for the application */
+  readonly titleBarStyle: TitleBarStyle
+
   /**
    * A map keyed on a user account (GitHub.com or GitHub Enterprise)
    * containing an object with repositories that the authenticated
diff --git a/app/src/lib/get-title-bar-config.ts b/app/src/lib/get-title-bar-config.ts
new file mode 100644
index 00000000000..ced0aeddb2f
--- /dev/null
+++ b/app/src/lib/get-title-bar-config.ts
@@ -0,0 +1,48 @@
+import { writeFile } from 'fs/promises'
+import { existsSync, readFileSync } from 'fs'
+import { join } from 'path'
+import { app } from 'electron'
+import { TitleBarStyle } from '../ui/lib/title-bar-style'
+
+export type TitleBarConfig = {
+  titleBarStyle: TitleBarStyle
+}
+
+let cachedTitleBarConfig: TitleBarConfig | null = null
+
+// The function has to be synchronous,
+// since we need its return value to create electron BrowserWindow
+export function readTitleBarConfigFileSync(): TitleBarConfig {
+  if (cachedTitleBarConfig) {
+    return cachedTitleBarConfig
+  }
+
+  const titleBarConfigPath = getTitleBarConfigPath()
+
+  if (existsSync(titleBarConfigPath)) {
+    const storedTitleBarConfig = JSON.parse(
+      readFileSync(titleBarConfigPath, 'utf8')
+    )
+
+    if (
+      storedTitleBarConfig.titleBarStyle === 'native' ||
+      storedTitleBarConfig.titleBarStyle === 'custom'
+    ) {
+      cachedTitleBarConfig = storedTitleBarConfig
+    }
+  }
+
+  // Cache the default value if the config file is not found, or if it contains an invalid value.
+  if (cachedTitleBarConfig == null) {
+    cachedTitleBarConfig = { titleBarStyle: 'native' }
+  }
+
+  return cachedTitleBarConfig
+}
+
+export function saveTitleBarConfigFile(config: TitleBarConfig) {
+  return writeFile(getTitleBarConfigPath(), JSON.stringify(config), 'utf8')
+}
+
+const getTitleBarConfigPath = () =>
+  join(app.getPath('userData'), '.title-bar-config')
diff --git a/app/src/lib/ipc-shared.ts b/app/src/lib/ipc-shared.ts
index a8d4b3328a9..9bcbb072b62 100644
--- a/app/src/lib/ipc-shared.ts
+++ b/app/src/lib/ipc-shared.ts
@@ -13,6 +13,7 @@ import { Architecture } from './get-architecture'
 import { EndpointToken } from './endpoint-token'
 import { PathType } from '../ui/lib/app-proxy'
 import { ThemeSource } from '../ui/lib/theme-source'
+import { TitleBarStyle } from '../ui/lib/title-bar-style'
 import { DesktopNotificationPermission } from 'desktop-notifications/dist/notification-permission'
 import { NotificationCallback } from 'desktop-notifications/dist/notification-callback'
 import { DesktopAliveEvent } from './stores/alive-store'
@@ -65,6 +66,7 @@ export type RequestChannels = {
   blur: () => void
   'update-accounts': (accounts: ReadonlyArray<EndpointToken>) => void
   'quit-and-install-updates': () => void
+  'restart-app': () => void
   'quit-app': () => void
   'minimize-window': () => void
   'maximize-window': () => void
@@ -121,6 +123,8 @@ export type RequestResponseChannels = {
   'should-use-dark-colors': () => Promise<boolean>
   'save-guid': (guid: string) => Promise<void>
   'get-guid': () => Promise<string>
+  'save-title-bar-style': (titleBarStyle: TitleBarStyle) => Promise<void>
+  'get-title-bar-style': () => Promise<TitleBarStyle>
   'show-notification': (
     title: string,
     body: string,
diff --git a/app/src/lib/stores/app-store.ts b/app/src/lib/stores/app-store.ts
index 68f232238ab..4c651d515d7 100644
--- a/app/src/lib/stores/app-store.ts
+++ b/app/src/lib/stores/app-store.ts
@@ -80,6 +80,7 @@ import {
   getPersistedThemeName,
   setPersistedTheme,
 } from '../../ui/lib/application-theme'
+import { TitleBarStyle } from '../../ui/lib/title-bar-style'
 import {
   getAppMenu,
   getCurrentWindowState,
@@ -91,6 +92,8 @@ import {
   sendWillQuitEvenIfUpdatingSync,
   quitApp,
   sendCancelQuittingSync,
+  saveTitleBarStyle,
+  getTitleBarStyle,
 } from '../../ui/main-process-proxy'
 import {
   API,
@@ -513,6 +516,7 @@ export class AppStore extends TypedBaseStore<IAppState> {
   private selectedBranchesTab = BranchesTab.Branches
   private selectedTheme = ApplicationTheme.System
   private currentTheme: ApplicableTheme = ApplicationTheme.Light
+  private titleBarStyle: TitleBarStyle = 'native'
 
   private useWindowsOpenSSH: boolean = false
 
@@ -1004,6 +1008,7 @@ export class AppStore extends TypedBaseStore<IAppState> {
       selectedBranchesTab: this.selectedBranchesTab,
       selectedTheme: this.selectedTheme,
       currentTheme: this.currentTheme,
+      titleBarStyle: this.titleBarStyle,
       apiRepositories: this.apiRepositoriesStore.getState(),
       useWindowsOpenSSH: this.useWindowsOpenSSH,
       showCommitLengthWarning: this.showCommitLengthWarning,
@@ -2198,6 +2203,8 @@ export class AppStore extends TypedBaseStore<IAppState> {
       this.emitUpdate()
     })
 
+    this.titleBarStyle = await getTitleBarStyle()
+
     this.lastThankYou = getObject<ILastThankYou>(lastThankYouKey)
 
     this.pullRequestSuggestedNextAction =
@@ -6506,6 +6513,14 @@ export class AppStore extends TypedBaseStore<IAppState> {
     return Promise.resolve()
   }
 
+  /**
+   * Set the title bar style for the application
+   */
+  public _setTitleBarStyle(titleBarStyle: TitleBarStyle) {
+    this.titleBarStyle = titleBarStyle
+    return saveTitleBarStyle(titleBarStyle)
+  }
+
   public async _resolveCurrentEditor() {
     const match = await findEditorOrDefault(this.selectedExternalEditor)
     const resolvedExternalEditor = match != null ? match.editor : null
diff --git a/app/src/main-process/app-window.ts b/app/src/main-process/app-window.ts
index 0fabf6c23b1..233f0248c14 100644
--- a/app/src/main-process/app-window.ts
+++ b/app/src/main-process/app-window.ts
@@ -13,6 +13,7 @@ import {
   getWindowState,
   registerWindowStateChangedEvents,
 } from '../lib/window-state'
+import { readTitleBarConfigFileSync } from '../lib/get-title-bar-config'
 import { MenuEvent } from './menu'
 import { URLActionType } from '../lib/parse-app-url'
 import { ILaunchStats } from '../lib/stats'
@@ -75,6 +76,9 @@ export class AppWindow {
     } else if (__WIN32__) {
       windowOptions.frame = false
     } else if (__LINUX__) {
+      if (readTitleBarConfigFileSync().titleBarStyle === 'custom') {
+        windowOptions.frame = false
+      }
       windowOptions.icon = join(__dirname, 'static', 'logos', '512x512.png')
 
       // relax restriction here for users trying to run app at a small
diff --git a/app/src/main-process/main.ts b/app/src/main-process/main.ts
index b484101b68c..afa6de73c8e 100644
--- a/app/src/main-process/main.ts
+++ b/app/src/main-process/main.ts
@@ -40,6 +40,10 @@ import {
 } from '../lib/get-architecture'
 import { buildSpellCheckMenu } from './menu/build-spell-check-menu'
 import { getMainGUID, saveGUIDFile } from '../lib/get-main-guid'
+import {
+  readTitleBarConfigFileSync,
+  saveTitleBarConfigFile,
+} from '../lib/get-title-bar-config'
 import {
   getNotificationsPermission,
   requestNotificationsPermission,
@@ -505,6 +509,11 @@ app.on('ready', () => {
     mainWindow?.quitAndInstallUpdate()
   )
 
+  ipcMain.on('restart-app', () => {
+    app.relaunch()
+    app.exit()
+  })
+
   ipcMain.on('quit-app', () => app.quit())
 
   ipcMain.on('minimize-window', () => mainWindow?.minimizeWindow())
@@ -685,6 +694,16 @@ app.on('ready', () => {
 
   ipcMain.handle('save-guid', (_, guid) => saveGUIDFile(guid))
 
+  ipcMain.handle(
+    'get-title-bar-style',
+    async () => readTitleBarConfigFileSync().titleBarStyle
+  )
+
+  ipcMain.handle(
+    'save-title-bar-style',
+    async (_, titleBarStyle) => await saveTitleBarConfigFile({ titleBarStyle })
+  )
+
   ipcMain.handle('show-notification', async (_, title, body, userInfo) =>
     showNotification(title, body, userInfo)
   )
diff --git a/app/src/models/popup.ts b/app/src/models/popup.ts
index cfc433bd35a..397817d380d 100644
--- a/app/src/models/popup.ts
+++ b/app/src/models/popup.ts
@@ -95,6 +95,7 @@ export enum PopupType {
   PullRequestComment = 'PullRequestComment',
   UnknownAuthors = 'UnknownAuthors',
   ConfirmRepoRulesBypass = 'ConfirmRepoRulesBypass',
+  ConfirmRestart = 'ConfirmRestart',
 }
 
 interface IBasePopup {
@@ -420,5 +421,6 @@ export type PopupDetail =
       branch: string
       onConfirm: () => void
     }
+  | { type: PopupType.ConfirmRestart }
 
 export type Popup = IBasePopup & PopupDetail
diff --git a/app/src/ui/app.tsx b/app/src/ui/app.tsx
index 8c1115d126e..e2718ec4d8b 100644
--- a/app/src/ui/app.tsx
+++ b/app/src/ui/app.tsx
@@ -64,6 +64,7 @@ import { Welcome } from './welcome'
 import { AppMenuBar } from './app-menu'
 import { UpdateAvailable, renderBanner } from './banners'
 import { Preferences } from './preferences'
+import { ConfirmRestart } from './preferences/confirm-restart'
 import { RepositorySettings } from './repository-settings'
 import { AppError } from './app-error'
 import { MissingRepository } from './missing-repository'
@@ -1398,8 +1399,8 @@ export class App extends React.Component<IAppProps, IAppState> {
    * on Windows.
    */
   private renderAppMenuBar() {
-    // We only render the app menu bar on Windows
-    if (!__WIN32__) {
+    // We do not render the app menu bar on macOS
+    if (__DARWIN__) {
       return null
     }
 
@@ -1450,9 +1451,9 @@ export class App extends React.Component<IAppProps, IAppState> {
       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__) {
+    // We do not render the app menu bar on Linux when the user has selected
+    // the "native" menu option
+    if (__LINUX__ && this.state.titleBarStyle === 'native') {
       return null
     }
 
@@ -1460,12 +1461,12 @@ export class App extends React.Component<IAppProps, IAppState> {
     // the title bar when the menu bar is active. On other platforms we
     // never render the title bar while in full-screen mode.
     if (inFullScreen) {
-      if (!__WIN32__ || !menuBarActive) {
+      if (__DARWIN__ || !menuBarActive) {
         return null
       }
     }
 
-    const showAppIcon = __WIN32__ && !this.state.showWelcomeFlow
+    const showAppIcon = !__DARWIN__ && !this.state.showWelcomeFlow
     const inWelcomeFlow = this.state.showWelcomeFlow
     const inNoRepositoriesView = this.inNoRepositoriesViewState()
 
@@ -1658,6 +1659,7 @@ export class App extends React.Component<IAppProps, IAppState> {
             onDismissed={onPopupDismissedFn}
             selectedShell={this.state.selectedShell}
             selectedTheme={this.state.selectedTheme}
+            titleBarStyle={this.state.titleBarStyle}
             repositoryIndicatorsEnabled={this.state.repositoryIndicatorsEnabled}
             onOpenFileInExternalEditor={this.openFileInExternalEditor}
           />
@@ -2553,6 +2555,10 @@ export class App extends React.Component<IAppProps, IAppState> {
           />
         )
       }
+
+      case PopupType.ConfirmRestart: {
+        return <ConfirmRestart onDismissed={onPopupDismissedFn} />
+      }
       default:
         return assertNever(popup, `Unknown popup type: ${popup}`)
     }
diff --git a/app/src/ui/dispatcher/dispatcher.ts b/app/src/ui/dispatcher/dispatcher.ts
index 862c139218c..2148332fc17 100644
--- a/app/src/ui/dispatcher/dispatcher.ts
+++ b/app/src/ui/dispatcher/dispatcher.ts
@@ -91,6 +91,7 @@ import { TipState, IValidBranch } from '../../models/tip'
 import { Banner, BannerType } from '../../models/banner'
 
 import { ApplicationTheme } from '../lib/application-theme'
+import { TitleBarStyle } from '../lib/title-bar-style'
 import { installCLI } from '../lib/install-cli'
 import {
   executeMenuItem,
@@ -2467,6 +2468,14 @@ export class Dispatcher {
     return this.appStore._setSelectedTheme(theme)
   }
 
+  /**
+   * Set the title bar style for the application
+   */
+  public async setTitleBarStyle(titleBarStyle: TitleBarStyle) {
+    await this.appStore._setTitleBarStyle(titleBarStyle)
+    this.showPopup({ type: PopupType.ConfirmRestart })
+  }
+
   /**
    * Increments either the `repoWithIndicatorClicked` or
    * the `repoWithoutIndicatorClicked` metric
diff --git a/app/src/ui/lib/title-bar-style.ts b/app/src/ui/lib/title-bar-style.ts
new file mode 100644
index 00000000000..452842d7794
--- /dev/null
+++ b/app/src/ui/lib/title-bar-style.ts
@@ -0,0 +1,17 @@
+/**
+ * This string enum represents the supported modes for rendering the title bar
+ * in the app.
+ *
+ *  - 'native' - Use the default window style and chrome supported by the window
+ *               manager
+ *
+ *  - 'custom' - Hide the default window style and chrome and display the menu
+ *               provided by GitHub Desktop
+ *
+ * This is only available on the Linux build. For other operating systems this
+ * is not configurable:
+ *
+ *  - macOS uses the native title bar
+ *  - Windows uses the custom title bar
+ */
+export type TitleBarStyle = 'native' | 'custom'
diff --git a/app/src/ui/main-process-proxy.ts b/app/src/ui/main-process-proxy.ts
index 7d438371632..09a1a67aec2 100644
--- a/app/src/ui/main-process-proxy.ts
+++ b/app/src/ui/main-process-proxy.ts
@@ -164,6 +164,9 @@ export const checkForUpdates = invokeProxy('check-for-updates', 1)
 /** Tell the main process to quit the app and install updates */
 export const quitAndInstallUpdate = sendProxy('quit-and-install-updates', 0)
 
+/** Tell the main process to restart the app */
+export const restartApp = sendProxy('restart-app', 0)
+
 /** Tell the main process to quit the app */
 export const quitApp = sendProxy('quit-app', 0)
 
@@ -379,6 +382,10 @@ export const showOpenDialog = invokeProxy('show-open-dialog', 1)
 export const saveGUID = invokeProxy('save-guid', 1)
 export const getGUID = invokeProxy('get-guid', 0)
 
+/** Tell the main process read/save the the title bar style */
+export const saveTitleBarStyle = invokeProxy('save-title-bar-style', 1)
+export const getTitleBarStyle = invokeProxy('get-title-bar-style', 0)
+
 /** Tell the main process to show a notification */
 export const showNotification = invokeProxy('show-notification', 3)
 
diff --git a/app/src/ui/preferences/appearance.tsx b/app/src/ui/preferences/appearance.tsx
index 26c0a33ca5b..46fb07c1140 100644
--- a/app/src/ui/preferences/appearance.tsx
+++ b/app/src/ui/preferences/appearance.tsx
@@ -4,18 +4,32 @@ import {
   supportsSystemThemeChanges,
   getCurrentlyAppliedTheme,
 } from '../lib/application-theme'
+import { TitleBarStyle } from '../lib/title-bar-style'
 import { Row } from '../lib/row'
 import { DialogContent } from '../dialog'
 import { RadioGroup } from '../lib/radio-group'
+import { Select } from '../lib/select'
 import { encodePathAsUrl } from '../../lib/path'
 
 interface IAppearanceProps {
   readonly selectedTheme: ApplicationTheme
   readonly onSelectedThemeChanged: (theme: ApplicationTheme) => void
+  readonly titleBarStyle: TitleBarStyle
+  readonly onTitleBarStyleChanged: (titleBarStyle: TitleBarStyle) => void
 }
 
 interface IAppearanceState {
   readonly selectedTheme: ApplicationTheme | null
+  readonly titleBarStyle: TitleBarStyle
+}
+
+function getTitleBarStyleDescription(titleBarStyle: TitleBarStyle): string {
+  switch (titleBarStyle) {
+    case 'custom':
+      return 'Uses the menu system provided by GitHub Desktop, hiding the default chrome provided by your window manager.'
+    case 'native':
+      return 'Uses the menu system and chrome provided by your window manager.'
+  }
 }
 
 export class Appearance extends React.Component<
@@ -29,7 +43,10 @@ export class Appearance extends React.Component<
       props.selectedTheme !== ApplicationTheme.System ||
       supportsSystemThemeChanges()
 
-    this.state = { selectedTheme: usePropTheme ? props.selectedTheme : null }
+    this.state = {
+      selectedTheme: usePropTheme ? props.selectedTheme : null,
+      titleBarStyle: props.titleBarStyle,
+    }
 
     if (!usePropTheme) {
       this.initializeSelectedTheme()
@@ -61,6 +78,12 @@ export class Appearance extends React.Component<
     this.props.onSelectedThemeChanged(theme)
   }
 
+  private onSelectChanged = (event: React.FormEvent<HTMLSelectElement>) => {
+    const titleBarStyle = event.currentTarget.value as TitleBarStyle
+    this.setState({ titleBarStyle })
+    this.props.onTitleBarStyleChanged(titleBarStyle)
+  }
+
   public renderThemeSwatch = (theme: ApplicationTheme) => {
     const darkThemeImage = encodePathAsUrl(__dirname, 'static/ghd_dark.svg')
     const lightThemeImage = encodePathAsUrl(__dirname, 'static/ghd_light.svg')
@@ -98,6 +121,29 @@ export class Appearance extends React.Component<
     }
   }
 
+  private renderTitleBarStyleDropdown() {
+    const { titleBarStyle } = this.state
+    const titleBarStyleDescription = getTitleBarStyleDescription(titleBarStyle)
+
+    return (
+      <div className="advanced-section">
+        <h2>Title bar style</h2>
+
+        <Select
+          value={this.state.titleBarStyle}
+          onChange={this.onSelectChanged}
+        >
+          <option value="native">Native</option>
+          <option value="custom">Custom</option>
+        </Select>
+
+        <div className="git-settings-description">
+          {titleBarStyleDescription}
+        </div>
+      </div>
+    )
+  }
+
   public render() {
     const { selectedTheme } = this.state
 
@@ -118,15 +164,18 @@ export class Appearance extends React.Component<
     return (
       <DialogContent>
         <h2 id="theme-heading">Theme</h2>
-
-        <RadioGroup<ApplicationTheme>
-          ariaLabelledBy="theme-heading"
-          className="theme-selector"
-          selectedKey={selectedTheme}
-          radioButtonKeys={themes}
-          onSelectionChanged={this.onSelectedThemeChanged}
-          renderRadioButtonLabelContents={this.renderThemeSwatch}
-        />
+        <Row>
+          <RadioGroup<ApplicationTheme>
+            ariaLabelledBy="theme-heading"
+            className="theme-selector"
+            selectedKey={selectedTheme}
+            radioButtonKeys={themes}
+            onSelectionChanged={this.onSelectedThemeChanged}
+            renderRadioButtonLabelContents={this.renderThemeSwatch}
+          />
+        </Row>
+
+        {this.renderTitleBarStyleDropdown()}
       </DialogContent>
     )
   }
diff --git a/app/src/ui/preferences/confirm-restart.tsx b/app/src/ui/preferences/confirm-restart.tsx
new file mode 100644
index 00000000000..d8770355d5f
--- /dev/null
+++ b/app/src/ui/preferences/confirm-restart.tsx
@@ -0,0 +1,58 @@
+import * as React from 'react'
+import {
+  Dialog,
+  DialogContent,
+  DialogFooter,
+  OkCancelButtonGroup,
+} from '../dialog'
+import { restartApp } from '../main-process-proxy'
+
+interface IConfirmRestartProps {
+  /**
+   * Callback to use when the dialog gets closed.
+   */
+  readonly onDismissed: () => void
+}
+
+export class ConfirmRestart extends React.Component<IConfirmRestartProps> {
+  public constructor(props: IConfirmRestartProps) {
+    super(props)
+  }
+
+  public render() {
+    return (
+      <Dialog
+        dismissable={false}
+        onDismissed={this.props.onDismissed}
+        onSubmit={this.onSubmit}
+        type="warning"
+      >
+        <DialogContent>
+          <p>Restart GitHub Desktop to apply the title bar settings change?</p>
+        </DialogContent>
+        {this.renderFooter()}
+      </Dialog>
+    )
+  }
+
+  private renderFooter() {
+    return (
+      <DialogFooter>
+        <OkCancelButtonGroup
+          okButtonText="Restart"
+          cancelButtonText="Not Now"
+          onCancelButtonClick={this.onNotNow}
+        />
+      </DialogFooter>
+    )
+  }
+
+  private onNotNow = () => {
+    this.props.onDismissed()
+  }
+
+  private onSubmit = async () => {
+    this.props.onDismissed()
+    restartApp()
+  }
+}
diff --git a/app/src/ui/preferences/preferences.tsx b/app/src/ui/preferences/preferences.tsx
index 22e458a2961..04689102cb5 100644
--- a/app/src/ui/preferences/preferences.tsx
+++ b/app/src/ui/preferences/preferences.tsx
@@ -22,6 +22,7 @@ import {
 } from '../lib/identifier-rules'
 import { Appearance } from './appearance'
 import { ApplicationTheme } from '../lib/application-theme'
+import { TitleBarStyle } from '../lib/title-bar-style'
 import { OkCancelButtonGroup } from '../dialog/ok-cancel-button-group'
 import { Integrations } from './integrations'
 import {
@@ -65,6 +66,7 @@ interface IPreferencesProps {
   readonly selectedExternalEditor: string | null
   readonly selectedShell: Shell
   readonly selectedTheme: ApplicationTheme
+  readonly titleBarStyle: TitleBarStyle
   readonly repositoryIndicatorsEnabled: boolean
   readonly onOpenFileInExternalEditor: (path: string) => void
 }
@@ -94,6 +96,7 @@ interface IPreferencesState {
   readonly selectedExternalEditor: string | null
   readonly availableShells: ReadonlyArray<Shell>
   readonly selectedShell: Shell
+  readonly titleBarStyle: TitleBarStyle
   /**
    * If unable to save Git configuration values (name, email)
    * due to an existing configuration lock file this property
@@ -143,6 +146,7 @@ export class Preferences extends React.Component<
       selectedExternalEditor: this.props.selectedExternalEditor,
       availableShells: [],
       selectedShell: this.props.selectedShell,
+      titleBarStyle: this.props.titleBarStyle,
       repositoryIndicatorsEnabled: this.props.repositoryIndicatorsEnabled,
       initiallySelectedTheme: this.props.selectedTheme,
       isLoadingGitConfig: true,
@@ -362,6 +366,8 @@ export class Preferences extends React.Component<
           <Appearance
             selectedTheme={this.props.selectedTheme}
             onSelectedThemeChanged={this.onSelectedThemeChanged}
+            titleBarStyle={this.props.titleBarStyle}
+            onTitleBarStyleChanged={this.onTitleBarStyleChanged}
           />
         )
         break
@@ -525,6 +531,10 @@ export class Preferences extends React.Component<
     this.props.dispatcher.setSelectedTheme(theme)
   }
 
+  private onTitleBarStyleChanged = (titleBarStyle: TitleBarStyle) => {
+    this.setState({ titleBarStyle })
+  }
+
   private renderFooter() {
     const hasDisabledError = this.state.disallowedCharactersMessage != null
 
@@ -634,6 +644,7 @@ export class Preferences extends React.Component<
       )
     }
     await this.props.dispatcher.setShell(this.state.selectedShell)
+    await this.props.dispatcher.setTitleBarStyle(this.state.titleBarStyle)
     await this.props.dispatcher.setConfirmDiscardChangesSetting(
       this.state.confirmDiscardChanges
     )
diff --git a/app/src/ui/window/title-bar.tsx b/app/src/ui/window/title-bar.tsx
index 06ce23af472..a0356fc8059 100644
--- a/app/src/ui/window/title-bar.tsx
+++ b/app/src/ui/window/title-bar.tsx
@@ -84,7 +84,7 @@ export class TitleBar extends React.Component<ITitleBarProps> {
     const isMaximized = this.props.windowState === 'maximized'
 
     // No Windows controls when we're in full-screen mode.
-    const winControls = __WIN32__ && !inFullScreen ? <WindowControls /> : null
+    const winControls = !inFullScreen ? <WindowControls /> : null
 
     // On Windows it's not possible to resize a frameless window if the
     // element that sits flush along the window edge has -webkit-app-region: drag.
@@ -92,12 +92,14 @@ export class TitleBar extends React.Component<ITitleBarProps> {
     // window controls need to disable dragging so we add a 3px tall element which
     // disables drag while still letting users drag the app by the titlebar below
     // those 3px.
-    const topResizeHandle =
-      __WIN32__ && !isMaximized ? <div className="resize-handle top" /> : null
+    const topResizeHandle = !isMaximized ? (
+      <div className="resize-handle top" />
+    ) : null
 
     // And a 3px wide element on the left hand side.
-    const leftResizeHandle =
-      __WIN32__ && !isMaximized ? <div className="resize-handle left" /> : null
+    const leftResizeHandle = !isMaximized ? (
+      <div className="resize-handle left" />
+    ) : null
 
     const titleBarClass =
       this.props.titleBarStyle === 'light' ? 'light-title-bar' : ''
diff --git a/app/src/ui/window/window-controls.tsx b/app/src/ui/window/window-controls.tsx
index a98aef33062..558d33f47dc 100644
--- a/app/src/ui/window/window-controls.tsx
+++ b/app/src/ui/window/window-controls.tsx
@@ -114,11 +114,6 @@ export class WindowControls extends React.Component<{}, IWindowControlState> {
   }
 
   public render() {
-    // We only know how to render fake Windows-y controls
-    if (!__WIN32__) {
-      return <span />
-    }
-
     const min = this.renderButton('minimize', this.onMinimize, minimizePath)
     const maximizeOrRestore =
       this.state.windowState === 'maximized'
diff --git a/app/styles/ui/window/_title-bar.scss b/app/styles/ui/window/_title-bar.scss
index 2662b3bb513..6dae12eab55 100644
--- a/app/styles/ui/window/_title-bar.scss
+++ b/app/styles/ui/window/_title-bar.scss
@@ -15,7 +15,7 @@
     border-bottom: 1px solid #000;
   }
 
-  @include win32 {
+  @mixin custom-title-bar {
     height: var(--win32-title-bar-height);
     background: var(--win32-title-bar-background-color);
     border-bottom: 1px solid #000;
@@ -27,6 +27,14 @@
     }
   }
 
+  @include win32 {
+    @include custom-title-bar;
+  }
+
+  @include linux {
+    @include custom-title-bar;
+  }
+
   .resize-handle {
     position: absolute;
     top: 0px;

From 16f0a089f52fe9660d8c1c1b30cf6eb8c3c9f6de Mon Sep 17 00:00:00 2001
From: Ujhhgtg <feyxiexzf@gmail.com>
Date: Sun, 8 Oct 2023 23:45:52 +0800
Subject: [PATCH 84/97] add support for vscodium insiders (#928)

* [app: editors] add vscodium insiders
---
 app/src/lib/editors/linux.ts | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/app/src/lib/editors/linux.ts b/app/src/lib/editors/linux.ts
index ba8f33a7d0a..94122fc4683 100644
--- a/app/src/lib/editors/linux.ts
+++ b/app/src/lib/editors/linux.ts
@@ -65,6 +65,10 @@ const editors: ILinuxExternalEditor[] = [
       '.local/share/flatpak/app/com.vscodium.codium/current/active/export/bin/com.vscodium.codium',
     ],
   },
+  {
+    name: 'VSCodium (Insiders)',
+    paths: ['/usr/bin/codium-insiders'],
+  },
   {
     name: 'Sublime Text',
     paths: ['/usr/bin/subl'],

From 5d75f294376b4aae87212863b26692fda6d0eeb0 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Sun, 8 Oct 2023 13:58:06 -0300
Subject: [PATCH 85/97] use same node version when generating release notes
 because prebuilds weirdness

---
 .github/workflows/ci.yml | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 1ccaec744ae..d09e6584255 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -228,6 +228,12 @@ jobs:
     steps:
       - uses: actions/checkout@v3
 
+      - name: Use Node.js 18.14.0
+        uses: actions/setup-node@v3
+        with:
+          node-version: 18.14.0
+          cache: yarn
+
       - name: Download all artifacts
         uses: actions/download-artifact@v3
         with:
@@ -250,6 +256,7 @@ jobs:
 
       - name: Generate release notes
         run: |
+          node -v
           yarn
           node -r ts-node/register script/generate-release-notes.ts "${{ github.workspace }}/artifacts" "${{ env.RELEASE_TAG_WITHOUT_PREFIX }}"
           RELEASE_NOTES_FILE=script/release_notes.txt

From 4913168adcae5401ddbf32d472a1529c05c884d7 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Sun, 26 Nov 2023 17:17:12 -0400
Subject: [PATCH 86/97] do not install python on linux runners (#955)

---
 .github/workflows/ci.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index d09e6584255..5d375d308d4 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -158,6 +158,7 @@ jobs:
           ref: ${{ inputs.ref }}
           submodules: recursive
       - uses: actions/setup-python@v5
+        if: matrix.friendlyName != 'Ubuntu'
         with:
           python-version: '3.11'
       - name: Use Node.js ${{ env.NODE_VERSION }}

From cd10351231ab36d9ca610a1eeecdab2df8da2ada Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sun, 26 Nov 2023 17:41:58 -0400
Subject: [PATCH 87/97] Bump actions/setup-node from 3 to 4 (#949)

Dependabot couldn't find the original pull request head commit, 693b4520f02744835209865019ddb4589358c21c.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
 .github/workflows/ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 5d375d308d4..8e29a3dbf8c 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -230,7 +230,7 @@ jobs:
       - uses: actions/checkout@v3
 
       - name: Use Node.js 18.14.0
-        uses: actions/setup-node@v3
+        uses: actions/setup-node@v4
         with:
           node-version: 18.14.0
           cache: yarn

From 7f8f220697af88958c823e9d4968d781b15e7d28 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Sun, 26 Nov 2023 20:07:47 -0400
Subject: [PATCH 88/97] drop unnecessary preamble from issue template (#956)

---
 .github/ISSUE_TEMPLATE/bug_report.yaml | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml
index f71cfe29e20..758ddff8beb 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yaml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yaml
@@ -1,10 +1,6 @@
 name: 🐛 Bug Report
 description: File a bug report
 body:
-  - type: markdown
-    attributes:
-      value: |
-        Thanks for filing a bug report! This issue tracker is for [GitHub Desktop](https://desktop.github.com). Please search the issue tracker to see if there is an existing issue for the problem you are experiencing. If you are experiencing issues with the Linux fork of GitHub Desktop please open an issue [in its repository](https://github.com/shiftkey/desktop). If you are experiencing issues with github.com please [contact GitHub Support](https://support.github.com/).
   - type: textarea
     id: the-problem
     attributes:

From 0723dc6ba3d6cf1975aafb4569307686efe2b41f Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Mon, 27 Nov 2023 09:42:31 -0400
Subject: [PATCH 89/97] upgrade to Electron 26.6.1 (#961)

---
 app/.npmrc                          | 2 +-
 package.json                        | 2 +-
 script/validate-electron-version.ts | 4 ++--
 yarn.lock                           | 8 ++++----
 4 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/app/.npmrc b/app/.npmrc
index 104a19e8335..808c61399ad 100644
--- a/app/.npmrc
+++ b/app/.npmrc
@@ -1,3 +1,3 @@
 runtime = electron
 disturl = https://electronjs.org/headers
-target = 26.2.4
+target = 26.6.1
diff --git a/package.json b/package.json
index 0f93caa85dc..c146d870bc5 100644
--- a/package.json
+++ b/package.json
@@ -159,7 +159,7 @@
     "@types/webpack-hot-middleware": "^2.25.6",
     "@types/webpack-merge": "^5.0.0",
     "@types/xml2js": "^0.4.11",
-    "electron": "26.2.4",
+    "electron": "26.6.1",
     "electron-builder": "^24.6.4",
     "electron-packager": "^17.1.2",
     "eslint-plugin-github": "^4.10.1",
diff --git a/script/validate-electron-version.ts b/script/validate-electron-version.ts
index 432cef0d4f7..f0394ebcd8c 100644
--- a/script/validate-electron-version.ts
+++ b/script/validate-electron-version.ts
@@ -15,8 +15,8 @@ type ChannelToValidate = 'production' | 'beta'
  * to a previous version of GitHub Desktop without losing all settings.
  */
 const ValidElectronVersions: Record<ChannelToValidate, string> = {
-  production: '26.2.4',
-  beta: '26.2.4',
+  production: '26.6.1',
+  beta: '26.6.1',
 }
 
 const channel =
diff --git a/yarn.lock b/yarn.lock
index 5d7a73cb5d2..2ef002c0c0e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3991,10 +3991,10 @@ electron-winstaller@*, electron-winstaller@^5.0.0:
     lodash.template "^4.2.2"
     temp "^0.9.0"
 
-electron@26.2.4:
-  version "26.2.4"
-  resolved "https://registry.yarnpkg.com/electron/-/electron-26.2.4.tgz#36616b2386b083c13ae9188f2d8ccf233c23404a"
-  integrity sha512-weMUSMyDho5E0DPQ3breba3D96IxwNvtYHjMd/4/wNN3BdI5s3+0orNnPVGJFcLhSvKoxuKUqdVonUocBPwlQA==
+electron@26.6.1:
+  version "26.6.1"
+  resolved "https://registry.yarnpkg.com/electron/-/electron-26.6.1.tgz#bf4835d92210ccbec632088d1975bf78ed05c153"
+  integrity sha512-4Vz9u0Jt/khPa/en2l8Jv6SWEfsK/ieWYtchl5j0clbNSjdeTucnEFOhz9B9WwsAmfQjxBnpuMZpmdBuyxq+wg==
   dependencies:
     "@electron/get" "^2.0.0"
     "@types/node" "^18.11.18"

From 08466274ad2cdc16cdb0bef9b2e939bab3fdcf5e Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 27 Nov 2023 09:58:40 -0400
Subject: [PATCH 90/97] Bump electron-builder from 24.6.4 to 24.9.1 (#959)

Bumps [electron-builder](https://github.com/electron-userland/electron-builder/tree/HEAD/packages/electron-builder) from 24.6.4 to 24.9.1.
- [Release notes](https://github.com/electron-userland/electron-builder/releases)
- [Changelog](https://github.com/electron-userland/electron-builder/blob/master/packages/electron-builder/CHANGELOG.md)
- [Commits](https://github.com/electron-userland/electron-builder/commits/v24.9.1/packages/electron-builder)

---
updated-dependencies:
- dependency-name: electron-builder
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
 package.json |  2 +-
 yarn.lock    | 86 ++++++++++++++++++++++++++--------------------------
 2 files changed, 44 insertions(+), 44 deletions(-)

diff --git a/package.json b/package.json
index c146d870bc5..82064f1842a 100644
--- a/package.json
+++ b/package.json
@@ -160,7 +160,7 @@
     "@types/webpack-merge": "^5.0.0",
     "@types/xml2js": "^0.4.11",
     "electron": "26.6.1",
-    "electron-builder": "^24.6.4",
+    "electron-builder": "^24.9.1",
     "electron-packager": "^17.1.2",
     "eslint-plugin-github": "^4.10.1",
     "markdownlint-cli": "^0.32.2",
diff --git a/yarn.lock b/yarn.lock
index 2ef002c0c0e..debed94f5b0 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,10 +2,10 @@
 # yarn lockfile v1
 
 
-"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==
+"7zip-bin@~5.2.0":
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-5.2.0.tgz#7a03314684dd6572b7dfa89e68ce31d60286854d"
+  integrity sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==
 
 "@aashutoshrathi/word-wrap@^1.2.3":
   version "1.2.6"
@@ -2374,12 +2374,12 @@ app-builder-bin@4.0.0:
   resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-4.0.0.tgz#1df8e654bd1395e4a319d82545c98667d7eed2f0"
   integrity sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==
 
-app-builder-lib@24.6.4:
-  version "24.6.4"
-  resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-24.6.4.tgz#5bf77dd89d3ee557bc615b9ddfaf383f3e51577b"
-  integrity sha512-m9931WXb83teb32N0rKg+ulbn6+Hl8NV5SUpVDOVz9MWOXfhV6AQtTdftf51zJJvCQnQugGtSqoLvgw6mdF/Rg==
+app-builder-lib@24.9.1:
+  version "24.9.1"
+  resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-24.9.1.tgz#bf3568529298b4de8595ed1acbb351fe27db5ba4"
+  integrity sha512-Q1nYxZcio4r+W72cnIRVYofEAyjBd3mG47o+zms8HlD51zWtA/YxJb01Jei5F+jkWhge/PTQK+uldsPh6d0/4g==
   dependencies:
-    "7zip-bin" "~5.1.1"
+    "7zip-bin" "~5.2.0"
     "@develar/schema-utils" "~2.6.5"
     "@electron/notarize" "2.1.0"
     "@electron/osx-sign" "1.0.5"
@@ -2388,12 +2388,12 @@ app-builder-lib@24.6.4:
     "@types/fs-extra" "9.0.13"
     async-exit-hook "^2.0.1"
     bluebird-lst "^1.0.9"
-    builder-util "24.5.0"
-    builder-util-runtime "9.2.1"
+    builder-util "24.8.1"
+    builder-util-runtime "9.2.3"
     chromium-pickle-js "^0.2.0"
     debug "^4.3.4"
     ejs "^3.1.8"
-    electron-publish "24.5.0"
+    electron-publish "24.8.1"
     form-data "^4.0.0"
     fs-extra "^10.1.0"
     hosted-git-info "^4.1.0"
@@ -2947,24 +2947,24 @@ buffer@^5.1.0:
     base64-js "^1.3.1"
     ieee754 "^1.1.13"
 
-builder-util-runtime@9.2.1:
-  version "9.2.1"
-  resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.2.1.tgz#3184dcdf7ed6c47afb8df733813224ced4f624fd"
-  integrity sha512-2rLv/uQD2x+dJ0J3xtsmI12AlRyk7p45TEbE/6o/fbb633e/S3pPgm+ct+JHsoY7r39dKHnGEFk/AASRFdnXmA==
+builder-util-runtime@9.2.3:
+  version "9.2.3"
+  resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.2.3.tgz#0a82c7aca8eadef46d67b353c638f052c206b83c"
+  integrity sha512-FGhkqXdFFZ5dNC4C+yuQB9ak311rpGAw+/ASz8ZdxwODCv1GGMWgLDeofRkdi0F3VCHQEWy/aXcJQozx2nOPiw==
   dependencies:
     debug "^4.3.4"
     sax "^1.2.4"
 
-builder-util@24.5.0:
-  version "24.5.0"
-  resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-24.5.0.tgz#8683c9a7a1c5c9f9a4c4d2789ecca0e47dddd3f9"
-  integrity sha512-STnBmZN/M5vGcv01u/K8l+H+kplTaq4PAIn3yeuufUKSpcdro0DhJWxPI81k5XcNfC//bjM3+n9nr8F9uV4uAQ==
+builder-util@24.8.1:
+  version "24.8.1"
+  resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-24.8.1.tgz#594d45b0c86d1d17f5c7bebbb77405080b2571c2"
+  integrity sha512-ibmQ4BnnqCnJTNrdmdNlnhF48kfqhNzSeqFMXHLIl+o9/yhn6QfOaVrloZ9YUu3m0k3rexvlT5wcki6LWpjTZw==
   dependencies:
-    "7zip-bin" "~5.1.1"
+    "7zip-bin" "~5.2.0"
     "@types/debug" "^4.1.6"
     app-builder-bin "4.0.0"
     bluebird-lst "^1.0.9"
-    builder-util-runtime "9.2.1"
+    builder-util-runtime "9.2.3"
     chalk "^4.1.2"
     cross-spawn "^7.0.3"
     debug "^4.3.4"
@@ -3745,14 +3745,14 @@ dir-glob@^3.0.1:
   dependencies:
     path-type "^4.0.0"
 
-dmg-builder@24.6.4:
-  version "24.6.4"
-  resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-24.6.4.tgz#e19b8305f7e1ea0b4faaa30382c81b9d6de39863"
-  integrity sha512-BNcHRc9CWEuI9qt0E655bUBU/j/3wUCYBVKGu1kVpbN5lcUdEJJJeiO0NHK3dgKmra6LUUZlo+mWqc+OCbi0zw==
+dmg-builder@24.9.1:
+  version "24.9.1"
+  resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-24.9.1.tgz#04bf6c0dcd235f6214511f2358a78ed2b9379421"
+  integrity sha512-huC+O6hvHd24Ubj3cy2GMiGLe2xGFKN3klqVMLAdcbB6SWMd1yPSdZvV8W1O01ICzCCRlZDHiv4VrNUgnPUfbQ==
   dependencies:
-    app-builder-lib "24.6.4"
-    builder-util "24.5.0"
-    builder-util-runtime "9.2.1"
+    app-builder-lib "24.9.1"
+    builder-util "24.8.1"
+    builder-util-runtime "9.2.3"
     fs-extra "^10.1.0"
     iconv-lite "^0.6.2"
     js-yaml "^4.1.0"
@@ -3871,16 +3871,16 @@ ejs@^3.1.8:
   dependencies:
     jake "^10.8.5"
 
-electron-builder@^24.6.4:
-  version "24.6.4"
-  resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-24.6.4.tgz#c51271e49b9a02c9a3ec444f866b6008c4d98a1d"
-  integrity sha512-uNWQoU7pE7qOaIQ6CJHpBi44RJFVG8OHRBIadUxrsDJVwLLo8Nma3K/EEtx5/UyWAQYdcK4nVPYKoRqBb20hbA==
+electron-builder@^24.9.1:
+  version "24.9.1"
+  resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-24.9.1.tgz#4aee03947963b829a7f48a850fe02c219311ef63"
+  integrity sha512-v7BuakDuY6sKMUYM8mfQGrwyjBpZ/ObaqnenU0H+igEL10nc6ht049rsCw2HghRBdEwJxGIBuzs3jbEhNaMDmg==
   dependencies:
-    app-builder-lib "24.6.4"
-    builder-util "24.5.0"
-    builder-util-runtime "9.2.1"
+    app-builder-lib "24.9.1"
+    builder-util "24.8.1"
+    builder-util-runtime "9.2.3"
     chalk "^4.1.2"
-    dmg-builder "24.6.4"
+    dmg-builder "24.9.1"
     fs-extra "^10.1.0"
     is-ci "^3.0.0"
     lazy-val "^1.0.5"
@@ -3957,14 +3957,14 @@ electron-packager@^17.1.2:
     semver "^7.1.3"
     yargs-parser "^21.1.1"
 
-electron-publish@24.5.0:
-  version "24.5.0"
-  resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-24.5.0.tgz#492a4d7caa232e88ee3c18f5c3b4dc637e5e1b3a"
-  integrity sha512-zwo70suH15L15B4ZWNDoEg27HIYoPsGJUF7xevLJLSI7JUPC8l2yLBdLGwqueJ5XkDL7ucYyRZzxJVR8ElV9BA==
+electron-publish@24.8.1:
+  version "24.8.1"
+  resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-24.8.1.tgz#4216740372bf4297a429543402a1a15ce8c3560b"
+  integrity sha512-IFNXkdxMVzUdweoLJNXSupXkqnvgbrn3J4vognuOY06LaS/m0xvfFYIf+o1CM8if6DuWYWoQFKPcWZt/FUjZPw==
   dependencies:
     "@types/fs-extra" "^9.0.11"
-    builder-util "24.5.0"
-    builder-util-runtime "9.2.1"
+    builder-util "24.8.1"
+    builder-util-runtime "9.2.3"
     chalk "^4.1.2"
     fs-extra "^10.1.0"
     lazy-val "^1.0.5"

From 04529ea7ab7823f609473cc54cfb152c115affbe Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 18 Dec 2023 15:14:02 -0400
Subject: [PATCH 91/97] Bump github/codeql-action from 2 to 3 (#976)

Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2 to 3.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
 .github/workflows/codeql.yml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
index 7742c493b9b..7305888af47 100644
--- a/.github/workflows/codeql.yml
+++ b/.github/workflows/codeql.yml
@@ -22,7 +22,7 @@ jobs:
 
       # Initializes the CodeQL tools for scanning.
       - name: Initialize CodeQL
-        uses: github/codeql-action/init@v2
+        uses: github/codeql-action/init@v3
         with:
           config-file: ./.github/codeql/codeql-config.yml
 
@@ -32,7 +32,7 @@ jobs:
       # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
       # If this step fails, then you should remove it and run the build manually (see below).
       - name: Autobuild
-        uses: github/codeql-action/autobuild@v2
+        uses: github/codeql-action/autobuild@v3
 
       # ℹ️ Command-line programs to run using the OS shell.
       # 📚 https://git.io/JvXDl
@@ -46,4 +46,4 @@ jobs:
       #     make release
 
       - name: Perform CodeQL Analysis
-        uses: github/codeql-action/analyze@v2
+        uses: github/codeql-action/analyze@v3

From 87ad288d145de1fb2884b75d3d3d7ab91fd4b539 Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Mon, 18 Dec 2023 16:07:16 -0400
Subject: [PATCH 92/97] bugfix: only set the popup for restarting when the
 title bar style has actually changed (#980)

---
 app/src/ui/dispatcher/dispatcher.ts | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/app/src/ui/dispatcher/dispatcher.ts b/app/src/ui/dispatcher/dispatcher.ts
index 2148332fc17..f5656a99da0 100644
--- a/app/src/ui/dispatcher/dispatcher.ts
+++ b/app/src/ui/dispatcher/dispatcher.ts
@@ -2472,8 +2472,14 @@ export class Dispatcher {
    * Set the title bar style for the application
    */
   public async setTitleBarStyle(titleBarStyle: TitleBarStyle) {
+    const existingState = this.appStore.getState()
+    const { titleBarStyle: existingTitleBarStyle } = existingState
+
     await this.appStore._setTitleBarStyle(titleBarStyle)
-    this.showPopup({ type: PopupType.ConfirmRestart })
+
+    if (titleBarStyle !== existingTitleBarStyle) {
+      this.showPopup({ type: PopupType.ConfirmRestart })
+    }
   }
 
   /**

From f589a5f53d13c998d1fb7994e5209fb73dd7326d Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Wed, 20 Dec 2023 10:36:39 -0400
Subject: [PATCH 93/97] bugfix: use env.NODE_VERSION instead of matrix.node
 placeholder

---
 .github/workflows/ci.yml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 8e29a3dbf8c..7ec88eb7912 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -87,7 +87,6 @@ jobs:
             friendlyName: Ubuntu
             image: ubuntu:18.04
             arch: arm
-            node: 18.16.1
             environment:
               AS: arm-linux-gnueabihf-as
               STRIP: arm-linux-gnueabihf-strip
@@ -167,16 +166,17 @@ jobs:
         with:
           node-version: ${{ env.NODE_VERSION }}
           cache: yarn
-      - name: Install unofficial-builds Node.js ${{ matrix.node }} on Ubuntu
+      - name:
+          Install unofficial-builds Node.js ${{ env.NODE_VERSION }} on Ubuntu
         if: matrix.friendlyName == 'Ubuntu'
         run: |
           # This version supports older GLIBC (official builds required a minimum of GLIBC 2.28)
-          # this might break if you bump the `matrix.node` version - ensure you are on the latest version
+          # this might break if you bump the `env.NODE_VERSION` version - ensure you are on the latest version
           # of which ever major/minor release which should have this variant available
           #
           # See https://github.com/nodejs/unofficial-builds/ for more information on these versions.
           #
-          curl -sL 'https://unofficial-builds.nodejs.org/download/release/v${{ matrix.node }}/node-v${{ matrix.node }}-linux-x64-glibc-217.tar.xz' | xzcat | sudo tar -vx  --strip-components=1 -C /usr/local/
+          curl -sL 'https://unofficial-builds.nodejs.org/download/release/v${{ env.NODE_VERSION }}/node-v${{ env.NODE_VERSION }}-linux-x64-glibc-217.tar.xz' | xzcat | sudo tar -vx  --strip-components=1 -C /usr/local/
           sudo npm install --global yarn
       # This step can be removed as soon as official Windows arm64 builds are published:
       # https://github.com/nodejs/build/issues/2450#issuecomment-705853342

From 7b6808e3defa1fa990467fea592249aa6982848d Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Wed, 20 Dec 2023 10:45:56 -0400
Subject: [PATCH 94/97] add alternate branch to better build up commit history

---
 .github/workflows/ci.yml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 7ec88eb7912..88d4b7289f8 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -5,6 +5,7 @@ on:
     branches:
       - development
       - linux
+      - linux-vnext
       - 'linux-release-*'
     tags:
       - 'release-*.*.*-linux*'
@@ -12,6 +13,7 @@ on:
   pull_request:
     branches:
       - linux
+      - linux-vnext
       - 'linux-release-*'
 
 env:

From 737fb81dc09808eff3abfaa7f55e9f04e52f2dbb Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Wed, 20 Dec 2023 11:03:41 -0400
Subject: [PATCH 95/97]  added Intellij Idea Ultimate and Goland under Linux
 IDE options (#985)

* added intellij idea ultimate and golang under linux IDE options

* Update Linux IDE integration doc

---------

Co-authored-by: madeindreams <madeindreams@protonmail.com>
Co-authored-by: madeindreams <ian@idecentralize.finance>
---
 app/src/lib/editors/linux.ts         | 14 ++++++++++++++
 docs/technical/editor-integration.md |  2 ++
 2 files changed, 16 insertions(+)

diff --git a/app/src/lib/editors/linux.ts b/app/src/lib/editors/linux.ts
index 94122fc4683..285b155b7dc 100644
--- a/app/src/lib/editors/linux.ts
+++ b/app/src/lib/editors/linux.ts
@@ -114,6 +114,20 @@ const editors: ILinuxExternalEditor[] = [
     name: 'IntelliJ IDEA',
     paths: ['/snap/bin/idea', '.local/share/JetBrains/Toolbox/scripts/idea'],
   },
+  {
+    name: 'IntelliJ IDEA Ultimate Edition',
+    paths: [
+      '/snap/bin/intellij-idea-ultimate',
+      '.local/share/JetBrains/Toolbox/scripts/intellij-idea-ultimate',
+    ],
+  },
+  {
+    name: 'IntelliJ Goland',
+    paths: [
+      '/snap/bin/goland',
+      '.local/share/JetBrains/Toolbox/scripts/goland',
+    ],
+  },
   {
     name: 'JetBrains PyCharm',
     paths: [
diff --git a/docs/technical/editor-integration.md b/docs/technical/editor-integration.md
index 09bf86b1204..9e626b2c26d 100644
--- a/docs/technical/editor-integration.md
+++ b/docs/technical/editor-integration.md
@@ -353,6 +353,8 @@ These editors are currently supported:
  - [Lite XL](https://lite-xl.com/)
  - [JetBrains PHPStorm](https://www.jetbrains.com/phpstorm/)
  - [JetBrains WebStorm](https://www.jetbrains.com/webstorm/)
+ - [JetBrains Idea Ultimate](https://www.jetbrains.com/idea/)
+ - [JetBrains Goland](https://www.jetbrains.com/go/)
  - [Emacs](https://www.gnu.org/software/emacs/)
  - [Pulsar](https://pulsar-edit.dev/)
 

From 59a9eaf12d35a580b19ae1850d70b2bf1f67562f Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Wed, 20 Dec 2023 11:05:51 -0400
Subject: [PATCH 96/97] update @types/node to later version to try and sync
 with upstream changes (#983)

---
 package.json | 2 +-
 yarn.lock    | 8 ++++----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/package.json b/package.json
index 82064f1842a..ee658ebb4e5 100644
--- a/package.json
+++ b/package.json
@@ -132,7 +132,7 @@
     "@types/legal-eagle": "^0.15.0",
     "@types/memoize-one": "^3.1.1",
     "@types/mri": "^1.1.0",
-    "@types/node": "18.16.1",
+    "@types/node": "18.16.20",
     "@types/prettier": "^2.0.1",
     "@types/react": "^16.8.7",
     "@types/react-css-transition-replace": "^2.1.3",
diff --git a/yarn.lock b/yarn.lock
index debed94f5b0..5177b70b7ad 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1463,10 +1463,10 @@
   resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.24.tgz#d4606afd8cf6c609036b854360367d1b2c78931f"
   integrity sha512-1Ciqv9pqwVtW6FsIUKSZNB82E5Cu1I2bBTj1xuIHXLe/1zYLl3956Nbhg2MzSYHVfl9/rmanjbQIb7LibfCnug==
 
-"@types/node@18.16.1":
-  version "18.16.1"
-  resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.1.tgz#5db121e9c5352925bb1f1b892c4ae620e3526799"
-  integrity sha512-DZxSZWXxFfOlx7k7Rv4LAyiMroaxa3Ly/7OOzZO8cBNho0YzAi4qlbrx8W27JGqG57IgR/6J7r+nOJWw6kcvZA==
+"@types/node@18.16.20":
+  version "18.16.20"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.20.tgz#b27be1ceb267bfb47d8bac024ff6379998f62207"
+  integrity sha512-nL54VfDjThdP2UXJXZao5wp76CDiDw4zSRO8d4Tk7UgDqNKGKVEQB0/t3ti63NS+YNNkIQDvwEAF04BO+WYu7Q==
 
 "@types/node@^18.11.18":
   version "18.16.3"

From e035053c1aae9d4e0e6344266ccc31b8a1d7b36e Mon Sep 17 00:00:00 2001
From: Brendan Forster <github@brendanforster.com>
Date: Wed, 20 Dec 2023 11:06:50 -0400
Subject: [PATCH 97/97] Add additional link to known issues doc (#984)

---
 docs/known-issues.md | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/docs/known-issues.md b/docs/known-issues.md
index b810f4ce792..58987489f63 100644
--- a/docs/known-issues.md
+++ b/docs/known-issues.md
@@ -271,7 +271,9 @@ 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.
+to the GitHub Desktop development app. 
+
+If you have not requested the GitHub Desktop development app for this organization, [follow these instructions first](https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-your-membership-in-organizations/requesting-organization-approval-for-oauth-apps).
 
 ### My shell/terminal is not detected and is stuck on GNOME Terminal