@litebox-packages/release-notes-bot 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +10 -1
- package/dist/cli.js.map +1 -1
- package/dist/contextDetector.d.ts +11 -0
- package/dist/contextDetector.d.ts.map +1 -0
- package/dist/contextDetector.js +71 -0
- package/dist/contextDetector.js.map +1 -0
- package/dist/slackClient.d.ts +2 -1
- package/dist/slackClient.d.ts.map +1 -1
- package/dist/slackClient.js +80 -2
- package/dist/slackClient.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -7,6 +7,7 @@ const dataSanitizer_1 = require("./dataSanitizer");
|
|
|
7
7
|
const promptInstructions_1 = require("./promptInstructions");
|
|
8
8
|
const openaiClient_1 = require("./openaiClient");
|
|
9
9
|
const slackClient_1 = require("./slackClient");
|
|
10
|
+
const contextDetector_1 = require("./contextDetector");
|
|
10
11
|
const isAssetFile = (filePath) => {
|
|
11
12
|
const lowerPath = filePath.toLowerCase();
|
|
12
13
|
// Check for asset file extensions
|
|
@@ -71,6 +72,14 @@ const main = async () => {
|
|
|
71
72
|
const { before, after, projectId, token, openaiToken, slackToken, slackChannelId, } = parseArgs();
|
|
72
73
|
console.log(`Fetching diff between ${before} and ${after}...`);
|
|
73
74
|
const result = await (0, getDiff_1.getDiff)(before, after, projectId, token);
|
|
75
|
+
// Detect context (merge vs single commit)
|
|
76
|
+
const context = (0, contextDetector_1.detectContext)(result);
|
|
77
|
+
if (context.type === "merge") {
|
|
78
|
+
console.log(`Context: Merge request${context.branchName ? ` from branch '${context.branchName}'` : ""}`);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
console.log(`Context: Single commit${context.commitTitle ? ` - ${context.commitTitle}` : ""}`);
|
|
82
|
+
}
|
|
74
83
|
// Filter assets and sanitize diffs
|
|
75
84
|
const filteredDiffs = filterAssetDiffs(result.diffs);
|
|
76
85
|
const sanitizedDiffs = (0, dataSanitizer_1.sanitizeDiffs)(filteredDiffs);
|
|
@@ -125,7 +134,7 @@ const main = async () => {
|
|
|
125
134
|
if (slackToken && slackChannelId) {
|
|
126
135
|
try {
|
|
127
136
|
console.log("\nSending release notes to Slack...");
|
|
128
|
-
await (0, slackClient_1.sendSlackMessage)(slackToken, slackChannelId, content);
|
|
137
|
+
await (0, slackClient_1.sendSlackMessage)(slackToken, slackChannelId, content, context);
|
|
129
138
|
console.log("✓ Release notes sent to Slack successfully");
|
|
130
139
|
}
|
|
131
140
|
catch (slackError) {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AAEA,uCAAoC;AAEpC,qDAAoE;AACpE,mDAAgD;AAChD,6DAI8B;AAC9B,iDAAsD;AACtD,+CAAiD;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { GitLabCompareResponse } from "./types";
|
|
2
|
+
export interface ReleaseContext {
|
|
3
|
+
type: "merge" | "single";
|
|
4
|
+
branchName?: string;
|
|
5
|
+
commitTitle?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Detects the context of the release notes (merge request vs single commit)
|
|
9
|
+
*/
|
|
10
|
+
export declare const detectContext: (data: GitLabCompareResponse) => ReleaseContext;
|
|
11
|
+
//# sourceMappingURL=contextDetector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contextDetector.d.ts","sourceRoot":"","sources":["../src/contextDetector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA6CD;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,qBAAqB,KAAG,cAiC3D,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.detectContext = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Extracts branch name from merge commit message
|
|
6
|
+
* Handles patterns like:
|
|
7
|
+
* - "Merge branch 'feature-branch' into 'main'"
|
|
8
|
+
* - "Merge branch 'feature-branch'"
|
|
9
|
+
* - "Merge !123 from feature-branch"
|
|
10
|
+
*/
|
|
11
|
+
const extractBranchNameFromMergeCommit = (commitMessage) => {
|
|
12
|
+
// Pattern 1: "Merge branch 'branch-name' into 'target'"
|
|
13
|
+
const pattern1 = /merge\s+branch\s+['"]([^'"]+)['"]/i;
|
|
14
|
+
const match1 = commitMessage.match(pattern1);
|
|
15
|
+
if (match1 && match1[1]) {
|
|
16
|
+
return match1[1];
|
|
17
|
+
}
|
|
18
|
+
// Pattern 2: "Merge !123 from branch-name"
|
|
19
|
+
const pattern2 = /merge\s+!\d+\s+from\s+(\S+)/i;
|
|
20
|
+
const match2 = commitMessage.match(pattern2);
|
|
21
|
+
if (match2 && match2[1]) {
|
|
22
|
+
return match2[1];
|
|
23
|
+
}
|
|
24
|
+
// Pattern 3: "Merge branch branch-name" (without quotes)
|
|
25
|
+
const pattern3 = /merge\s+branch\s+(\S+)/i;
|
|
26
|
+
const match3 = commitMessage.match(pattern3);
|
|
27
|
+
if (match3 && match3[1]) {
|
|
28
|
+
return match3[1];
|
|
29
|
+
}
|
|
30
|
+
return undefined;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Checks if a commit is a merge commit
|
|
34
|
+
*/
|
|
35
|
+
const isMergeCommit = (commit) => {
|
|
36
|
+
const titleLower = commit.title.toLowerCase();
|
|
37
|
+
return (titleLower.startsWith("merge") ||
|
|
38
|
+
commit.parent_ids.length > 1);
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Detects the context of the release notes (merge request vs single commit)
|
|
42
|
+
*/
|
|
43
|
+
const detectContext = (data) => {
|
|
44
|
+
const { commits } = data;
|
|
45
|
+
if (commits.length === 0) {
|
|
46
|
+
// Fallback: use the commit from the compare response
|
|
47
|
+
return {
|
|
48
|
+
type: "single",
|
|
49
|
+
commitTitle: data.commit.title,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
// Check if any commit is a merge commit
|
|
53
|
+
const mergeCommits = commits.filter(isMergeCommit);
|
|
54
|
+
if (mergeCommits.length > 0) {
|
|
55
|
+
// It's a merge request - extract branch name from the first merge commit
|
|
56
|
+
const firstMergeCommit = mergeCommits[0];
|
|
57
|
+
const branchName = extractBranchNameFromMergeCommit(firstMergeCommit.message || firstMergeCommit.title);
|
|
58
|
+
return {
|
|
59
|
+
type: "merge",
|
|
60
|
+
branchName: branchName || undefined,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
// Single commit - use the first commit's title
|
|
64
|
+
const firstCommit = commits[0];
|
|
65
|
+
return {
|
|
66
|
+
type: "single",
|
|
67
|
+
commitTitle: firstCommit.title,
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
exports.detectContext = detectContext;
|
|
71
|
+
//# sourceMappingURL=contextDetector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contextDetector.js","sourceRoot":"","sources":["../src/contextDetector.ts"],"names":[],"mappings":";;;AAQA;;;;;;GAMG;AACH,MAAM,gCAAgC,GAAG,CAAC,aAAqB,EAAsB,EAAE;IACrF,wDAAwD;IACxD,MAAM,QAAQ,GAAG,oCAAoC,CAAC;IACtD,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,2CAA2C;IAC3C,MAAM,QAAQ,GAAG,8BAA8B,CAAC;IAChD,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,yDAAyD;IACzD,MAAM,QAAQ,GAAG,yBAAyB,CAAC;IAC3C,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,aAAa,GAAG,CAAC,MAA+C,EAAW,EAAE;IACjF,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IAC9C,OAAO,CACL,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC;QAC9B,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAC7B,CAAC;AACJ,CAAC,CAAC;AAEF;;GAEG;AACI,MAAM,aAAa,GAAG,CAAC,IAA2B,EAAkB,EAAE;IAC3E,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAEzB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,qDAAqD;QACrD,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;SAC/B,CAAC;IACJ,CAAC;IAED,wCAAwC;IACxC,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAEnD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,yEAAyE;QACzE,MAAM,gBAAgB,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,gCAAgC,CACjD,gBAAgB,CAAC,OAAO,IAAI,gBAAgB,CAAC,KAAK,CACnD,CAAC;QAEF,OAAO;YACL,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,UAAU,IAAI,SAAS;SACpC,CAAC;IACJ,CAAC;IAED,+CAA+C;IAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/B,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,WAAW,CAAC,KAAK;KAC/B,CAAC;AACJ,CAAC,CAAC;AAjCW,QAAA,aAAa,iBAiCxB"}
|
package/dist/slackClient.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
1
|
+
import { ReleaseContext } from "./contextDetector";
|
|
2
|
+
export declare const sendSlackMessage: (slackToken: string, channelId: string, markdownText: string, context?: ReleaseContext) => Promise<void>;
|
|
2
3
|
//# sourceMappingURL=slackClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slackClient.d.ts","sourceRoot":"","sources":["../src/slackClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"slackClient.d.ts","sourceRoot":"","sources":["../src/slackClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAsInD,eAAO,MAAM,gBAAgB,GAC3B,YAAY,MAAM,EAClB,WAAW,MAAM,EACjB,cAAc,MAAM,EACpB,UAAU,cAAc,KACvB,OAAO,CAAC,IAAI,CAkGd,CAAC"}
|
package/dist/slackClient.js
CHANGED
|
@@ -5,6 +5,32 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.sendSlackMessage = void 0;
|
|
7
7
|
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
/**
|
|
9
|
+
* Creates a context header block for Slack with underline
|
|
10
|
+
*/
|
|
11
|
+
const createContextHeader = (context) => {
|
|
12
|
+
const blocks = [];
|
|
13
|
+
if (context.type === "merge") {
|
|
14
|
+
const branchName = context.branchName || "unknown branch";
|
|
15
|
+
blocks.push({
|
|
16
|
+
type: "section",
|
|
17
|
+
text: {
|
|
18
|
+
type: "mrkdwn",
|
|
19
|
+
text: `_Merge of_ \`${branchName}\` _branch_`,
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
else if (context.type === "single" && context.commitTitle) {
|
|
24
|
+
blocks.push({
|
|
25
|
+
type: "section",
|
|
26
|
+
text: {
|
|
27
|
+
type: "mrkdwn",
|
|
28
|
+
text: `Commit: \`${context.commitTitle}\``,
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
return blocks;
|
|
33
|
+
};
|
|
8
34
|
/**
|
|
9
35
|
* Converts markdown release notes to Slack Block Kit format
|
|
10
36
|
*/
|
|
@@ -72,15 +98,67 @@ const convertMarkdownToSlackBlocks = (markdown) => {
|
|
|
72
98
|
flushSection();
|
|
73
99
|
return blocks;
|
|
74
100
|
};
|
|
75
|
-
const sendSlackMessage = async (slackToken, channelId, markdownText) => {
|
|
101
|
+
const sendSlackMessage = async (slackToken, channelId, markdownText, context) => {
|
|
76
102
|
try {
|
|
77
103
|
// Convert markdown to Slack Block Kit format
|
|
78
104
|
const blocks = convertMarkdownToSlackBlocks(markdownText);
|
|
105
|
+
// Insert context header after "Summary" section content if provided
|
|
106
|
+
if (context) {
|
|
107
|
+
const contextBlocks = createContextHeader(context);
|
|
108
|
+
if (contextBlocks.length > 0) {
|
|
109
|
+
// Find the "Summary" header and then find its content section
|
|
110
|
+
let insertIndex = -1;
|
|
111
|
+
for (let i = 0; i < blocks.length; i++) {
|
|
112
|
+
const block = blocks[i];
|
|
113
|
+
if (block.type === "header" &&
|
|
114
|
+
block.text?.text?.toLowerCase().includes("summary")) {
|
|
115
|
+
// Find the section content block that follows the Summary header
|
|
116
|
+
for (let j = i + 1; j < blocks.length; j++) {
|
|
117
|
+
if (blocks[j].type === "section") {
|
|
118
|
+
// Insert after this section block (after the summary paragraph)
|
|
119
|
+
insertIndex = j + 1;
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
// If we hit a divider or header before finding section, insert after header
|
|
123
|
+
if (blocks[j].type === "divider" || blocks[j].type === "header") {
|
|
124
|
+
insertIndex = j;
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// If Summary section not found, insert after first section content
|
|
132
|
+
if (insertIndex === -1) {
|
|
133
|
+
for (let i = 0; i < blocks.length; i++) {
|
|
134
|
+
if (blocks[i].type === "section") {
|
|
135
|
+
insertIndex = i + 1;
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Fallback: insert at start if no sections found
|
|
140
|
+
if (insertIndex === -1) {
|
|
141
|
+
insertIndex = 0;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Insert context blocks (section + divider for underline)
|
|
145
|
+
blocks.splice(insertIndex, 0, ...contextBlocks);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
79
148
|
// Fallback text for notifications
|
|
80
|
-
|
|
149
|
+
let fallbackText = markdownText
|
|
81
150
|
.replace(/##\s*/g, "")
|
|
82
151
|
.replace(/\*\*(.+?)\*\*/g, "$1")
|
|
83
152
|
.substring(0, 200);
|
|
153
|
+
// Add context to fallback text if provided
|
|
154
|
+
if (context) {
|
|
155
|
+
const contextText = context.type === "merge"
|
|
156
|
+
? `Merge of ${context.branchName || "unknown branch"} branch\n\n`
|
|
157
|
+
: context.commitTitle
|
|
158
|
+
? `Commit: '${context.commitTitle}'\n\n`
|
|
159
|
+
: "";
|
|
160
|
+
fallbackText = contextText + fallbackText;
|
|
161
|
+
}
|
|
84
162
|
const response = await axios_1.default.post("https://slack.com/api/chat.postMessage", {
|
|
85
163
|
channel: channelId,
|
|
86
164
|
text: fallbackText,
|
package/dist/slackClient.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slackClient.js","sourceRoot":"","sources":["../src/slackClient.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;
|
|
1
|
+
{"version":3,"file":"slackClient.js","sourceRoot":"","sources":["../src/slackClient.ts"],"names":[],"mappings":"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"}
|