Skip to content

Commit

Permalink
feat(announce): Let mattermoost and Webhook post non structured messa…
Browse files Browse the repository at this point in the history
…ges. Resolves #1080
  • Loading branch information
aalmiray committed Dec 1, 2022
1 parent 311bfe0 commit 800ab00
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 8 deletions.
Expand Up @@ -30,4 +30,6 @@ public interface MattermostAnnouncer extends Announcer {
String getMessage();

String getMessageTemplate();

boolean isStructuredMessage();
}
Expand Up @@ -29,4 +29,6 @@ public interface WebhookAnnouncer extends Announcer {
String getMessageProperty();

String getMessageTemplate();

boolean isStructuredMessage();
}
Expand Up @@ -45,6 +45,7 @@ public final class MattermostAnnouncer extends AbstractAnnouncer<MattermostAnnou
private String webhook;
private String message;
private String messageTemplate;
private Boolean structuredMessage;

private final org.jreleaser.model.api.announce.MattermostAnnouncer immutable = new org.jreleaser.model.api.announce.MattermostAnnouncer() {
@Override
Expand All @@ -67,6 +68,11 @@ public String getMessageTemplate() {
return messageTemplate;
}

@Override
public boolean isStructuredMessage() {
return MattermostAnnouncer.this.isStructuredMessage();
}

@Override
public String getName() {
return name;
Expand Down Expand Up @@ -128,6 +134,7 @@ public void merge(MattermostAnnouncer source) {
this.webhook = merge(this.webhook, source.webhook);
this.message = merge(this.message, source.message);
this.messageTemplate = merge(this.messageTemplate, source.messageTemplate);
this.structuredMessage = merge(this.structuredMessage, source.structuredMessage);
}

public String getResolvedMessage(JReleaserContext context) {
Expand Down Expand Up @@ -177,10 +184,19 @@ public void setMessageTemplate(String messageTemplate) {
this.messageTemplate = messageTemplate;
}

public boolean isStructuredMessage() {
return structuredMessage == null || structuredMessage;
}

public void setStructuredMessage(Boolean structuredMessage) {
this.structuredMessage = structuredMessage;
}

@Override
protected void asMap(boolean full, Map<String, Object> props) {
props.put("webhook", isNotBlank(webhook) ? HIDE : UNSET);
props.put("message", message);
props.put("messageTemplate", messageTemplate);
props.put("structuredMessage", isStructuredMessage());
}
}
Expand Up @@ -45,6 +45,7 @@ public final class WebhookAnnouncer extends AbstractAnnouncer<WebhookAnnouncer,
private String message;
private String messageProperty;
private String messageTemplate;
private Boolean structuredMessage;

private final org.jreleaser.model.api.announce.WebhookAnnouncer immutable = new org.jreleaser.model.api.announce.WebhookAnnouncer() {
@Override
Expand Down Expand Up @@ -72,6 +73,11 @@ public String getMessageTemplate() {
return messageTemplate;
}

@Override
public boolean isStructuredMessage() {
return WebhookAnnouncer.this.isStructuredMessage();
}

@Override
public String getName() {
return name;
Expand Down Expand Up @@ -135,6 +141,7 @@ public void merge(WebhookAnnouncer source) {
this.message = merge(this.message, source.message);
this.messageTemplate = merge(this.messageTemplate, source.messageTemplate);
this.messageProperty = merge(this.messageProperty, source.messageProperty);
this.structuredMessage = merge(this.structuredMessage, source.structuredMessage);
}

public String getResolvedMessage(JReleaserContext context) {
Expand Down Expand Up @@ -201,11 +208,20 @@ public void setMessageTemplate(String messageTemplate) {
this.messageTemplate = messageTemplate;
}

public boolean isStructuredMessage() {
return structuredMessage != null && structuredMessage;
}

public void setStructuredMessage(Boolean structuredMessage) {
this.structuredMessage = structuredMessage;
}

@Override
protected void asMap(boolean full, Map<String, Object> props) {
props.put("webhook", isNotBlank(webhook) ? HIDE : UNSET);
props.put("message", message);
props.put("messageProperty", messageProperty);
props.put("messageTemplate", messageTemplate);
props.put("structuredMessage", isStructuredMessage());
}
}
Expand Up @@ -34,7 +34,8 @@
* @since 0.4.0
*/
@org.jreleaser.infra.nativeimage.annotations.NativeImage
public class MattermostAnnouncer implements Announcer<org.jreleaser.model.api.announce.MattermostAnnouncer> {
public class
MattermostAnnouncer implements Announcer<org.jreleaser.model.api.announce.MattermostAnnouncer> {
private final JReleaserContext context;
private final org.jreleaser.model.internal.announce.MattermostAnnouncer mattermost;

Expand Down Expand Up @@ -70,14 +71,15 @@ public void announce() throws AnnounceException {
message = mattermost.getResolvedMessageTemplate(context, props);
}

context.getLogger().info("message: {}", message);
Object msg = mattermost.isStructuredMessage() ? Message.of(message) : message;
context.getLogger().info("message: {}", msg);

if (!context.isDryrun()) {
ClientUtils.webhook(context.getLogger(),
mattermost.getWebhook(),
mattermost.getConnectTimeout(),
mattermost.getReadTimeout(),
Message.of(message));
msg);
}
}
}
Expand Up @@ -88,18 +88,20 @@ public void announce(WebhookAnnouncer webhook) throws AnnounceException {
String message = "";
if (isNotBlank(webhook.getMessage())) {
message = webhook.getResolvedMessage(context);
} else {
Map<String, Object> props = new LinkedHashMap<>();
props.put(Constants.KEY_CHANGELOG, MustacheUtils.passThrough(context.getChangelog()));
context.getModel().getRelease().getReleaser().fillProps(props, context.getModel());
message = webhook.getResolvedMessageTemplate(context, props);
}

if (webhook.isStructuredMessage() && isNotBlank(webhook.getMessageProperty())) {
ObjectMapper objectMapper = new ObjectMapper();
try {
message = objectMapper.writeValueAsString(CollectionUtils.mapOf(webhook.getMessageProperty(), message));
} catch (JsonProcessingException e) {
throw new AnnounceException(RB.$("ERROR_unexpected_json_format"), e);
}
} else {
Map<String, Object> props = new LinkedHashMap<>();
props.put(Constants.KEY_CHANGELOG, MustacheUtils.passThrough(context.getChangelog()));
context.getModel().getRelease().getReleaser().fillProps(props, context.getModel());
message = webhook.getResolvedMessageTemplate(context, props);
}

context.getLogger().info("message: {}", message);
Expand Down

0 comments on commit 800ab00

Please sign in to comment.