Skip to content

Commit 84185b2

Browse files
committed
feat: add comment on pr merge
1 parent 5bfa2df commit 84185b2

File tree

2 files changed

+79
-9
lines changed

2 files changed

+79
-9
lines changed

app.js

Lines changed: 46 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@ import url from "url";
55
import { Octokit, App } from "octokit";
66
import { createNodeMiddleware } from "@octokit/webhooks";
77
import { routes } from "./src/routes.js";
8-
import { getMessage, isCLARequired } from "./src/helpers.js";
8+
import {
9+
getMessage,
10+
isCLARequired,
11+
isMessageAfterMergeRequired,
12+
} from "./src/helpers.js";
913

1014
// Load environment variables from .env file
1115
dotenv.config();
@@ -60,16 +64,17 @@ app.webhooks.on("pull_request.opened", async ({ octokit, payload }) => {
6064
}
6165
// If the user is not a member of the organization and haven't yet signed CLA,
6266
// ask them to sign the CLA
67+
const comment = getMessage("ask-to-sign-cla", {
68+
username: payload.pull_request.user.login,
69+
org: payload.repository.owner.login,
70+
repo: payload.repository.name,
71+
pr_number: payload.pull_request.number,
72+
});
6373
await octokit.rest.issues.createComment({
6474
owner: payload.repository.owner.login,
6575
repo: payload.repository.name,
6676
issue_number: payload.pull_request.number,
67-
body: getMessage("ask-to-sign-cla", {
68-
username: payload.pull_request.user.login,
69-
org: payload.repository.owner.login,
70-
repo: payload.repository.name,
71-
pr_number: payload.pull_request.number,
72-
}),
77+
body: comment,
7378
});
7479
// Add a label to the PR
7580
octokit.rest.issues.addLabels({
@@ -89,6 +94,40 @@ app.webhooks.on("pull_request.opened", async ({ octokit, payload }) => {
8994
}
9095
});
9196

97+
app.webhooks.on("pull_request.closed", async ({ octokit, payload }) => {
98+
console.log(
99+
`Closed a pull request event for #${payload.pull_request.number}`,
100+
);
101+
if (!payload.pull_request.merged) return;
102+
console.log(`This PR is merged`);
103+
try {
104+
if (!isMessageAfterMergeRequired()) {
105+
return;
106+
}
107+
console.log(`Going to notify the PR author...`);
108+
const comment = getMessage("message-after-merge", {
109+
username: payload.pull_request.user.login,
110+
org: payload.repository.owner.login,
111+
repo: payload.repository.name,
112+
pr_number: payload.pull_request.number,
113+
});
114+
await octokit.rest.issues.createComment({
115+
owner: payload.repository.owner,
116+
repo: payload.repository.name,
117+
issue_number: payload.pull_request.number,
118+
body: comment,
119+
});
120+
} catch (error) {
121+
if (error.response) {
122+
console.error(
123+
`Error! Status: ${error.response.status}. Message: ${error.response.data.message}`,
124+
);
125+
} else {
126+
console.error(error);
127+
}
128+
}
129+
});
130+
92131
app.webhooks.on("issues.opened", async ({ octokit, payload }) => {
93132
console.log(
94133
`Received a new issue event for #${payload.issue.number} by ${pull_request.user.type}: ${pull_request.user.login}`,

src/helpers.js

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,20 @@ export function isCLARequired(pullRequest) {
4040
return true;
4141
}
4242

43+
export function isMessageAfterMergeRequired(pullRequest) {
44+
if (isABot(pullRequest.user)) {
45+
console.log("This PR is from a bot. So no message after merge required.");
46+
return false;
47+
}
48+
if (!isExternalContribution(pullRequest)) {
49+
console.log(
50+
"This PR is an internal contribution. So no message after merge required.",
51+
);
52+
return false;
53+
}
54+
return true;
55+
}
56+
4357
export function isExternalContribution(pullRequest) {
4458
if (
4559
pullRequest?.head?.repo?.full_name !== pullRequest?.base?.repo?.full_name
@@ -117,17 +131,34 @@ export async function afterCLA(app, claSignatureInfo) {
117131
}
118132
}
119133

120-
export function getMessage(name, payload) {
134+
export function getMessage(name, context) {
121135
let message = "";
122136
switch (name) {
123137
case "ask-to-sign-cla":
124138
const CLA_LINK =
125139
process.env.WEBSITE_ADDRESS +
126140
"/cla" +
127-
`?org=${payload.org}&repo=${payload.repo}&prNumber=${payload.pr_number}&username=${payload.username}`;
141+
`?org=${context.org}&repo=${context.repo}&prNumber=${context.pr_number}&username=${context.username}`;
128142
message = `Thank you for contributing this PR.
129143
Please [sign the Contributor License Agreement (CLA)](${CLA_LINK}) before merging.`;
130144
break;
145+
case "message-after-merge":
146+
message = `Thank you @${context.username} for contributing this PR.`;
147+
if (
148+
context.org === "rudderlabs" &&
149+
context.repo === "rudder-transformer"
150+
) {
151+
message += `For every new integration, a PR needs to be raised in [integartions-config](https://github.com/rudderlabs/rudder-integrations-config) repository as well.
152+
Without it, users won't be able to configure the integration.
153+
This is a good time to do that.`;
154+
}
155+
if (
156+
context.org === "rudderlabs" &&
157+
context.repo === "integrations-config"
158+
) {
159+
message += `To get notified when this integration goes live, join the **product-releases** channel in the [Slack Community](https://www.rudderstack.com/join-rudderstack-slack-community/)`;
160+
}
161+
break;
131162
default:
132163
const filepath = resolve(PROJECT_ROOT_PATH, name + ".md");
133164
message = fs.readFileSync(filepath, "utf8");

0 commit comments

Comments
 (0)