mirror of
https://github.com/jlengrand/jreleaser.git
synced 2026-03-10 08:31:24 +00:00
[jbang] several updates
- rename jbangAliasClassName to jbangScriptName. Fixes #40 - sanitize alias name. - sanitize script name. Fixes #35 - change default value for alias. Fixes #37 - validate aliases are unique. Fixes #38
This commit is contained in:
@@ -35,6 +35,7 @@ import static org.jreleaser.model.validation.BrewValidator.postValidateBrew;
|
||||
import static org.jreleaser.model.validation.BrewValidator.validateBrew;
|
||||
import static org.jreleaser.model.validation.ChocolateyValidator.validateChocolatey;
|
||||
import static org.jreleaser.model.validation.DockerValidator.validateDocker;
|
||||
import static org.jreleaser.model.validation.JbangValidator.postValidateJBang;
|
||||
import static org.jreleaser.model.validation.JbangValidator.validateJbang;
|
||||
import static org.jreleaser.model.validation.ScoopValidator.validateScoop;
|
||||
import static org.jreleaser.model.validation.SnapValidator.validateSnap;
|
||||
@@ -65,6 +66,7 @@ public abstract class DistributionsValidator extends Validator {
|
||||
}
|
||||
|
||||
postValidateBrew(context, errors);
|
||||
postValidateJBang(context, errors);
|
||||
}
|
||||
|
||||
private static void validateDistribution(JReleaserContext context, Distribution distribution, List<String> errors) {
|
||||
@@ -150,7 +152,7 @@ public abstract class DistributionsValidator extends Validator {
|
||||
if (!distribution.getJava().isEnabled()) return true;
|
||||
|
||||
if (isBlank(distribution.getJava().getArtifactId())) {
|
||||
distribution.getJava().setArtifactId(distribution.getName());
|
||||
distribution.getJava().setArtifactId(project.getJava().getArtifactId());
|
||||
}
|
||||
if (isBlank(distribution.getJava().getGroupId())) {
|
||||
distribution.getJava().setGroupId(project.getJava().getGroupId());
|
||||
|
||||
@@ -23,7 +23,10 @@ import org.jreleaser.model.JReleaserModel;
|
||||
import org.jreleaser.model.Jbang;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static java.util.stream.Collectors.groupingBy;
|
||||
import static org.jreleaser.model.validation.ExtraPropertiesValidator.mergeExtraProperties;
|
||||
import static org.jreleaser.model.validation.TemplateValidator.validateTemplate;
|
||||
import static org.jreleaser.util.Constants.KEY_REVERSE_REPO_HOST;
|
||||
@@ -52,7 +55,7 @@ public abstract class JbangValidator extends Validator {
|
||||
mergeExtraProperties(tool, model.getPackagers().getJbang());
|
||||
|
||||
if (isBlank(tool.getAlias())) {
|
||||
tool.setAlias(distribution.getName());
|
||||
tool.setAlias(distribution.getExecutable());
|
||||
}
|
||||
if (isBlank(tool.getCatalog().getName())) {
|
||||
tool.getCatalog().setName(model.getPackagers().getJbang().getCatalog().getName());
|
||||
@@ -91,4 +94,17 @@ public abstract class JbangValidator extends Validator {
|
||||
errors.add("distribution." + distribution.getName() + ".java.mainClass must not be blank, required by jbang");
|
||||
}
|
||||
}
|
||||
|
||||
public static void postValidateJBang(JReleaserContext context, List<String> errors) {
|
||||
Map<String, List<Distribution>> map = context.getModel().getDistributions().values().stream()
|
||||
.filter(d -> d.getJbang().isEnabled())
|
||||
.collect(groupingBy(d -> d.getJbang().getAlias()));
|
||||
|
||||
map.forEach((alias, distributions) -> {
|
||||
if (distributions.size() > 1) {
|
||||
errors.add("jbang.alias '" + alias + "' is defined for more than one distribution: " +
|
||||
distributions.stream().map(Distribution::getName).collect(Collectors.joining(", ")));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"aliases": {
|
||||
"{{jbangAliasName}}": {
|
||||
"script-ref": "{{jbangAliasClassName}}.java",
|
||||
"script-ref": "{{jbangScriptName}}.java",
|
||||
"description": "{{projectDescription}}"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
//REPOS jitpack
|
||||
//DEPS {{jbangDistributionGA}}:{{repoBranch}}-SNAPSHOT
|
||||
|
||||
public class {{jbangAliasClassName}} {
|
||||
public class {{jbangScriptName}} {
|
||||
public static void main(String... args) throws Exception {
|
||||
{{distributionJavaMainClass}}.main(args);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"aliases": {
|
||||
"{{jbangAliasName}}": {
|
||||
"script-ref": "{{jbangAliasClassName}}.java",
|
||||
"script-ref": "{{jbangScriptName}}.java",
|
||||
"description": "{{projectDescription}}"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//JAVA {{distributionJavaVersion}}
|
||||
//DEPS {{jbangDistributionGA}}:{{projectVersion}}
|
||||
|
||||
public class {{jbangAliasClassName}} {
|
||||
public class {{jbangScriptName}} {
|
||||
public static void main(String... args) throws Exception {
|
||||
{{distributionJavaMainClass}}.main(args);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"aliases": {
|
||||
"{{jbangAliasName}}": {
|
||||
"script-ref": "{{jbangAliasClassName}}.java",
|
||||
"script-ref": "{{jbangScriptName}}.java",
|
||||
"description": "{{projectDescription}}"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
//REPOS jitpack
|
||||
//DEPS {{jbangDistributionGA}}:{{repoBranch}}-SNAPSHOT
|
||||
|
||||
public class {{jbangAliasClassName}} {
|
||||
public class {{jbangScriptName}} {
|
||||
public static void main(String... args) throws Exception {
|
||||
{{distributionJavaMainClass}}.main(args);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"aliases": {
|
||||
"{{jbangAliasName}}": {
|
||||
"script-ref": "{{jbangAliasClassName}}.java",
|
||||
"script-ref": "{{jbangScriptName}}.java",
|
||||
"description": "{{projectDescription}}"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//JAVA {{distributionJavaVersion}}
|
||||
//DEPS {{jbangDistributionGA}}:{{projectVersion}}
|
||||
|
||||
public class {{jbangAliasClassName}} {
|
||||
public class {{jbangScriptName}} {
|
||||
public static void main(String... args) throws Exception {
|
||||
{{distributionJavaMainClass}}.main(args);
|
||||
}
|
||||
|
||||
@@ -73,23 +73,24 @@ public class JbangToolProcessor extends AbstractRepositoryToolProcessor<Jbang> {
|
||||
props.put(Constants.KEY_JBANG_CATALOG_REPO_CLONE_URL,
|
||||
gitService.getResolvedRepoCloneUrl(project, tool.getCatalog().getOwner(), tool.getCatalog().getName()));
|
||||
|
||||
String aliasName = tool.getAlias();
|
||||
String aliasClassName = aliasName;
|
||||
String aliasName = sanitizeAlias(tool.getAlias());
|
||||
String scriptName = aliasName;
|
||||
if (context.getModel().getProject().isSnapshot()) {
|
||||
aliasName += "-snapshot";
|
||||
aliasClassName += "_snapshot";
|
||||
scriptName += "_snapshot";
|
||||
}
|
||||
scriptName = sanitizeScriptName(scriptName);
|
||||
|
||||
props.put(Constants.KEY_JBANG_ALIAS_NAME, aliasName);
|
||||
props.put(Constants.KEY_JBANG_ALIAS_CLASS_NAME, aliasClassName);
|
||||
props.put(Constants.KEY_JBANG_SCRIPT_NAME, scriptName);
|
||||
|
||||
String jbangDistributionGA = (String) tool.getResolvedExtraProperties().get(Constants.KEY_JBANG_DISTRIBUTION_GA);
|
||||
if (isBlank(jbangDistributionGA)) {
|
||||
if (context.getModel().getProject().isSnapshot()) {
|
||||
// if single
|
||||
// {{reverseRepoHost}}.{{repoOwner}}:{{distributionArtifactId}
|
||||
// {{reverseRepoHost}}.{{repoOwner}}:{{distributionArtifactId}}
|
||||
// if multi-project
|
||||
// {{reverseRepoHost}}.{{repoOwner}}.{{repoName}}:{{distributionArtifactId}
|
||||
// {{reverseRepoHost}}.{{repoOwner}}.{{repoName}}:{{distributionArtifactId}}
|
||||
|
||||
String reverseRepoHost = gitService.getReverseRepoHost();
|
||||
if (isBlank(reverseRepoHost)) {
|
||||
@@ -118,15 +119,38 @@ public class JbangToolProcessor extends AbstractRepositoryToolProcessor<Jbang> {
|
||||
props.put(Constants.KEY_JBANG_DISTRIBUTION_GA, jbangDistributionGA);
|
||||
}
|
||||
|
||||
private String sanitizeAlias(String alias) {
|
||||
StringBuilder b = new StringBuilder();
|
||||
for (int i = 0; i < alias.length(); i++) {
|
||||
char ch = alias.charAt(i);
|
||||
if (Character.isJavaIdentifierPart(ch) || ch == '-') {
|
||||
b.append(ch);
|
||||
}
|
||||
}
|
||||
return b.toString();
|
||||
}
|
||||
|
||||
private String sanitizeScriptName(String scriptName) {
|
||||
scriptName = scriptName.replaceAll("-", "_");
|
||||
StringBuilder b = new StringBuilder();
|
||||
for (int i = 0; i < scriptName.length(); i++) {
|
||||
char ch = scriptName.charAt(i);
|
||||
if (Character.isJavaIdentifierPart(ch)) {
|
||||
b.append(ch);
|
||||
}
|
||||
}
|
||||
return b.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeFile(Project project, Distribution distribution, String content, Map<String, Object> props, String fileName)
|
||||
throws ToolProcessingException {
|
||||
fileName = trimTplExtension(fileName);
|
||||
|
||||
Path outputDirectory = (Path) props.get(Constants.KEY_PREPARE_DIRECTORY);
|
||||
String aliasClassName = (String) props.get(Constants.KEY_JBANG_ALIAS_CLASS_NAME);
|
||||
String scriptName = (String) props.get(Constants.KEY_JBANG_SCRIPT_NAME);
|
||||
Path outputFile = "jbang.java".equals(fileName) ?
|
||||
outputDirectory.resolve(aliasClassName.concat(".java")) :
|
||||
outputDirectory.resolve(scriptName.concat(".java")) :
|
||||
outputDirectory.resolve(fileName);
|
||||
|
||||
writeFile(content, outputFile);
|
||||
|
||||
@@ -118,7 +118,7 @@ public interface Constants {
|
||||
|
||||
// Jbang
|
||||
String KEY_JBANG_ALIAS_NAME = "jbangAliasName";
|
||||
String KEY_JBANG_ALIAS_CLASS_NAME = "jbangAliasClassName";
|
||||
String KEY_JBANG_SCRIPT_NAME = "jbangScriptName";
|
||||
String KEY_JBANG_DISTRIBUTION_GA = "jbangDistributionGA";
|
||||
String KEY_JBANG_CATALOG_REPO_URL = "jbangCatalogRepoUrl";
|
||||
String KEY_JBANG_CATALOG_REPO_CLONE_URL = "jbangCatalogRepoCloneUrl";
|
||||
|
||||
Reference in New Issue
Block a user