Parcourir la source

fix(desktop): keep package helpers platform-neutral

07akioni il y a 1 semaine
Parent
commit
633b3c0f69

+ 10 - 11
apps/desktop/scripts/prepare-package-set.ts

@@ -27,13 +27,6 @@ import { resolveDesktopTargetBuildPaths } from './desktop-build-paths.mjs'
 const DSH_PACKAGE = '@deepseek-ai/dsh'
 const APP_ROOT = resolve(import.meta.dirname, '..')
 const REPOSITORY_ROOT = resolve(APP_ROOT, '..', '..')
-const BUILD_PATHS = resolveDesktopTargetBuildPaths()
-const OUTPUT_ROOT = BUILD_PATHS.packageSet
-const DEFAULT_INPUTS = [
-  BUILD_PATHS.packedDsh,
-  BUILD_PATHS.packedVendor,
-  BUILD_PATHS.packedLandlock,
-]
 
 const REQUIRED_DEPENDENCY_SECTIONS = ['dependencies', 'peerDependencies'] as const
 const OPTIONAL_DEPENDENCY_SECTION = 'optionalDependencies'
@@ -124,8 +117,8 @@ export function assertDesktopDshPackageFiles(files: readonly string[]): void {
   }
 }
 
-/** Prepare the selected target's package set from its release tarball directories. */
-export function prepareDesktopPackageSet(inputs: readonly string[], output = OUTPUT_ROOT): void {
+/** Prepare a package set from release tarball directories. */
+export function prepareDesktopPackageSet(inputs: readonly string[], output: string): void {
   const selected = selectDesktopPackageClosure(packedPackages(inputs))
   const dsh = selected.find(packed => packed.manifest.name === DSH_PACKAGE)
   if (dsh === undefined) throw new Error(`desktop package set: selected closure omits ${DSH_PACKAGE}`)
@@ -156,12 +149,18 @@ export function prepareDesktopPackageSet(inputs: readonly string[], output = OUT
 }
 
 function main(): void {
+  const buildPaths = resolveDesktopTargetBuildPaths()
+  const defaultInputs = [
+    buildPaths.packedDsh,
+    buildPaths.packedVendor,
+    buildPaths.packedLandlock,
+  ]
   const { values } = parseArgs({
     options: { from: { type: 'string', multiple: true }, out: { type: 'string' } },
     allowPositionals: false,
   })
-  const inputs = (values.from ?? DEFAULT_INPUTS).map(path => resolve(REPOSITORY_ROOT, path))
-  const output = values.out === undefined ? OUTPUT_ROOT : resolve(REPOSITORY_ROOT, values.out)
+  const inputs = (values.from ?? defaultInputs).map(path => resolve(REPOSITORY_ROOT, path))
+  const output = values.out === undefined ? buildPaths.packageSet : resolve(REPOSITORY_ROOT, values.out)
   prepareDesktopPackageSet(inputs, output)
   console.log(`desktop package set: prepared ${output}`)
 }

+ 7 - 3
apps/desktop/tests/macos-signature.spec.ts

@@ -23,6 +23,10 @@ const RELEASE_ENVIRONMENT = {
   DOWNLOAD_TEST_ORIGIN: 'https://desktop-updates.example.com',
 }
 
+function portablePath(value: string): string {
+  return value.replaceAll('\\', '/')
+}
+
 describe('desktop macOS release signature', () => {
   beforeAll(() => {
     for (const [name, value] of Object.entries(RELEASE_ENVIRONMENT)) vi.stubEnv(name, value)
@@ -35,12 +39,12 @@ describe('desktop macOS release signature', () => {
   it('loads release identifiers from the environment and requires code signing', async () => {
     const { createElectronBuilderConfig } = await import('../electron-builder.config.mjs')
     const config = createElectronBuilderConfig(RELEASE_ENVIRONMENT, 'darwin', 'arm64')
-    expect(config.directories.output).toContain('/.desktop-build/targets/mac-arm64/artifacts')
+    expect(portablePath(config.directories.output)).toContain('/.desktop-build/targets/mac-arm64/artifacts')
     expect(config.extraResources).toHaveLength(2)
     expect(config.extraResources[0]?.to).toBe('runtime')
     expect(config.extraResources[1]?.to).toBe('seed')
-    expect(config.extraResources[0]?.from).toContain('/.desktop-build/targets/mac-arm64/runtime')
-    expect(config.extraResources[1]?.from).toContain('/.desktop-build/targets/mac-arm64/seed')
+    expect(portablePath(config.extraResources[0]?.from ?? '')).toContain('/.desktop-build/targets/mac-arm64/runtime')
+    expect(portablePath(config.extraResources[1]?.from ?? '')).toContain('/.desktop-build/targets/mac-arm64/seed')
     expect(config).toMatchObject({
       appId: RELEASE_ENVIRONMENT.DSH_DESKTOP_APP_ID,
       mac: {

+ 12 - 1
apps/desktop/tests/prepare-package-set.spec.ts

@@ -1,4 +1,4 @@
-import { describe, expect, it } from 'vitest'
+import { afterEach, describe, expect, it, vi } from 'vitest'
 import {
   assertDesktopDshPackageFiles,
   selectDesktopPackageClosure,
@@ -10,6 +10,17 @@ function packed(name: string, manifest: Record<string, unknown> = {}): PackedDes
 }
 
 describe('desktop package-set selection', () => {
+  afterEach(() => {
+    vi.unstubAllEnvs()
+  })
+
+  it('does not select a packaging target when imported as a library', async () => {
+    vi.stubEnv('DSH_DESKTOP_TARGET_PLATFORM', 'linux')
+    vi.stubEnv('DSH_DESKTOP_TARGET_ARCH', 'x64')
+    vi.resetModules()
+    await expect(import('../scripts/prepare-package-set.ts')).resolves.toHaveProperty('prepareDesktopPackageSet')
+  })
+
   it('includes only the available internal production closure', () => {
     const available = new Map<string, PackedDesktopPackage>([
       ['@deepseek-ai/dsh', packed('@deepseek-ai/dsh', {