commit 1890e8e37b77d62176f27277787efb0e98be10dd
parent 4e2236f97c5e4c49df691ea5be0480e01fa1a4f9
Author: iostpa <iostpa@iostpa.com>
Date: Sat, 18 Apr 2026 11:15:39 +0300
Add label checker and make Docker build from bun.lock
Diffstat:
2 files changed, 26 insertions(+), 4 deletions(-)
diff --git a/Dockerfile b/Dockerfile
@@ -1,6 +1,6 @@
FROM oven/bun
WORKDIR /app
COPY package.json bun.lock ./
-RUN bun install
+RUN bun install --frozen-lockfile
COPY . .
CMD ["bun", "run", "server"]
\ No newline at end of file
diff --git a/index.js b/index.js
@@ -18,6 +18,7 @@ const secret = process.env.WEBHOOK_SECRET;
const newPRs = fs.readFileSync('./message/opened.md', 'utf8');
const mergedPRs = fs.readFileSync('./message/merged.md', 'utf8');
const draftPRs = fs.readFileSync('./message/draft.md', 'utf8');
+const ignoreLabels = ["maintainer"];
Sentry.init({
dsn: sentryDsn,
@@ -47,9 +48,19 @@ app.octokit.log.debug(`Authenticated as '${data.name}'`);
app.webhooks.on('pull_request.opened', async ({ octokit, payload }) => {
console.log(`Received a open pull request event for #${payload.pull_request.number} on https://github.com/${payload.repository.full_name}`);
try {
+ const labels = await octokit.rest.issues.listLabelsOnIssue({
+ owner: payload.repository.owner.login,
+ repo: payload.repository.name,
+ issue_number: payload.pull_request.number
+ });
+ const allLabels = labels.data.map((label) => label.name);
+ if (ignoreLabels.some((label) => allLabels.includes(label))) {
+ console.log(`#${payload.pull_request.number} from https://github.com/${payload.repository.full_name} is by a maintainer, skipping pull request.`)
+ return;
+ }
if (payload.pull_request.draft === true) {
await octokit.rest.issues.createComment({
- owner:payload.repository.owner.login,
+ owner: payload.repository.owner.login,
repo: payload.repository.name,
issue_number: payload.pull_request.number,
body: draftPRs
@@ -64,6 +75,7 @@ app.webhooks.on('pull_request.opened', async ({ octokit, payload }) => {
});
console.log(`Sent a opened message to #${payload.pull_request.number} on https://github.com/${payload.repository.full_name}`);
};
+ ;
} catch (error) {
Sentry.captureException(error);
fastify.log.error(error);
@@ -80,12 +92,22 @@ app.webhooks.on('pull_request.closed', async ({ octokit, payload }) => {
console.log(`Received a closed pull request event for #${payload.pull_request.number} on https://github.com/${payload.repository.full_name}`);
try {
if (payload.pull_request.merged === true) {
+ const labels = await octokit.rest.issues.listLabelsOnIssue({
+ owner: payload.repository.owner.login,
+ repo: payload.repository.name,
+ issue_number: payload.pull_request.number
+ });
+ const allLabels = labels.data.map((label) => label.name);
+ if (ignoreLabels.some((label) => allLabels.includes(label))) {
+ return;
+ }
await octokit.rest.issues.createComment({
- owner:payload.repository.owner.login,
+ owner: payload.repository.owner.login,
repo: payload.repository.name,
issue_number: payload.pull_request.number,
body: mergedPRs
- });
+ });
+ ;
console.log(`Sent a merged message to #${payload.pull_request.number} on https://github.com/${payload.repository.full_name}`);
} else { return; };
} catch (error) {