diff --git a/CHANGELOG.md b/CHANGELOG.md
index 57c34c3..fa157a9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased / 0.2.0
+- Read the CRM QBit metadata version from the Maven-filtered artifact version so release metadata matches the build.
+
- Adopt QQQ 4.1.0-RC.7 native help bundles, replacing the RC.6 stand-in loader with host-neutral CRM help, live references and the core coverage gate.
- Upgrade to Java 21, QQQ 4.1.0-RC.6 and qbit-build-parent 2.1.2.
diff --git a/pom.xml b/pom.xml
index 21e9ebf..0300453 100644
--- a/pom.xml
+++ b/pom.xml
@@ -142,6 +142,7 @@
true
help/*.yaml
+ qbit-crm.properties
@@ -149,10 +150,20 @@
false
help/*.yaml
+ qbit-crm.properties
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ ${project.version}
+
+
+
org.apache.maven.plugins
maven-checkstyle-plugin
diff --git a/src/main/java/com/kingsrook/qbits/crm/CrmQBitProducer.java b/src/main/java/com/kingsrook/qbits/crm/CrmQBitProducer.java
index cae9b61..0d07c9c 100644
--- a/src/main/java/com/kingsrook/qbits/crm/CrmQBitProducer.java
+++ b/src/main/java/com/kingsrook/qbits/crm/CrmQBitProducer.java
@@ -26,9 +26,12 @@
package com.kingsrook.qbits.crm;
+import java.io.IOException;
+import java.io.InputStream;
import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.Properties;
import com.kingsrook.qbits.crm.activities.customizers.ActivityLastDateCustomizer;
import com.kingsrook.qbits.crm.activities.model.Activity;
import com.kingsrook.qbits.crm.core.customizers.CurrencyRateDateCustomizer;
@@ -86,12 +89,40 @@ public class CrmQBitProducer implements QBitMetaDataProducer
{
public static final String GROUP_ID = "com.kingsrook.qbits";
public static final String ARTIFACT_ID = "crm";
- public static final String VERSION = "0.2.0-SNAPSHOT";
+ public static final String VERSION = loadVersion();
private CrmQBitConfig qBitConfig;
+ /*******************************************************************************
+ ** Read the artifact version from the Maven-filtered properties resource.
+ *******************************************************************************/
+ private static String loadVersion()
+ {
+ try(InputStream inputStream = CrmQBitProducer.class.getClassLoader().getResourceAsStream("qbit-crm.properties"))
+ {
+ if(inputStream == null)
+ {
+ throw new IllegalStateException("Missing qbit-crm.properties; build with Maven to provide 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-crm.properties; build with Maven to provide the artifact version");
+ }
+ return (version);
+ }
+ catch(IOException e)
+ {
+ throw new IllegalStateException("Could not read artifact version from qbit-crm.properties", e);
+ }
+ }
+
+
+
/*******************************************************************************
** Produce the QBitMetaData for the CRM QBit.
*******************************************************************************/
diff --git a/src/main/resources/qbit-crm.properties b/src/main/resources/qbit-crm.properties
new file mode 100644
index 0000000..defbd48
--- /dev/null
+++ b/src/main/resources/qbit-crm.properties
@@ -0,0 +1 @@
+version=${project.version}
diff --git a/src/test/java/com/kingsrook/qbits/crm/CrmPublicationHelpTest.java b/src/test/java/com/kingsrook/qbits/crm/CrmPublicationHelpTest.java
index 9695626..1e68bfb 100644
--- a/src/test/java/com/kingsrook/qbits/crm/CrmPublicationHelpTest.java
+++ b/src/test/java/com/kingsrook/qbits/crm/CrmPublicationHelpTest.java
@@ -110,7 +110,7 @@ class CrmPublicationHelpTest extends BaseTest
assertThat(HelpBundles.of(instance).getBundles()).singleElement().satisfies(bundle ->
{
assertThat(bundle.getId()).isEqualTo("qbit-crm");
- assertThat(bundle.getVersion()).isEqualTo(CrmQBitProducer.VERSION);
+ assertThat(bundle.getVersion()).isEqualTo(System.getProperty("qbit.artifactVersion")).isEqualTo(CrmQBitProducer.VERSION);
assertThat(bundle.getLayer().name()).isEqualTo("QBIT");
});
HelpBundles.syncOnStartup(instance);
diff --git a/src/test/java/com/kingsrook/qbits/crm/CrmQBitProducerTest.java b/src/test/java/com/kingsrook/qbits/crm/CrmQBitProducerTest.java
index 114a105..24a237b 100644
--- a/src/test/java/com/kingsrook/qbits/crm/CrmQBitProducerTest.java
+++ b/src/test/java/com/kingsrook/qbits/crm/CrmQBitProducerTest.java
@@ -62,7 +62,7 @@ class CrmQBitProducerTest extends BaseTest
assertThat(metaData).isNotNull();
assertThat(metaData.getGroupId()).isEqualTo(CrmQBitProducer.GROUP_ID);
assertThat(metaData.getArtifactId()).isEqualTo(CrmQBitProducer.ARTIFACT_ID);
- assertThat(metaData.getVersion()).isEqualTo(CrmQBitProducer.VERSION);
+ assertThat(metaData.getVersion()).isEqualTo(System.getProperty("qbit.artifactVersion")).isEqualTo(CrmQBitProducer.VERSION);
}
@@ -114,7 +114,7 @@ class CrmQBitProducerTest extends BaseTest
{
assertThat(CrmQBitProducer.GROUP_ID).isEqualTo("com.kingsrook.qbits");
assertThat(CrmQBitProducer.ARTIFACT_ID).isEqualTo("crm");
- assertThat(CrmQBitProducer.VERSION).isEqualTo("0.2.0-SNAPSHOT");
+ assertThat(CrmQBitProducer.VERSION).isEqualTo(System.getProperty("qbit.artifactVersion"));
}
/*******************************************************************************