verify-dsh-package-licenses.spec.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs'
  2. import { tmpdir } from 'node:os'
  3. import { dirname, join } from 'node:path'
  4. import { afterEach, describe, expect, it } from 'vitest'
  5. import { inspectDshPackageLicenses } from './verify-dsh-package-licenses.ts'
  6. const roots: string[] = []
  7. afterEach(() => {
  8. for (const root of roots.splice(0)) rmSync(root, { recursive: true, force: true })
  9. })
  10. function writeManifest(root: string, file: string, manifest: Record<string, unknown>): void {
  11. const path = join(root, file)
  12. mkdirSync(dirname(path), { recursive: true })
  13. writeFileSync(path, `${JSON.stringify(manifest, null, 2)}\n`)
  14. }
  15. function createWorkspace(): string {
  16. const root = mkdtempSync(join(tmpdir(), 'dsh-package-licenses-'))
  17. roots.push(root)
  18. writeManifest(root, 'package.json', {
  19. name: '@deepseek-ai/dsh-root',
  20. license: 'MIT',
  21. workspaces: ['apps/*', 'packages/*/*', 'vendor/*'],
  22. })
  23. return root
  24. }
  25. describe('DSH package license gate', () => {
  26. it('checks root, unhyphenated CLI, and dsh-prefixed package names while ignoring other families', () => {
  27. const root = createWorkspace()
  28. writeManifest(root, 'apps/cli/package.json', { name: '@deepseek-ai/dsh', license: 'MIT' })
  29. writeManifest(root, 'packages/core/agent/package.json', {
  30. name: '@deepseek-ai/dsh-agent',
  31. license: 'BSD-3-Clause',
  32. })
  33. writeManifest(root, 'vendor/cordis/package.json', {
  34. name: '@deepseek-ai/cordis',
  35. license: 'BSD-3-Clause',
  36. })
  37. expect(inspectDshPackageLicenses(root)).toEqual({
  38. packageCount: 3,
  39. failures: [
  40. 'packages/core/agent/package.json: @deepseek-ai/dsh-agent must declare "license": "MIT"; found "BSD-3-Clause".',
  41. ],
  42. })
  43. })
  44. it('rejects a missing license declaration', () => {
  45. const root = createWorkspace()
  46. writeManifest(root, 'packages/core/agent/package.json', { name: '@deepseek-ai/dsh-agent' })
  47. expect(inspectDshPackageLicenses(root).failures).toEqual([
  48. 'packages/core/agent/package.json: @deepseek-ai/dsh-agent must declare "license": "MIT"; found undefined.',
  49. ])
  50. })
  51. })