Skip to content

Port Linux build to GitHub Desktop 3.5.12 - #1312

Open
digaovaa wants to merge 1727 commits into
shiftkey:developmentfrom
digaovaa:port/linux-3.5.12
Open

Port Linux build to GitHub Desktop 3.5.12#1312
digaovaa wants to merge 1727 commits into
shiftkey:developmentfrom
digaovaa:port/linux-3.5.12

Conversation

@digaovaa

@digaovaa digaovaa commented Sep 4, 2026

Copy link
Copy Markdown

Summary

  • port the Linux build and Debian packaging to GitHub Desktop 3.5.12 / Electron 40
  • restore Linux custom protocol handling for OAuth callbacks
  • accept the development OAuth protocol in Linux production builds
  • fix GNOME icon association and post-install paths
  • add Cursor and Windsurf external editor detection
  • expand user-local paths for JetBrains Toolbox, Zed, VS Code and VSCodium
  • preserve Linux terminal integrations, including Black Box and Ptyxis

Validation

  • yarn build:prod
  • yarn lint:src
  • built and installed the amd64 Debian package on Ubuntu 24.04
  • verified Cursor detection resolves to /usr/bin/cursor
  • verified x-github-desktop-dev-auth is registered and reaches the running app
  • verified desktop entry, icon installation and StartupWMClass

The branch is based on the official release-3.5.12 tag because this is a full version port.

sergiou87 and others added 30 commits April 9, 2026 15:25
…unch

Fix target path quotation when launching custom shells
Make Copilot CLI import path Windows-safe.

- app/src/lib/stores/copilot-store.ts: construct a file:// URL importPath when running on Windows so the --eval import uses a properly escaped file URL (avoids CLI import-parsing issues). Use importPath in the cliArgs array.
Replace manual file:// URL construction with Node's pathToFileURL to produce a correct file:// URL on Windows. Adds import of pathToFileURL from 'url' and uses it to set importPath when __WIN32__ is true, simplifying escaping and ensuring proper URL formatting.
Use highly optimized test() method from re2js in v2
Previously, formatting preferences were written directly to localStorage
from the Preferences dialog, bypassing the AppStore. This meant no state
change was emitted, so already-mounted components wouldn't re-render to
reflect the new preference.

This change:
- Adds preferAbsoluteDates to IAppState
- Adds _setPreferAbsoluteDates to AppStore (writes localStorage + emits update)
- Adds setPreferAbsoluteDates to Dispatcher
- Updates Preferences save to call dispatcher instead of direct localStorage
- Threads preferAbsoluteDates as a prop through App → RepositoryView →
  CompareSidebar → CommitList → CommitListItem (required because
  CommitListItem is a PureComponent)
- Adds preferAbsoluteDates to CommitList's invalidationProps so the
  virtualized list forces row re-renders
- Updates CommitDragElement, ConfigureGitUser, and UnreachableCommitsDialog
  to pass the new required prop

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Bumps [webpack](https://github.com/webpack/webpack) from 5.94.0 to 5.104.1.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Changelog](https://github.com/webpack/webpack/blob/main/CHANGELOG.md)
- [Commits](webpack/webpack@v5.94.0...v5.104.1)

---
updated-dependencies:
- dependency-name: webpack
  dependency-version: 5.104.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
…/webpack-5.104.1

build(deps): bump webpack from 5.94.0 to 5.104.1
Delete extra backtick in changelog.json
- Remove 'pitch' label (along with 'needs-triage') when issues are closed
- Exclude issues labeled 'skip-pitch' from monthly pitch surfacing
Refactor CopilotStore to extend BaseStore instead of using its own event-kit Emitter. Replace direct emitter usage with BaseStore's emitUpdate and simplified promise handlers, and remove onDidUpdate/onDidError/emitError methods. Also add super() call in the constructor and import BaseStore; this centralizes store event handling and reduces duplicate code.

Co-Authored-By: Markus Olsson <634063+niik@users.noreply.github.com>
…rkflow-improvements

Improve pitch label management: auto-remove on close and support skip-pitch exclusion
Update dugite to v3.2.2 which pulls in dugite-native v2.53.0-3
with Git for Windows v2.53.0.windows.3.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Update Git for Windows to v2.53.0.windows.3
Update Git for Windows to v2.53.0.windows.3
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Two bugs fixed in the draft-release workflow:

1. Beta changelog entries were empty because the workflow parsed
   markdown release notes with grep '^\[', but the AI-generated
   notes format entries as '- [Tag] ...' (with markdown list prefix).
   Now uses the structured release-notes-json output from
   copilot-release-notes action and extracts descriptions with jq.

2. Beta release notes compared from the latest production tag instead
   of the latest beta tag. In semver, 3.5.7 > 3.5.7-beta3, so
   getLatestRelease returned the production tag. Now ci.ts outputs a
   compare-base that uses the latest beta tag for the comparison,
   while keeping version computation correct (still based on the
   overall latest tag).

Also cleaned up the duplicated beta-tag discovery logic in ci.ts
for production releases to reuse the new onlyBetaReleases option
in getLatestRelease.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Production: wrap beta tag lookup with descriptive error message
  explaining that production releases must be based on a beta tag
- Beta: only catch 'No matching release tags found' specifically,
  rethrow unexpected errors (e.g. git failures) instead of silently
  falling back to the wrong compare base
- Update JSDoc on getLatestRelease to reflect conditional filtering

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…notes

Fix beta draft release: use JSON output and compare from last beta tag
…es, enforce ordering

- Clarify that Dependabot dependency bumps should always be skipped,
  even if they mention security fixes (these are build/dev deps)
- Clarify that embedded component updates (Git, Electron, etc.) should
  always be included since they ship with the app
- Add explicit Output Ordering section requiring entries to be sorted
  by tag in the canonical order: New, Added, Fixed, Improved, Removed

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The draft-release workflow pushes the releases/* branch using
GITHUB_TOKEN, which cannot trigger other workflow events. This
means release-pr.yml (on: create) never fires, requiring manual
PR creation each time.

Use the same Desktop Releases GitHub App token (tibdex/github-app-token)
that release-pr.yml already uses, so the push triggers the create
event and the release PR is created automatically.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
sergiou87 and others added 30 commits May 11, 2026 17:03
…/ip-address-10.2.0

Bump ip-address from 10.0.1 to 10.2.0
…/fast-uri-3.1.2

Bump fast-uri from 3.1.0 to 3.1.2
Update app/package.json version to 3.5.9-beta3 and add 3.5.9-beta3 release notes to changelog.json. Notes include fixes for linked worktree pruning, commit message button styling, long changed-files rendering, and an Electron update to 42.0.1.
Eagerly run Electron's install script from script/post-install.ts so Electron's prebuilt binary is available immediately after npm/yarn install. This preserves behavior for scripts that read node_modules/electron/dist (for example validate-macos-version) without requiring Electron to be required first. Exit with non-zero status if the install script fails.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Update app/package.json to set version 3.5.9 (remove beta tag). Add a new 3.5.9 release entry to changelog.json with added, fixed, and improved items (moved/expanded from 3.5.9-beta3).
Import and use pathExists to ensure the Copilot CLI entry point exists before creating a CopilotClient, throwing a clear error if it does not to avoid a half-broken client. Also adjust the modelsInFlight caching flow: assign the in-flight promise inside the try, log a warning on fetch failure, clear the in-flight marker in finally, and return null on failure to avoid leaving a stale promise.
Import enableCopilotSdkCommitMessageGeneration and update listModels to return null when there is no current account or the feature flag is disabled. This prevents Copilot model enumeration unless commit message generation via the Copilot SDK is enabled for the account.
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Add a third FilesChangedBadge with filesChangedCount=3000 and update the expected badge texts to ['12', '301', '3k']. This ensures the component correctly formats large counts using the 'k' abbreviation in the unit tests.
Update app/package.json to version 3.5.11 and add a new release entry in changelog.json for 3.5.11 documenting the fix: "[Fixed] Fix launching custom shells". This is a patch release following 3.5.10.
react-virtualized 9.22.6 introduced automatic role="gridcell" injection
on cells that don't have an explicit role prop (upstream PR desktop#1624). Since
our ListRow components were not passed an explicit role prop in listbox
mode, the injected "gridcell" role overrode the intended "option" role,
producing an invalid ARIA tree (listbox > gridcell) that NVDA cannot
navigate.

Fix by always passing the correct role explicitly to ListRow so that
react-virtualized's defaultCellRangeRenderer skips the injection.

Fixes desktop#22219, fixes desktop#22203

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants