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");