--- /dev/null
+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,
+ });