[FFmpeg-devel] [PATCH] forgejo/autolabeler: add some logic to also auto-remove the "New" label (PR #20186)
Timo Rothenpieler
code at ffmpeg.org
Fri Aug 8 23:49:11 EEST 2025
PR #20186 opened by Timo Rothenpieler (BtbN)
URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20186
Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20186.patch
From b5ab096897e92a56642a17a6ef212620f5c7d79b Mon Sep 17 00:00:00 2001
From: Timo Rothenpieler <timo at rothenpieler.org>
Date: Fri, 8 Aug 2025 21:37:20 +0200
Subject: [PATCH] forgejo/autolabeler: add some logic to also auto-remove the
"New" label
---
.forgejo/labeler/labeler.js | 48 ++++++++++++++++++++++++++++----
.forgejo/workflows/autolabel.yml | 7 +++--
2 files changed, 47 insertions(+), 8 deletions(-)
diff --git a/.forgejo/labeler/labeler.js b/.forgejo/labeler/labeler.js
index 7e17c4167c..b1c05787f0 100644
--- a/.forgejo/labeler/labeler.js
+++ b/.forgejo/labeler/labeler.js
@@ -1,6 +1,7 @@
module.exports = async ({github, context}) => {
const title = (context.payload.pull_request?.title || context.payload.issue?.title || '').toLowerCase();
const labels = [];
+ const issueNumber = context.payload.pull_request?.number || context.payload.issue?.number;
const kwmap = {
'avcodec': 'avcodec',
@@ -13,15 +14,50 @@ module.exports = async ({github, context}) => {
'fftools': 'CLI'
};
- if (context.payload.action === 'opened') {
+ async function isOrgMember(username) {
+ try {
+ const response = await github.rest.orgs.checkMembershipForUser({
+ org: context.repo.owner,
+ username: username
+ });
+ return response.status === 204;
+ } catch (error) {
+ return false;
+ }
+ }
+
+ if (context.payload.action === 'closed' ||
+ (context.payload.action !== 'opened' && (
+ context.payload.action === 'assigned' ||
+ context.payload.action === 'label_updated' ||
+ context.payload.comment) &&
+ await isOrgMember(context.payload.sender.login))
+ ) {
+ try {
+ await github.rest.issues.removeLabel({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number: issueNumber,
+ // this should say 'new', but forgejo deviates from GitHub API here and expects the ID
+ name: '41'
+ });
+ console.log('Removed "new" label');
+ } catch (error) {
+ if (error.status !== 404 && error.status !== 410) {
+ console.log('Could not remove "new" label');
+ }
+ }
+ } else if (context.payload.action === 'opened') {
labels.push('new');
console.log('Detected label: new');
}
- for (const [kw, label] of Object.entries(kwmap)) {
- if (title.includes(kw)) {
- labels.push(label);
- console.log('Detected label: ' + label);
+ if ((context.payload.action === 'opened' || context.payload.action === 'edited') && context.eventName !== 'issue_comment') {
+ for (const [kw, label] of Object.entries(kwmap)) {
+ if (title.includes(kw)) {
+ labels.push(label);
+ console.log('Detected label: ' + label);
+ }
}
}
@@ -29,7 +65,7 @@ module.exports = async ({github, context}) => {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
- issue_number: context.payload.pull_request?.number || context.payload.issue?.number,
+ issue_number: issueNumber,
labels: labels,
});
}
diff --git a/.forgejo/workflows/autolabel.yml b/.forgejo/workflows/autolabel.yml
index 3eb8cd52ba..cb4dac67aa 100644
--- a/.forgejo/workflows/autolabel.yml
+++ b/.forgejo/workflows/autolabel.yml
@@ -1,12 +1,15 @@
on:
pull_request_target:
- types: [opened, edited, synchronize]
+ types: [opened, edited, synchronize, closed, assigned, labeled, unlabeled]
issues:
- types: [opened, edited]
+ types: [opened, edited, closed, assigned, labeled, unlabeled]
+ issue_comment:
+ types: [created]
jobs:
pr_labeler:
runs-on: utilities
+ if: ${{ github.event.sender.login != 'ffmpeg-devel' }}
steps:
- name: Checkout
uses: actions/checkout at v4
--
2.49.1
More information about the ffmpeg-devel
mailing list