From d964b16778e5ae5a5a9f6d40331fd2e3bac4f885 Mon Sep 17 00:00:00 2001 From: unknown <1784931579@qq.com> Date: Wed, 19 Aug 2026 10:46:51 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix(tests):=20worktree-shared-directories?= =?UTF-8?q?=20fails=20on=20Windows=20=E2=80=94=20os.devNull=20is=20not=20a?= =?UTF-8?q?=20valid=20git=20config=20path=20(#15409)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The file's git helper pointed GIT_CONFIG_GLOBAL and GIT_CONFIG_SYSTEM at os.devNull to isolate config. On Windows that constant is a device path (\.\nul) which Git for Windows normalizes to //./nul and rejects ("fatal: unable to access '//./nul': Invalid argument"), so every git call in the file failed and 15 of its 19 tests went red. On Linux and macOS the same constant is /dev/null, which Git accepts — CI stayed green and hid the breakage. The two variables now point at real empty files in a temp directory, which works on every platform and Git version (the approach the issue notes other suites already use). The afterEach also guards the warn mockRestore and repo teardown that threw a secondary TypeError when beforeEach failed before assigning them. Verified on Windows 11 + Git for Windows where the file previously failed: 19/19 passing. --- .../git/worktree-shared-directories.test.ts | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/main/git/worktree-shared-directories.test.ts b/src/main/git/worktree-shared-directories.test.ts index 97671c88fa63..ddcd123e87ed 100644 --- a/src/main/git/worktree-shared-directories.test.ts +++ b/src/main/git/worktree-shared-directories.test.ts @@ -1,8 +1,8 @@ import { execFileSync } from 'node:child_process' import { lstatSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs' -import { devNull, tmpdir } from 'node:os' +import { tmpdir } from 'node:os' import { join } from 'node:path' -import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' +import { afterAll, afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { clearConfiguredWorktreeSharedDirectoriesCacheForTests, getConfiguredWorktreeSharedDirectories, @@ -16,14 +16,25 @@ import { import { assertWorktreeCleanForRemoval } from './worktree' import { getStatus } from './status' +// Isolate git config with real empty files. os.devNull resolves to a +// Windows device path Git rejects as a config path ("fatal: unable to +// access '//./nul': Invalid argument") — every git call in this file +// failed on Windows while CI's Linux/macOS runners accepted /dev/null +// and stayed green (#15409). +const configDir = mkdtempSync(join(tmpdir(), 'orca-git-config-')) +const emptyGlobalConfig = join(configDir, 'global.gitconfig') +const emptySystemConfig = join(configDir, 'system.gitconfig') +writeFileSync(emptyGlobalConfig, '') +writeFileSync(emptySystemConfig, '') + const git = (args: string[], cwd: string): void => { execFileSync('git', args, { cwd, stdio: 'ignore', env: { ...process.env, - GIT_CONFIG_GLOBAL: devNull, - GIT_CONFIG_SYSTEM: devNull + GIT_CONFIG_GLOBAL: emptyGlobalConfig, + GIT_CONFIG_SYSTEM: emptySystemConfig } }) } @@ -50,8 +61,12 @@ describe('resolveWorktreeSharedDirectories', () => { }) afterEach(() => { - warn.mockRestore() - rmSync(repo, { recursive: true, force: true }) + warn?.mockRestore?.() + if (repo) rmSync(repo, { recursive: true, force: true }) + }) + + afterAll(() => { + rmSync(configDir, { recursive: true, force: true }) }) it('returns gitignored directories listed under worktree.sharedDirectories', async () => { From ff3adf56a154bb87717acb3afef1c51bd822ca12 Mon Sep 17 00:00:00 2001 From: unknown <1784931579@qq.com> Date: Wed, 19 Aug 2026 10:51:21 +0800 Subject: [PATCH 2/2] docs: add the Android install guide link to README.ko.md (#15395) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Korean README's Android line was synced before #14978 added the Install guide link next to the APK download in the English README. Adds the matching 설치 가이드 link, using the same terminology as the file's other guide links. --- docs/readme/README.ko.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/readme/README.ko.md b/docs/readme/README.ko.md index 697eca84d0e9..918d126137e0 100644 --- a/docs/readme/README.ko.md +++ b/docs/readme/README.ko.md @@ -230,7 +230,7 @@ yay -S stably-orca-bin 데스크톱 앱과 페어링해 휴대폰에서 에이전트를 모니터링하고 조종하세요. - **iOS:** [App Store에서 다운로드](https://apps.apple.com/us/app/orca-ide/id6766130217) 또는 [TestFlight 참여](https://testflight.apple.com/join/YjeGMQBA) -- **Android:** [APK 0.0.43 다운로드](https://github.com/stablyai/orca/releases/download/mobile-android-v0.0.43/app-release.apk) +- **Android:** [APK 0.0.43 다운로드](https://github.com/stablyai/orca/releases/download/mobile-android-v0.0.43/app-release.apk) · [설치 가이드](https://www.onorca.dev/docs/android-apk) ---