57cd81d551
- build-release.test.mjs 用 fileURLToPath 替代 URL.pathname,修复 Windows 下 /C:/... 路径导致的 3 个用例失败(既有的跨平台问题) - bump-version.mjs 的 --no-commit 输出改为“已写入版本文件,未创建提交”,避免被误认为不改文件的干跑
81 lines
2.6 KiB
JavaScript
81 lines
2.6 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import { readFileSync } from 'node:fs';
|
|
import { test } from 'node:test';
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
import {
|
|
bumpVersion,
|
|
compareVersions,
|
|
createUpdateManifest,
|
|
selectReleaseArtifact,
|
|
} from './build-release.mjs';
|
|
|
|
test('selects an explicit release artifact when configured', () => {
|
|
const artifactPath = fileURLToPath(
|
|
new URL('../package.json', import.meta.url),
|
|
);
|
|
const previous = process.env.AGC_UPDATE_ARTIFACT;
|
|
process.env.AGC_UPDATE_ARTIFACT = artifactPath;
|
|
try {
|
|
assert.equal(selectReleaseArtifact([]), artifactPath);
|
|
} finally {
|
|
if (previous === undefined) delete process.env.AGC_UPDATE_ARTIFACT;
|
|
else process.env.AGC_UPDATE_ARTIFACT = previous;
|
|
}
|
|
});
|
|
|
|
test('does not select unsupported files', () => {
|
|
assert.equal(
|
|
selectReleaseArtifact(['/tmp/latest.json', '/tmp/readme.txt']),
|
|
null,
|
|
);
|
|
});
|
|
|
|
test('manifest contains version, download URL and integrity fields', () => {
|
|
const manifest = createUpdateManifest(
|
|
fileURLToPath(new URL('../package.json', import.meta.url)),
|
|
);
|
|
assert.match(manifest.version, /^\d+\.\d+\.\d+$/u);
|
|
assert.match(
|
|
manifest.downloadUrl,
|
|
new RegExp(`/agc/${manifest.version}/package\\.json$`, 'u'),
|
|
);
|
|
assert.equal(manifest.sha256.length, 64);
|
|
assert.equal(typeof manifest.size, 'number');
|
|
});
|
|
|
|
test('manifest preserves multiline release notes', () => {
|
|
const previous = process.env.AGC_UPDATE_RELEASE_NOTES;
|
|
process.env.AGC_UPDATE_RELEASE_NOTES = '第一行\n第二行\r\n第三行';
|
|
try {
|
|
const manifest = createUpdateManifest(
|
|
fileURLToPath(new URL('../package.json', import.meta.url)),
|
|
);
|
|
assert.equal(manifest.releaseNotes, '第一行\n第二行\r\n第三行');
|
|
} finally {
|
|
if (previous === undefined) delete process.env.AGC_UPDATE_RELEASE_NOTES;
|
|
else process.env.AGC_UPDATE_RELEASE_NOTES = previous;
|
|
}
|
|
});
|
|
|
|
test('bump version follows the requested target', () => {
|
|
assert.equal(compareVersions('0.1.15', '0.1.12'), 1);
|
|
assert.equal(compareVersions('0.1.12', '0.1.12'), 0);
|
|
assert.equal(bumpVersion('0.1.19', 'patch'), '0.1.20');
|
|
assert.equal(bumpVersion('0.1.19'), '0.1.20');
|
|
assert.equal(bumpVersion('0.1.19', 'minor'), '0.2.0');
|
|
assert.equal(bumpVersion('0.1.19', 'major'), '1.0.0');
|
|
assert.equal(bumpVersion('0.1.12', '0.1.25'), '0.1.25');
|
|
});
|
|
|
|
test('release upload forces overwrite for versioned artifact and latest pointer', () => {
|
|
const source = readFileSync(
|
|
new URL('./release-upload.mjs', import.meta.url),
|
|
'utf8',
|
|
);
|
|
assert.equal(
|
|
(source.match(/runOssutil\(\['cp', '--force'/gu) ?? []).length,
|
|
2,
|
|
);
|
|
});
|