also looking at this
fix: synchronize drifted native versions in recursive releases
#2015
2 files
+26
-2
| @@ -413,8 +413,11 @@ export function updateVersionInFile(filePath: string, oldVersion: string, newVer | ||
| 413 | 413 | if (isZigZon) { |
| 414 | 414 | // Handle Zig build.zig.zon files |
| 415 | 415 | // Format: .version = "0.0.0", |
| 416 | const declaredVersion = forceUpdate | |
| 417 | ? content.match(/\.version\s*=\s*"([^"]+)"/)?.[1] ?? oldVersion | |
| 418 | : oldVersion | |
| 416 | 419 | const versionRegex = new RegExp( |
| 417 | `(\\.version\\s*=\\s*")${oldVersion.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}("\\s*,)`, | |
| 420 | `(\\.version\\s*=\\s*")${declaredVersion.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}("\\s*,)`, | |
| 418 | 421 | 'g', |
| 419 | 422 | ) |
| 420 | 423 | if (content.match(versionRegex) || forceUpdate) { |
| @@ -433,6 +436,7 @@ export function updateVersionInFile(filePath: string, oldVersion: string, newVer | ||
| 433 | 436 | } |
| 434 | 437 | |
| 435 | 438 | const packageJson = JSON.parse(jsonContent) |
| 439 | const declaredVersion = forceUpdate ? String(packageJson.version) : oldVersion | |
| 436 | 440 | if (packageJson.version === oldVersion || forceUpdate) { |
| 437 | 441 | packageJson.version = newVersion |
| 438 | 442 | |
| @@ -440,7 +444,7 @@ export function updateVersionInFile(filePath: string, oldVersion: string, newVer | ||
| 440 | 444 | if (isJsonc) { |
| 441 | 445 | // Replace the version value while preserving comments and formatting |
| 442 | 446 | const versionRegex = new RegExp( |
| 443 | `(["']version["']\\s*:\\s*)["']${oldVersion.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}["']`, | |
| 447 | `(["']version["']\\s*:\\s*)["']${declaredVersion.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}["']`, | |
| 444 | 448 | 'g', |
| 445 | 449 | ) |
| 446 | 450 | newContent = content.replace(versionRegex, `$1"${newVersion}"`) |
| @@ -68,3 +68,23 @@ test('additional manifests participate in changed-package dependency propagation | ||
| 68 | 68 | rmSync(root, { recursive: true, force: true }) |
| 69 | 69 | } |
| 70 | 70 | }) |
| 71 | ||
| 72 | test('recursive CLI synchronizes native metadata whose starting version differs from the root', () => { | |
| 73 | const root = fixture() | |
| 74 | try { | |
| 75 | mkdirSync(join(root, 'packages/zig'), { recursive: true }) | |
| 76 | writeFileSync(join(root, 'packages/zig/build.zig.zon'), '.{ .version = "0.8.0", }\n') | |
| 77 | writeFileSync(join(root, 'packages/zig/pantry.json'), '{"version":"0.7.0"}\n') | |
| 78 | writeFileSync(join(root, 'packages/zig/package.jsonc'), '{/* metadata */ "version":"0.6.0"}\n') | |
| 79 | writeFileSync(join(root, 'bumpx.config.ts'), `export default { | |
| 80 | additionalFiles: ['packages/zig/build.zig.zon', 'packages/zig/pantry.json', 'packages/zig/package.jsonc'], | |
| 81 | }\n`) | |
| 82 | bump(root) | |
| 83 | expect(version(root, '.')).toBe('1.0.1') | |
| 84 | expect(version(root, 'packages/runtime')).toBe('1.0.1') | |
| 85 | expect(readFileSync(join(root, 'packages/zig/build.zig.zon'), 'utf8')).toContain('.version = "1.0.1"') | |
| 86 | expect(JSON.parse(readFileSync(join(root, 'packages/zig/pantry.json'), 'utf8')).version).toBe('1.0.1') | |
| 87 | expect(readFileSync(join(root, 'packages/zig/package.jsonc'), 'utf8')).toContain('"version":"1.0.1"') | |
| 88 | } | |
| 89 | finally { rmSync(root, { recursive: true, force: true }) } | |
| 90 | }) | |