Skip to content

Commit

Permalink
[core] support calver as project version pattern. Resolves #557
Browse files Browse the repository at this point in the history
  • Loading branch information
aalmiray committed Nov 30, 2021
1 parent 73e8007 commit 5e6bdd0
Show file tree
Hide file tree
Showing 14 changed files with 747 additions and 79 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -58,13 +58,19 @@
import static org.jreleaser.util.Constants.KEY_TAG_NAME;
import static org.jreleaser.util.Constants.KEY_TIMESTAMP;
import static org.jreleaser.util.Constants.KEY_VERSION_BUILD;
import static org.jreleaser.util.Constants.KEY_VERSION_DAY;
import static org.jreleaser.util.Constants.KEY_VERSION_MAJOR;
import static org.jreleaser.util.Constants.KEY_VERSION_MICRO;
import static org.jreleaser.util.Constants.KEY_VERSION_MINOR;
import static org.jreleaser.util.Constants.KEY_VERSION_MODIFIER;
import static org.jreleaser.util.Constants.KEY_VERSION_MONTH;
import static org.jreleaser.util.Constants.KEY_VERSION_NUMBER;
import static org.jreleaser.util.Constants.KEY_VERSION_OPTIONAL;
import static org.jreleaser.util.Constants.KEY_VERSION_PATCH;
import static org.jreleaser.util.Constants.KEY_VERSION_PRERELEASE;
import static org.jreleaser.util.Constants.KEY_VERSION_TAG;
import static org.jreleaser.util.Constants.KEY_VERSION_WEEK;
import static org.jreleaser.util.Constants.KEY_VERSION_YEAR;
import static org.jreleaser.util.StringUtils.capitalize;
import static org.jreleaser.util.StringUtils.isBlank;

Expand Down Expand Up @@ -496,6 +502,12 @@ public void report() {
safePut(project.getPrefix() + capitalize(KEY_VERSION_TAG), resolvedExtraProperties, props);
safePut(project.getPrefix() + capitalize(KEY_VERSION_BUILD), resolvedExtraProperties, props);
safePut(project.getPrefix() + capitalize(KEY_VERSION_OPTIONAL), resolvedExtraProperties, props);
safePut(project.getPrefix() + capitalize(KEY_VERSION_YEAR), resolvedExtraProperties, props);
safePut(project.getPrefix() + capitalize(KEY_VERSION_MONTH), resolvedExtraProperties, props);
safePut(project.getPrefix() + capitalize(KEY_VERSION_DAY), resolvedExtraProperties, props);
safePut(project.getPrefix() + capitalize(KEY_VERSION_WEEK), resolvedExtraProperties, props);
safePut(project.getPrefix() + capitalize(KEY_VERSION_MICRO), resolvedExtraProperties, props);
safePut(project.getPrefix() + capitalize(KEY_VERSION_MODIFIER), resolvedExtraProperties, props);

Path output = getOutputDirectory().resolve("output.properties");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,12 @@
package org.jreleaser.model;

import org.jreleaser.bundle.RB;
import org.jreleaser.util.CalVer;
import org.jreleaser.util.Constants;
import org.jreleaser.util.Env;
import org.jreleaser.util.JavaModuleVersion;
import org.jreleaser.util.JavaRuntimeVersion;
import org.jreleaser.util.MustacheUtils;
import org.jreleaser.util.OsDetector;
import org.jreleaser.util.PlatformUtils;
import org.jreleaser.util.Version;

Expand Down Expand Up @@ -59,7 +59,7 @@ public class Project implements Domain, ExtraProperties {
private final Snapshot snapshot = new Snapshot();
private String name;
private String version;
private VersionPattern versionPattern;
private VersionPattern versionPattern = new VersionPattern();
private String description;
private String longDescription;
private String website;
Expand Down Expand Up @@ -135,8 +135,8 @@ public void setVersion(String version) {
this.version = version;
}

public VersionPattern getVersionPattern() {
return versionPattern;
public String getVersionPattern() {
return versionPattern.toString();
}

public void setVersionPattern(VersionPattern versionPattern) {
Expand All @@ -147,6 +147,10 @@ public void setVersionPattern(String str) {
this.versionPattern = VersionPattern.of(str);
}

public VersionPattern versionPattern() {
return versionPattern;
}

public Snapshot getSnapshot() {
return snapshot;
}
Expand Down Expand Up @@ -332,7 +336,7 @@ public void parseVersion() {
String v = getResolvedVersion();
if (isBlank(v)) return;

switch (getVersionPattern()) {
switch (versionPattern().getType()) {
case SEMVER: {
try {
Version parsedVersion = Version.of(v);
Expand Down Expand Up @@ -391,6 +395,33 @@ public void parseVersion() {
}
}
break;
case CALVER: {
try {
CalVer parsedVersion = CalVer.of(versionPattern().getFormat(), v);
addExtraProperty(Constants.KEY_VERSION_NUMBER, v);
addExtraProperty(Constants.KEY_VERSION_YEAR, parsedVersion.getYear());
if (parsedVersion.hasMonth()) {
addExtraProperty(Constants.KEY_VERSION_MONTH, parsedVersion.getMonth());
}
if (parsedVersion.hasDay()) {
addExtraProperty(Constants.KEY_VERSION_DAY, parsedVersion.getDay());
}
if (parsedVersion.hasWeek()) {
addExtraProperty(Constants.KEY_VERSION_WEEK, parsedVersion.getWeek());
}
if (parsedVersion.hasMinor()) {
addExtraProperty(Constants.KEY_VERSION_MINOR, parsedVersion.getMinor());
}
if (parsedVersion.hasMicro()) {
addExtraProperty(Constants.KEY_VERSION_MICRO, parsedVersion.getMicro());
}
if (parsedVersion.hasModifier()) {
addExtraProperty(Constants.KEY_VERSION_MODIFIER, parsedVersion.getModifier());
}
} catch (IllegalArgumentException e) {
throw new JReleaserException(RB.$("ERROR_version_invalid", v, "calver"), e);
}
}
default:
addExtraProperty(Constants.KEY_VERSION_NUMBER, v);
// noop
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,26 +18,87 @@
package org.jreleaser.model;

import static org.jreleaser.util.StringUtils.isBlank;
import static org.jreleaser.util.StringUtils.isNotBlank;

/**
* @author Andres Almiray
* @since 0.5.0
*/
public enum VersionPattern {
SEMVER,
JAVA_RUNTIME,
JAVA_MODULE,
CUSTOM;
public class VersionPattern {
private Type type;
private String format;

public VersionPattern() {
this.type = Type.SEMVER;
}

public Type getType() {
return type;
}

public void setType(Type type) {
this.type = type;
}

public String getFormat() {
return format;
}

public void setFormat(String format) {
this.format = format;
}

@Override
public String toString() {
return name().toLowerCase();
String s = type.toString();
switch (type) {
case CALVER:
case CUSTOM:
if (isNotBlank(format)) {
s += ":" + format;
}
}
return s;
}

public static VersionPattern of(String str) {
if (isBlank(str)) return null;
return VersionPattern.valueOf(str.replaceAll(" ", "_")
.replaceAll("-", "_")
.toUpperCase().trim());

String[] parts = str.trim().split(":");

VersionPattern vp = new VersionPattern();
switch (parts.length) {
case 1:
vp.setType(Type.of(parts[0]));
break;
case 2:
vp.setType(Type.of(parts[0]));
vp.setFormat(parts[1].trim());
break;
default:
throw new IllegalArgumentException();
}

return vp;
}

public enum Type {
SEMVER,
CALVER,
JAVA_RUNTIME,
JAVA_MODULE,
CUSTOM;

@Override
public String toString() {
return name().toLowerCase();
}

public static Type of(String str) {
if (isBlank(str)) return null;
return Type.valueOf(str.replaceAll(" ", "_")
.replaceAll("-", "_")
.toUpperCase().trim());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ public static void validateProject(JReleaserContext context, JReleaserContext.Mo
PROJECT_VERSION_PATTERN,
"project.versionPattern",
project.getVersionPattern(),
VersionPattern.SEMVER));
VersionPattern.Type.SEMVER.toString()));

project.getSnapshot().setPattern(
checkProperty(context,
Expand All @@ -87,6 +87,13 @@ public static void validateProject(JReleaserContext context, JReleaserContext.Mo
project.getSnapshot().getFullChangelog(),
false));

if (project.versionPattern().getType() == VersionPattern.Type.CALVER) {
if (isBlank(project.versionPattern().getFormat())) {
errors.configuration(RB.$("validation_version_format_missing",
"project.versionPattern", VersionPattern.Type.CALVER.toString()));
}
}

boolean javaDistributions = context.getModel().getDistributions().values().stream()
.map(Distribution::getType)
.anyMatch(type -> type == Distribution.DistributionType.JAVA_BINARY ||
Expand Down

0 comments on commit 5e6bdd0

Please sign in to comment.