From 00f43aa711441d2b155c2ca0bf3df5088ec4a360 Mon Sep 17 00:00:00 2001 From: Adam Dierkens Date: Thu, 13 Jul 2023 10:16:24 -0400 Subject: [PATCH] Add support for filtering which releases get posted to slack --- plugins/slack/src/index.ts | 39 ++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/plugins/slack/src/index.ts b/plugins/slack/src/index.ts index 859036aa4..464e6befc 100644 --- a/plugins/slack/src/index.ts +++ b/plugins/slack/src/index.ts @@ -223,6 +223,15 @@ const urlPluginOptions = t.intersection([ basePluginOptions, ]); +const messageFilterOptions = t.partial({ + filter: t.partial({ + /** Only post when these packages are changed */ + packages: t.array(t.string), + /** Only post when these strings are found */ + search: t.array(t.string), + }), +}); + const appPluginOptions = t.intersection([ t.interface({ /** Marks we are gonna use app auth */ @@ -233,7 +242,10 @@ const appPluginOptions = t.intersection([ basePluginOptions, ]); -const pluginOptions = t.union([urlPluginOptions, appPluginOptions]); +const pluginOptions = t.intersection([ + t.union([urlPluginOptions, appPluginOptions]), + messageFilterOptions, +]); export type ISlackPluginOptions = t.TypeOf; @@ -331,13 +343,24 @@ export default class SlackPlugin implements IPlugin { const proxyUrl = process.env.https_proxy || process.env.http_proxy; const agent = proxyUrl ? createHttpsProxyAgent(proxyUrl) : undefined; - await this.createPost( - auto, - header, - sanitizeMarkdown(releaseNotes), - releases, - agent - ); + const sanitizedNotes = sanitizeMarkdown(releaseNotes); + + if ( + this.options.filter?.packages && + !this.options.filter.packages.some((p) => releaseNotes.includes(p)) + ) { + return; + } + + // Only post if the search strings match the filter + if ( + this.options.filter?.search && + !this.options.filter.search.some((p) => releaseNotes.includes(p)) + ) { + return; + } + + await this.createPost(auto, header, sanitizedNotes, releases, agent); } ); }