From 5c5fb1f270615ace2e7da9d66914ab3e70fd05de Mon Sep 17 00:00:00 2001 From: Wikum Weerakutti Date: Tue, 3 Dec 2024 01:05:33 +0530 Subject: [PATCH] SDK-367: Add support to passing a custom spa-build-config.json file --- .../openmrs/maven/plugins/BuildDistro.java | 5 +++- .../java/org/openmrs/maven/plugins/Setup.java | 8 ++++-- .../plugins/utility/DistributionBuilder.java | 26 ++++++++++++++++--- 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/maven-plugin/src/main/java/org/openmrs/maven/plugins/BuildDistro.java b/maven-plugin/src/main/java/org/openmrs/maven/plugins/BuildDistro.java index 6df9fbb0..aed584a0 100644 --- a/maven-plugin/src/main/java/org/openmrs/maven/plugins/BuildDistro.java +++ b/maven-plugin/src/main/java/org/openmrs/maven/plugins/BuildDistro.java @@ -122,6 +122,9 @@ public class BuildDistro extends AbstractTask { @Parameter(property = "appShellVersion") private String appShellVersion; + @Parameter(property = "spaConfigFile") + private String spaConfigFile; + @Override public void executeTask() throws MojoExecutionException, MojoFailureException { File buildDirectory = getBuildDirectory(); @@ -165,7 +168,7 @@ else if (StringUtils.isNotBlank(distro)) { case REFAPP_3X_PROMPT: artifact = wizard.promptForRefApp3xArtifact(versionsHelper); } - distribution = builder.buildFromArtifact(artifact); + distribution = builder.buildFromArtifact(artifact, spaConfigFile); } if (distribution == null) { diff --git a/maven-plugin/src/main/java/org/openmrs/maven/plugins/Setup.java b/maven-plugin/src/main/java/org/openmrs/maven/plugins/Setup.java index 2dbcd22d..90c1eaa8 100644 --- a/maven-plugin/src/main/java/org/openmrs/maven/plugins/Setup.java +++ b/maven-plugin/src/main/java/org/openmrs/maven/plugins/Setup.java @@ -153,6 +153,9 @@ public class Setup extends AbstractServerTask { @Parameter(property = "reuseNodeCache") public Boolean overrideReuseNodeCache; + @Parameter(property = "spaConfigFile") + public String spaConfigFile; + private ServerHelper serverHelper; public Setup() { @@ -239,10 +242,11 @@ private DistroProperties resolveDistroProperties(Server server) throws MojoExecu if (REFAPP_3X_PROMPT.equals(choice)) { Artifact artifact = wizard.promptForRefApp3xArtifact(versionsHelper); - Distribution distribution = builder.buildFromArtifact(artifact); - return distribution.getEffectiveProperties(); + Distribution distribution = builder.buildFromArtifact(artifact, spaConfigFile); + return distribution.getEffectiveProperties(); } + // If here, it is because custom distribution was chosen and the choice reflects the Maven coordinates Distribution distribution = distroHelper.resolveDistributionForStringSpecifier(choice, versionsHelper); return distribution.getEffectiveProperties(); diff --git a/sdk-commons/src/main/java/org/openmrs/maven/plugins/utility/DistributionBuilder.java b/sdk-commons/src/main/java/org/openmrs/maven/plugins/utility/DistributionBuilder.java index 7993408b..2e8d1539 100644 --- a/sdk-commons/src/main/java/org/openmrs/maven/plugins/utility/DistributionBuilder.java +++ b/sdk-commons/src/main/java/org/openmrs/maven/plugins/utility/DistributionBuilder.java @@ -8,6 +8,9 @@ import java.io.File; import java.io.FileInputStream; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.Objects; import java.util.Properties; @@ -47,7 +50,7 @@ public Distribution buildFromFile(File propertiesFile) throws MojoExecutionExcep /** * Build from a distro properties file bundled in a zip or jar in Maven with the given artifact coordinates */ - public Distribution buildFromArtifact(Artifact artifact) throws MojoExecutionException { + public Distribution buildFromArtifact(Artifact artifact, String spaConfigFile) throws MojoExecutionException { mavenEnvironment.getWizard().showMessage("Building distribution from artifact: " + artifact); Distribution distribution = new Distribution(); artifact = DistroHelper.normalizeArtifact(artifact, mavenEnvironment.getVersionsHelper()); @@ -92,11 +95,15 @@ public Distribution buildFromArtifact(Artifact artifact) throws MojoExecutionExc // Special handling for referenceapplication 3.x, which does not define everything needed in the published distro properties file if (REFAPP_3X_GROUP_ID.equals(artifact.getGroupId()) && REFAPP_3X_ARTIFACT_ID.equals(artifact.getArtifactId())) { mavenEnvironment.getWizard().showMessage("This is a 3.x refapp distribution"); - populateRefApp3xProperties(distribution, properties); + populateRefApp3xProperties(distribution, properties, spaConfigFile); } return populateDistributionFromProperties(distribution, properties); } + public Distribution buildFromArtifact(Artifact artifact) throws MojoExecutionException { + return buildFromArtifact(artifact, null); + } + public void populateRefApp2xProperties(Distribution distribution, Properties properties) { // Some refapp versions (eg. 2.13.0) include atlas version 2.2.6, which is not published in Maven. Adjust this. if ("2.2.6".equals(properties.getProperty("omod.atlas"))) { @@ -110,7 +117,7 @@ public void populateRefApp2xProperties(Distribution distribution, Properties pro * This encapsulates these and applies them only for distributions that match the 3.x refapp Maven coordinates * Ideally this would not be needed */ - protected void populateRefApp3xProperties(Distribution distribution, Properties properties) throws MojoExecutionException { + protected void populateRefApp3xProperties(Distribution distribution, Properties properties, String spaConfigFile) throws MojoExecutionException { String distroArtifactId = distribution.getArtifact().getArtifactId(); String distroGroupId = distribution.getArtifact().getGroupId(); @@ -137,7 +144,14 @@ protected void populateRefApp3xProperties(Distribution distribution, Properties // Add spa properties if they are not included explicitly if (includedProperties.getSpaProperties().isEmpty()) { Properties frontendProperties; - if (new Version(distroVersion).higher(new Version("3.0.0-beta.16"))) { + if (spaConfigFile != null) { + try { + frontendProperties = PropertiesUtils.getFrontendPropertiesFromJson(Files.newInputStream(Paths.get(spaConfigFile))); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + else if (new Version(distroVersion).higher(new Version("3.0.0-beta.16"))) { com.github.zafarkhaja.semver.Version v = com.github.zafarkhaja.semver.Version.parse(distroVersion); String frontendArtifactId = v.satisfies(">=3.0.0") ? "distro-emr-frontend" : "referenceapplication-frontend"; Artifact frontendArtifact = new Artifact(frontendArtifactId, distroVersion, distroGroupId, "zip"); @@ -169,6 +183,10 @@ protected void populateRefApp3xProperties(Distribution distribution, Properties } } + protected void populateRefApp3xProperties(Distribution distribution, Properties properties) throws MojoExecutionException { + populateRefApp3xProperties(distribution, properties, null); + } + /** * Consistently populate the common properties of the distribution from the given properties * This includes handling parent distributions and building a set of effective properties based on