Skip to content

Commit 9e6d014

Browse files
authored
Merge pull request #3 from microtema/develop
Develop
2 parents 949dfa8 + b83ddbd commit 9e6d014

23 files changed

Lines changed: 442 additions & 147 deletions

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>de.microtema</groupId>
88
<artifactId>github-workflows-maven-plugin</artifactId>
9-
<version>2.0.1</version>
9+
<version>2.0.4</version>
1010
<packaging>maven-plugin</packaging>
1111

1212
<name>GitHub Workflows Maven-Plugin</name>

src/main/java/de/microtema/maven/plugin/github/workflow/PipelineGeneratorMojo.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public class PipelineGeneratorMojo extends AbstractMojo {
6262

6363
public void execute() {
6464

65-
appName = Optional.ofNullable(project.getName()).orElse(project.getArtifactId());
65+
appName = getAppDisplayName();
6666

6767
runsOn = Optional.ofNullable(runsOn).orElse("ubuntu-latest");
6868
runsOn = Stream.of(runsOn.split(",")).map(StringUtils::trim).collect(Collectors.joining(", "));
@@ -121,11 +121,13 @@ void injectTemplateStageServices() {
121121
templateStageServices.add(ClassUtil.createInstance(SystemTestTemplateStageService.class));
122122
templateStageServices.add(ClassUtil.createInstance(PerformanceTestTemplateStageService.class));
123123
templateStageServices.add(ClassUtil.createInstance(DownstreamTemplateStageService.class));
124+
templateStageServices.add(ClassUtil.createInstance(NotificationTemplateStageService.class));
124125
}
125126

126127
void applyDefaultVariables() {
127128

128129
defaultVariables.put("APP_NAME", project.getArtifactId());
130+
defaultVariables.put("APP_DISPLAY_NAME", appName);
129131

130132
if (PipelineGeneratorUtil.isDeploymentRepo(project)) {
131133
return;
@@ -246,6 +248,7 @@ List<MetaData> getWorkflowFiles() {
246248
for (Map.Entry<String, String> stage : stages.entrySet()) {
247249

248250
String stageName = stage.getKey();
251+
249252
String[] branches = StringUtils.split(stage.getValue(), ",");
250253

251254
for (String branchPattern : branches) {
@@ -276,6 +279,8 @@ List<MetaData> getWorkflowFiles() {
276279
metaData.setBranchName(branchName);
277280
metaData.setBranchFullName(branchFullName);
278281
metaData.setBranchPattern(branchPattern);
282+
metaData.setDownStreams(getDownStreams());
283+
metaData.setDeployable(!StringUtils.equalsIgnoreCase(stageName, "none") && PipelineGeneratorUtil.isMicroserviceRepo(project));
279284
}
280285
}
281286

@@ -323,7 +328,7 @@ void executeImpl(MetaData metaData, List<MetaData> workflows) {
323328
version = version.replace("-SNAPSHOT", "-RC");
324329
break;
325330
case "hotfix":
326-
version = version.replace("-SNAPSHOT", "-FIX");
331+
version = version.replace("-SNAPSHOT", "");
327332
break;
328333
case "master":
329334
version = version.replace("-SNAPSHOT", "");
@@ -470,7 +475,7 @@ public MavenProject getProject() {
470475

471476
public Map<String, String> getDownStreams() {
472477

473-
return downStreams;
478+
return new LinkedHashMap<>(downStreams);
474479
}
475480

476481
public List<String> getRunsOn() {
@@ -482,4 +487,9 @@ public Map<String, Object> getVariables() {
482487

483488
return new LinkedHashMap<>(variables);
484489
}
490+
491+
public String getAppDisplayName() {
492+
493+
return Optional.ofNullable(project.getName()).orElse(project.getArtifactId());
494+
}
485495
}

src/main/java/de/microtema/maven/plugin/github/workflow/PipelineGeneratorUtil.java

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import org.apache.commons.collections4.CollectionUtils;
77
import org.apache.commons.io.IOUtils;
88
import org.apache.commons.lang3.StringUtils;
9+
import org.apache.maven.model.Dependency;
910
import org.apache.maven.project.MavenProject;
1011

1112
import java.io.*;
@@ -73,9 +74,24 @@ public static boolean existsMavenSettings(MavenProject project) {
7374
return new File(getRootPath(project), "settings.xml").exists();
7475
}
7576

77+
@SuppressWarnings("unchecked")
7678
public static boolean existsLiquibase(MavenProject project) {
7779

78-
return new File(getRootPath(project), "src/main/resources/db/changelog").exists();
80+
boolean changelog = new File(getRootPath(project), "src/main/resources/db/changelog").exists();
81+
82+
if (!changelog) {
83+
return false;
84+
}
85+
86+
List<Dependency> runtimeDependencies = project.getDependencies();
87+
88+
if (CollectionUtils.isEmpty(runtimeDependencies)) {
89+
return false;
90+
}
91+
92+
return runtimeDependencies
93+
.stream()
94+
.noneMatch(it -> StringUtils.equalsIgnoreCase("liquibase-core", it.getArtifactId()) && StringUtils.equalsIgnoreCase("compile", it.getScope()));
7995
}
8096

8197
public static boolean existsFlyway(MavenProject project) {
@@ -397,4 +413,27 @@ public static boolean isSpeedBranch(String branchName) {
397413

398414
return StringUtils.startsWith(branchName, "speed");
399415
}
416+
417+
public static boolean isSameDockerRegistry(List<String> stageNames) {
418+
419+
if (stageNames.size() == 1) {
420+
return true;
421+
}
422+
423+
return stageNames.stream()
424+
.map(PipelineGeneratorUtil::findProperties)
425+
.filter(Objects::nonNull)
426+
.map(it -> it.getProperty("DOCKER_REGISTRY"))
427+
.collect(Collectors.toSet()).size() == 1;
428+
}
429+
430+
public static String getJobName(String jobName, String stageName, boolean multipleStages) {
431+
432+
if (multipleStages) {
433+
434+
return "[" + stageName.toUpperCase() + "] " + jobName;
435+
}
436+
437+
return jobName;
438+
}
400439
}

src/main/java/de/microtema/maven/plugin/github/workflow/job/DownstreamTemplateStageService.java

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import de.microtema.maven.plugin.github.workflow.PipelineGeneratorUtil;
55
import de.microtema.maven.plugin.github.workflow.model.JobData;
66
import de.microtema.maven.plugin.github.workflow.model.MetaData;
7+
import org.apache.commons.collections4.CollectionUtils;
78
import org.apache.commons.lang3.StringUtils;
89

910
import java.util.*;
@@ -20,24 +21,21 @@ public class DownstreamTemplateStageService implements TemplateStageService {
2021
public DownstreamTemplateStageService(
2122
BuildTemplateStageService buildTestTemplateStageService,
2223
DeploymentTemplateStageService deploymentTemplateStageService,
24+
ReadinessTemplateStageService readinessTemplateStageService,
2325
PublishTemplateStageService publishTemplateStageService,
2426
SystemTestTemplateStageService systemTestTemplateStageService,
2527
PerformanceTestTemplateStageService performanceTestTemplateStageService) {
2628

27-
multipleStageTemplateStageServices.add(systemTestTemplateStageService);
2829
multipleStageTemplateStageServices.add(performanceTestTemplateStageService);
30+
multipleStageTemplateStageServices.add(systemTestTemplateStageService);
31+
multipleStageTemplateStageServices.add(readinessTemplateStageService);
2932

3033
this.deploymentTemplateStageService = deploymentTemplateStageService;
3134

3235
singleStageTemplateStageServices.add(publishTemplateStageService);
3336
singleStageTemplateStageServices.add(buildTestTemplateStageService);
3437
}
3538

36-
@Override
37-
public String getJobName() {
38-
return "downstream";
39-
}
40-
4139
@Override
4240
public boolean access(PipelineGeneratorMojo mojo, MetaData metaData) {
4341

@@ -111,6 +109,34 @@ public String getTemplate(PipelineGeneratorMojo mojo, MetaData metaData) {
111109
}).collect(Collectors.joining("\n"));
112110
}
113111

112+
@Override
113+
public String getJobIds(MetaData metaData, String stageName) {
114+
115+
List<String> stageNames = metaData.getStageNames();
116+
117+
String jobName = getJobId();
118+
119+
if (CollectionUtils.size(stageNames) == 1) {
120+
return jobName;
121+
}
122+
123+
Map<String, String> downStreams = metaData.getDownStreams();
124+
125+
return stageNames.stream()
126+
.filter(downStreams::containsKey)
127+
.filter(it -> StringUtils.equalsIgnoreCase(it, stageName))
128+
.map(it -> {
129+
String downStream = downStreams.get(it);
130+
131+
String[] parts = downStream.split(":");
132+
133+
JobData jobData = getJobData(parts, it);
134+
135+
return ("downstream-" + jobData.getId()).toLowerCase();
136+
})
137+
.collect(Collectors.joining(" "));
138+
}
139+
114140
private String getJobNames(PipelineGeneratorMojo mojo, MetaData metaData, String stageName) {
115141

116142
boolean microserviceRepo = PipelineGeneratorUtil.isMicroserviceRepo(mojo.getProject());
@@ -122,7 +148,7 @@ private String getJobNames(PipelineGeneratorMojo mojo, MetaData metaData, String
122148
needs = multipleStageTemplateStageServices.stream()
123149
.filter(t -> t.access(mojo, metaData))
124150
.map(t -> t.getJobIds(metaData, stageName))
125-
.collect(Collectors.joining(", "));
151+
.findFirst().orElse(StringUtils.EMPTY);
126152

127153
if (StringUtils.isEmpty(needs)) {
128154
needs = deploymentTemplateStageService.getJobIds(metaData, stageName);

src/main/java/de/microtema/maven/plugin/github/workflow/job/FlywayTemplateStageService.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,6 @@
33
import de.microtema.maven.plugin.github.workflow.PipelineGeneratorMojo;
44
import de.microtema.maven.plugin.github.workflow.PipelineGeneratorUtil;
55
import de.microtema.maven.plugin.github.workflow.model.MetaData;
6-
import org.apache.commons.lang3.StringUtils;
7-
8-
import java.util.stream.Stream;
96

107
public class FlywayTemplateStageService implements TemplateStageService {
118

@@ -17,7 +14,7 @@ public String getJobId() {
1714
@Override
1815
public boolean access(PipelineGeneratorMojo mojo, MetaData metaData) {
1916

20-
if (Stream.of("feature", "bugfix").anyMatch(it -> StringUtils.equalsIgnoreCase(metaData.getBranchName(), it))) {
17+
if (!metaData.isDeployable()) {
2118
return false;
2219
}
2320

src/main/java/de/microtema/maven/plugin/github/workflow/job/HelmTemplateStageService.java

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@
1010

1111
public class HelmTemplateStageService implements TemplateStageService {
1212

13-
private final VersioningTemplateStageService versioningTemplateStageService;
13+
private final DbMigrationTemplateStageService dbMigrationTemplateStageService;
1414
private final PackageTemplateStageService packageTemplateStageService;
1515
private final TagTemplateStageService tagTemplateStageService;
1616

17-
public HelmTemplateStageService(VersioningTemplateStageService versioningTemplateStageService,
17+
public HelmTemplateStageService(DbMigrationTemplateStageService dbMigrationTemplateStageService,
1818
PackageTemplateStageService packageTemplateStageService,
1919
TagTemplateStageService tagTemplateStageService) {
20-
this.versioningTemplateStageService = versioningTemplateStageService;
20+
this.dbMigrationTemplateStageService = dbMigrationTemplateStageService;
2121
this.packageTemplateStageService = packageTemplateStageService;
2222
this.tagTemplateStageService = tagTemplateStageService;
2323
}
@@ -30,11 +30,7 @@ public String getJobId() {
3030
@Override
3131
public boolean access(PipelineGeneratorMojo mojo, MetaData metaData) {
3232

33-
if (StringUtils.equalsIgnoreCase(metaData.getBranchName(), "feature")) {
34-
return false;
35-
}
36-
37-
if (StringUtils.equalsIgnoreCase(metaData.getBranchName(), "bugfix")) {
33+
if (!metaData.isDeployable()) {
3834
return false;
3935
}
4036

@@ -53,30 +49,58 @@ public String getTemplate(PipelineGeneratorMojo mojo, MetaData metaData) {
5349
boolean masterBranch = StringUtils.equalsIgnoreCase(metaData.getBranchName(), "master");
5450

5551
boolean multipleStages = stageNames.size() > 1;
52+
boolean sameDockerRegistry = PipelineGeneratorUtil.isSameDockerRegistry(stageNames);
5653

5754
return stageNames.stream().map(it -> {
5855

5956
String template = PipelineGeneratorUtil.getTemplate(getTemplateName());
6057

6158
template = PipelineGeneratorUtil.applyProperties(template, it);
6259

63-
if (tagTemplateStageService.access(mojo, metaData)) {
60+
String needs = getJobNeeds(mojo, metaData, it, sameDockerRegistry);
6461

65-
template = template.replaceAll("%NEEDS%", tagTemplateStageService.getJobId());
66-
} else if (versioningTemplateStageService.access(mojo, metaData)) {
62+
if (StringUtils.isNotEmpty(needs)) {
6763

68-
template = template.replaceAll("%NEEDS%", packageTemplateStageService.getJobId());
64+
template = template.replaceAll("%NEEDS%", needs);
6965
} else {
7066

7167
template = template.replaceAll("\\[ %NEEDS% \\]", "[ ]");
7268
}
7369

7470
return template
7571
.replace("deployment:", multipleStages ? "deployment-" + it.toLowerCase() + ":" : "deployment:")
76-
.replace("%JOB_NAME%", "[" + it.toUpperCase() + "] Deployment")
72+
.replace("%JOB_NAME%", PipelineGeneratorUtil.getJobName("Deployment", it, multipleStages))
7773
.replace("$VERSION.$SHORT_SHA", masterBranch ? "$VERSION.$SHORT_SHA" : "$VERSION")
7874
.replace("%STAGE_NAME%", it);
7975

8076
}).collect(Collectors.joining());
8177
}
78+
79+
private String getJobNeeds(PipelineGeneratorMojo mojo, MetaData metaData, String stageName, boolean sameDockerRegistry) {
80+
81+
if (dbMigrationTemplateStageService.access(mojo, metaData)) {
82+
83+
if (sameDockerRegistry) {
84+
return dbMigrationTemplateStageService.getJobId();
85+
}
86+
87+
return dbMigrationTemplateStageService.getJobIds(metaData, stageName);
88+
}
89+
90+
if (tagTemplateStageService.access(mojo, metaData)) {
91+
92+
return tagTemplateStageService.getJobId();
93+
}
94+
95+
if (packageTemplateStageService.access(mojo, metaData)) {
96+
97+
if (sameDockerRegistry) {
98+
return packageTemplateStageService.getJobId();
99+
}
100+
101+
return packageTemplateStageService.getJobIds(metaData, stageName);
102+
}
103+
104+
return null;
105+
}
82106
}

src/main/java/de/microtema/maven/plugin/github/workflow/job/LiquibaseTemplateStageService.java

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@
33
import de.microtema.maven.plugin.github.workflow.PipelineGeneratorMojo;
44
import de.microtema.maven.plugin.github.workflow.PipelineGeneratorUtil;
55
import de.microtema.maven.plugin.github.workflow.model.MetaData;
6-
import org.apache.commons.lang3.StringUtils;
76

7+
import java.util.ArrayList;
88
import java.util.List;
99
import java.util.stream.Collectors;
10-
import java.util.stream.Stream;
1110

1211
public class LiquibaseTemplateStageService implements TemplateStageService {
1312

14-
private final PackageTemplateStageService packageTemplateStageService;
13+
private final List<TemplateStageService> templateStageServices = new ArrayList<>();
1514

16-
public LiquibaseTemplateStageService(PackageTemplateStageService packageTemplateStageService) {
17-
this.packageTemplateStageService = packageTemplateStageService;
15+
public LiquibaseTemplateStageService(TagTemplateStageService tagTemplateStageService, PackageTemplateStageService packageTemplateStageService) {
16+
this.templateStageServices.add(tagTemplateStageService);
17+
this.templateStageServices.add(packageTemplateStageService);
1818
}
1919

2020
@Override
@@ -25,7 +25,7 @@ public String getJobId() {
2525
@Override
2626
public boolean access(PipelineGeneratorMojo mojo, MetaData metaData) {
2727

28-
if (Stream.of("feature", "bugfix").anyMatch(it -> StringUtils.equalsIgnoreCase(metaData.getBranchName(), it))) {
28+
if (!metaData.isDeployable()) {
2929
return false;
3030
}
3131

@@ -49,12 +49,16 @@ public String getTemplate(PipelineGeneratorMojo mojo, MetaData metaData) {
4949

5050
defaultTemplate = PipelineGeneratorUtil.applyProperties(defaultTemplate, it);
5151

52-
String needs = packageTemplateStageService.getJobId();
52+
String needs = templateStageServices.stream()
53+
.filter(t -> t.access(mojo, metaData))
54+
.findFirst().map(t -> t.getJobIds(metaData, it))
55+
.orElse("build");
5356

5457
return defaultTemplate
5558
.replace("db-migration:", multipleStages ? "db-migration-" + it.toLowerCase() + ":" : "db-migration:")
56-
.replace("%JOB_NAME%", "[" + it.toUpperCase() + "] Database Changelog")
57-
.replace("%NEEDS%", needs);
59+
.replace("%JOB_NAME%", PipelineGeneratorUtil.getJobName("Database Changelog", it, multipleStages))
60+
.replace("%NEEDS%", needs)
61+
.replace("%STAGE_NAME%", it);
5862

5963
}).collect(Collectors.joining("\n"));
6064
}

0 commit comments

Comments
 (0)