diff --git a/.github/workflows/desktop-packaging.yml b/.github/workflows/desktop-packaging.yml index fa4a7ab02..621f43cc5 100644 --- a/.github/workflows/desktop-packaging.yml +++ b/.github/workflows/desktop-packaging.yml @@ -24,7 +24,7 @@ jobs: - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: - node-version: 20 + node-version: 22 cache: npm cache-dependency-path: gitnexus-desktop/package-lock.json @@ -78,7 +78,7 @@ jobs: - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: - node-version: 20 + node-version: 22 cache: npm cache-dependency-path: | gitnexus-shared/package-lock.json @@ -112,6 +112,29 @@ jobs: env: CSC_IDENTITY_AUTO_DISCOVERY: 'false' + - name: Inspect rebuilt native modules (Windows) + if: matrix.os == 'windows-latest' + shell: pwsh + run: | + $releaseDir = Get-ChildItem gitnexus-desktop/release -Directory | Sort-Object LastWriteTime -Descending | Select-Object -First 1 + + if (-not $releaseDir) { + Write-Host "No release directory found." + exit 0 + } + + $runtimeNodeModules = Join-Path $releaseDir.FullName 'win-unpacked\resources\gitnexus\node_modules' + Write-Host "Inspecting native modules under $runtimeNodeModules" + + if (-not (Test-Path $runtimeNodeModules)) { + Write-Host "Runtime node_modules directory not found." + exit 0 + } + + Get-ChildItem $runtimeNodeModules -Recurse -Filter '*.node' | + Select-Object FullName, LastWriteTime | + Format-Table -AutoSize + - name: Start Xvfb if: matrix.os == 'ubuntu-latest' run: | diff --git a/gitnexus-desktop/scripts/ensure-gitnexus-runtime.mjs b/gitnexus-desktop/scripts/ensure-gitnexus-runtime.mjs index f8b90d80f..37a68ebda 100644 --- a/gitnexus-desktop/scripts/ensure-gitnexus-runtime.mjs +++ b/gitnexus-desktop/scripts/ensure-gitnexus-runtime.mjs @@ -160,6 +160,7 @@ const gitnexusDesktopRuntimeDependencyNames = [ 'graphology-utils', 'ignore', 'js-yaml', + 'jsonc-parser', 'lru-cache', 'mnemonist', 'pandemonium', diff --git a/gitnexus-desktop/scripts/package.mjs b/gitnexus-desktop/scripts/package.mjs index 0695dcc0c..1fc44c378 100644 --- a/gitnexus-desktop/scripts/package.mjs +++ b/gitnexus-desktop/scripts/package.mjs @@ -28,8 +28,19 @@ const electronVersion = desktopPackageJson.devDependencies?.electron?.replace(/^[^\d]*/, '') ?? '41.2.1'; const electronBuilderVersion = desktopPackageJson.devDependencies?.['electron-builder']?.replace(/^[^\d]*/, '') ?? '26.8.1'; -// electron-rebuild v4 requires Node 22+, but desktop packaging currently runs on Node 20. -const electronRebuildVersion = '3.7.2'; +const [nodeMajorVersion = 0, nodeMinorVersion = 0] = process.versions.node + .split('.') + .map((segment) => Number.parseInt(segment, 10)); +const supportsElectronRebuildV4 = + nodeMajorVersion > 22 || (nodeMajorVersion === 22 && nodeMinorVersion >= 12); +// electron-rebuild v4 requires Node >= 22.12. Keep a v3 fallback for local Node 20 usage. +const electronRebuildVersion = supportsElectronRebuildV4 ? '4.0.3' : '3.7.2'; + +if (!supportsElectronRebuildV4) { + console.warn( + `[build] Node ${process.versions.node} detected; using electron-rebuild@${electronRebuildVersion}. Node 22.12+ is recommended for Electron ${electronVersion}.`, + ); +} const electronBuilderCliPath = path.join(packageRoot, 'node_modules', 'electron-builder', 'cli.js'); const builderUtilRequire = createRequire( path.join(packageRoot, 'node_modules', 'builder-util', 'out', 'util.js'),