]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
Chore: replace secretary with GHA (#9723)
authorshamoon <4887959+shamoon@users.noreply.github.com>
Mon, 21 Apr 2025 19:02:54 +0000 (12:02 -0700)
committerGitHub <noreply@github.com>
Mon, 21 Apr 2025 19:02:54 +0000 (19:02 +0000)
.github/labeler.yml [new file with mode: 0644]
.github/workflows/pr-bot.yml [new file with mode: 0644]

diff --git a/.github/labeler.yml b/.github/labeler.yml
new file mode 100644 (file)
index 0000000..8d87d13
--- /dev/null
@@ -0,0 +1,22 @@
+backend:
+  - changed-files:
+      - any-glob-to-any-file:
+          - 'src/**'
+          - 'pyproject.toml'
+          - 'uv.lock'
+          - 'requirements.txt'
+
+frontend:
+  - changed-files:
+      - any-glob-to-any-file:
+          - 'src-ui/**'
+
+documentation:
+  - changed-files:
+      - any-glob-to-any-file:
+          - 'docs/**'
+
+ci-cd:
+  - changed-files:
+      - any-glob-to-any-file:
+          - '.github/**'
diff --git a/.github/workflows/pr-bot.yml b/.github/workflows/pr-bot.yml
new file mode 100644 (file)
index 0000000..85c3a9f
--- /dev/null
@@ -0,0 +1,100 @@
+name: PR Bot
+
+on:
+  pull_request:
+    types: [opened]
+  pull_request_target:
+    types: [opened]
+
+permissions:
+  contents: read
+  pull-requests: write
+
+jobs:
+  pr-bot:
+    name: Automated PR Bot
+    runs-on: ubuntu-latest
+
+    steps:
+      - name: Label by file path
+        uses: actions/labeler@v5
+        with:
+          repo-token: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: Label by size
+        uses: Gascon1/pr-size-labeler@v1.3.0
+        with:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+          xs_label: 'small-change'
+          xs_diff: '9'
+          s_label: 'non-trivial'
+          s_diff: '99999'
+          fail_if_xl: 'false'
+          excluded_files: >
+            /\.lock$/
+            /\.txt$/
+            ^src-ui/pnpm-lock\.yaml$
+            ^src-ui/messages\.xlf$
+            ^src/locale/en_US/LC_MESSAGES/django\.po$
+
+      - name: Label bot-generated PRs
+        if: ${{ contains(github.actor, 'dependabot') || contains(github.actor, 'crowdin-bot') }}
+        uses: actions/github-script@v7
+        with:
+          script: |
+            const pr = context.payload.pull_request;
+            const user = pr.user.login.toLowerCase();
+            const labels = [];
+
+            if (user.includes('dependabot')) {
+              labels.push('dependencies');
+            }
+
+            if (user.includes('crowdin-bot')) {
+              labels.push('translation', 'skip-changelog');
+            }
+
+            if (labels.length) {
+              await github.rest.issues.addLabels({
+                owner: context.repo.owner,
+                repo: context.repo.repo,
+                issue_number: pr.number,
+                labels,
+              });
+            }
+
+      - name: Welcome comment
+        if: ${{ !contains(github.actor, 'bot') }}
+        uses: actions/github-script@v7
+        with:
+          script: |
+            const pr = context.payload.pull_request;
+            const user = pr.user.login;
+
+            const { data: members } = await github.rest.orgs.listMembers({
+              org: 'paperless-ngx',
+            });
+
+            const memberLogins = members.map(m => m.login.toLowerCase());
+            if (memberLogins.includes(user.toLowerCase())) {
+              core.info('Skipping comment: user is org member');
+              return;
+            }
+
+            const body =
+                "Hello @" + user + ",\n\n" +
+                "Thank you very much for submitting this PR to us!\n\n" +
+                "This is what will happen next:\n\n" +
+                "1. CI tests will run against your PR to ensure quality and consistency.\n" +
+                "2. Next, human contributors from paperless-ngx review your changes.\n" +
+                "3. Please address any issues that come up during the review as soon as you are able to.\n" +
+                "4. If accepted, your pull request will be merged into the `dev` branch and changes there will be tested further.\n" +
+                "5. Eventually, changes from you and other contributors will be merged into `main` and a new release will be made.\n\n" +
+                "You'll be hearing from us soon, and thank you again for contributing to our project.";
+
+            await github.rest.issues.createComment({
+              issue_number: pr.number,
+              owner: context.repo.owner,
+              repo: context.repo.repo,
+              body,
+            });