Skip to content

Commit 95d8a76

Browse files
committed
conga-aem-maven-plugin: Add new parameter autoDependenciesMode which replaces/supercedes autoDependencies and autoDependenciesSeparateMutable flags.
1 parent 9b75542 commit 95d8a76

5 files changed

Lines changed: 164 additions & 28 deletions

File tree

changes.xml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,10 @@
2323
xsi:schemaLocation="http://maven.apache.org/changes/1.0.0 https://maven.apache.org/plugins/maven-changes-plugin/xsd/changes-1.0.0.xsd">
2424
<body>
2525

26-
<release version="1.11.6" date="not released">
26+
<release version="1.12.0" date="not released">
27+
<action type="add" dev="sseifert">
28+
conga-aem-maven-plugin: Add new parameter autoDependenciesMode which replaces/supercedes autoDependencies and autoDependenciesSeparateMutable flags.
29+
</action>
2730
<action type="update" dev="sseifert">
2831
conga-aem-maven-plugin: Generate unique package names for all packages depending on run modes.
2932
</action>
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*
2+
* #%L
3+
* wcm.io
4+
* %%
5+
* Copyright (C) 2020 wcm.io
6+
* %%
7+
* Licensed under the Apache License, Version 2.0 (the "License");
8+
* you may not use this file except in compliance with the License.
9+
* You may obtain a copy of the License at
10+
*
11+
* http://www.apache.org/licenses/LICENSE-2.0
12+
*
13+
* Unless required by applicable law or agreed to in writing, software
14+
* distributed under the License is distributed on an "AS IS" BASIS,
15+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16+
* See the License for the specific language governing permissions and
17+
* limitations under the License.
18+
* #L%
19+
*/
20+
package io.wcm.devops.conga.plugins.aem.maven;
21+
22+
/**
23+
* Automatically generate dependencies between content packages based on file order in CONGA configuration.
24+
*/
25+
public enum AutoDependenciesMode {
26+
27+
/**
28+
* Generate a single dependency chain spanning both immutable and mutable content packages.
29+
*/
30+
IMMUTABLE_MUTABLE_COMBINED,
31+
32+
/**
33+
* Generate separate dependency chains for immutable and mutable content packages.
34+
*/
35+
IMMUTABLE_MUTABLE_SEPARATE,
36+
37+
/**
38+
* Generate a dependency chain only for immutable content packages.
39+
*/
40+
IMMUTABLE_ONLY,
41+
42+
/**
43+
* Do not generate dependencies between content packages.
44+
*/
45+
OFF
46+
47+
}

tooling/conga-aem-maven-plugin/src/main/java/io/wcm/devops/conga/plugins/aem/maven/CloudManagerAllPackageMojo.java

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,34 @@ public final class CloudManagerAllPackageMojo extends AbstractCloudManagerMojo {
5757

5858
/**
5959
* Automatically generate dependencies between content packages based on file order in CONGA configuration.
60+
* <p>
61+
* Possible values:
62+
* </p>
63+
* <ul>
64+
* <li><code>IMMUTABLE_MUTABLE_COMBINED</code>: Generate a single dependency chain spanning both immutable and mutable
65+
* content packages.</li>
66+
* <li><code>IMMUTABLE_MUTABLE_SEPARATE</code>: Generate separate dependency chains for immutable and mutable content
67+
* packages.</li>
68+
* <li><code>IMMUTABLE_ONLY</code>: Generate a dependency chain only for immutable content packages.</li>
69+
* <li><code>OFF</code>: Do not generate dependencies between content packages.</li>
70+
* </ul>
6071
*/
72+
@Parameter(property = "conga.cloudManager.allPackage.autoDependenciesMode")
73+
private AutoDependenciesMode autoDependenciesMode;
74+
75+
/**
76+
* Automatically generate dependencies between content packages based on file order in CONGA configuration.
77+
* @deprecated Please use autoDependenciesMode instead.
78+
*/
79+
@Deprecated
6180
@Parameter(property = "conga.cloudManager.allPackage.autoDependencies", defaultValue = "true")
6281
private boolean autoDependencies;
6382

6483
/**
6584
* Use separate dependency chains for mutable and immutable packages.
85+
* @deprecated Please use autoDependenciesMode instead.
6686
*/
87+
@Deprecated
6788
@Parameter(property = "conga.cloudManager.allPackage.autoDependenciesSeparateMutable", defaultValue = "false")
6889
private boolean autoDependenciesSeparateMutable;
6990

@@ -87,6 +108,20 @@ public void execute() throws MojoExecutionException, MojoFailureException {
87108
return;
88109
}
89110

111+
if (this.autoDependenciesMode == null) {
112+
if (this.autoDependencies) {
113+
if (this.autoDependenciesSeparateMutable) {
114+
this.autoDependenciesMode = AutoDependenciesMode.IMMUTABLE_MUTABLE_SEPARATE;
115+
}
116+
else {
117+
this.autoDependenciesMode = AutoDependenciesMode.IMMUTABLE_MUTABLE_COMBINED;
118+
}
119+
}
120+
else {
121+
this.autoDependenciesMode = AutoDependenciesMode.OFF;
122+
}
123+
}
124+
90125
List<File> environmentDirs = getEnvironmentDir();
91126
for (File environmentDir : environmentDirs) {
92127
List<File> nodeDirs = getNodeDirs(environmentDir);
@@ -109,8 +144,7 @@ private void buildAllPackage(File environmentDir, File nodeDir, Set<String> clou
109144
File targetFile = new File(getTargetDir(), packageName + ".zip");
110145

111146
AllPackageBuilder builder = new AllPackageBuilder(targetFile, groupName, packageName)
112-
.autoDependencies(this.autoDependencies)
113-
.autoDependenciesSeparateMutable(this.autoDependenciesSeparateMutable)
147+
.autoDependenciesMode(this.autoDependenciesMode)
114148
.logger(getLog());
115149

116150
try {

tooling/conga-aem-maven-plugin/src/main/java/io/wcm/devops/conga/plugins/aem/maven/allpackage/AllPackageBuilder.java

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252

5353
import com.google.common.collect.ImmutableSet;
5454

55+
import io.wcm.devops.conga.plugins.aem.maven.AutoDependenciesMode;
5556
import io.wcm.devops.conga.plugins.aem.maven.model.ContentPackageFile;
5657
import io.wcm.tooling.commons.contentpackagebuilder.ContentPackage;
5758
import io.wcm.tooling.commons.contentpackagebuilder.ContentPackageBuilder;
@@ -65,8 +66,7 @@ public final class AllPackageBuilder {
6566
private final File targetFile;
6667
private final String groupName;
6768
private final String packageName;
68-
private boolean autoDependencies;
69-
private boolean autoDependenciesSeparateMutable;
69+
private AutoDependenciesMode autoDependenciesMode = AutoDependenciesMode.OFF;
7070
private Log log;
7171

7272
private static final String RUNMODE_DEFAULT = "$default$";
@@ -88,17 +88,8 @@ public AllPackageBuilder(File targetFile, String groupName, String packageName)
8888
* configuration.
8989
* @return this
9090
*/
91-
public AllPackageBuilder autoDependencies(boolean value) {
92-
this.autoDependencies = value;
93-
return this;
94-
}
95-
96-
/**
97-
* @param value Use separate dependency chains for mutable and immutable packages.
98-
* @return this
99-
*/
100-
public AllPackageBuilder autoDependenciesSeparateMutable(boolean value) {
101-
this.autoDependenciesSeparateMutable = value;
91+
public AllPackageBuilder autoDependenciesMode(AutoDependenciesMode value) {
92+
this.autoDependenciesMode = value;
10293
return this;
10394
}
10495

@@ -186,15 +177,20 @@ public boolean build(List<ContentPackageFile> contentPackages,
186177
for (ContentPackageFile pkg : validContentPackages) {
187178
String path = buildPackagePath(pkg, rootPath, environmentRunMode);
188179

189-
// get last previous package
190-
// if autoDependenciesSeparateMutable active only that of the same mutability type
191-
ContentPackageFile previousPkg = previousPackages.stream()
192-
.filter(item -> !autoDependenciesSeparateMutable || mutableMatches(item, pkg))
193-
.reduce((first, second) -> second)
194-
.orElse(null);
180+
ContentPackageFile previousPkg = null;
181+
182+
if (autoDependenciesMode != AutoDependenciesMode.OFF
183+
&& (autoDependenciesMode != AutoDependenciesMode.IMMUTABLE_ONLY || !isMutable(pkg))) {
184+
// get last previous package
185+
// if not IMMUTABLE_MUTABLE_COMBINED active only that of the same mutability type
186+
previousPkg = previousPackages.stream()
187+
.filter(item -> (autoDependenciesMode == AutoDependenciesMode.IMMUTABLE_MUTABLE_COMBINED) || mutableMatches(item, pkg))
188+
.reduce((first, second) -> second)
189+
.orElse(null);
190+
}
195191

196192
// set package name, wire previous package in package dependency
197-
addFileWithDependency(contentPackage, path, pkg, autoDependencies ? previousPkg : null, environmentRunMode);
193+
addFileWithDependency(contentPackage, path, pkg, previousPkg, environmentRunMode);
198194

199195
previousPackages.add(pkg);
200196
}

tooling/conga-aem-maven-plugin/src/test/java/io/wcm/devops/conga/plugins/aem/maven/allpackage/AllPackageBuilderTest.java

Lines changed: 61 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import com.google.common.collect.ImmutableMap;
4545
import com.google.common.collect.ImmutableSet;
4646

47+
import io.wcm.devops.conga.plugins.aem.maven.AutoDependenciesMode;
4748
import io.wcm.devops.conga.plugins.aem.maven.model.ContentPackageFile;
4849
import io.wcm.devops.conga.plugins.aem.maven.model.ModelParser;
4950

@@ -128,12 +129,12 @@ void testBuild(Set<String> cloudManagerTarget, List<String> runmodeSuffixes) thr
128129

129130
@ParameterizedTest
130131
@MethodSource("cloudManagerTargetVariants")
131-
void testBuildWithAutoDependencies(Set<String> cloudManagerTarget, List<String> runmodeSuffixes) throws Exception {
132+
void testBuil_IMMUTABLE_MUTABLE_COMBINED(Set<String> cloudManagerTarget, List<String> runmodeSuffixes) throws Exception {
132133
List<ContentPackageFile> contentPackages = new ModelParser().getContentPackagesForNode(nodeDir);
133134
File targetFile = new File(targetDir, "all.zip");
134135

135136
AllPackageBuilder builder = new AllPackageBuilder(targetFile, "test-group", "test-pkg")
136-
.autoDependencies(true);
137+
.autoDependenciesMode(AutoDependenciesMode.IMMUTABLE_MUTABLE_COMBINED);
137138
assertTrue(builder.build(contentPackages, cloudManagerTarget, null));
138139

139140
ZipUtil.unpack(targetFile, targetUnpackDir);
@@ -186,13 +187,12 @@ void testBuildWithAutoDependencies(Set<String> cloudManagerTarget, List<String>
186187

187188
@ParameterizedTest
188189
@MethodSource("cloudManagerTargetVariants")
189-
void testBuildWithAutoDependenciesSeparateMutable(Set<String> cloudManagerTarget, List<String> runmodeSuffixes) throws Exception {
190+
void testBuild_IMMUTABLE_MUTABLE_SEPARATE(Set<String> cloudManagerTarget, List<String> runmodeSuffixes) throws Exception {
190191
List<ContentPackageFile> contentPackages = new ModelParser().getContentPackagesForNode(nodeDir);
191192
File targetFile = new File(targetDir, "all.zip");
192193

193194
AllPackageBuilder builder = new AllPackageBuilder(targetFile, "test-group", "test-pkg")
194-
.autoDependencies(true)
195-
.autoDependenciesSeparateMutable(true);
195+
.autoDependenciesMode(AutoDependenciesMode.IMMUTABLE_MUTABLE_SEPARATE);
196196
assertTrue(builder.build(contentPackages, cloudManagerTarget, null));
197197

198198
ZipUtil.unpack(targetFile, targetUnpackDir);
@@ -242,6 +242,62 @@ void testBuildWithAutoDependenciesSeparateMutable(Set<String> cloudManagerTarget
242242
}
243243
}
244244

245+
@ParameterizedTest
246+
@MethodSource("cloudManagerTargetVariants")
247+
void testBuild_IMMUTABLE_ONLY(Set<String> cloudManagerTarget, List<String> runmodeSuffixes) throws Exception {
248+
List<ContentPackageFile> contentPackages = new ModelParser().getContentPackagesForNode(nodeDir);
249+
File targetFile = new File(targetDir, "all.zip");
250+
251+
AllPackageBuilder builder = new AllPackageBuilder(targetFile, "test-group", "test-pkg")
252+
.autoDependenciesMode(AutoDependenciesMode.IMMUTABLE_ONLY);
253+
assertTrue(builder.build(contentPackages, cloudManagerTarget, null));
254+
255+
ZipUtil.unpack(targetFile, targetUnpackDir);
256+
257+
File appsDir = new File(targetUnpackDir, "jcr_root/apps/test-group-test-pkg-packages");
258+
assertFiles(appsDir, "application", "content", "container");
259+
260+
File applicationDir = new File(appsDir, "application");
261+
assertFiles(applicationDir, toInstallFolderNames("install", runmodeSuffixes));
262+
263+
for (String runmodeSuffix : runmodeSuffixes) {
264+
File applicationInstallDir = new File(applicationDir, "install" + runmodeSuffix);
265+
assertFiles(applicationInstallDir, "aem-cms-system-config" + runmodeSuffix + ".zip");
266+
assertNameDependencies(applicationInstallDir, "aem-cms-system-config" + runmodeSuffix + ".zip",
267+
"aem-cms-system-config" + runmodeSuffix,
268+
"day/cq60/product:cq-ui-wcm-editor-content:1.1.224",
269+
"adobe/cq/product:cq-remotedam-client-ui-components:1.1.6");
270+
}
271+
272+
File contentDir = new File(appsDir, "content");
273+
assertFiles(contentDir, toInstallFolderNames("install", runmodeSuffixes));
274+
275+
for (String runmodeSuffix : runmodeSuffixes) {
276+
File contentInstallDir = new File(contentDir, "install" + runmodeSuffix);
277+
assertFiles(contentInstallDir, "aem-cms-author-replicationagents" + runmodeSuffix + ".zip",
278+
"wcm-io-samples-sample-content" + runmodeSuffix + "-1.3.1-SNAPSHOT.zip");
279+
assertNameDependencies(contentInstallDir, "aem-cms-author-replicationagents" + runmodeSuffix + ".zip",
280+
"aem-cms-author-replicationagents" + runmodeSuffix);
281+
assertNameDependencies(contentInstallDir, "wcm-io-samples-sample-content" + runmodeSuffix + "-1.3.1-SNAPSHOT.zip",
282+
"wcm-io-samples-sample-content" + runmodeSuffix);
283+
}
284+
285+
File containerDir = new File(appsDir, "container");
286+
assertFiles(containerDir, toInstallFolderNames("install", runmodeSuffixes));
287+
288+
for (String runmodeSuffix : runmodeSuffixes) {
289+
File containerInstallDir = new File(containerDir, "install" + runmodeSuffix);
290+
assertFiles(containerInstallDir, "wcm-io-samples-aem-cms-config" + runmodeSuffix + ".zip",
291+
"wcm-io-samples-complete" + runmodeSuffix + "-1.3.1-SNAPSHOT.zip");
292+
assertNameDependencies(containerInstallDir, "wcm-io-samples-aem-cms-config" + runmodeSuffix + ".zip",
293+
"wcm-io-samples-aem-cms-config" + runmodeSuffix,
294+
"wcm-io-samples:aem-cms-system-config" + runmodeSuffix + ":1.3.1-SNAPSHOT");
295+
assertNameDependencies(containerInstallDir, "wcm-io-samples-complete" + runmodeSuffix + "-1.3.1-SNAPSHOT.zip",
296+
"wcm-io-samples-complete" + runmodeSuffix,
297+
"wcm-io-samples:wcm-io-samples-aem-cms-config" + runmodeSuffix + ":1.3.1-SNAPSHOT");
298+
}
299+
}
300+
245301
private void assertFiles(File dir, String... fileNames) {
246302
assertTrue(dir.exists(), "file exists: " + dir.getPath());
247303
assertTrue(dir.isDirectory(), "is directory: " + dir.getPath());

0 commit comments

Comments
 (0)