[model] Add extraProperties support to announcers. Resolves #182

This commit is contained in:
Andres Almiray
2021-05-29 23:40:26 +02:00
parent 9b913650c2
commit df851a33b7
19 changed files with 95 additions and 16 deletions

View File

@@ -26,6 +26,7 @@ import java.util.Map;
* @since 0.1.0
*/
abstract class AbstractAnnouncer implements Announcer {
private final Map<String, Object> extraProperties = new LinkedHashMap<>();
protected final String name;
protected boolean enabled;
protected Active active;
@@ -41,6 +42,12 @@ abstract class AbstractAnnouncer implements Announcer {
this.enabled = announcer.enabled;
this.connectTimeout = announcer.connectTimeout;
this.readTimeout = announcer.readTimeout;
setExtraProperties(announcer.extraProperties);
}
@Override
public String getPrefix() {
return name;
}
@Override
@@ -114,6 +121,22 @@ abstract class AbstractAnnouncer implements Announcer {
this.readTimeout = readTimeout;
}
@Override
public Map<String, Object> getExtraProperties() {
return extraProperties;
}
@Override
public void setExtraProperties(Map<String, Object> extraProperties) {
this.extraProperties.clear();
this.extraProperties.putAll(extraProperties);
}
@Override
public void addExtraProperties(Map<String, Object> extraProperties) {
this.extraProperties.putAll(extraProperties);
}
@Override
public Map<String, Object> asMap(boolean full) {
if (!full && !isEnabled()) return Collections.emptyMap();
@@ -124,6 +147,7 @@ abstract class AbstractAnnouncer implements Announcer {
props.put("connectTimeout", connectTimeout);
props.put("readTimeout", readTimeout);
asMap(props);
props.put("extraProperties", getResolvedExtraProperties());
Map<String, Object> map = new LinkedHashMap<>();
map.put(getName(), props);

View File

@@ -53,6 +53,11 @@ abstract class AbstractUploader implements Uploader {
setExtraProperties(uploader.extraProperties);
}
@Override
public String getPrefix() {
return name;
}
@Override
public boolean isEnabled() {
return enabled;
@@ -207,8 +212,8 @@ abstract class AbstractUploader implements Uploader {
props.put("artifacts", isArtifacts());
props.put("files", isFiles());
props.put("signatures", isSignatures());
props.put("extraProperties", getResolvedExtraProperties());
asMap(props, full);
props.put("extraProperties", getResolvedExtraProperties());
Map<String, Object> map = new LinkedHashMap<>();
map.put(this.getName(), props);

View File

@@ -21,7 +21,7 @@ package org.jreleaser.model;
* @author Andres Almiray
* @since 0.1.0
*/
public interface Announcer extends Domain, Activatable, TimeoutAware {
public interface Announcer extends Domain, Activatable, TimeoutAware, ExtraProperties {
String getName();
boolean isSnapshotSupported();

View File

@@ -50,11 +50,6 @@ public class Artifactory extends AbstractUploader {
this.authorization = artifactory.authorization;
}
@Override
public String getPrefix() {
return NAME;
}
public Authorization resolveAuthorization() {
if (null == authorization) {
authorization = Authorization.BEARER;

View File

@@ -28,6 +28,7 @@ import static org.jreleaser.util.Constants.HIDE;
import static org.jreleaser.util.Constants.KEY_TAG_NAME;
import static org.jreleaser.util.Constants.UNSET;
import static org.jreleaser.util.MustacheUtils.applyTemplate;
import static org.jreleaser.util.MustacheUtils.applyTemplates;
import static org.jreleaser.util.StringUtils.isNotBlank;
/**
@@ -55,11 +56,13 @@ public class Discord extends AbstractAnnouncer {
public String getResolvedMessage(JReleaserContext context) {
Map<String, Object> props = context.props();
applyTemplates(props, getResolvedExtraProperties());
return applyTemplate(message, props);
}
public String getResolvedMessageTemplate(JReleaserContext context, Map<String, Object> extraProps) {
Map<String, Object> props = context.props();
applyTemplates(props, getResolvedExtraProperties());
props.put(KEY_TAG_NAME, context.getModel().getRelease().getGitService()
.getEffectiveTagName(context.getModel()));
props.putAll(extraProps);

View File

@@ -25,6 +25,7 @@ import java.nio.file.Path;
import java.util.Map;
import static org.jreleaser.util.MustacheUtils.applyTemplate;
import static org.jreleaser.util.MustacheUtils.applyTemplates;
/**
* @author Andres Almiray
@@ -54,16 +55,19 @@ public class Discussions extends AbstractAnnouncer {
public String getResolvedTitle(JReleaserContext context) {
Map<String, Object> props = context.props();
applyTemplates(props, getResolvedExtraProperties());
return applyTemplate(title, props);
}
public String getResolvedMessage(JReleaserContext context) {
Map<String, Object> props = context.props();
applyTemplates(props, getResolvedExtraProperties());
return applyTemplate(message, props);
}
public String getResolvedMessageTemplate(JReleaserContext context, Map<String, Object> extraProps) {
Map<String, Object> props = context.props();
applyTemplates(props, getResolvedExtraProperties());
props.put(Constants.KEY_TAG_NAME, context.getModel().getRelease().getGitService()
.getEffectiveTagName(context.getModel()));
props.putAll(extraProps);

View File

@@ -55,11 +55,6 @@ public class HttpUploader extends AbstractUploader {
setHeaders(http.headers);
}
@Override
public String getPrefix() {
return NAME;
}
public Authorization resolveAuthorization() {
if (null == authorization) {
authorization = Authorization.NONE;

View File

@@ -29,6 +29,7 @@ import static org.jreleaser.util.Constants.HIDE;
import static org.jreleaser.util.Constants.KEY_TAG_NAME;
import static org.jreleaser.util.Constants.UNSET;
import static org.jreleaser.util.MustacheUtils.applyTemplate;
import static org.jreleaser.util.MustacheUtils.applyTemplates;
import static org.jreleaser.util.StringUtils.isNotBlank;
/**
@@ -81,18 +82,21 @@ public class Mail extends AbstractAnnouncer {
public String getResolvedSubject(JReleaserContext context) {
Map<String, Object> props = context.props();
applyTemplates(props, getResolvedExtraProperties());
props.put(KEY_TAG_NAME, context.getModel().getRelease().getGitService().getEffectiveTagName(context.getModel()));
return applyTemplate(subject, props);
}
public String getResolvedMessage(JReleaserContext context) {
Map<String, Object> props = context.props();
applyTemplates(props, getResolvedExtraProperties());
props.put(KEY_TAG_NAME, context.getModel().getRelease().getGitService().getEffectiveTagName(context.getModel()));
return applyTemplate(message, props);
}
public String getResolvedMessageTemplate(JReleaserContext context, Map<String, Object> extraProps) {
Map<String, Object> props = context.props();
applyTemplates(props, getResolvedExtraProperties());
props.put(KEY_TAG_NAME, context.getModel().getRelease().getGitService()
.getEffectiveTagName(context.getModel()));
props.putAll(extraProps);

View File

@@ -24,6 +24,7 @@ import java.util.Map;
import static org.jreleaser.util.Constants.HIDE;
import static org.jreleaser.util.Constants.UNSET;
import static org.jreleaser.util.MustacheUtils.applyTemplate;
import static org.jreleaser.util.MustacheUtils.applyTemplates;
import static org.jreleaser.util.StringUtils.isNotBlank;
/**
@@ -51,6 +52,7 @@ public class Mastodon extends AbstractAnnouncer {
public String getResolvedStatus(JReleaserContext context) {
Map<String, Object> props = context.props();
applyTemplates(props, getResolvedExtraProperties());
context.getModel().getRelease().getGitService().fillProps(props, context.getModel());
return applyTemplate(status, props);
}

View File

@@ -28,6 +28,7 @@ import static org.jreleaser.util.Constants.HIDE;
import static org.jreleaser.util.Constants.KEY_TAG_NAME;
import static org.jreleaser.util.Constants.UNSET;
import static org.jreleaser.util.MustacheUtils.applyTemplate;
import static org.jreleaser.util.MustacheUtils.applyTemplates;
import static org.jreleaser.util.StringUtils.isNotBlank;
/**
@@ -55,11 +56,13 @@ public class Mattermost extends AbstractAnnouncer {
public String getResolvedMessage(JReleaserContext context) {
Map<String, Object> props = context.props();
applyTemplates(props, getResolvedExtraProperties());
return applyTemplate(message, props);
}
public String getResolvedMessageTemplate(JReleaserContext context, Map<String, Object> extraProps) {
Map<String, Object> props = context.props();
applyTemplates(props, getResolvedExtraProperties());
props.put(KEY_TAG_NAME, context.getModel().getRelease().getGitService()
.getEffectiveTagName(context.getModel()));
props.putAll(extraProps);

View File

@@ -28,6 +28,7 @@ import static org.jreleaser.util.Constants.HIDE;
import static org.jreleaser.util.Constants.KEY_TAG_NAME;
import static org.jreleaser.util.Constants.UNSET;
import static org.jreleaser.util.MustacheUtils.applyTemplate;
import static org.jreleaser.util.MustacheUtils.applyTemplates;
import static org.jreleaser.util.StringUtils.isNotBlank;
/**
@@ -60,11 +61,13 @@ public class Slack extends AbstractAnnouncer {
public String getResolvedMessage(JReleaserContext context) {
Map<String, Object> props = context.props();
applyTemplates(props, getResolvedExtraProperties());
return applyTemplate(message, props);
}
public String getResolvedMessageTemplate(JReleaserContext context, Map<String, Object> extraProps) {
Map<String, Object> props = context.props();
applyTemplates(props, getResolvedExtraProperties());
props.put(KEY_TAG_NAME, context.getModel().getRelease().getGitService()
.getEffectiveTagName(context.getModel()));
props.putAll(extraProps);

View File

@@ -28,6 +28,7 @@ import static org.jreleaser.util.Constants.HIDE;
import static org.jreleaser.util.Constants.KEY_TAG_NAME;
import static org.jreleaser.util.Constants.UNSET;
import static org.jreleaser.util.MustacheUtils.applyTemplate;
import static org.jreleaser.util.MustacheUtils.applyTemplates;
import static org.jreleaser.util.StringUtils.isNotBlank;
/**
@@ -53,6 +54,7 @@ public class Teams extends AbstractAnnouncer {
public String getResolvedMessageTemplate(JReleaserContext context, Map<String, Object> extraProps) {
Map<String, Object> props = context.props();
applyTemplates(props, getResolvedExtraProperties());
props.put(KEY_TAG_NAME, context.getModel().getRelease().getGitService()
.getEffectiveTagName(context.getModel()));
props.putAll(extraProps);

View File

@@ -24,6 +24,7 @@ import java.util.Map;
import static org.jreleaser.util.Constants.HIDE;
import static org.jreleaser.util.Constants.UNSET;
import static org.jreleaser.util.MustacheUtils.applyTemplate;
import static org.jreleaser.util.MustacheUtils.applyTemplates;
import static org.jreleaser.util.StringUtils.isNotBlank;
/**
@@ -58,6 +59,7 @@ public class Twitter extends AbstractAnnouncer {
public String getResolvedStatus(JReleaserContext context) {
Map<String, Object> props = context.props();
applyTemplates(props, getResolvedExtraProperties());
context.getModel().getRelease().getGitService().fillProps(props, context.getModel());
return applyTemplate(status, props);
}

View File

@@ -28,6 +28,7 @@ import static org.jreleaser.util.Constants.HIDE;
import static org.jreleaser.util.Constants.KEY_TAG_NAME;
import static org.jreleaser.util.Constants.UNSET;
import static org.jreleaser.util.MustacheUtils.applyTemplate;
import static org.jreleaser.util.MustacheUtils.applyTemplates;
import static org.jreleaser.util.StringUtils.isNotBlank;
/**
@@ -63,16 +64,19 @@ public class Zulip extends AbstractAnnouncer {
public String getResolvedSubject(JReleaserContext context) {
Map<String, Object> props = context.props();
applyTemplates(props, getResolvedExtraProperties());
return applyTemplate(subject, props);
}
public String getResolvedMessage(JReleaserContext context) {
Map<String, Object> props = context.props();
applyTemplates(props, getResolvedExtraProperties());
return applyTemplate(message, props);
}
public String getResolvedMessageTemplate(JReleaserContext context, Map<String, Object> extraProps) {
Map<String, Object> props = context.props();
applyTemplates(props, getResolvedExtraProperties());
props.put(KEY_TAG_NAME, context.getModel().getRelease().getGitService()
.getEffectiveTagName(context.getModel()));
props.putAll(extraProps);

View File

@@ -27,7 +27,7 @@ import org.jreleaser.model.Active
* @since 0.1.0
*/
@CompileStatic
interface Announcer {
interface Announcer extends ExtraProperties {
Property<Active> getActive()
Property<Integer> getConnectTimeout()

View File

@@ -20,6 +20,7 @@ package org.jreleaser.gradle.plugin.internal.dsl
import groovy.transform.CompileStatic
import org.gradle.api.internal.provider.Providers
import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.MapProperty
import org.gradle.api.provider.Property
import org.gradle.api.tasks.Internal
import org.jreleaser.gradle.plugin.dsl.Announcer
@@ -39,19 +40,22 @@ abstract class AbstractAnnouncer implements Announcer {
final Property<Active> active
final Property<Integer> connectTimeout
final Property<Integer> readTimeout
final MapProperty<String, Object> extraProperties
@Inject
AbstractAnnouncer(ObjectFactory objects) {
active = objects.property(Active).convention(Providers.notDefined())
connectTimeout = objects.property(Integer).convention(Providers.notDefined())
readTimeout = objects.property(Integer).convention(Providers.notDefined())
extraProperties = objects.mapProperty(String, Object).convention(Providers.notDefined())
}
@Internal
boolean isSet() {
active.present ||
connectTimeout.present ||
readTimeout.present
readTimeout.present ||
extraProperties.present
}
@Override
@@ -65,5 +69,6 @@ abstract class AbstractAnnouncer implements Announcer {
if (active.present) announcer.active = active.get()
if (connectTimeout.present) announcer.connectTimeout = connectTimeout.get()
if (readTimeout.present) announcer.readTimeout = readTimeout.get()
if (extraProperties.present) announcer.extraProperties.putAll(extraProperties.get())
}
}

View File

@@ -17,11 +17,15 @@
*/
package org.jreleaser.maven.plugin;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author Andres Almiray
* @since 0.1.0
*/
abstract class AbstractAnnouncer implements Announcer {
private final Map<String, Object> extraProperties = new LinkedHashMap<>();
protected Active active;
private int connectTimeout;
private int readTimeout;
@@ -30,6 +34,7 @@ abstract class AbstractAnnouncer implements Announcer {
this.active = announcer.active;
this.connectTimeout = announcer.connectTimeout;
this.readTimeout = announcer.readTimeout;
setExtraProperties(announcer.extraProperties);
}
@Override
@@ -67,9 +72,21 @@ abstract class AbstractAnnouncer implements Announcer {
this.readTimeout = readTimeout;
}
@Override
public Map<String, Object> getExtraProperties() {
return extraProperties;
}
@Override
public void setExtraProperties(Map<String, Object> extraProperties) {
this.extraProperties.clear();
this.extraProperties.putAll(extraProperties);
}
public boolean isSet() {
return active != null ||
connectTimeout != 0 ||
readTimeout != 0;
readTimeout != 0 ||
!extraProperties.isEmpty();
}
}

View File

@@ -21,5 +21,5 @@ package org.jreleaser.maven.plugin;
* @author Andres Almiray
* @since 0.1.0
*/
public interface Announcer extends Activatable, TimeoutAware {
public interface Announcer extends Activatable, TimeoutAware, ExtraProperties {
}

View File

@@ -390,6 +390,7 @@ public final class JReleaserModelConverter {
a.setMessageTemplate(discord.getMessageTemplate());
a.setConnectTimeout(discord.getConnectTimeout());
a.setReadTimeout(discord.getReadTimeout());
a.setExtraProperties(discord.getExtraProperties());
return a;
}
@@ -403,6 +404,7 @@ public final class JReleaserModelConverter {
a.setMessageTemplate(discussions.getMessageTemplate());
a.setConnectTimeout(discussions.getConnectTimeout());
a.setReadTimeout(discussions.getReadTimeout());
a.setExtraProperties(discussions.getExtraProperties());
return a;
}
@@ -414,6 +416,7 @@ public final class JReleaserModelConverter {
a.setMessageTemplate(gitter.getMessageTemplate());
a.setConnectTimeout(gitter.getConnectTimeout());
a.setReadTimeout(gitter.getReadTimeout());
a.setExtraProperties(gitter.getExtraProperties());
return a;
}
@@ -433,6 +436,7 @@ public final class JReleaserModelConverter {
a.setSubject(mail.getSubject());
a.setMessage(mail.getMessage());
a.setMessageTemplate(mail.getMessageTemplate());
a.setExtraProperties(mail.getExtraProperties());
return a;
}
@@ -444,6 +448,7 @@ public final class JReleaserModelConverter {
a.setStatus(mastodon.getStatus());
a.setConnectTimeout(mastodon.getConnectTimeout());
a.setReadTimeout(mastodon.getReadTimeout());
a.setExtraProperties(mastodon.getExtraProperties());
return a;
}
@@ -455,6 +460,7 @@ public final class JReleaserModelConverter {
a.setMessageTemplate(mattermost.getMessageTemplate());
a.setConnectTimeout(mattermost.getConnectTimeout());
a.setReadTimeout(mattermost.getReadTimeout());
a.setExtraProperties(mattermost.getExtraProperties());
return a;
}
@@ -467,6 +473,7 @@ public final class JReleaserModelConverter {
a.setMajor(sdkman.isMajor());
a.setConnectTimeout(sdkman.getConnectTimeout());
a.setReadTimeout(sdkman.getReadTimeout());
a.setExtraProperties(sdkman.getExtraProperties());
return a;
}
@@ -480,6 +487,7 @@ public final class JReleaserModelConverter {
a.setMessageTemplate(slack.getMessageTemplate());
a.setConnectTimeout(slack.getConnectTimeout());
a.setReadTimeout(slack.getReadTimeout());
a.setExtraProperties(slack.getExtraProperties());
return a;
}
@@ -490,6 +498,7 @@ public final class JReleaserModelConverter {
a.setMessageTemplate(teams.getMessageTemplate());
a.setConnectTimeout(teams.getConnectTimeout());
a.setReadTimeout(teams.getReadTimeout());
a.setExtraProperties(teams.getExtraProperties());
return a;
}
@@ -503,6 +512,7 @@ public final class JReleaserModelConverter {
a.setStatus(twitter.getStatus());
a.setConnectTimeout(twitter.getConnectTimeout());
a.setReadTimeout(twitter.getReadTimeout());
a.setExtraProperties(twitter.getExtraProperties());
return a;
}
@@ -518,6 +528,7 @@ public final class JReleaserModelConverter {
a.setMessageTemplate(zulip.getMessageTemplate());
a.setConnectTimeout(zulip.getConnectTimeout());
a.setReadTimeout(zulip.getReadTimeout());
a.setExtraProperties(zulip.getExtraProperties());
return a;
}