GoodBuddy Agents / Validate Agent source (push) Canceled after 0s
GoodBuddy Agents / Build Linux arm64 Agent (push) Canceled after 0s
GoodBuddy Agents / Build Linux x64 Agent (push) Canceled after 0s
Cross-platform packages / Validate source (push) Canceled after 0s
Cross-platform packages / Authorize desktop packaging (push) Canceled after 0s
Cross-platform packages / linux arm64 (push) Canceled after 0s
Cross-platform packages / macos arm64 (push) Canceled after 0s
Cross-platform packages / windows arm64 (push) Canceled after 0s
Cross-platform packages / linux x64 (push) Canceled after 0s
Cross-platform packages / macos x64 (push) Canceled after 0s
Cross-platform packages / windows x64 (push) Canceled after 0s
Cross-platform packages / Publish GitHub and OSS release (push) Canceled after 0s
Managed Python installation rejected valid case-distinct terminfo symlinks in the pinned Astral archives on Linux x64 and arm64. Archive uniqueness now follows the target filesystem: Linux preserves case-distinct paths, while every target still rejects exact duplicates and unsafe entries. Move the unpublished 0.12.0 bilingual release notes to the immutable-tag recovery version 0.12.1 and record the failed tag evidence. Release note: 修复 Linux x64/ARM64 上托管 Python 因官方归档包含大小写不同路径而无法安装的问题。
83 lines
2.7 KiB
TypeScript
83 lines
2.7 KiB
TypeScript
import { readFile } from 'node:fs/promises'
|
|
import { join } from 'node:path'
|
|
import { describe, expect, it } from 'vitest'
|
|
import { releaseNotesFileSchema } from '../shared/release-notes-contracts'
|
|
|
|
describe('packaged release notes', () => {
|
|
it('contains matching Chinese and English content', async () => {
|
|
const source = JSON.parse(
|
|
await readFile(
|
|
join(process.cwd(), 'resources', 'release-notes.json'),
|
|
'utf8'
|
|
)
|
|
) as unknown
|
|
const packageSource = JSON.parse(
|
|
await readFile(join(process.cwd(), 'package.json'), 'utf8')
|
|
) as { version?: unknown }
|
|
const parsed = releaseNotesFileSchema.parse(source)
|
|
|
|
expect(typeof packageSource.version).toBe('string')
|
|
expect(parsed.releases).toContainEqual(
|
|
expect.objectContaining({ version: packageSource.version })
|
|
)
|
|
expect(parsed.releases).toContainEqual(
|
|
expect.objectContaining({ version: '0.8.19' })
|
|
)
|
|
for (const release of parsed.releases) {
|
|
for (const section of [
|
|
'highlights',
|
|
'features',
|
|
'fixes',
|
|
'notices'
|
|
] as const) {
|
|
expect(release.notes['zh-CN'][section]).toHaveLength(
|
|
release.notes['en-US'][section].length
|
|
)
|
|
}
|
|
}
|
|
const releaseWithLongScenario = parsed.releases.find(
|
|
(release) => release.version === packageSource.version
|
|
)
|
|
expect(
|
|
releaseWithLongScenario?.notes['en-US'].features.some(
|
|
(item) => item.length > 500
|
|
)
|
|
).toBe(true)
|
|
|
|
const currentRelease = parsed.releases.find(
|
|
(release) => release.version === '0.10.1'
|
|
)
|
|
expect(currentRelease).toBeDefined()
|
|
expect(currentRelease?.releasedAt).toBe('2026-08-17')
|
|
expect(currentRelease?.notes['zh-CN'].highlights).toHaveLength(1)
|
|
expect(currentRelease?.notes['zh-CN'].features).toHaveLength(7)
|
|
expect(currentRelease?.notes['zh-CN'].fixes).toHaveLength(6)
|
|
expect(currentRelease?.notes['zh-CN'].notices).toHaveLength(4)
|
|
expect(
|
|
currentRelease?.notes['zh-CN'].features.every((item) =>
|
|
item.startsWith('**')
|
|
)
|
|
).toBe(true)
|
|
expect(
|
|
currentRelease?.notes['zh-CN'].fixes.every((item) =>
|
|
item.startsWith('**')
|
|
)
|
|
).toBe(true)
|
|
expect(
|
|
currentRelease?.notes['zh-CN'].notices.every((item) =>
|
|
item.startsWith('**')
|
|
)
|
|
).toBe(true)
|
|
expect(JSON.stringify(currentRelease)).not.toContain('官网')
|
|
expect(JSON.stringify(currentRelease)).not.toContain(
|
|
'Website and product preview'
|
|
)
|
|
|
|
const legacyRelease = parsed.releases.find(
|
|
(release) => release.version === '0.9.3'
|
|
)
|
|
expect(legacyRelease?.notes['zh-CN'].highlights).toEqual([])
|
|
expect(legacyRelease?.notes['zh-CN'].notices).toEqual([])
|
|
})
|
|
})
|