From c8fc6c7cbf75afbeeb242b800efb8b10ea8ef603 Mon Sep 17 00:00:00 2001 From: Menghuan1918 Date: Fri, 14 Aug 2026 16:52:57 +0800 Subject: [PATCH] ci: fix Linux runner test failures (shallow clone, git identity, node-pty prebuild) - checkout with fetch-depth: 0: the git log paging test needs the full repository history (default shallow clone yields one commit) - configure a global git identity on the runner: src/git.ts deliberately never sets one and revert/cherry-pick rely on ambient config - tests/unit.spec.ts: node-pty@1.1.0 ships a prebuilt spawn-helper only for darwin/win32; on linux node-gyp compiles it into build/Release. Align the assertion with ensureSpawnHelper's candidate list instead of hardcoding the prebuilds/ path (the Linux test run was red for this reason) --- .github/workflows/ci.yml | 10 ++++++++++ tests/unit.spec.ts | 16 +++++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2abe642..9a3bffc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,6 +11,9 @@ jobs: timeout-minutes: 20 steps: - uses: actions/checkout@v4 + with: + # Tests run git log against this repository and need the full history. + fetch-depth: 0 - uses: pnpm/action-setup@v4 with: version: 11 @@ -18,6 +21,13 @@ jobs: with: node-version: 22 cache: pnpm + # The plugin's git revert/cherry-pick spawn git without setting an + # identity (deliberate, see tests/smoke.spec.ts) and rely on ambient + # config; the runner has none by default. + - name: Configure git identity for tests + run: | + git config --global user.name "dsh-better-sidebar-ci" + git config --global user.email "ci@dsh.invalid" - name: Install dependencies run: pnpm install --frozen-lockfile - name: Typecheck diff --git a/tests/unit.spec.ts b/tests/unit.spec.ts index 4b18516..cdab6dd 100644 --- a/tests/unit.spec.ts +++ b/tests/unit.spec.ts @@ -865,15 +865,21 @@ describe('pty helpers', () => { if (process.platform === 'win32') return ensureSpawnHelper() ensureSpawnHelper() - const { existsSync } = require('node:fs') as typeof import('node:fs') + const { existsSync, statSync } = require('node:fs') as typeof import('node:fs') const { dirname, join } = require('node:path') as typeof import('node:path') const { createRequire } = require('node:module') as typeof import('node:module') const entry = createRequire(import.meta.url).resolve('node-pty') const root = dirname(dirname(entry)) - const helper = join(root, 'prebuilds', `${process.platform}-${process.arch}`, 'spawn-helper') - expect(existsSync(helper)).toBe(true) - const { statSync } = require('node:fs') as typeof import('node:fs') - expect((statSync(helper).mode & 0o111) !== 0).toBe(true) + // node-pty ships a prebuilt spawn-helper for darwin/win32; on other + // platforms (linux) node-gyp compiles it into build/Release. Mirror + // ensureSpawnHelper's candidate list: either location is acceptable. + const candidates = [ + join(root, 'prebuilds', `${process.platform}-${process.arch}`, 'spawn-helper'), + join(root, 'build', 'Release', 'spawn-helper'), + ] + const helper = candidates.find(existsSync) + expect(helper).toBeTruthy() + expect((statSync(helper!).mode & 0o111) !== 0).toBe(true) }) })