Ignore global gitconfig for unit tests#8150
Merged
kuychaco merged 5 commits intodesktop:developmentfrom Sep 3, 2019
vilmibm:8078-autosetuprebase
Merged
Ignore global gitconfig for unit tests#8150kuychaco merged 5 commits intodesktop:developmentfrom vilmibm:8078-autosetuprebase
kuychaco merged 5 commits intodesktop:developmentfrom
vilmibm:8078-autosetuprebase
Conversation
added 3 commits
August 22, 2019 13:37
This commit unsets both HOME and USERPROFILE for unit tests, thus isolating us from falling back to a gitconfig in a user's home directory.
kuychaco
approved these changes
Aug 22, 2019
Contributor
kuychaco
left a comment
There was a problem hiding this comment.
✨Nice solution! ✨
Tested it out locally, and I'm super pleased that I can restore my diff3 merge conflict style config setting 🎉
niik
added a commit
that referenced
this pull request
Feb 13, 2026
This was introduced in #8150 but it's causing our get-shell-env tests to fail because powershell v1 requires USERPROFILE to be set. I don't know what local gitconfig values were being overridden that caused this to be a problem in the first place but I think we should remove these and find out and fix it some other way if it's still a problem
yasuking0304
added a commit
to yasuking0304/desktop
that referenced
this pull request
Feb 21, 2026
* Initial GitBash support Replaces execFile with spawn in get-shell-env for improved control over process execution and output handling. Refactors get-shell to support async shell detection and custom quoting for Windows and Unix shells, moving shell quoting logic to a new shell-escape module. This improves cross-platform compatibility and quoting reliability for shell commands. * Enable MSYS2 argument quoting for Git Bash shell Uncommented and applied the MSYS2 argument quoting function to ensure proper command quoting for Git Bash on Windows. This change improves compatibility with MSYS2's command line parsing. * Auto-approve garbage collection if pre-auto-gc hook missing Adds logic to automatically approve garbage collection when the 'pre-auto-gc' hook is not found in the repository, providing a debug message and exiting with a success code. This prevents unnecessary errors when the hook is absent. * Improve commit progress UI with button styling Adds conditional styling for the commit progress component when the 'Show commit progress' button is present. Updates SCSS to adjust border and layout for better visual integration of the button. * Refactor git binary resolution in hooks proxy Moved git binary resolution from with-hooks-env.ts to hooks-proxy.ts, simplifying the function signatures and centralizing the logic. This change improves maintainability and reduces redundant code. * Memoize shell environment loading for hooks Replaces direct shell environment loading with a memoized async function in hooks-proxy and with-hooks-env. This optimizes repeated environment retrievals and improves performance when running multiple hooks. * Refactor hook execution to use --ignore-missing for pre-auto-gc Removes manual check for pre-auto-gc hook existence and always runs the hook with --ignore-missing. This simplifies logic and ensures Git handles missing pre-auto-gc hooks gracefully, improving user messaging during garbage collection. * Dispose terminal on component unmount Adds a componentWillUnmount lifecycle method to dispose of the XTermTerminal instance when the Terminal component is unmounted, ensuring proper cleanup of resources. * Refactor excluded environment variables in hooks-proxy Moves the excluded environment variables to a top-level constant for reuse and clarity. Simplifies the hook progress callback by extracting the abort function. * Remove debug logging from hook process error handler Eliminates the debug log statement in the error handler for spawned hook processes, streamlining error handling by directly rejecting the promise. * Update hooks-proxy.ts * Fix process abort handling on connection close Replaces abortController.abort() with direct abort function call when the connection closes, ensuring proper process termination. * Support Buffer output for git hook failures Updated hook failure handling to accept terminal output as string, Buffer, or array of Buffers across core, commit, hooks-proxy, popup model, and UI components. Added bufferTrimEnd utility and adjusted terminal rendering logic to properly display Buffer-based output. * Remove unused repoHooks argument from createHooksProxy Eliminated the repoHooks parameter from the createHooksProxy call in withHooksEnv, as it is no longer needed. * Expand terminalOutput type for hook failure handlers Updated the onHookFailure callback signature in commit, core, and hooks-proxy modules to accept terminalOutput as string, Buffer, or ReadonlyArray<Buffer> instead of only ReadonlyArray<Buffer>. This change increases flexibility for handling hook output in different formats. * Refactor TerminalOutput type usage across codebase Unified the TerminalOutput type to replace various string/Buffer/Buffer[] usages in hook, commit, and terminal-related interfaces and components. This improves type consistency and simplifies handling of terminal output data throughout the application. * Refactor terminal output writing logic Removed custom bufferTrimEnd function and simplified terminal output handling by delegating to the write method. This improves code clarity and maintainability. * Update commit-progress.tsx * Refactor Git hook interception and filtering logic Changed IGitExecutionOptions.interceptHooks to accept only string arrays. Updated getRepoHooks to yield hook names instead of paths and improved filtering logic. Refactored withHooksEnv to use the new hook name interface and simplified environment handling for intercepted hooks. * Refactor hooks-proxy for improved readability Renamed ProcessProxyConnection to Connection for brevity, simplified function signatures, and streamlined hook name extraction. Enhanced debug logging to include elapsed time and signal information, and passed terminalOutput directly to onHookFailure for consistency. * Initial plan * Add Copilot instructions for repository Co-authored-by: niik <634063+niik@users.noreply.github.com> * Update coding and contribution guidelines Revised runtime, package manager, and Node.js version requirements. Clarified TypeScript style, import restrictions, and testing practices. Removed outdated instructions and added context for code style and conventions. * Update TypeScript style guide to discourage enums Added a guideline to prefer union types of string literals over enums in the TypeScript style section for more idiomatic code. * Update type for onShowCommitProgress prop Refines the type of the onShowCommitProgress prop to explicitly allow undefined, improving type clarity in IFilterChangesListProps. * Initial wire-up of preferences * Apparently this is what it's called? https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_powershell_editions?view=powershell-7.5 * Add and integrate Git hooks environment settings Introduces configuration utilities for Git hooks environment in a new config module, adds shell selection and caching options, and wires these settings into the preferences UI. Refactors related hooks logic to use the new config, and updates state management for preferences. Also adds a memoized setState utility for React components. * Improve shell selection and escaping for git hooks Adds stricter validation for shell selection in getGitHookEnvShell, updates powershell command escaping, and ensures getShellEnv uses the selected shell. These changes improve reliability and correctness when executing git hooks in different shell environments. * Fallback to registry for Git Bash path detection Updates the findGitBashShell function to use findGitBashInRegistry as a fallback if findGitBash does not return a path. This improves reliability of Git Bash detection on Windows systems. * Update PowerShell command execution logic Adds '-NonInteractive' to PowerShell args and changes command quoting to use 'Start-Process' with '-NoNewWindow' and '-Wait'. This improves process handling and argument passing for PowerShell commands. Invocation with & requires PATHEXT env var, start-process doesn't * Update win32.ts * Add Beta label to Hooks tab in Git preferences Introduces a 'Beta' pill next to the Hooks tab in the Git preferences UI to indicate its beta status. Also updates styles to apply consistent formatting to the new beta pill. * Update Git hook shell options and improve UI Replaces 'g4w-bash' with 'git-bash' for shell selection and updates related logic and types. Adds user-facing warning about experimental hook support in preferences UI. Refactors shell options to use friendly names and improves maintainability. * Refactor shell environment loading for hooks Introduces ShellEnvResult type to handle shell environment loading success and failure cases. Updates hooks-proxy and with-hooks-env to use the new result type, improving error handling and user messaging when the shell environment cannot be loaded. Adds memoization and context-aware caching for shell environment retrieval. * Allow bypassing commit hooks * Update commit options button styling logic The commit options button now conditionally applies the 'default-options' class based on the skipCommitHooks prop. Corresponding SCSS changes ensure the button uses the appropriate text color for default and non-default states. * Refactor commit hook bypass to use CommitOptions Replaces skipCommitHooks boolean prop and handler with a CommitOptions object across components and dispatcher. This improves extensibility for future commit options and standardizes the interface for updating commit-related settings. * Let hooks know they're being run in Desktop * Update enableHooksEnvironment to use beta features Changed enableHooksEnvironment to reference enableBetaFeatures instead of enableDevelopmentFeatures for consistency with other feature flags. * Address feedback: simplify dev workflow, add CoC link, reduce dev tips Co-authored-by: niik <634063+niik@users.noreply.github.com> * Don't call setState after unmount * Detect resize without using resize observer * Don't emit unless markdown rendered value has changed * Don't include head and body elements The output we get from the markdown parser doesn't include <head> or <body> but by emitting documentElement.innerHTML here we'll always wrap the contents in <head></head><body>{...}</body> This in turn will break our logic to only re-render the sandboxed markdown component if the markup changes. * Whoops, need this to be able to poke in the frame DOM * Handle when DOMContentLoaded already has fired * Refactor div ref to use React.createRef in SandboxedMarkdown Replaces manual div ref management with React.createRef for frameContainingDivRef in SandboxedMarkdown. Updates related logic to use the current property and removes the custom ref callback for improved clarity and consistency. * We've successfully eliminated needless calls to onMardownUpdates, no need for debounce any more * Don't show quick view until markdown has rendered Prevents jumping around * Apply markdown filters on the rendered document Previously we would render markdown to string, put that in the iframe, then parse that string into a Document, apply a filter on it, stringify it, push to iframe, repeating for each filter. Now instead we can just let the filters loose on the iframe document and only recalculate the height when something has changed inside the iframe DOM. * Call refresh from react attribute No need for error handler, it won't cause a crash * Disable scrollbars inside iframe, render horizontal scrollbars for pre and table * Build files be gone * Add .gitignore to exclude build directory Added a .gitignore file in vendor/printenvz to ignore the build directory and prevent build artifacts from being tracked in version control. * Migrate printenvz native code from C++ to C Replaces the C++ implementation of the printenvz executable with a C version for simplicity and compatibility. Updates binding.gyp and documentation to reference the new C source file and adjusts build flags accordingly. * Enhance compiler flags for printenvz binding Added stricter and more secure compiler flags to the printenvz binding.gyp file for both general and macOS builds. This improves code security and enforces stricter compilation checks. * Add markers to printenvz output and update parser Introduced start and end markers in printenvz.c output to reliably delimit environment variable output. Updated get-shell-env.ts to parse only the section between these markers, preventing issues caused by extraneous shell output. * Fix shell env parsing by adjusting end marker handling Updated the end marker in printenvz.c to include a leading newline and adjusted get-shell-env.ts to correctly parse the output boundaries. This ensures reliable extraction of environment variables from the printenvz output. * Fix jsdoc error * Hardening * Update binding.gyp * Actually set the flags * 📖 * I guess these should actually be negated * Don't need this * Issue 7734: Enter to create new branch * Align Filter Options popover title and Close button on baseline Fixes the vertical misalignment between Filter Options popover title and its Close button. * Set 200px min-width on the Filter Options popover * Close Filter Options popover when button is clicked while open - Changes tab Filter Options button now toggle open/close when clicked (previously only opened) * Update "push needs pull" warning message for clarity * Hide Stash menu item on dialog * Feature: Open with other editor * fix linting * Release 3.5.5-beta1 * Fix typo in button label for enterprise account desktop#21445 * Update Windows code signing endpoint URL Changed the Endpoint in the ACS metadata from 'wus' to 'wus3.codesigning.azure.net' to reflect the updated code signing service URL. * Update changelog.json * Remove no local changes component * Initial support for push related hooks * Bump diff from 7.0.0 to 8.0.3 Bumps [diff](https://github.com/kpdecker/jsdiff) from 7.0.0 to 8.0.3. - [Changelog](https://github.com/kpdecker/jsdiff/blob/master/release-notes.md) - [Commits](kpdecker/jsdiff@7.0.0...v8.0.3) --- updated-dependencies: - dependency-name: diff dependency-version: 8.0.3 dependency-type: direct:development ... Signed-off-by: dependabot[bot] <support@github.com> * Fixed bidirectional hooks support * Update process-proxy to 0.5.0 and refactor hooks-proxy Upgrades the process-proxy dependency from 0.3.0 to 0.5.0. Refactors hooks-proxy to remove the hooksUsingStdin array and instead dynamically check for stdin connection, and updates argument handling for --to-stdin. Cleans up related code in with-hooks-env. * yarn lint:fix * These are all server-side stuff * post-rewrite can't cancel op * Add support for pull based hooks * fix: buffer length may differ from string length When a Buffer with multi-byte characters (like emoji) is pushed, chunk.length returns the byte count (8) instead of the string length (4), causing terminalOutputLength to be inflated. The while loop then over-prunes, removing all chunks and causing firstChunk to be undefined. * Add Warp terminal support for Windows Introduces detection and launching logic for the Warp terminal on Windows. Updates shell enumeration, shell discovery, and launch handling to include Warp, checking common installation paths and registry presence. * Preload copilot avatars * Ensure avatars later in the stack doesn't obscure earlier ones * Deduplicate Copilot avatars * Use same logic to calculate number of authors as will be used to render avatar stack * Just use avatarUsers instead * Bump version and add changelog * Remove unused dependencies: mri and strip-ansi - mri: Never imported or used in source code - strip-ansi: Only used as transitive dependency, not directly by our code * Remove to-camel-case dependency Replace with simple inline function for kebab-case to camelCase conversion. Only used once in generate-octicons.ts build script. * Replace compare-versions with semver Use semver.gte() and semver.lt() instead of compare-versions. Semver is already a dependency in root package.json and provides the same functionality for OS version comparisons. * Remove klaw-sync dependency Only used in test helper to find _git directories in fixture repos. * Remove fs-extra dependency Replace all fs-extra usage with native Node.js fs/fs.promises APIs: Build scripts: - copySync → cpSync (with recursive: true option) - readFileSync, existsSync → native fs equivalents Production code: - pathExists → use existing app/src/ui/lib/path-exists.ts helper Test files (27 files): - writeFile, readFile, appendFile, unlink, mkdir, mkdtemp → fs/promises - copy → cp from fs/promises - pathExists → use existing helper All fs-extra functionality is now provided by Node.js v22 built-ins. Tests passing, build scripts verified. * Update changelog.json * Liiiint * Use glob instead * Liiint * Remove unused imports on save * Don't need this any more, diff has its own types * Remove feature flag for filtered changes list * Remove feature flag for multiple enterprise accounts * Remove checkout and reset commit feature flags * Remove unused import * Whoops * Whoops * Skip mention of --no-verify * Reuse onHookFailure * Extra hook related callbacks into type * Remove unused imports * Extract pushTerminalChunk for reuse and add tests * Replace fs-extra with fs/promises and pathExists in tests Refactored test helpers and unit tests to use native fs/promises methods and a custom pathExists utility instead of fs-extra. This reduces external dependencies and aligns with modern Node.js practices. * Bump lodash from 4.17.21 to 4.17.23 in /app Bumps [lodash](https://github.com/lodash/lodash) from 4.17.21 to 4.17.23. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](lodash/lodash@4.17.21...4.17.23) --- updated-dependencies: - dependency-name: lodash dependency-version: 4.17.23 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> * Bump lodash from 4.17.21 to 4.17.23 Bumps [lodash](https://github.com/lodash/lodash) from 4.17.21 to 4.17.23. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](lodash/lodash@4.17.21...4.17.23) --- updated-dependencies: - dependency-name: lodash dependency-version: 4.17.23 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * Revert "Replace compare-versions with semver" This reverts commit a2b9c21. * Nitpick, no need for post-rewrite unless amending * Naive implementation of merge hooks * Merge (lol) output from merge and commit commands when squashing * Refactor coerceToBuffer import in show.ts Moved the coerceToBuffer import from './core' to './coerce-to-buffer' for better module separation and clarity. * Update merge.ts * Expand safe environment variable prefixes for hooks Added 'GITHEAD_' to the list of safe environment variable prefixes passed to hooks, alongside 'GIT_'. This ensures variables set by git-merge are included unless explicitly excluded. * Get rid of "git pull" changes, but keep useful submodule tests * Update keyboard-shortcut.tsx Return single top level element for React.Component render * Remove unused UI components and update translations Deleted unused files changes-list.tsx and commit-summary.tsx from the UI. Cleaned up translation files by removing unused keys related to changes list and commit summary, and added new Git settings strings for hook and path management in all supported languages. * Lint * Clear resolve.aliasFields in renderer config Add an explicit resolve.aliasFields: [] to the renderer webpack configuration to disable using package.json aliasFields during module resolution. This prevents unexpected aliasing from upstream packages and enforces consistent resolution behavior for the renderer build. * Clarify aliasFields for renderer in webpack Add a comment in app/webpack.common.ts to explain that aliasFields: [] prevents the renderer from resolving browser-specific versions of modules. This is a documentation-only change to clarify intent; no functional behavior was modified. * Update checkout.ts * Add AGENTS.md: Electron upgrade agent Add AGENTS.md documenting a Copilot agent for upgrading Electron and the corresponding Node.js version in GitHub Desktop. Provides step-by-step guidance on which files to change (separating Electron and Node updates into two commits), verification steps (yarn install, yarn build:dev), PR title/description template, recommended commit messages, and important notes (e.g., do not change production in validate-electron-version.ts, .nvmrc uses a v prefix). Includes references for finding breaking changes and current reference versions. * Bump Electron to v40.1.0 * Bump Node.js to v24.11.1 * Initial plan * Move Electron upgrader agent to proper location with YAML frontmatter - Move AGENTS.md to .github/agents/electron-upgrader.agent.md - Add YAML frontmatter with name and description fields - Follow GitHub Copilot custom agent documentation format - Agent will now appear in Copilot CLI when using /agent Co-authored-by: sergiou87 <1083228+sergiou87@users.noreply.github.com> * Verbatim! * Update test-setup.ts * Release 3.5.5-beta3 * update message * Refactor rebaseInteractive to use options object Introduce RebaseInteractiveOptions and update rebaseInteractive to accept an options object instead of multiple positional args. Pull GIT_EDITOR from opts, forward hook callbacks (onHookProgress/onHookFailure/onTerminalOutputAvailable) into git execution options, and conditionally add --no-verify. Update callers (reorder and squash) to pass the new options shape. Also add HookCallbackOptions import and a minor formatting tweak to getRebaseSnapshot signature. This centralizes interactive rebase configuration and enables hook/no-verify support. * Rebase: switch to options object Change continueRebase/rebaseInteractive to accept a RebaseInteractiveOptions object instead of multiple positional args. Move progressCallback and gitEditor into the options object and wire through additional hooks and flags (onTerminalOutputAvailable, onHookFailure, onHookProgress, noVerify). Update callers in AppStore and unit tests to pass the new options object. Also include minor formatting and destructuring cleanups across app-store.ts for line-wrapping and consistency. * Add @types/fs-extra dependency Add @types/fs-extra@^11.0.4 to package.json to provide TypeScript typings for fs-extra. yarn.lock was regenerated to reflect the updated dependency resolution. * Lint * Use prettier from node_modules * Use prettier from node_modules * Enable hooks by default via feature flag Export enableHooksByDefault from feature-flag and use it in hooks/config to set defaultHooksEnvEnabledValue (replacing the hardcoded false). This makes the default enabled state for the hooks environment follow the enableBetaFeatures flag and keeps the import up to date. * Bump version, add changelog * Use the right desktop-trampoline 🤦♂️ Co-Authored-By: Markus Olsson <634063+niik@users.noreply.github.com> * Replace parallel-webpack with webpack-cli Switch compile scripts to use webpack (webpack CLI) instead of parallel-webpack. Removed parallel-webpack from package.json and added webpack-cli to devDependencies; updated compile:dev and compile:prod scripts accordingly. yarn.lock updated to reflect the new webpack-cli dependency tree and removal of parallel-webpack-related entries. Co-Authored-By: Gareth Edwards <ghedwards@gmail.com> * Switch triage workflows to shared workflows Centralize issue triaging by replacing multiple local workflows with shared workflow calls. - Removed several local triage workflows: close-single-word-issues, feature-request-comment, no-response, on-issue-close, remove-triage-label, stale-issues, and unable-to-reproduce-comment. - Updated .github/workflows/triage-issues.yml to call shared workflows (desktop/gh-cli-and-desktop-shared-workflows) for labeling, closing, comments, and other triage actions, and expanded handled issue events. - Tweaked close-invalid.yml to no longer handle issue labeling events and to only act via pull_request_target (PR close step remains). - Added triage-scheduled-tasks.yml to schedule/no-response and stale tasks using the shared workflows. This reduces duplication and centralizes triage logic in the shared workflow repository. * Format triage workflow YAML Reformat .github workflow files for readability. Wrap a long 'if' condition across multiple lines in triage-issues.yml, convert the long additional_context string into a wrapped YAML sequence item for line-length clarity, and normalize spacing around inline cron comments in triage-scheduled-tasks.yml. These are whitespace/formatting changes only and should not alter runtime behavior. * Always write hooks preference when changed See desktop#21601 * Make shell env marker parsing robust Replace fixed start/end marker strings with CRLF-tolerant regexes, locate the start marker via match and the last end marker via matchAll/at(-1), and update substring extraction accordingly. This prevents mis-parsing when shells emit extra stdout or use CRLF line endings and provides clearer error messages when markers are missing. * Include exit code in terminal output * Add smoke test for getShellEnv * Use workspace cwd and relative paths in launch Add "cwd": "${workspaceFolder}" and change the test globals and env file to relative paths (./app/test/globals.mts and .test.env). This makes the VSCode test launch configuration more portable and ensures paths resolve correctly when running tests from the integrated terminal while keeping ${relativeFile} for targeting the current test file. * Fix Git bash resolution on Windows So turns out the Git resolved via PATH might point to the ming64 version which is fine but we need to deal with it. Dealt with that. Second, that unearthed a bug that findGitBashInRegistry returns the path to the git-bash.exe, not bash.exe which we need. Deal with that too * We'll take it from here Prevent Node from messing up our perfectly quoted args * Bump version and changelog * Stop unsetting important env vars This was introduced in desktop#8150 but it's causing our get-shell-env tests to fail because powershell v1 requires USERPROFILE to be set. I don't know what local gitconfig values were being overridden that caused this to be a problem in the first place but I think we should remove these and find out and fix it some other way if it's still a problem * update package * update message * Fall back to registry if which(git) fails * Type annotate bashPath as string | null Add an explicit TypeScript type for bashPath in app/src/lib/hooks/get-shell.ts (string | null) to improve type safety and satisfy strict typing rules. This is a non-functional change — no runtime behavior is altered. * Changelog and version bump * Centralize PR triage using shared workflows Remove legacy local workflows (close-invalid.yml, pr-is-external.yml) and add a single triage-prs.yml that orchestrates PR triage by delegating jobs to the desktop/gh-cli-and-desktop-shared-workflows repository. Also update triage-scheduled-tasks.yml to include the pr-requirements scheduled job. This consolidates triage logic into shared workflow definitions for easier maintenance and consistency. * Enable hooks support for production * Get ready to ship electron 40 to prod * Update changelog.json * Bump version * update layout --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Markus Olsson <j.markus.olsson@gmail.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: niik <634063+niik@users.noreply.github.com> Co-authored-by: Jack Freeman <110849539+jackfreem@users.noreply.github.com> Co-authored-by: Jorge Pedroso <jpedroso@metaclassy.com> Co-authored-by: Shahab Movahhedi <45717968+movahhedi@users.noreply.github.com> Co-authored-by: tidy-dev <75402236+tidy-dev@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Cocodrulo <142546774+Cocodrulo@users.noreply.github.com> Co-authored-by: Sergio Padrino <sergio.padrino@gmail.com> Co-authored-by: Gareth Edwards <ghedwards@gmail.com> Co-authored-by: sergiou87 <1083228+sergiou87@users.noreply.github.com>
yasuking0304
added a commit
to yasuking0304/desktop
that referenced
this pull request
Mar 15, 2026
* Naive implementation of merge hooks * Merge (lol) output from merge and commit commands when squashing * Refactor coerceToBuffer import in show.ts Moved the coerceToBuffer import from './core' to './coerce-to-buffer' for better module separation and clarity. * Update merge.ts * Expand safe environment variable prefixes for hooks Added 'GITHEAD_' to the list of safe environment variable prefixes passed to hooks, alongside 'GIT_'. This ensures variables set by git-merge are included unless explicitly excluded. * Get rid of "git pull" changes, but keep useful submodule tests * Update keyboard-shortcut.tsx Return single top level element for React.Component render * Remove unused UI components and update translations Deleted unused files changes-list.tsx and commit-summary.tsx from the UI. Cleaned up translation files by removing unused keys related to changes list and commit summary, and added new Git settings strings for hook and path management in all supported languages. * Lint * Issue 4574: Allow pull on empty repo * prettier * Clear resolve.aliasFields in renderer config Add an explicit resolve.aliasFields: [] to the renderer webpack configuration to disable using package.json aliasFields during module resolution. This prevents unexpected aliasing from upstream packages and enforces consistent resolution behavior for the renderer build. * Clarify aliasFields for renderer in webpack Add a comment in app/webpack.common.ts to explain that aliasFields: [] prevents the renderer from resolving browser-specific versions of modules. This is a documentation-only change to clarify intent; no functional behavior was modified. * Update checkout.ts * Add AGENTS.md: Electron upgrade agent Add AGENTS.md documenting a Copilot agent for upgrading Electron and the corresponding Node.js version in GitHub Desktop. Provides step-by-step guidance on which files to change (separating Electron and Node updates into two commits), verification steps (yarn install, yarn build:dev), PR title/description template, recommended commit messages, and important notes (e.g., do not change production in validate-electron-version.ts, .nvmrc uses a v prefix). Includes references for finding breaking changes and current reference versions. * Bump Electron to v40.1.0 * Bump Node.js to v24.11.1 * Initial plan * Move Electron upgrader agent to proper location with YAML frontmatter - Move AGENTS.md to .github/agents/electron-upgrader.agent.md - Add YAML frontmatter with name and description fields - Follow GitHub Copilot custom agent documentation format - Agent will now appear in Copilot CLI when using /agent Co-authored-by: sergiou87 <1083228+sergiou87@users.noreply.github.com> * Verbatim! * Update test-setup.ts * Release 3.5.5-beta3 * update message * Use theme-aware window background color Add light/dark background color constants and a getWindowBackgroundColor helper to choose the appropriate color based on nativeTheme.shouldUseDarkColors. Use this helper when creating BrowserWindow and when the native theme updates so the window background matches the current light/dark theme. * Remove uuid dependency in favor of crypto.randomUUID * Refactor rebaseInteractive to use options object Introduce RebaseInteractiveOptions and update rebaseInteractive to accept an options object instead of multiple positional args. Pull GIT_EDITOR from opts, forward hook callbacks (onHookProgress/onHookFailure/onTerminalOutputAvailable) into git execution options, and conditionally add --no-verify. Update callers (reorder and squash) to pass the new options shape. Also add HookCallbackOptions import and a minor formatting tweak to getRebaseSnapshot signature. This centralizes interactive rebase configuration and enables hook/no-verify support. * Rebase: switch to options object Change continueRebase/rebaseInteractive to accept a RebaseInteractiveOptions object instead of multiple positional args. Move progressCallback and gitEditor into the options object and wire through additional hooks and flags (onTerminalOutputAvailable, onHookFailure, onHookProgress, noVerify). Update callers in AppStore and unit tests to pass the new options object. Also include minor formatting and destructuring cleanups across app-store.ts for line-wrapping and consistency. * Add @types/fs-extra dependency Add @types/fs-extra@^11.0.4 to package.json to provide TypeScript typings for fs-extra. yarn.lock was regenerated to reflect the updated dependency resolution. * Lint * Use prettier from node_modules * Use prettier from node_modules * Enable hooks by default via feature flag Export enableHooksByDefault from feature-flag and use it in hooks/config to set defaultHooksEnvEnabledValue (replacing the hardcoded false). This makes the default enabled state for the hooks environment follow the enableBetaFeatures flag and keeps the import up to date. * Bump version, add changelog * Use the right desktop-trampoline 🤦♂️ Co-Authored-By: Markus Olsson <634063+niik@users.noreply.github.com> * Replace parallel-webpack with webpack-cli Switch compile scripts to use webpack (webpack CLI) instead of parallel-webpack. Removed parallel-webpack from package.json and added webpack-cli to devDependencies; updated compile:dev and compile:prod scripts accordingly. yarn.lock updated to reflect the new webpack-cli dependency tree and removal of parallel-webpack-related entries. Co-Authored-By: Gareth Edwards <ghedwards@gmail.com> * Switch triage workflows to shared workflows Centralize issue triaging by replacing multiple local workflows with shared workflow calls. - Removed several local triage workflows: close-single-word-issues, feature-request-comment, no-response, on-issue-close, remove-triage-label, stale-issues, and unable-to-reproduce-comment. - Updated .github/workflows/triage-issues.yml to call shared workflows (desktop/gh-cli-and-desktop-shared-workflows) for labeling, closing, comments, and other triage actions, and expanded handled issue events. - Tweaked close-invalid.yml to no longer handle issue labeling events and to only act via pull_request_target (PR close step remains). - Added triage-scheduled-tasks.yml to schedule/no-response and stale tasks using the shared workflows. This reduces duplication and centralizes triage logic in the shared workflow repository. * Format triage workflow YAML Reformat .github workflow files for readability. Wrap a long 'if' condition across multiple lines in triage-issues.yml, convert the long additional_context string into a wrapped YAML sequence item for line-length clarity, and normalize spacing around inline cron comments in triage-scheduled-tasks.yml. These are whitespace/formatting changes only and should not alter runtime behavior. * Always write hooks preference when changed See desktop#21601 * Make shell env marker parsing robust Replace fixed start/end marker strings with CRLF-tolerant regexes, locate the start marker via match and the last end marker via matchAll/at(-1), and update substring extraction accordingly. This prevents mis-parsing when shells emit extra stdout or use CRLF line endings and provides clearer error messages when markers are missing. * Include exit code in terminal output * Add smoke test for getShellEnv * Use workspace cwd and relative paths in launch Add "cwd": "${workspaceFolder}" and change the test globals and env file to relative paths (./app/test/globals.mts and .test.env). This makes the VSCode test launch configuration more portable and ensures paths resolve correctly when running tests from the integrated terminal while keeping ${relativeFile} for targeting the current test file. * Fix Git bash resolution on Windows So turns out the Git resolved via PATH might point to the ming64 version which is fine but we need to deal with it. Dealt with that. Second, that unearthed a bug that findGitBashInRegistry returns the path to the git-bash.exe, not bash.exe which we need. Deal with that too * We'll take it from here Prevent Node from messing up our perfectly quoted args * Bump version and changelog * Stop unsetting important env vars This was introduced in desktop#8150 but it's causing our get-shell-env tests to fail because powershell v1 requires USERPROFILE to be set. I don't know what local gitconfig values were being overridden that caused this to be a problem in the first place but I think we should remove these and find out and fix it some other way if it's still a problem * Use Copilot SDK for commit message generation Add @github/copilot-sdk and introduce a new copilot-commit-message module that uses CopilotClient to generate commit titles and descriptions from diffs. Replace the previous HTTP-based Copilot request logic in API.getDiffChangesCommitMessage with a call to generateCommitMessage, move ICopilotCommitMessage into the new module, and remove the old copilotRequest/CopilotChatCompletionResponse plumbing. Also make minor API surface adjustments (optional copilotEndpoint field and small formatting tweaks). Note: the SDK implementation spawns a local Copilot CLI process and requires the CLI to be available on PATH. * (WIP) Make vscode-jsonrpc node version work (instead of browser) * Add copilotEndpoint to Account and API Introduce an optional copilotEndpoint field on Account and thread it through the API client: API.fromAccount, the API constructor, and getDiffChangesCommitMessage now accept/use the copilot endpoint. generateCommitMessage signature updated to take the endpoint, and getDiffChangesCommitMessage throws if no endpoint is available. Also update package.json to bump @github/copilot-sdk to ^0.1.20. * Use token for Copilot messages, drop endpoint Change commit message generation to use the GitHub token instead of a copilotEndpoint: update generateCommitMessage signature and CopilotClient setup (passes githubToken and tweaks session options). Remove copilotEndpoint from UserCopilotInfo, Account, and API (constructor, fromAccount, and fetchUser mapping) and adapt getDiffChangesCommitMessage to call generateCommitMessage with the token. Also bump @github/copilot-sdk dependency accordingly. * (WIP) Move Copilot commit generation to store Remove the standalone copilot-commit-message module and the API.getDiffChangesCommitMessage method, and introduce a CopilotStore (app/src/lib/stores/copilot-store.ts) that manages the CopilotClient lifecycle tied to AccountsStore. The new store recreates the client when the GitHub.com account/token changes, exposes generateCommitMessage(diff) which creates a session, sends the diff, parses JSON responses, and handles session/client cleanup and logging. This centralizes Copilot usage and account-aware lifecycle management. * Add CopilotStore integration Export, instantiate and wire CopilotStore through the app: add CopilotStore export in stores/index, import and accept CopilotStore in AppStore constructor, and create/pass a CopilotStore instance in the UI entrypoint. Replace the previous API-based commit message call with copilotStore.generateCommitMessage to route commit message generation through the new store. Also includes non-functional formatting/wrapping cleanups across app-store.ts to keep lines within width. * Add copilot CLI support and bump deps Bundle and wire up the native copilot CLI: add getCopilotCLIPath and pass cliPath to CopilotClient in copilot-store, and copy the platform-specific copilot binary into the app output in the build script. Also bump @github/copilot-sdk in app/package.json and add @github/copilot as a devDependency in the root package.json to ensure the native binary is available to the build/runtime. * Create Copilot client for a feature usage * Use Copilot SDK's Copilot dep version instead of installing a new one * Update yarn.lock * Please linter * Update update-license-dump.ts * Add Copilot CLI license overrides Add explicit license entries for the GitHub Copilot CLI packages (including platform/arch variants) and export copilotCLILicenseName. Update update-license-dump.ts to import the constant and pass a structuredClone of the overrides to legal-eagle to avoid legal-eagle mutating the original overrides object. Also replace the hard-coded 'Copilot CLI License' string with the exported constant in the allowed-permissive list. * Use getDistArchitecture for copilot path Replace direct use of process.arch with getDistArchitecture() when resolving the @github/copilot package path in script/build.ts. This ensures the build copies the correct distribution-specific copilot folder (matching the project's dist naming) rather than relying on the runtime process.arch value. * Add --conditions=import to test runner args Pass --conditions=import in script/test.mjs test runner arguments so CJS resolution can locate ESM-only packages whose package "exports" only declare an "import" condition (e.g. @github/copilot-sdk). Includes an explanatory comment and integrates with existing import hooks for the test setup. * Add .exe suffix for Windows copilot binary When resolving the copilot binary path, append ".exe" on Windows (process.platform === 'win32') so the script targets the correct executable name. This prevents failures when copying the platform-specific copilot binary into the output directory on Windows systems. * Download copilot binary if local copy fails Attempt to copy the copilot CLI binary from the @github/copilot package into the app output; if that fails (e.g. cross-compilation / old yarn edge cases), fall back to downloading the matching copilot release tarball from GitHub based on the package version, extract the binary, copy it into the output, and clean up temporary files. Handles platform-specific binary name (.exe on Windows) and ensures destination is removed before copying. * Support Windows ZIP releases in build script Detect Windows platform and use .zip archives instead of .tar.gz. Add isWindows flag, rename tarballPath to archivePath, and pick asset extension accordingly. Use PowerShell Expand-Archive to extract on Windows, falling back to tar -xzf for other platforms. Also update download/extract logging and commands to use the new archivePath. * Not a string any more * Add tests for popup id increment behavior * liint * update package * update message * Fall back to registry if which(git) fails * Type annotate bashPath as string | null Add an explicit TypeScript type for bashPath in app/src/lib/hooks/get-shell.ts (string | null) to improve type safety and satisfy strict typing rules. This is a non-functional change — no runtime behavior is altered. * Changelog and version bump * Use process.execPath for Copilot CLI Add a new IPC handler ('get-exec-path') in the main process and use it from the renderer to obtain process.execPath for launching the Copilot CLI. Make getCopilotCLIPath async and invoke the IPC channel, import ipcRenderer and join, and add a getCopilotCLICwd helper. Change createClient to be async and await the exec path; set cliArgs, ELECTRON_RUN_AS_NODE in env, and cwd for the CopilotClient. Update caller to await client creation. These changes ensure the Copilot CLI is spawned with the correct Node/Electron executable and working directory. * Copy copilot package and prune prebuilds Simplify copilot bundling by copying the @github/copilot package directory into the output instead of trying to copy a platform-specific binary or downloading a release. Remove the previous fallback download/extract logic and instead prune prebuilds (and ripgrep bins) that don't match the current platform-architecture, reducing bundle size and avoiding cross-compilation binary lookup issues. * Prune non-matching prebuilds by platform/arch Reduce bundle size by removing prebuild binaries that target other OSes/architectures. Instead of checking a single target pattern, the script now computes nonValidPlatforms and nonValidArchitectures and removes any prebuilds that include those strings. Also adds the clipboard/@teddyzhu node_modules prebuilds directory to the pruning list. * Centralize PR triage using shared workflows Remove legacy local workflows (close-invalid.yml, pr-is-external.yml) and add a single triage-prs.yml that orchestrates PR triage by delegating jobs to the desktop/gh-cli-and-desktop-shared-workflows repository. Also update triage-scheduled-tasks.yml to include the pr-requirements scheduled job. This consolidates triage logic into shared workflow definitions for easier maintenance and consistency. * Enable hooks support for production * Get ready to ship electron 40 to prod * Update changelog.json * Bump version * Add Copilot as a mentionable user for GitHub.com repositories * Render avatars for mentionable users * Just in case it gets added to the mentionables API in the future * Document Copilot CLI --eval workaround Add a comment explaining why CopilotClient is launched with '--eval import './index.js' --'. The CLI is bundled as package files (not a single executable), so Desktop runs its own executable to execute the CLI's index.js; invoking it directly caused argument parsing issues, thus the --eval import workaround is used. * Ensure avatars don't get picked up by screen readers * Remove trailing $ * Bump dugite to ^3.1.0 Update dugite dependency from ^3.0.0 to ^3.1.0 in package.json and regenerate yarn.lock to pin dugite@3.1.0. Lockfile updated to reflect the new resolved version and integrity. * Remove ambiguity * Use DisplayName for JetBrains Toolbox editors Stop relying on a captured group from the registry key name; instead read the DisplayName value directly for JetBrains Toolbox entries. The regex was simplified (no capture group), code now looks up DisplayName from the uninstall key, logs and skips entries missing DisplayName, and uses that value for displayNamePrefixes. This makes editor detection more robust when the key name doesn't match the product display name. * Prioritize repo account for commit messages Sort accounts to prefer the one associated with the current repository before selecting an account for commit message generation. Uses getAccountForRepository to identify the repository-specific account and moves it to the front of the list so enableCommitMessageGeneration will pick it when available, avoiding selection of an unrelated account. * update layout * Prefer repo account for commit message generation Remove unnecessary sorting of accounts and simplify selection logic: check the repository-associated account first and use it if it supports commit message generation; otherwise fall back to finding any account that does. This reduces allocation and improves readability while preserving behavior (returns false if no account enables generation). * Bump dugite to ^3.2.0 Update package.json to require dugite@^3.2.0 (was ^3.1.0) to pick up upstream fixes and improvements. * Move known bots out of avatars.tsx and into their own file * Reuse known bots * 🎨 cleanup * Fix dangling links in copilot instructions * Bump version and add changelog * update readme * Simplify unborn repo handling and remove dead code Since remoteName === null already returns early, the null check inside the TipState.Unborn block was always true. Simplify to call fetchButton directly and remove the now-unreachable unbornRepositoryButton method. * Update macOS icon for liquid glass (macOS 26) Co-Authored-By: Fabian Schultz <desk@fabianschultz.com> Co-Authored-By: Caio F Bertoldi <caiofbertoldi@icloud.com> * Ignore .icon json files * Fixed a typo * Update default tab size from 8 to 4 * Add deskocat agent and assign-copilot skill Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add check for existing PRs in agent checklist Include a new step in the agent troubleshooting checklist to search open pull requests for duplicates (by issue number, touched files, or same problem). If a relevant PR exists, the agent should stop and report it instead of creating a duplicate. This prevents duplicated effort and reduces PR conflicts. * Initial plan * Fix: clear commit message in git store after successful commit Co-authored-by: sergiou87 <1083228+sergiou87@users.noreply.github.com> * Bump fast-xml-parser from 4.5.0 to 4.5.4 Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) from 4.5.0 to 4.5.4. - [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases) - [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md) - [Commits](NaturalIntelligence/fast-xml-parser@v4.5.0...v4.5.4) --- updated-dependencies: - dependency-name: fast-xml-parser dependency-version: 4.5.4 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * Bump Copilot SDK * Initial plan * chore: update process-proxy to ^0.6.0 Co-authored-by: niik <634063+niik@users.noreply.github.com> * Add Copilot CLI bot to knownDotComBots Register the GitHub Copilot CLI app as a known dotcom bot. Adds a new copilotCliBot (node id 1693627, id 223556219) and includes it in the knownDotComBots array so the app can recognize and treat requests from the Copilot CLI bot accordingly (ref: https://github.com/apps/github-copilot-cli). * Ignore Tab in terminal and keep textarea enabled Add a custom key event handler to the terminal to return false for 'Tab' key events so the terminal doesn't intercept app tab navigation (terminal is read-only and doesn't accept Tab). Also remove the code that disabled the terminal textarea so focus/tab navigation and accessibility are preserved. * Sync window background color with theme Keep the native window background in sync with the app's CSS theme color. Add a new IPC channel type and a main-process handler that calls BrowserWindow.setBackgroundColor, and send the computed --background-color from the renderer after applying a theme so the window chrome matches the UI. Co-Authored-By: Baldrian Sector <53869869+baldriansector@users.noreply.github.com> * Clean up old changes Co-Authored-By: Baldrian Sector <53869869+baldriansector@users.noreply.github.com> * Update ipc-shared.ts Co-Authored-By: Baldrian Sector <53869869+baldriansector@users.noreply.github.com> * Bring back CAPI-based commit message generation * Copilot SDK only enabled with remote feature flag on Beta * Bump dompurify from 3.2.4 to 3.3.1 in /app Bumps [dompurify](https://github.com/cure53/DOMPurify) from 3.2.4 to 3.3.1. - [Release notes](https://github.com/cure53/DOMPurify/releases) - [Commits](cure53/DOMPurify@3.2.4...3.3.1) --- updated-dependencies: - dependency-name: dompurify dependency-version: 3.3.1 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> * Initial plan * Fix: replace requestAnimationFrame-based queueWorkHigh with for-of loop in discardChanges The queueWorkHigh utility used requestAnimationFrame to spread synchronous moveItemToTrash work across frames. Since moveItemToTrash is now async, this is no longer necessary — and the use of requestAnimationFrame caused the discard loop to stall whenever the window lost focus (energy-saving behavior). Replace the queueWorkHigh call in GitStore.discardChanges with a simple for...of + await loop, and remove the now-unused queue-work.ts file. Co-authored-by: niik <634063+niik@users.noreply.github.com> * Initial plan * Add Signed-off-by trailer option to commit options menu Co-authored-by: niik <634063+niik@users.noreply.github.com> * Refactor commit options button: remove isCommitOptionsButtonEnabled, show button unconditionally, conditionalize Bypass Commit Hooks menu item on hooks environment and hasCommitHooks Co-authored-by: niik <634063+niik@users.noreply.github.com> * Add Copilot Instructions link to override warning Introduce a tip in the Generate Commit Message override warning that links to Copilot Instructions for customizing generated commit messages. Adds a LinkButton import, inserts a new paragraph row with id "generate-commit-message-override-warning-tip", and updates ariaDescribedBy to include the tip ID so assistive tech will announce it. No other behavior changes. * Load Copilot CLI version from package.json Replace the hardcoded copilotCLIVersion with a runtime read of the @github/copilot package.json. Adds fs/path imports, constructs copilotCLIPkgPath pointing to app/node_modules/@github/copilot/package.json, and parses the file to extract the version string so the license override stays in sync with the actual package version. * Update app/src/lib/stores/copilot-store.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Handle linked worktrees and packed refs Resolve .git files that point to a common git dir (worktrees) and properly read refs from either the repository gitDir or the commonGitDir. Introduces resolveGitDirectories and readRefFile, updates revParse to accept a commonGitDir fallback, and normalizes packed-refs handling to return null when not found. getSHA now accepts a gitPath and uses the new resolution logic. Adds unit tests covering a standard .git directory, linked worktree .git files, and reading packed-refs from the common git dir. * Remove logLevel from Copilot CLI config Remove the `logLevel: 'all'` option when constructing the Copilot CLI process in CopilotStore. This avoids passing a verbose or potentially deprecated logging flag to the child process and relies on the default logging behavior. Co-Authored-By: Markus Olsson <634063+niik@users.noreply.github.com> * Allow commit message generation without account Remove the early check that threw an error if no GitHub.com account was present in CopilotStore.generateCommitMessage. This change prevents an immediate exception and allows createClient()/session logic to handle account resolution or alternative flows instead of failing up-front. Co-Authored-By: Markus Olsson <634063+niik@users.noreply.github.com> * Use debug-level logging for account updates Change CopilotStore logging from info to debug to reduce noisy output during routine account checks. Updates both the "no GitHub.com account available" and "account updated" messages to use debug level. Co-Authored-By: Markus Olsson <634063+niik@users.noreply.github.com> * Log client stop failures as errors Replace log.warn with log.error in CopilotStore's client stop catch block so failures to stop the client are recorded at error severity instead of warning, improving visibility for debugging. Co-Authored-By: Markus Olsson <634063+niik@users.noreply.github.com> * Simplify session cleanup with optional chaining Replace explicit null check and try/catch around session.destroy() with a concise optional chaining call await session?.destroy().catch(() => {}), making the cleanup code shorter while preserving behavior (cleanup errors are still ignored). Co-Authored-By: Markus Olsson <634063+niik@users.noreply.github.com> * Remove CopilotStore account getters Remove the isAvailable and account getters from CopilotStore. Both accessors only forwarded the underlying currentAccount (isAvailable returned whether currentAccount was non-null and account returned currentAccount), so they're removed to reduce the store's public surface. Update any callers to reference currentAccount or alternative APIs as needed. Co-Authored-By: Markus Olsson <634063+niik@users.noreply.github.com> * Conditionally show Copilot tip in override warning Add getAccountForCommitMessageGeneration to centralize account selection for commit message generation (prefer repository-associated account when enabled, otherwise fall back to any enabled account). Update AppStore and App to use this helper and to pass a showCopilotInstructionsTip prop to the GenerateCommitMessageOverrideWarning. The warning component now conditionally renders the Copilot Instructions tip and sets ariaDescribedBy accordingly, and App imports the enableCopilotSdkCommitMessageGeneration flag to decide when to show the tip. Co-Authored-By: Markus Olsson <634063+niik@users.noreply.github.com> * Set onPermissionRequest to denied-interactively-by-user Change the onPermissionRequest handler to return { kind: 'denied-interactively-by-user' } instead of automatically approving. This prevents automatic permission granting and ensures permission requests are handled explicitly (denied interactively by default). Co-Authored-By: Markus Olsson <634063+niik@users.noreply.github.com> * Add pitch surfacing workflow (monthly + manual dispatch) * Initial plan * Add allow-empty commit option to commit options context menu Co-authored-by: niik <634063+niik@users.noreply.github.com> * fix: format triage-scheduled-tasks.yml for Prettier Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: add if guards to no-response and pr-requirements jobs Prevents these jobs from running on workflow_dispatch, which is only intended for pitch surfacing. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: match Prettier line-wrapping for if guards Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Extract ICopilotCommitMessage to its own file Create app/src/lib/copilot-commit-message.ts to hold the ICopilotCommitMessage interface and update app/src/lib/api.ts and app/src/lib/stores/copilot-store.ts to import it. This removes duplicated interface declarations and centralizes the commit-message type. * Parse and validate Copilot commit messages Introduce parseCopilotCommitMessage to extract JSON from markdown code blocks, parse it, and validate the payload (title must be a non-empty string; description must be a string when provided, defaults to ''). Add isRecord helper and replace direct JSON.parse usage in API and CopilotStore with this parser to centralize parsing and produce clearer error messages when Copilot returns invalid payloads. * Bump version and add changelog * Add update-git skill for guided Git version updates Add a Copilot skill that walks through the multi-repo process of updating the version of Git shipped in GitHub Desktop: 1. Update dependencies in dugite-native 2. Publish a dugite-native release 3. Update dugite-native version in dugite 4. Publish dugite to npm 5. Update dugite in desktop Includes helper scripts to check available versions, trigger GitHub Actions workflows, monitor workflow status, verify releases, and check npm publication. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Bump dompurify from 3.3.1 to 3.3.2 in /app Bumps [dompurify](https://github.com/cure53/DOMPurify) from 3.3.1 to 3.3.2. - [Release notes](https://github.com/cure53/DOMPurify/releases) - [Commits](cure53/DOMPurify@3.3.1...3.3.2) --- updated-dependencies: - dependency-name: dompurify dependency-version: 3.3.2 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> * Release 3.5.7-beta1 * Apply suggestion from @tidy-dev * Gate Allow empty commit menu item behind showAllowEmptyCommitOption prop Co-authored-by: niik <634063+niik@users.noreply.github.com> * Accept Partial<CommitOptions> in updateCommitOptions throughout the chain Co-authored-by: niik <634063+niik@users.noreply.github.com> * Match both node and node.js in replacement Expand the regex used by NormalModuleReplacementPlugin to match both node and node.js paths for vscode-jsonrpc. This ensures imports referencing either form are redirected to 'vscode-jsonrpc/lib/node/main.js'. * Append system prompt instead of replace Change systemMessage.mode from 'replace' to 'append' in app/src/lib/stores/copilot-store.ts so the system prompt does not override external instructions (e.g. copilot-instructions.md) used for custom commit message generation. Added an inline comment explaining the rationale. * Pass repository path to Copilot client Pass repository.path from AppStore to CopilotStore.generateCommitMessage and update CopilotStore to accept a repositoryPath. Rename getCopilotCLICwd to getCopilotCLIDir and use it to build an absolute import for the CLI --eval argument, and set the Copilot client's cwd to the repository path. This ensures the Copilot CLI runs in the repository context and avoids issues with relative imports when using --eval. * Remove shescape dependency Remove the 'shescape' entry from app/package.json to clean up an unused dependency and reduce the project's dependency surface. * Copy copilot only for non-production releases Introduce isNonProductionRelease (getChannel() !== 'production') and wrap the logic that copies @github/copilot and prunes its prebuild binaries in copyDependencies() with this guard. This prevents bundling the copilot package (and its platform/arch prebuild cleanup) for production releases, reducing the production artifact size. No functional changes to the pruning logic itself, just gated behind the new flag. * Migrate Windows code signing from client secret to OIDC Replace AZURE_CLIENT_SECRET-based auth with OIDC federated identity credentials via azure/login@v2. This addresses the SFI requirement (vuln-mgmt#183285) to eliminate client secrets from spn-desktop-codesign. - Add id-token: write permission to build job - Add azure/login OIDC step before packaging (Windows only) - Remove AZURE_CODE_SIGNING_CLIENT_SECRET from secrets and env vars Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Release 3.5.7-beta2 * Add commit options i18n and use in UI Add new localization keys for commit options (Signed-off-by trailer, allow empty commit, and configure commit options) across multiple locale JSON files and remove obsolete "cannot-publish-unborn-head" entries. Update the CommitMessage component to use the i18n t() function for the commit options button aria-label and checkbox labels so the new translations are used in the UI. --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Markus Olsson <j.markus.olsson@gmail.com> Co-authored-by: Sergio Padrino <sergio.padrino@gmail.com> Co-authored-by: Gareth Edwards <ghedwards@gmail.com> Co-authored-by: Jack Freeman <110849539+jackfreem@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: sergiou87 <1083228+sergiou87@users.noreply.github.com> Co-authored-by: tidy-dev <75402236+tidy-dev@users.noreply.github.com> Co-authored-by: Baldrian Sector <53869869+BaldrianSector@users.noreply.github.com> Co-authored-by: Markus Olsson <634063+niik@users.noreply.github.com> Co-authored-by: Fabian Schultz <desk@fabianschultz.com> Co-authored-by: Caio F Bertoldi <caiofbertoldi@icloud.com> Co-authored-by: Guiorgy <Guiorgy123@gmail.com> Co-authored-by: advaith <advaithj1@gmail.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Overview
Closes #8078
Description
We have experienced test failures when a user's local
.gitconfigfile sets things our tests don't expect. This PR forces unit tests to ignore a user's.gitconfigby unsettingHOMEandUSERPROFILE(for mac/linux and windows respectively).While the original issue suggested punting on this kind of decision we'd like to try it in the hopes of no longer playing whack-a-mole or experiencing surprise test failures.
Release notes
Notes: no-notes