From 89a95737a50e49043b07733116b6d375e346e50f Mon Sep 17 00:00:00 2001 From: James Maes Date: Thu, 15 Oct 2026 01:29:54 -0500 Subject: [PATCH] fix: the qbit metadata version comes from the build, not a hardcoded constant The producer read a literal version, so released artifacts reported a stale or -SNAPSHOT version. qbit-edi.properties (version=${project.version}) is Maven-filtered and the producer loads it; tests assert producer == bundle == artifact version. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 2 ++ pom.xml | 2 ++ .../kingsrook/qbits/edi/EdiQBitProducer.java | 33 ++++++++++++++++++- src/main/resources/qbit-edi.properties | 1 + .../qbits/edi/EdiHelpBundleTest.java | 2 +- .../qbits/edi/EdiQBitProducerTest.java | 2 ++ 6 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 src/main/resources/qbit-edi.properties diff --git a/CHANGELOG.md b/CHANGELOG.md index ad582a5..57c84cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ Following [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and [Semantic ### Changed +- Derive qbit metadata version from the Maven artifact version, keeping release metadata and help bundle versions in sync. + - Require QQQ 4.1.0-RC.7 for core help-bundle registration and coverage validation. - X12 routing and sending honor identity `isActive`, matching EDIFACT. diff --git a/pom.xml b/pom.xml index 1ba5774..1323f06 100644 --- a/pom.xml +++ b/pom.xml @@ -133,6 +133,7 @@ true help/*.yaml + qbit-edi.properties @@ -140,6 +141,7 @@ false help/*.yaml + qbit-edi.properties diff --git a/src/main/java/com/kingsrook/qbits/edi/EdiQBitProducer.java b/src/main/java/com/kingsrook/qbits/edi/EdiQBitProducer.java index 1cb0f62..8ebe205 100644 --- a/src/main/java/com/kingsrook/qbits/edi/EdiQBitProducer.java +++ b/src/main/java/com/kingsrook/qbits/edi/EdiQBitProducer.java @@ -21,6 +21,9 @@ package com.kingsrook.qbits.edi; +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.model.metadata.MetaDataProducerMultiOutput; import com.kingsrook.qqq.backend.core.model.metadata.QInstance; @@ -37,13 +40,41 @@ public class EdiQBitProducer implements QBitMetaDataProducer { public static final String GROUP_ID = "com.kingsrook.qbits"; public static final String ARTIFACT_ID = "qbit-edi"; - public static final String VERSION = "0.1.0"; + public static final String VERSION = loadVersion(); private EdiQBitConfig qBitConfig; private String namespace; + /******************************************************************************* + ** Read the artifact version from the Maven-filtered resource. + *******************************************************************************/ + private static String loadVersion() + { + try(InputStream inputStream = EdiQBitProducer.class.getClassLoader().getResourceAsStream("qbit-edi.properties")) + { + if(inputStream == null) + { + throw new IllegalStateException("Missing qbit-edi.properties; build with Maven to supply the artifact version"); + } + Properties properties = new Properties(); + properties.load(inputStream); + String version = properties.getProperty("version"); + if(version == null || version.isBlank() || version.contains("${")) + { + throw new IllegalStateException("Missing or unfiltered version in qbit-edi.properties; build with Maven"); + } + return (version); + } + catch(IOException e) + { + throw new IllegalStateException("Could not read the artifact version from qbit-edi.properties", e); + } + } + + + /******************************************************************************* ** Fluent configuration setter. *******************************************************************************/ diff --git a/src/main/resources/qbit-edi.properties b/src/main/resources/qbit-edi.properties new file mode 100644 index 0000000..defbd48 --- /dev/null +++ b/src/main/resources/qbit-edi.properties @@ -0,0 +1 @@ +version=${project.version} diff --git a/src/test/java/com/kingsrook/qbits/edi/EdiHelpBundleTest.java b/src/test/java/com/kingsrook/qbits/edi/EdiHelpBundleTest.java index 540e1d3..67c09de 100644 --- a/src/test/java/com/kingsrook/qbits/edi/EdiHelpBundleTest.java +++ b/src/test/java/com/kingsrook/qbits/edi/EdiHelpBundleTest.java @@ -49,7 +49,7 @@ class EdiHelpBundleTest assertThat(HelpBundles.of(instance).getBundles()).singleElement().satisfies(bundle -> { assertThat(bundle.getId()).isEqualTo("qbit-edi"); - assertThat(bundle.getVersion()).as("the help bundle carries the artifact version").isEqualTo(System.getProperty("qbit.artifactVersion")); + assertThat(bundle.getVersion()).as("the help bundle carries the artifact version").isEqualTo(System.getProperty("qbit.artifactVersion")).isEqualTo(EdiQBitProducer.VERSION); }); HelpBundles.syncOnStartup(instance); HelpBundleAssertions.forInstance(instance) diff --git a/src/test/java/com/kingsrook/qbits/edi/EdiQBitProducerTest.java b/src/test/java/com/kingsrook/qbits/edi/EdiQBitProducerTest.java index 042c2ef..357020f 100644 --- a/src/test/java/com/kingsrook/qbits/edi/EdiQBitProducerTest.java +++ b/src/test/java/com/kingsrook/qbits/edi/EdiQBitProducerTest.java @@ -65,6 +65,8 @@ class EdiQBitProducerTest assertThat(producer.getQBitConfig()).isSameAs(config); assertThat(producer.getNamespace()).isEqualTo("ns"); assertThat(producer.getQBitMetaData().getArtifactId()).isEqualTo("qbit-edi"); + assertThat(System.getProperty("qbit.artifactVersion")).isNotBlank(); + assertThat(producer.getQBitMetaData().getVersion()).isEqualTo(System.getProperty("qbit.artifactVersion")).isEqualTo(EdiQBitProducer.VERSION); assertThat(producer.getPackageNameForFindingMetaDataProducers()).isEqualTo("com.kingsrook.qbits.edi.metadata"); assertThat(config.getAppName()).isEqualTo("edi"); assertThat(config.getAppLabel()).isEqualTo("EDI"); -- 2.54.0