feat: Migrate and Adapt KDM Bot Automation Scripts#33
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughAdds GitHub Actions workflows and small workflow edits to run repository bot scripts for PR lifecycle events, PR review artifact handoff, issue comments, and a daily inactivity check; includes runner hardening, least-privilege permissions, and per-resource concurrency. ChangesBot Automation Event Workflows
Estimated Code Review Effort🎯 4 (Complex) | ⏱️ ~45 minutes Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 8
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/on-comment.yaml:
- Around line 43-55: The on-comment job lacks a timeout which lets a hung run
block subsequent per-issue serialized jobs; add a timeout-minutes setting to the
on-comment job definition (alongside runs-on/concurrency) to cap how long a job
can run (e.g., timeout-minutes: 30) so that the concurrency group
(on-comment-${{ github.event.issue.number }}) will not be permanently starved by
a single stuck run; update the job named "on-comment" to include this timeout.
In @.github/workflows/on-pr-close.yaml:
- Around line 16-18: The workflow's post-merge jobs are missing a timeout guard:
add the timeout-minutes key to the on-pr-close job (the job named "on-pr-close")
and to the other close-event job referenced later in the file so each job has a
maximum runtime (e.g. timeout-minutes: 60); ensure you add the timeout-minutes
scalar at the same indentation level as runs-on/if within each job definition.
In @.github/workflows/on-pr-review-labels.yaml:
- Around line 15-18: The workflow job run-bot needs a concurrency block to
serialize executions and avoid label race conditions; add a concurrency key
under the job (job name: run-bot) such as concurrency: group: 'review-label-${{
github.event.workflow_run.id }}' (or a repo-wide key like 'review-labels' if you
prefer global serialization) so only one instance for that workflow_run (or
repo-wide) runs at a time and prevents simultaneous label updates.
In @.github/workflows/on-pr-review.yaml:
- Line 14: Replace the verbose boolean comparison in the workflow condition `if:
github.event.pull_request.draft == false` with the simplified falsy check used
by GitHub Actions expressions (e.g., `if: !github.event.pull_request.draft`) so
the intent is clearer and more concise; update the `if` expression where
`github.event.pull_request.draft` is checked.
- Around line 26-28: Replace the fragile manual string interpolation in the echo
that writes review-event.json with GitHub Actions' toJSON() expression so the
payload is safely serialized; update the expression that references
github.event.pull_request.number, github.event.review.state and
github.event.pull_request.draft to be passed into toJSON(...) and write that
serialized output to review-event.json instead of building the JSON string by
hand in the echo command.
In @.github/workflows/on-pr-update.yaml:
- Around line 19-21: Add a timeout to the on-pr-update job by adding the GitHub
Actions job property timeout-minutes under the on-pr-update job definition (the
job keyed as on-pr-update in the workflow) so the job cannot run indefinitely;
set an appropriate value (e.g., 10 or 30) for timeout-minutes to cover expected
run time and ensure external calls cannot block forever.
In @.github/workflows/on-pr.yaml:
- Around line 21-23: The on-pr-open job currently has no timeout and can hang
indefinitely; add a timeout-minutes property to the job definition (the job
named on-pr-open) to cap runner time (e.g., timeout-minutes: 10 or another
org-approved value) so the workflow will be cancelled if it exceeds that
duration.
In @.github/workflows/on-schedule-inactivity.yaml:
- Around line 42-49: The workflow job inactivity-check currently uses a global
concurrency group with cancel-in-progress: false which can block future runs if
one hangs; add a timeout-minutes setting on the inactivity-check job to bound
runtime (e.g., timeout-minutes: N) so hung runs are terminated and the
concurrency lock is released; update the inactivity-check job definition (job
name/inactivity-check and its concurrency block) to include timeout-minutes with
an appropriate value for your environment.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 6a5fd670-7048-43a8-9408-daf4debf1243
⛔ Files ignored due to path filters (44)
.github/kdm-automation.jsonis excluded by none and included by none.github/scripts/bot-inactivity-comments.jsis excluded by none and included by none.github/scripts/bot-inactivity.jsis excluded by none and included by none.github/scripts/bot-on-comment.jsis excluded by none and included by none.github/scripts/bot-on-pr-close.jsis excluded by none and included by none.github/scripts/bot-on-pr-merged.jsis excluded by none and included by none.github/scripts/bot-on-pr-open.jsis excluded by none and included by none.github/scripts/bot-on-pr-review-labels.jsis excluded by none and included by none.github/scripts/bot-on-pr-review.jsis excluded by none and included by none.github/scripts/bot-on-pr-update.jsis excluded by none and included by none.github/scripts/bot/bot-recommend-issues.jsis excluded by none and included by none.github/scripts/commands/assign-comments.jsis excluded by none and included by none.github/scripts/commands/assign.jsis excluded by none and included by none.github/scripts/commands/finalize-comments.jsis excluded by none and included by none.github/scripts/commands/finalize.jsis excluded by none and included by none.github/scripts/commands/unassign-comments.jsis excluded by none and included by none.github/scripts/commands/unassign.jsis excluded by none and included by none.github/scripts/eslint.config.mjsis excluded by none and included by none.github/scripts/helpers/api.jsis excluded by none and included by none.github/scripts/helpers/checks.jsis excluded by none and included by none.github/scripts/helpers/comments.jsis excluded by none and included by none.github/scripts/helpers/config-loader.jsis excluded by none and included by none.github/scripts/helpers/constants.jsis excluded by none and included by none.github/scripts/helpers/index.jsis excluded by none and included by none.github/scripts/helpers/logger.jsis excluded by none and included by none.github/scripts/helpers/validation.jsis excluded by none and included by none.github/scripts/package-lock.jsonis excluded by!**/package-lock.jsonand included by none.github/scripts/package.jsonis excluded by none and included by none.github/scripts/tests/test-api.jsis excluded by none and included by none.github/scripts/tests/test-assign-bot.jsis excluded by none and included by none.github/scripts/tests/test-checks.jsis excluded by none and included by none.github/scripts/tests/test-comments.jsis excluded by none and included by none.github/scripts/tests/test-config-loader.jsis excluded by none and included by none.github/scripts/tests/test-finalize-bot.jsis excluded by none and included by none.github/scripts/tests/test-inactivity-bot.jsis excluded by none and included by none.github/scripts/tests/test-on-comment-bot.jsis excluded by none and included by none.github/scripts/tests/test-on-pr-close-bot.jsis excluded by none and included by none.github/scripts/tests/test-on-pr-merged-bot.jsis excluded by none and included by none.github/scripts/tests/test-on-pr-open-bot.jsis excluded by none and included by none.github/scripts/tests/test-on-pr-review-bot.jsis excluded by none and included by none.github/scripts/tests/test-on-pr-update-bot.jsis excluded by none and included by none.github/scripts/tests/test-recommend-issues-bot.jsis excluded by none and included by none.github/scripts/tests/test-unassign-bot.jsis excluded by none and included by none.github/scripts/tests/test-utils.jsis excluded by none and included by none
📒 Files selected for processing (7)
.github/workflows/on-comment.yaml.github/workflows/on-pr-close.yaml.github/workflows/on-pr-review-labels.yaml.github/workflows/on-pr-review.yaml.github/workflows/on-pr-update.yaml.github/workflows/on-pr.yaml.github/workflows/on-schedule-inactivity.yaml
There was a problem hiding this comment.
Actionable comments posted: 2
♻️ Duplicate comments (2)
.github/workflows/on-comment.yaml (1)
47-55:⚠️ Potential issue | 🟠 Major | ⚡ Quick winAdd
timeout-minutesto prevent per-issue queue starvation.With per-issue serialization and
cancel-in-progress: false, one hung run can block all later commands for that issue indefinitely.Suggested minimal fix
jobs: on-comment: # Only run on issue comments (not PR review comments which also trigger issue_comment) if: github.event.issue.pull_request == null runs-on: ubuntu-latest + timeout-minutes: 10 # Serialize per issue to prevent same-issue races without blocking other issues.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.github/workflows/on-comment.yaml around lines 47 - 55, The workflow concurrency block can hang indefinitely because cancel-in-progress is false and there is no timeout; add a timeout by setting the workflow-level timeout-minutes (e.g., under the job that contains runs-on) to a reasonable value (e.g., 30) so a single hung run cannot starve the per-issue queue; update the job that declares runs-on: ubuntu-latest and the concurrency: group: on-comment-${{ github.event.issue.number }} / cancel-in-progress: false to include timeout-minutes: <value> to enforce automatic termination of long-running jobs..github/workflows/on-schedule-inactivity.yaml (1)
44-49:⚠️ Potential issue | 🟠 Major | ⚡ Quick winSet
timeout-minutesto protect the globally serialized inactivity pipeline.With a global concurrency lock and
cancel-in-progress: false, a hung run can stall all future inactivity checks.Suggested minimal fix
jobs: inactivity-check: name: Inactivity Check runs-on: ubuntu-latest + timeout-minutes: 20 concurrency: group: inactivity-check cancel-in-progress: false🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.github/workflows/on-schedule-inactivity.yaml around lines 44 - 49, The workflow job that currently defines runs-on: ubuntu-latest and the concurrency block with group: inactivity-check and cancel-in-progress: false needs a timeout-minutes to avoid a hung run blocking the globally serialized pipeline; update the job (the one containing runs-on: ubuntu-latest and concurrency: group: inactivity-check) to include a reasonable timeout-minutes value (e.g., 30 or another SLA-appropriate duration) so GitHub Actions will cancel stuck runs and free the concurrency lock.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/on-pr.yaml:
- Around line 35-36: The checkout step "Checkout Repository" currently relies on
implicit default-branch behavior; make the intent explicit by updating the
actions/checkout step (actions/checkout@de0fac2e...) to include a with: ref: ${{
github.event.pull_request.base.ref }} (and optionally fetch-depth: 0) so the
workflow explicitly checks out the target/default branch in pull_request_target
runs.
In @.github/workflows/publish.yml:
- Around line 49-50: Replace incorrect `.cjson` filenames with the real `.json`
names and guard file reads so missing files don't break the workflow: update
occurrences of "package.cjson" and "package-lock.cjson" to "package.json" and
"package-lock.json" (including the git commands like `git add package-lock.cjson
|| true` and the version-extraction step that reads the file), and add existence
checks or fallbacks before reading the lockfile so the workflow skips or handles
absent files instead of failing.
---
Duplicate comments:
In @.github/workflows/on-comment.yaml:
- Around line 47-55: The workflow concurrency block can hang indefinitely
because cancel-in-progress is false and there is no timeout; add a timeout by
setting the workflow-level timeout-minutes (e.g., under the job that contains
runs-on) to a reasonable value (e.g., 30) so a single hung run cannot starve the
per-issue queue; update the job that declares runs-on: ubuntu-latest and the
concurrency: group: on-comment-${{ github.event.issue.number }} /
cancel-in-progress: false to include timeout-minutes: <value> to enforce
automatic termination of long-running jobs.
In @.github/workflows/on-schedule-inactivity.yaml:
- Around line 44-49: The workflow job that currently defines runs-on:
ubuntu-latest and the concurrency block with group: inactivity-check and
cancel-in-progress: false needs a timeout-minutes to avoid a hung run blocking
the globally serialized pipeline; update the job (the one containing runs-on:
ubuntu-latest and concurrency: group: inactivity-check) to include a reasonable
timeout-minutes value (e.g., 30 or another SLA-appropriate duration) so GitHub
Actions will cancel stuck runs and free the concurrency lock.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 4569b7ea-74ff-4b9b-9d0d-353b15adbc6f
⛔ Files ignored due to path filters (42)
.github/scripts/bot-inactivity-comments.cjsis excluded by none and included by none.github/scripts/bot-inactivity.cjsis excluded by none and included by none.github/scripts/bot-on-comment.cjsis excluded by none and included by none.github/scripts/bot-on-pr-close.cjsis excluded by none and included by none.github/scripts/bot-on-pr-merged.cjsis excluded by none and included by none.github/scripts/bot-on-pr-open.cjsis excluded by none and included by none.github/scripts/bot-on-pr-review-labels.cjsis excluded by none and included by none.github/scripts/bot-on-pr-review.cjsis excluded by none and included by none.github/scripts/bot-on-pr-update.cjsis excluded by none and included by none.github/scripts/bot/bot-recommend-issues.cjsis excluded by none and included by none.github/scripts/commands/assign-comments.cjsis excluded by none and included by none.github/scripts/commands/assign.cjsis excluded by none and included by none.github/scripts/commands/finalize-comments.cjsis excluded by none and included by none.github/scripts/commands/finalize.cjsis excluded by none and included by none.github/scripts/commands/unassign-comments.cjsis excluded by none and included by none.github/scripts/commands/unassign.cjsis excluded by none and included by none.github/scripts/helpers/api.cjsis excluded by none and included by none.github/scripts/helpers/checks.cjsis excluded by none and included by none.github/scripts/helpers/comments.cjsis excluded by none and included by none.github/scripts/helpers/config-loader.cjsis excluded by none and included by none.github/scripts/helpers/constants.cjsis excluded by none and included by none.github/scripts/helpers/index.cjsis excluded by none and included by none.github/scripts/helpers/logger.cjsis excluded by none and included by none.github/scripts/helpers/validation.cjsis excluded by none and included by none.github/scripts/package.jsonis excluded by none and included by none.github/scripts/pr-labeler.cjsis excluded by none and included by none.github/scripts/tests/test-api.cjsis excluded by none and included by none.github/scripts/tests/test-assign-bot.cjsis excluded by none and included by none.github/scripts/tests/test-checks.cjsis excluded by none and included by none.github/scripts/tests/test-comments.cjsis excluded by none and included by none.github/scripts/tests/test-config-loader.cjsis excluded by none and included by none.github/scripts/tests/test-finalize-bot.cjsis excluded by none and included by none.github/scripts/tests/test-inactivity-bot.cjsis excluded by none and included by none.github/scripts/tests/test-on-comment-bot.cjsis excluded by none and included by none.github/scripts/tests/test-on-pr-close-bot.cjsis excluded by none and included by none.github/scripts/tests/test-on-pr-merged-bot.cjsis excluded by none and included by none.github/scripts/tests/test-on-pr-open-bot.cjsis excluded by none and included by none.github/scripts/tests/test-on-pr-review-bot.cjsis excluded by none and included by none.github/scripts/tests/test-on-pr-update-bot.cjsis excluded by none and included by none.github/scripts/tests/test-recommend-issues-bot.cjsis excluded by none and included by none.github/scripts/tests/test-unassign-bot.cjsis excluded by none and included by none.github/scripts/tests/test-utils.cjsis excluded by none and included by none
📒 Files selected for processing (10)
.github/workflows/labeler.yml.github/workflows/on-comment.yaml.github/workflows/on-pr-close.yaml.github/workflows/on-pr-review-labels.yaml.github/workflows/on-pr-review.yaml.github/workflows/on-pr-update.yaml.github/workflows/on-pr.yaml.github/workflows/on-schedule-inactivity.yaml.github/workflows/publish.yml.github/workflows/test.yml
| - name: Checkout Repository | ||
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 |
There was a problem hiding this comment.
🛠️ Refactor suggestion | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🌐 Web query:
For GitHub Actions, when actions/checkoutruns in apull_request_targetworkflow andwith.ref is omitted, which ref or SHA is checked out by default?
💡 Result:
When using the actions/checkout action in a pull_request_target workflow, if the with.ref input is omitted, the action defaults to checking out the repository's default branch [1][2][3]. This behavior is a result of how the pull_request_target event operates. Unlike the standard pull_request event, which triggers on the context of the pull request itself, pull_request_target workflows are executed in the context of the repository's default branch [3]. Consequently, the GITHUB_REF environment variable resolves to the default branch, and actions/checkout uses this reference by default when no specific ref is provided [1][2][3]. If you intend to check out the code from the pull request branch itself, you must explicitly specify the reference using the with.ref input, typically by setting it to ${{ github.event.pull_request.head.sha }} or ${{ github.head_ref }} [1][2][4].
Citations:
- 1: https://github.com/actions/checkout
- 2: https://github.com/actions/checkout/blob/v4/README.md
- 3: https://github.blog/changelog/2025-11-07-actions-pull_request_target-and-environment-branch-protections-changes/
- 4: https://rt-thread.medium.com/github-pull-request-target-reference-guide-d7a24691b8dc
Make the privileged checkout explicit.
In pull_request_target workflows that execute with repository default-branch privileges, keep the checkout intent unmistakable in the YAML. While actions/checkout already defaults to the default branch in this context, relying on implicit behavior in security-sensitive workflows creates drift risk and obfuscates intent during code review.
Suggested fix
- name: Checkout Repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ with:
+ ref: ${{ github.event.repository.default_branch }}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - name: Checkout Repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| - name: Checkout Repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| with: | |
| ref: ${{ github.event.repository.default_branch }} |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.github/workflows/on-pr.yaml around lines 35 - 36, The checkout step
"Checkout Repository" currently relies on implicit default-branch behavior; make
the intent explicit by updating the actions/checkout step
(actions/checkout@de0fac2e...) to include a with: ref: ${{
github.event.pull_request.base.ref }} (and optionally fetch-depth: 0) so the
workflow explicitly checks out the target/default branch in pull_request_target
runs.
| git add package-lock.cjson || true | ||
| git diff --cached --quiet || git commit -m 'chore: update package-lock.cjson' |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Read-only verification: confirm which package manifest/lockfile names exist and where workflow references point.
set -euo pipefail
echo "== Files named package.json / package-lock.json / package.cjson / package-lock.cjson =="
fd -HI 'package(\.lock)?\.(json|cjson)$'
echo
echo "== References in workflows =="
rg -n -C2 'package(\.lock)?\.(json|cjson)' .github/workflowsRepository: KDM-cli/kdm-cli
Length of output: 595
Fix non-existent .cjson filenames breaking version extraction.
The workflow references package.cjson and package-lock.cjson, but the repository only has package.json. Line 65 will fail immediately when trying to read the non-existent file, breaking the entire release.
Proposed fix
- - name: Setup Node.cjs
+ - name: Setup Node.js
@@
- git add package-lock.cjson || true
- git diff --cached --quiet || git commit -m 'chore: update package-lock.cjson'
+ git add package-lock.json || true
+ git diff --cached --quiet || git commit -m 'chore: update package-lock.json'
@@
- VERSION=$(node -e "console.log(JSON.parse(require('fs').readFileSync('./package.cjson', 'utf8')).version)")
+ VERSION=$(node -e "console.log(JSON.parse(require('fs').readFileSync('./package.json', 'utf8')).version)")Also applies to: 65-65
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.github/workflows/publish.yml around lines 49 - 50, Replace incorrect
`.cjson` filenames with the real `.json` names and guard file reads so missing
files don't break the workflow: update occurrences of "package.cjson" and
"package-lock.cjson" to "package.json" and "package-lock.json" (including the
git commands like `git add package-lock.cjson || true` and the
version-extraction step that reads the file), and add existence checks or
fallbacks before reading the lockfile so the workflow skips or handles absent
files instead of failing.
There was a problem hiding this comment.
♻️ Duplicate comments (2)
.github/workflows/on-pr-review-labels.yaml (1)
20-22:⚠️ Potential issue | 🟠 Major | ⚡ Quick winUse a per-PR concurrency key; current key is effectively no-op for serialization.
At Line 21,
github.event.workflow_run.idis unique per run, so simultaneous review runs on the same PR can still race while applying labels.Suggested fix
concurrency: - group: 'review-label-${{ github.event.workflow_run.id }}' + group: 'review-label-pr-${{ github.event.workflow_run.pull_requests[0].number }}' + cancel-in-progress: false🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.github/workflows/on-pr-review-labels.yaml around lines 20 - 22, The concurrency group currently uses github.event.workflow_run.id which is unique per run and doesn't serialize concurrent runs for the same PR; change the group to a per-PR key instead (e.g., replace 'review-label-${{ github.event.workflow_run.id }}' with a PR-specific expression such as 'review-label-${{ github.event.pull_request.number }}' or, if only workflow_run payload is available, 'review-label-${{ github.event.workflow_run.pull_requests[0].number }}') so simultaneous review runs on the same PR will be serialized..github/workflows/on-pr-review.yaml (1)
14-14:⚠️ Potential issue | 🔴 Critical | ⚡ Quick winWrap the
ifexpression to prevent YAML parsing errors on Line 14.The
ifconditionif: !github.event.pull_request.draftstarts with!, a reserved YAML character. GitHub Actions requires expressions beginning with!to be wrapped in${{ }}to prevent parsing failures.Suggested fix
- if: !github.event.pull_request.draft + if: ${{ !github.event.pull_request.draft }}🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.github/workflows/on-pr-review.yaml at line 14, The YAML `if` expression starting with `!` (the conditional `if: !github.event.pull_request.draft`) must be wrapped in GitHub Actions expression delimiters to avoid YAML parsing errors; update the line to use the expression syntax by replacing `if: !github.event.pull_request.draft` with `if: ${{ ! github.event.pull_request.draft }}` (keeping the same logic and spacing) so the runner interprets it correctly.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Duplicate comments:
In @.github/workflows/on-pr-review-labels.yaml:
- Around line 20-22: The concurrency group currently uses
github.event.workflow_run.id which is unique per run and doesn't serialize
concurrent runs for the same PR; change the group to a per-PR key instead (e.g.,
replace 'review-label-${{ github.event.workflow_run.id }}' with a PR-specific
expression such as 'review-label-${{ github.event.pull_request.number }}' or, if
only workflow_run payload is available, 'review-label-${{
github.event.workflow_run.pull_requests[0].number }}') so simultaneous review
runs on the same PR will be serialized.
In @.github/workflows/on-pr-review.yaml:
- Line 14: The YAML `if` expression starting with `!` (the conditional `if:
!github.event.pull_request.draft`) must be wrapped in GitHub Actions expression
delimiters to avoid YAML parsing errors; update the line to use the expression
syntax by replacing `if: !github.event.pull_request.draft` with `if: ${{ !
github.event.pull_request.draft }}` (keeping the same logic and spacing) so the
runner interprets it correctly.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: b5446ace-632a-4ee6-9455-6955b838cdc6
📒 Files selected for processing (7)
.github/workflows/on-comment.yaml.github/workflows/on-pr-close.yaml.github/workflows/on-pr-review-labels.yaml.github/workflows/on-pr-review.yaml.github/workflows/on-pr-update.yaml.github/workflows/on-pr.yaml.github/workflows/on-schedule-inactivity.yaml
This PR introduces the custom bot automation scripts migrated from the reference folder, adapting them for the KDM CLI project structure. This includes removing DCO/GPG checks, renaming references to KDM, updating team names to the sole maintainer, and utilizing ubuntu-latest runners.
Summary by CodeRabbit