diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index c95f065448954109c59fcc23d09a9fd72bd3a5c2..b3ff6cc95ef8409aaea94cf659d8c2ea96c87e64 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -4,6 +4,12 @@ This is a summary of all notable changes to Antora Collector, notably the @antora/collector-extension npm package, by release. For a detailed view of what's changed, refer to the {url-repo}/commits[commit history] of this project. +== Unreleased + +=== Changed + +* when importing antora.yml, only remove the prerelease property on the bucket if the value of the prerelease key is null (#53) + == 1.0.2 (2025-08-11) === Added diff --git a/docs/collector-extension/modules/ROOT/pages/configure-scan.adoc b/docs/collector-extension/modules/ROOT/pages/configure-scan.adoc index 377e802a7ebfaf13c9f28731b95b7b05213bd101..aa2100667b4f3dcd6f17cfa88006aaef01f803db 100644 --- a/docs/collector-extension/modules/ROOT/pages/configure-scan.adoc +++ b/docs/collector-extension/modules/ROOT/pages/configure-scan.adoc @@ -25,8 +25,9 @@ Then, the parsed data is overlaid onto the current component version bucket. No attempt is made to deep merge the data. This means the values of all top-level keys in the imported file replace any existing values. -This feature allows you to update the name, version, and prerelease properties on the bucket, effectively altering its identity. -Updating the version can only be done using a concrete version value. +This feature allows you to update the name and version properties on the bucket, effectively altering its identity. +You can also update or remove the prerelease property to change its identity is classified. +*Updating the version can only be done using a concrete version value.* The value cannot be `true` or a refname projection as this value will not be processed. For example: @@ -50,7 +51,8 @@ For example: title: New Title ---- -If the bucket has the `prerelease` property set, but the imported [.path]_antora.yml_ file is missing this key, the `prerelease` property is removed from the bucket. +If the bucket has the `prerelease` property set, but the imported [.path]_antora.yml_ file specifies a version and is missing the `prerelease` key, the `prerelease` property is removed from the bucket. +The `prerelease` key is also removed if the value in the imported file is null. CAUTION: Be particularly cautious when making a copy of antora.yml to apply your modifications. If it uses the refname alias `true` (e.g., `version: true`) or a refname projection, this value will be transferred directly to the bucket and result in the version being incorrect. diff --git a/packages/collector-extension/lib/index.js b/packages/collector-extension/lib/index.js index 1485bc04e5b41e28bdb8d59cfa7fb58edf0f1b19..79d69adb8a9b14c9ab53557ff95b5a169a666897 100644 --- a/packages/collector-extension/lib/index.js +++ b/packages/collector-extension/lib/index.js @@ -184,7 +184,13 @@ module.exports.register = function ({ config: { createWorktrees = 'auto', keepWo } if (componentVersionDesc) { Object.assign(targetBucket, componentVersionDesc) - if (replaceTargetBucket && !('prerelease' in componentVersionDesc)) delete targetBucket.prerelease + if ( + replaceTargetBucket && + 'prerelease' in componentVersionDesc && + componentVersionDesc.prerelease == null + ) { + delete targetBucket.prerelease + } } const targetFiles = targetBucket.files for (const file of scannedFiles) { diff --git a/packages/collector-extension/test/extension-test.js b/packages/collector-extension/test/extension-test.js index 0ad97d5489aeeb6169a63abde7b2597c37a0e377..aba44bc834c01fcb2ded090141d39f478d75f04a 100644 --- a/packages/collector-extension/test/extension-test.js +++ b/packages/collector-extension/test/extension-test.js @@ -612,7 +612,7 @@ describe(localPackageName, () => { }) }) - it('should remove prerelease key if not specified in scanned antora.yml file', async () => { + it('should remove prerelease key if value in scanned antora.yml file is null', async () => { const collectorConfig = { run: { command: '$NODE .gen-component-desc.js' }, scan: { dir: 'build' }, @@ -631,7 +631,32 @@ describe(localPackageName, () => { assert.equal(contentAggregate.length, 1) const bucket = contentAggregate[0] assert.equal(bucket.version, '1.0.0') - assert.equal(bucket.prerelease, undefined) + assertx.doesNotHaveProperty(bucket, 'prerelease') + assertx.empty(bucket.files) + }, + }) + }) + + it('should not remove prerelease key if not specified in scanned antora.yml file', async () => { + const collectorConfig = { + run: { command: '$NODE .gen-component-desc.js name-only' }, + scan: { dir: 'build' }, + } + await runScenario({ + repoName: 'at-root-prerelease', + collectorConfig, + pre: (contentAggregate) => { + assert.equal(contentAggregate.length, 1) + const bucket = contentAggregate[0] + assert.equal(bucket.version, '') + assert.equal(bucket.prerelease, true) + assertx.empty(bucket.files) + }, + post: (contentAggregate) => { + assert.equal(contentAggregate.length, 1) + const bucket = contentAggregate[0] + assert.equal(bucket.version, '') + assert.equal(bucket.prerelease, true) assertx.empty(bucket.files) }, }) diff --git a/packages/collector-extension/test/fixtures/extension-test/at-root-prerelease/.gen-component-desc.js b/packages/collector-extension/test/fixtures/extension-test/at-root-prerelease/.gen-component-desc.js index 72b439aa2b46535f42e762800cd71f86da5b1deb..abc3af0f9f5221a6196afa726890e7c8f4f66e90 100644 --- a/packages/collector-extension/test/fixtures/extension-test/at-root-prerelease/.gen-component-desc.js +++ b/packages/collector-extension/test/fixtures/extension-test/at-root-prerelease/.gen-component-desc.js @@ -4,6 +4,6 @@ const fsp = require('node:fs/promises') ;(async () => { await fsp.mkdir('build', { recursive: true }) - const antoraYml = 'name: test\nversion: 1.0.0\n' + const antoraYml = process.argv[2] === 'name-only' ? 'name: test\n' : 'name: test\nversion: 1.0.0\nprerelease: ~' await fsp.writeFile('build/antora.yml', antoraYml, 'utf8') })() diff --git a/packages/test-harness/lib/index.js b/packages/test-harness/lib/index.js index 050de3ef894975a6c4a9942433b1730c42d29e49..80c858af388a7fb5163e2034e00c3d9acd671abb 100644 --- a/packages/test-harness/lib/index.js +++ b/packages/test-harness/lib/index.js @@ -20,6 +20,8 @@ const assertx = { assertx.file(actual) assert.equal(fs.readFileSync(actual, 'utf8'), expected, msg) }, + doesNotHaveProperty: (actual, expected) => + assert(!(expected in actual), `Expected ${actual} to not have property '${expected}'`), partialDeepEqual: (actual, expected, msg) => assert.deepEqual(sliceObject(actual, ...Object.keys(expected)), expected, msg), directory: (actual) => {