fix: qbit metadata version comes from the build #16

Merged
KofTwentyTwo merged 1 commits from fix/producer-version-from-build into develop 2026-10-15 06:42:57 +00:00
5 changed files with 53 additions and 2 deletions

No files matched your search

+4
View File
@@ -4,6 +4,10 @@ Following [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and [Semantic
## [Unreleased]
### Fixed
- QBit metadata now reports the Maven artifact version, including release versions, from a filtered build resource.
### Added
- Complete host-neutral in-app help bundle with live metadata references and a core help coverage gate.
+11
View File
@@ -135,6 +135,7 @@
<filtering>true</filtering>
<includes>
<include>help/*.yaml</include>
<include>qbit-data-analysis.properties</include>
</includes>
</resource>
<resource>
@@ -142,10 +143,20 @@
<filtering>false</filtering>
<excludes>
<exclude>help/*.yaml</exclude>
<exclude>qbit-data-analysis.properties</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<systemPropertyVariables combine.children="append">
<qbit.artifactVersion>${project.version}</qbit.artifactVersion>
</systemPropertyVariables>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
@@ -21,6 +21,9 @@
package com.kingsrook.qbits.dataanalysis;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import com.kingsrook.qbits.dataanalysis.api.DataAnalysisApi;
import com.kingsrook.qqq.backend.core.exceptions.QException;
import com.kingsrook.qqq.backend.core.model.metadata.MetaDataProducerMultiOutput;
@@ -40,13 +43,41 @@ public class DataAnalysisQBitProducer implements QBitMetaDataProducer<DataAnalys
{
public static final String GROUP_ID = "com.kingsrook.qbits";
public static final String ARTIFACT_ID = "qbit-data-analysis";
public static final String VERSION = "0.1.0";
public static final String VERSION = loadVersion();
private DataAnalysisQBitConfig qBitConfig;
private String namespace;
/*******************************************************************************
** Read the artifact version from the Maven-filtered properties resource.
*******************************************************************************/
private static String loadVersion()
{
try(InputStream inputStream = DataAnalysisQBitProducer.class.getClassLoader().getResourceAsStream("qbit-data-analysis.properties"))
{
if(inputStream == null)
{
throw (new IllegalStateException("Missing qbit-data-analysis.properties; build with Maven to generate 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-data-analysis.properties; build with Maven resource filtering"));
}
return (version);
}
catch(IOException e)
{
throw (new IllegalStateException("Could not read artifact version from qbit-data-analysis.properties", e));
}
}
/*******************************************************************************
** Fluent configuration setter.
*******************************************************************************/
@@ -0,0 +1 @@
version=${project.version}
@@ -116,11 +116,15 @@ class DataAnalysisMetadataTest
assertThat(producer.isEnabled()).isTrue();
assertThat(producer.getNamespace()).isEqualTo("analysis");
assertThat(producer.getQBitConfig()).isSameAs(config);
assertThat(producer.getQBitMetaData().getVersion()).isEqualTo("0.1.0");
String artifactVersion = System.getProperty("qbit.artifactVersion");
assertThat(artifactVersion).isNotBlank();
assertThat(producer.getQBitMetaData().getVersion()).isEqualTo(artifactVersion).isEqualTo(DataAnalysisQBitProducer.VERSION);
assertThat(producer.getQBitMetaData().getGroupId()).isEqualTo("com.kingsrook.qbits");
assertThat(producer.getQBitMetaData().getArtifactId()).isEqualTo("qbit-data-analysis");
assertThat(producer.getPackageNameForFindingMetaDataProducers()).endsWith(".metadata");
producer.produce(instance);
assertThat(HelpBundles.of(instance).getBundles().getFirst().getVersion())
.isEqualTo(artifactVersion).isEqualTo(producer.getQBitMetaData().getVersion());
assertThat(HelpBundles.of(instance).getBundles().getFirst().getEntries()).anyMatch(entry -> entry.getKey().equals("app:customAnalysis;slot:help"))
.noneMatch(entry -> entry.getKey().equals("app:dataAnalysis;slot:help"));
assertThat(instance.getApp("customAnalysis").getParentAppName()).isEqualTo("admin");