[changelog] add possibility to overwrite previous tag Resolves #382

This commit is contained in:
Andrea Bettich
2021-10-01 11:09:28 +02:00
committed by Andres Almiray
parent ba1ed9b50d
commit 00b584f2f8
10 changed files with 71 additions and 4 deletions

View File

@@ -75,6 +75,10 @@ public class Release extends AbstractPlatformAwareModelCommand {
description = "The release tag.")
String tagName;
@CommandLine.Option(names = {"--previous-tag-name"},
description = "The previous release tag.")
String previousTagName;
@CommandLine.Option(names = {"--release-name"},
description = "The release name.")
String releaseName;
@@ -180,6 +184,7 @@ public class Release extends AbstractPlatformAwareModelCommand {
.projectSnapshotLabel(projectSnapshotLabel)
.projectSnapshotFullChangelog(projectSnapshotFullChangelog)
.tagName(tagName)
.previousTagName(previousTagName)
.releaseName(releaseName)
.milestoneName(milestoneName)
.branch(branch)

View File

@@ -67,6 +67,7 @@ public class ModelAutoConfigurer {
private String projectSnapshotLabel;
private boolean projectSnapshotFullChangelog;
private String tagName;
private String previousTagName;
private String releaseName;
private String milestoneName;
private String branch;
@@ -145,6 +146,11 @@ public class ModelAutoConfigurer {
return this;
}
public ModelAutoConfigurer previousTagName(String previousTagName) {
this.previousTagName = previousTagName;
return this;
}
public ModelAutoConfigurer branch(String branch) {
this.branch = branch;
return this;
@@ -331,6 +337,7 @@ public class ModelAutoConfigurer {
if (projectSnapshotFullChangelog) logger.info("- project.snapshot.full.changelog: true");
if (isNotBlank(username)) logger.info("- release.username: {}", username);
if (isNotBlank(tagName)) logger.info("- release.tagName: {}", tagName);
if (isNotBlank(previousTagName)) logger.info("- release.previousTagName: {}", previousTagName);
if (isNotBlank(branch)) logger.info("- release.branch: {}", branch);
if (isNotBlank(releaseName)) logger.info("- release.releaseName: {}", releaseName);
if (isNotBlank(milestoneName)) logger.info("- release.milestone.name: {}", milestoneName);
@@ -402,6 +409,7 @@ public class ModelAutoConfigurer {
service.setUsername(username);
service.setTagName(tagName);
service.setPreviousTagName(previousTagName);
service.setReleaseName(releaseName);
service.getMilestone().setName(milestoneName);
service.setOverwrite(overwrite);

View File

@@ -44,6 +44,7 @@ public abstract class GitService implements Releaser, CommitAuthorAware, OwnerAw
public static final String KEY_SKIP_RELEASE_SIGNATURES = "skipReleaseSignatures";
public static final String TAG_NAME = "TAG_NAME";
public static final String PREVIOUS_TAG_NAME = "PREVIOUS_TAG_NAME";
public static final String RELEASE_NAME = "RELEASE_NAME";
public static final String OVERWRITE = "OVERWRITE";
public static final String UPDATE = "UPDATE";
@@ -75,6 +76,7 @@ public abstract class GitService implements Releaser, CommitAuthorAware, OwnerAw
private String username;
private String token;
private String tagName;
private String previousTagName;
private String releaseName;
private String branch;
private boolean sign;
@@ -123,6 +125,7 @@ public abstract class GitService implements Releaser, CommitAuthorAware, OwnerAw
this.username = service.username;
this.token = service.token;
this.tagName = service.tagName;
this.previousTagName = service.previousTagName;
this.releaseName = service.releaseName;
this.branch = service.branch;
this.sign = service.sign;
@@ -156,6 +159,10 @@ public abstract class GitService implements Releaser, CommitAuthorAware, OwnerAw
return Env.resolve(TAG_NAME, tagName);
}
public String getConfiguredPreviousTagName() {
return Env.resolve(PREVIOUS_TAG_NAME, previousTagName);
}
public String getResolvedTagName(JReleaserModel model) {
if (isBlank(cachedTagName)) {
cachedTagName = getConfiguredTagName();
@@ -463,6 +470,14 @@ public abstract class GitService implements Releaser, CommitAuthorAware, OwnerAw
this.tagName = tagName;
}
public String getPreviousTagName() {
return previousTagName;
}
public void setPreviousTagName(String previousTagName) {
this.previousTagName = previousTagName;
}
public String getReleaseName() {
return releaseName;
}

View File

@@ -62,6 +62,7 @@ public class JReleaserAutoConfigReleaseTask extends Task {
private String projectSnapshotLabel;
private boolean projectSnapshotFullChangelog;
private String tagName;
private String previousTagName;
private String releaseName;
private String branch;
private String milestoneName;
@@ -129,6 +130,10 @@ public class JReleaserAutoConfigReleaseTask extends Task {
this.tagName = tagName;
}
public void setPreviousTagName(String previousTagName) {
this.previousTagName = previousTagName;
}
public void setReleaseName(String releaseName) {
this.releaseName = releaseName;
}
@@ -237,6 +242,7 @@ public class JReleaserAutoConfigReleaseTask extends Task {
.projectSnapshotLabel(projectSnapshotLabel)
.projectSnapshotFullChangelog(projectSnapshotFullChangelog)
.tagName(tagName)
.previousTagName(previousTagName)
.releaseName(releaseName)
.branch(branch)
.milestoneName(milestoneName)

View File

@@ -77,6 +77,8 @@ interface GitService extends Releaser {
Property<String> getTagName()
Property<String> getPreviousTagName()
Property<String> getReleaseName()
Property<String> getBranch()

View File

@@ -56,6 +56,7 @@ abstract class AbstractGitService implements GitService {
final Property<String> username
final Property<String> token
final Property<String> tagName
final Property<String> previousTagName
final Property<String> releaseName
final Property<String> branch
final Property<Boolean> sign
@@ -89,6 +90,7 @@ abstract class AbstractGitService implements GitService {
username = objects.property(String).convention(Providers.notDefined())
token = objects.property(String).convention(Providers.notDefined())
tagName = objects.property(String).convention(Providers.notDefined())
previousTagName = objects.property(String).convention(Providers.notDefined())
releaseName = objects.property(String).convention(Providers.notDefined())
branch = objects.property(String).convention(Providers.notDefined())
sign = objects.property(Boolean).convention(Providers.notDefined())
@@ -171,6 +173,7 @@ abstract class AbstractGitService implements GitService {
username.present ||
token.present ||
tagName.present ||
previousTagName.present ||
releaseName.present ||
branch.present ||
sign.present ||
@@ -240,6 +243,7 @@ abstract class AbstractGitService implements GitService {
if (username.present) service.username = username.get()
if (token.present) service.token = token.get()
if (tagName.present) service.tagName = tagName.get()
if (previousTagName.present) service.previousTagName = previousTagName.get()
if (releaseName.present) service.releaseName = releaseName.get()
if (branch.present) service.branch = branch.get()
if (apiEndpoint.present) service.apiEndpoint = apiEndpoint.get()

View File

@@ -45,6 +45,7 @@ public abstract class GitService implements Releaser {
private String username;
private String token;
private String tagName;
private String previousTagName;
private String releaseName;
private String branch;
private boolean sign;
@@ -75,6 +76,7 @@ public abstract class GitService implements Releaser {
this.username = service.username;
this.token = service.token;
this.tagName = service.tagName;
this.previousTagName = service.previousTagName;
this.releaseName = service.releaseName;
this.branch = service.branch;
this.sign = service.sign;
@@ -298,6 +300,14 @@ public abstract class GitService implements Releaser {
this.tagName = tagName;
}
public String getPreviousTagName() {
return previousTagName;
}
public void setPreviousTagName(String previousTagName) {
this.previousTagName = previousTagName;
}
public String getReleaseName() {
return releaseName;
}

View File

@@ -108,6 +108,11 @@ public class JReleaserAutoConfigReleaseMojo extends AbstractMojo {
*/
@Parameter(property = "jreleaser.tag.name")
private String tagName;
/**
* The previous release tag.
*/
@Parameter(property = "jreleaser.previous.tag.name")
private String previousTagName;
/**
* The release name.
*/
@@ -236,6 +241,7 @@ public class JReleaserAutoConfigReleaseMojo extends AbstractMojo {
.projectSnapshotLabel(projectSnapshotLabel)
.projectSnapshotFullChangelog(projectSnapshotFullChangelog)
.tagName(tagName)
.previousTagName(previousTagName)
.releaseName(releaseName)
.branch(branch)
.milestoneName(milestoneName)

View File

@@ -247,6 +247,7 @@ public final class JReleaserModelConverter {
if (isNotBlank(service.getUsername())) s.setUsername(service.getUsername());
if (isNotBlank(service.getToken())) s.setToken(service.getToken());
if (isNotBlank(service.getTagName())) s.setTagName(service.getTagName());
if (isNotBlank(service.getPreviousTagName())) s.setPreviousTagName(service.getPreviousTagName());
if (isNotBlank(service.getReleaseName())) s.setReleaseName(service.getReleaseName());
if (isNotBlank(service.getBranch())) s.setBranch(service.getBranch());
s.setCommitAuthor(convertCommitAuthor(service.getCommitAuthor()));

View File

@@ -31,6 +31,7 @@ import org.jreleaser.model.Project;
import org.jreleaser.model.releaser.spi.User;
import org.jreleaser.util.CollectionUtils;
import org.jreleaser.util.JavaModuleVersion;
import org.jreleaser.util.StringUtils;
import org.jreleaser.util.Version;
import java.io.IOException;
@@ -238,10 +239,19 @@ public class ChangelogGenerator {
Comparable currentVersion = version(context, tag.get(), versionPattern);
Optional<Ref> previousTag = tags.stream()
String previousTagName = gitService.getConfiguredPreviousTagName();
Optional<Ref> previousTag;
if (StringUtils.isNotBlank(previousTagName)) {
previousTag = tags.stream()
.filter(ref -> extractTagName(ref).equals(previousTagName))
.findFirst();
} else {
previousTag = tags.stream()
.filter(ref -> extractTagName(ref).matches(tagPattern))
.filter(ref -> lessThan(version(context, ref, versionPattern), currentVersion))
.findFirst();
}
if (previousTag.isPresent()) {
context.getLogger().debug("found tag {}", extractTagName(previousTag.get()));