mirror of
https://github.com/JackChen-me/open-multi-agent.git
synced 2026-10-21 18:42:50 -05:00
fix(release-bot): sync otel version constant on release (#522)
The release plan bumps packages/otel/package.json but not the PACKAGE_VERSION constant in packages/otel/src/version.ts, so the version-sync guard test fails validation after any otel bump. Sync the constant alongside the manifest and fail closed if it is missing.
This commit is contained in:
1 parent
3bd5ad17f3
commit
75ca42984f
2 files changed
+41
No files matched your search
@@ -9,11 +9,14 @@ const TEMPLATE_MANIFESTS = [
|
||||
'packages/create-oma-app/templates/security/package.json',
|
||||
] as const
|
||||
|
||||
const OTEL_VERSION_CONSTANT_PATH = 'packages/otel/src/version.ts'
|
||||
|
||||
export const RELEASE_PLAN_PATHS = [
|
||||
'CHANGELOG.md',
|
||||
'package-lock.json',
|
||||
'packages/core/package.json',
|
||||
'packages/otel/package.json',
|
||||
OTEL_VERSION_CONSTANT_PATH,
|
||||
'packages/create-oma-app/package.json',
|
||||
...TEMPLATE_MANIFESTS,
|
||||
] as const
|
||||
@@ -50,6 +53,7 @@ export async function applyReleasePlan(
|
||||
manifest => { manifest.version = plan.nextVersions.otel },
|
||||
changed,
|
||||
)
|
||||
await updateOtelVersionConstant(repoRoot, plan.nextVersions.otel, changed)
|
||||
}
|
||||
|
||||
for (const path of TEMPLATE_MANIFESTS) {
|
||||
@@ -187,6 +191,27 @@ async function updateManifest(
|
||||
}
|
||||
}
|
||||
|
||||
async function updateOtelVersionConstant(
|
||||
repoRoot: string,
|
||||
nextVersion: string,
|
||||
changed: Set<string>,
|
||||
): Promise<void> {
|
||||
if (!/^\d+\.\d+\.\d+$/.test(nextVersion)) {
|
||||
throw new Error(`Refusing to write an invalid otel version constant: "${nextVersion}".`)
|
||||
}
|
||||
const absolute = join(repoRoot, OTEL_VERSION_CONSTANT_PATH)
|
||||
const oldContent = await readFile(absolute, 'utf8')
|
||||
const newContent = oldContent.replace(
|
||||
/export const PACKAGE_VERSION = '[^']+'/,
|
||||
`export const PACKAGE_VERSION = '${nextVersion}'`,
|
||||
)
|
||||
if (newContent === oldContent) {
|
||||
throw new Error(`${OTEL_VERSION_CONSTANT_PATH} does not declare a PACKAGE_VERSION constant.`)
|
||||
}
|
||||
await writeFile(absolute, newContent)
|
||||
changed.add(OTEL_VERSION_CONSTANT_PATH)
|
||||
}
|
||||
|
||||
function wrapBullet(text: string, width = 80): string {
|
||||
const words = text.trim().split(/\s+/)
|
||||
const lines: string[] = []
|
||||
|
||||
@@ -77,6 +77,21 @@ describe('release plan materialization', () => {
|
||||
expect(Math.max(...changelog.split('\n').map(line => line.length))).toBeLessThanOrEqual(80)
|
||||
})
|
||||
|
||||
it('bumps the otel version constant alongside package.json when otel releases', async () => {
|
||||
const root = await createFixture()
|
||||
const otelPlan: ReleasePlan = {
|
||||
...plan,
|
||||
nextVersions: { ...plan.nextVersions, otel: '0.1.2' },
|
||||
bumps: { ...plan.bumps, otel: 'patch' },
|
||||
}
|
||||
const changed = await applyReleasePlan(root, otelPlan)
|
||||
|
||||
expect(changed).toContain('packages/otel/src/version.ts')
|
||||
expect(await version(root, 'packages/otel/package.json')).toBe('0.1.2')
|
||||
const versionTs = await readFile(join(root, 'packages/otel/src/version.ts'), 'utf8')
|
||||
expect(versionTs).toContain("export const PACKAGE_VERSION = '0.1.2'")
|
||||
})
|
||||
|
||||
it('unwraps hard-wrapped changelog prose for GitHub Release rendering', () => {
|
||||
const changelog = insertReleaseEntry(
|
||||
'# Changelog\n\n## Unreleased\n\n## 1.14.0 - 2026-08-01\n\nOld.\n',
|
||||
@@ -100,6 +115,7 @@ async function createFixture(): Promise<string> {
|
||||
temporaryRoots.push(root)
|
||||
await writeJson(root, 'packages/core/package.json', { name: '@open-multi-agent/core', version: '1.14.0' })
|
||||
await writeJson(root, 'packages/otel/package.json', { name: '@open-multi-agent/otel', version: '0.1.1' })
|
||||
await writeText(root, 'packages/otel/src/version.ts', "export const PACKAGE_VERSION = '0.1.1'\n")
|
||||
await writeJson(root, 'packages/create-oma-app/package.json', { name: 'create-oma-app', version: '0.7.0' })
|
||||
for (const path of [
|
||||
'packages/create-oma-app/template/package.json',
|
||||
|
||||
Reference in new issue
Block a user