From 36a119edc04c35a993597f4fda4d6d3521142717 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Sat, 15 Nov 2025 13:57:11 -0700 Subject: [PATCH] resolves #53 when importing antora.yml, only remove the prerelease property on the bucket if value of prerelease key is null --- CHANGELOG.adoc | 6 ++++ .../modules/ROOT/pages/configure-scan.adoc | 8 +++-- packages/collector-extension/lib/index.js | 8 ++++- .../test/extension-test.js | 29 +++++++++++++++++-- .../at-root-prerelease/.gen-component-desc.js | 2 +- packages/test-harness/lib/index.js | 2 ++ 6 files changed, 48 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index c95f065..b3ff6cc 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 377e802..aa21006 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 1485bc0..79d69ad 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 0ad97d5..aba44bc 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 72b439a..abc3af0 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 050de3e..80c858a 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) => { -- GitLab