82 lines
2.3 KiB
TypeScript
82 lines
2.3 KiB
TypeScript
import { danger } from "danger";
|
||
|
||
const comment = (username: string) => `
|
||
Hey, @${username} — we just merged your PR to \`golangci-lint\`! 🔥🚀
|
||
|
||
\`golangci-lint\` is built by awesome people like you. Let us say “thanks”: **we just invited you to join the [GolangCI](https://github.com/golangci) organization on GitHub.**
|
||
This will add you to our team of maintainers. Accept the invite by visiting [this link](https://github.com/orgs/golangci/invitation).
|
||
|
||
By joining the team, you’ll be able to label issues, review pull requests, and merge approved pull requests.
|
||
More information about contributing is [here](https://golangci-lint.run/contributing/quick-start/).
|
||
|
||
Thanks again!
|
||
`;
|
||
|
||
const teamId = `3840765`;
|
||
|
||
export const inviteCollaborator = async () => {
|
||
const gh = danger.github;
|
||
const api = gh.api;
|
||
|
||
// Details about the repo.
|
||
const owner = gh.thisPR.owner;
|
||
const repo = gh.thisPR.repo;
|
||
const number = gh.thisPR.number;
|
||
|
||
// Details about the collaborator.
|
||
const username = gh.pr.user.login;
|
||
|
||
// Check whether or not we’ve already invited this contributor.
|
||
try {
|
||
const inviteCheck = (await api.teams.getMembership({
|
||
team_id: teamId,
|
||
username,
|
||
} as any)) as any;
|
||
const isInvited = inviteCheck.headers.status !== "404";
|
||
|
||
// If we’ve already invited them, don’t spam them with more messages.
|
||
if (isInvited) {
|
||
console.log(
|
||
`@${username} has already been invited to this org. Doing nothing.`
|
||
);
|
||
return;
|
||
}
|
||
} catch (err) {
|
||
console.info(
|
||
`Error checking membership of ${username} in team ${teamId}: ${err.stack}`
|
||
);
|
||
// If the user hasn’t been invited, the invite check throws an error.
|
||
}
|
||
|
||
try {
|
||
const invite = await api.teams.addOrUpdateMembership({
|
||
team_id: teamId,
|
||
username,
|
||
} as any);
|
||
|
||
if (invite.data.state === "active") {
|
||
console.log(
|
||
`@${username} is already a ${invite.data.role} for this team.`
|
||
);
|
||
} else {
|
||
console.log(`We’ve invited @${username} to join this team.`);
|
||
}
|
||
} catch (err) {
|
||
console.log("Something went wrong.");
|
||
console.log(err);
|
||
return;
|
||
}
|
||
|
||
// For new contributors, roll out the welcome wagon!
|
||
await api.issues.createComment({
|
||
owner,
|
||
repo,
|
||
number,
|
||
body: comment(username),
|
||
});
|
||
};
|
||
|
||
export default async () => {
|
||
await inviteCollaborator();
|
||
};
|