Skip to content

ci: add semantic-pr workflow to enforce conventional commits#2472

Merged
M0NsTeRRR merged 9 commits intoseerr-team:developfrom
Hyperion2220:feature/conventional-commits-workflow
Feb 17, 2026
Merged

ci: add semantic-pr workflow to enforce conventional commits#2472
M0NsTeRRR merged 9 commits intoseerr-team:developfrom
Hyperion2220:feature/conventional-commits-workflow

Conversation

@Hyperion2220
Copy link
Copy Markdown
Contributor

@Hyperion2220 Hyperion2220 commented Feb 16, 2026

Description

This PR adds a GitHub Action workflow to automatically validate that Pull Request titles follow the Conventional Commits standard. It also updates the contributing guide to inform future contributors of this automated check.

How Has This Been Tested?

The new workflow file was validated for syntax correctness. The existing CI (Lint & Test Build) passed successfully on this PR.

Screenshots / Logs (if applicable)

N/A

Checklist:

  • I have read and followed the contribution guidelines.
  • Disclosed any use of AI (see our policy)
  • I have updated the documentation accordingly.
  • All new and existing tests passed. (Verified by CI)
  • Successful build pnpm build (Verified by CI)
  • Translation keys pnpm i18n:extract (N/A)
  • Database migration (if required) (N/A)

Summary by CodeRabbit

  • Chores

    • Added an automated CI check to validate pull request titles and enforce Conventional Commits formatting for incoming PRs; redundant runs are cancelled when updated.
  • Documentation

    • Updated the contributing guide to require PR titles follow Conventional Commits and note that PR titles are now automatically verified.

@Hyperion2220 Hyperion2220 requested a review from a team as a code owner February 16, 2026 23:24
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Feb 16, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds a new GitHub Actions workflow at .github/workflows/semantic-pr.yml to validate pull request titles using amannn/action-semantic-pull-request, and updates CONTRIBUTING.md to require PR titles follow Conventional Commits and note automatic checking.

Changes

Cohort / File(s) Summary
GitHub Actions Workflow
\.github/workflows/semantic-pr.yml
New "Semantic PR" workflow triggered on pull_request_target (types: opened, reopened, edited, synchronize). Top-level permissions: {}; concurrency: semantic-pr-${{ github.event.pull_request.number }} with cancel-in-progress: true. Single job "Validate PR Title" runs on ubuntu-slim, grants pull-requests: read, and runs amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 (v6.1.1) with GITHUB_TOKEN.
Documentation
CONTRIBUTING.md
Language updated to require PR titles follow Conventional Commits and indicate PR titles are automatically checked by the new workflow.

Sequence Diagram(s)

sequenceDiagram
    participant Contributor as Contributor
    participant GitHub as GitHub (Events)
    participant Actions as GitHub Actions Runner
    participant Semantic as amannn/action-semantic-pull-request

    Contributor->>GitHub: Open / edit PR
    GitHub->>Actions: Trigger workflow (pull_request_target)
    Actions->>Semantic: Run semantic PR action (validate title)
    Semantic-->>Actions: Validation result (pass/fail)
    Actions-->>GitHub: Report check status on PR
    GitHub-->>Contributor: Display status / require fixes if failed
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Poem

🐰 I hopped to the repo with whiskers aflutter,

A guardian checks titles — no more clutter,
Semantic rules hum, tidy and bright,
I munched a carrot and signed off tonight.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Merge Conflict Detection ⚠️ Warning ❌ Merge conflicts detected (2 files):

⚔️ CONTRIBUTING.md (content)
⚔️ docs/getting-started/third-parties/unraid.mdx (content)

These conflicts must be resolved before merging into develop.
Resolve conflicts locally and push changes to this branch.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main change: adding a GitHub Actions workflow to enforce conventional commits in PR titles.
Linked Issues check ✅ Passed The PR implements the required workflow to validate PR titles against Conventional Commits standard as specified in issue #2457.
Out of Scope Changes check ✅ Passed Changes are limited to adding the semantic-pr workflow and updating documentation; all changes directly support the issue objective.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

Tip

Issue Planner is now in beta. Read the docs and try it out! Share your feedback on Discord.


Comment @coderabbitai help to get the list of available commands and usage tips.

@fallenbagel
Copy link
Copy Markdown
Collaborator

Could you update the pr description with the pr template?

Comment thread .github/workflows/semantic-pr.yml Outdated
Comment thread .github/workflows/semantic-pr.yml Outdated
Comment thread .github/workflows/semantic-pr.yml
Comment thread .github/workflows/semantic-pr.yml Outdated
Comment thread .github/workflows/semantic-pr.yml Outdated
@M0NsTeRRR
Copy link
Copy Markdown
Member

Thanks for your PR! Just a heads-up for next time: if someone is already assigned to the issue, it means they’ll handle the PR. This way, we avoid duplicating work and save time for everyone. ;)

@Hyperion2220
Copy link
Copy Markdown
Contributor Author

Sorry about that, @M0NsTeRRR. I missed the assignment on this one and certainly didn't mean to double up on the work you already had planned.

I've just pushed an update to follow your suggestions regarding the concurrency/permissions and simplified the workflow logic. Thanks for the guidance and for taking the time to review.

@M0NsTeRRR
Copy link
Copy Markdown
Member

No problem, that happens @Hyperion2220 you missed some others suggestions I did

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/semantic-pr.yml:
- Around line 12-14: The concurrency group currently uses the template value
"semantic-pr-${{ github.ref }}" which causes different PRs targeting the same
base branch to share a group; update the concurrency.group to use the pull
request identifier instead (e.g., use github.event.pull_request.number or
github.run_id) so each PR run is isolated, leaving cancel-in-progress: true
as-is; change the value referenced in the concurrency block (the group key under
concurrency) from semantic-pr-${{ github.ref }} to a template that includes
github.event.pull_request.number.
- Line 10: Update the GitHub Action pin for amannn/action-semantic-pull-request
in the workflow: replace the old reference
amannn/action-semantic-pull-request@v5.5.3 with the current release
amannn/action-semantic-pull-request@v6.1.1 (or pin the v6.1.1 SHA) while keeping
the existing permissions: {} and pull_request_target usage; ensure the workflow
uses the new tag/SHA in the uses: entry to mitigate supply-chain risk.

Comment thread .github/workflows/semantic-pr.yml
Comment thread .github/workflows/semantic-pr.yml
@Hyperion2220
Copy link
Copy Markdown
Contributor Author

You're right, @M0NsTeRRR. I missed the specific concurrency detail in the automated review dropdown. I've updated the workflow to use the pull request number for the concurrency group as suggested. Thanks for catching that.

@M0NsTeRRR
Copy link
Copy Markdown
Member

You're right, @M0NsTeRRR. I missed the specific concurrency detail in the automated review dropdown. I've updated the workflow to use the pull request number for the concurrency group as suggested. Thanks for catching that.

No it wasn't that part, go there https://github.com/seerr-team/seerr/pull/2472/changes you can see others suggestions.

For the AI stuff you fixed, I've to check tomorrow because I didn't know the reported issue so I've to confirm before ;)

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/semantic-pr.yml:
- Around line 10-23: The workflow currently sets permissions: {} which removes
all token scopes; update the permissions block to grant minimal read access so
the action can read PR metadata (add pull-requests: read under permissions).
Locate the top-level permissions key in this workflow (the permissions: {}
entry) and change it to include pull-requests: read so the job "main" and the
amannn/action-semantic-pull-request invocation can access PR title data.

---

Duplicate comments:
In @.github/workflows/semantic-pr.yml:
- Line 21: Update the amannn/action-semantic-pull-request action reference in
the workflow (the uses entry currently pinned to
amannn/action-semantic-pull-request@0723387f...) to the latest release (v6.1.1
or its commit SHA) and verify compatibility with v6 breaking changes (Node.js 24
/ ESM); ensure the uses string in the workflow is replaced and run CI to confirm
the action behaves correctly under the new version.

Comment thread .github/workflows/semantic-pr.yml
@Hyperion2220
Copy link
Copy Markdown
Contributor Author

Understood, @M0NsTeRRR. I've moved the pull-requests: read permission to the job level so the action has the access it needs while keeping the global permissions restricted. Thanks for the clarification.

@M0NsTeRRR
Copy link
Copy Markdown
Member

@Hyperion2220 are you using an AI to reply and fix my suggestion ?

@Hyperion2220
Copy link
Copy Markdown
Contributor Author

lol, no. i'm just trying to branch out and get some experience with other types of projects outside of my usual wheelhouse. I probably seem a little extra as I'm trying really hard to do a good job. This is my first pull from a project outside of my own.

@M0NsTeRRR
Copy link
Copy Markdown
Member

Click on this link https://github.com/seerr-team/seerr/pull/2472/changes, on the right side you can see my suggestion they are still 3 left.

Copy link
Copy Markdown
Contributor Author

@Hyperion2220 Hyperion2220 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, should be all set now. Sorry for all the hand holding you had to do.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/semantic-pr.yml:
- Around line 21-26: There are duplicate top-level permissions blocks; the
second one overrides the first and drops scopes — consolidate them into a single
permissions mapping by removing the second "permissions:" block and merging its
entries so the final block contains contents: read, pull-requests: read, and
checks: write (keep the existing "pull-requests: read" entry and add the missing
"contents: read" and "checks: write" keys under the same "permissions" mapping).

Comment thread .github/workflows/semantic-pr.yml Outdated
Comment thread .github/workflows/semantic-pr.yml Outdated
@M0NsTeRRR M0NsTeRRR force-pushed the feature/conventional-commits-workflow branch from 97b5a94 to 6a510e3 Compare February 17, 2026 13:29
@M0NsTeRRR M0NsTeRRR enabled auto-merge (squash) February 17, 2026 13:30
@M0NsTeRRR M0NsTeRRR merged commit 5e57fdc into seerr-team:develop Feb 17, 2026
9 of 10 checks passed
alexlebens pushed a commit to alexlebens/infrastructure that referenced this pull request Feb 27, 2026
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/seerr-team/seerr](https://github.com/seerr-team/seerr) | minor | `v3.0.1` → `v3.1.0` |
| [seerr-team/seerr](https://github.com/seerr-team/seerr) | minor | `v3.0.1` → `v3.1.0` |

---

### Release Notes

<details>
<summary>seerr-team/seerr (ghcr.io/seerr-team/seerr)</summary>

### [`v3.1.0`](https://github.com/seerr-team/seerr/releases/tag/v3.1.0)

[Compare Source](seerr-team/seerr@v3.0.1...v3.1.0)

##### 🛡️ Security

- Patch [CVE-2026-27707](GHSA-rc4w-7m3r-c2f7)  - Unauthenticated account registration on Plex-configured Seerr instances via Jellyfin authentication endpoint  - ([4ae2068](seerr-team/seerr@4ae2068))
- Patch [CVE-2026-27793](GHSA-f7xw-jcqr-57hp) - Broken Object-Level Authorization in User Profile Endpoint Exposes Third-Party Notification Credentials - ([4f089b2](seerr-team/seerr@4f089b2))
- Patch [CVE-2026-27792](GHSA-gx3h-3jg5-q65f)  - Missing authentication on pushSubscription endpoints  - ([946bdecec](seerr-team/seerr@946bdec))

##### 🚀 Features

- *(helm)* Use an existing PVC as config volume ([#&#8203;2447](seerr-team/seerr#2447)) - ([8f0c904](seerr-team/seerr@8f0c904))
- *(servarr-api)* Make Servarr API request timeout configurable ([#&#8203;2556](seerr-team/seerr#2556)) - ([3bcb4da](seerr-team/seerr@3bcb4da))
- Self-host font for better privacy ([#&#8203;2540](seerr-team/seerr#2540)) - ([10ea21b](seerr-team/seerr@10ea21b))

##### 🐛 Bug Fixes

- *(helm)* Add "v" as prefix for appVersion tag ([#&#8203;2445](seerr-team/seerr#2445)) - ([04b9d87](seerr-team/seerr@04b9d87))
- *(jellyfin-scanner)* Include unmatched seasons in processable seasons ([#&#8203;2538](seerr-team/seerr#2538)) - ([68f56d2](seerr-team/seerr@68f56d2))
- *(link-account)* Fix error-message override ([#&#8203;2547](seerr-team/seerr#2547)) - ([b843be0](seerr-team/seerr@b843be0))
- *(plex-scanner)* Add TVDb to TMDB fallback in plex scanner ([#&#8203;2537](seerr-team/seerr#2537)) - ([7c60a5c](seerr-team/seerr@7c60a5c))
- *(radarr)* Trigger search for existing monitored movies without files ([#&#8203;2391](seerr-team/seerr#2391)) - ([55776ea](seerr-team/seerr@55776ea))
- *(servarr)* Increase default API timeout from 5000ms to 10000ms ([#&#8203;2442](seerr-team/seerr#2442)) - ([b499976](seerr-team/seerr@b499976))
- *(sonarr)* Use configured metadata provider for season filtering ([#&#8203;2516](seerr-team/seerr#2516)) - ([5013d1d](seerr-team/seerr@5013d1d))
- *(watch-data)* Use sentinel values to avoid invalid SQL syntax ([#&#8203;2552](seerr-team/seerr#2552)) - ([947f70c](seerr-team/seerr@947f70c))
- *(watchlist-sync)* Correct permission typo for TV auto requests ([#&#8203;2488](seerr-team/seerr#2488)) - ([e0e4b6f](seerr-team/seerr@e0e4b6f))
- Preserve blocklist on media deletion & optimise watchlist-sync ([#&#8203;2478](seerr-team/seerr#2478)) - ([9da8bb6](seerr-team/seerr@9da8bb6))

##### 🚜 Refactor

- *(tailwind)* Replace deprecated tailwind utilities ([#&#8203;2542](seerr-team/seerr#2542)) - ([f42a4ec](seerr-team/seerr@f42a4ec))

##### 📖 Documentation

- *(synology)* Add installation guide via SynoCommunity ([#&#8203;2503](seerr-team/seerr#2503)) - ([0e636a3](seerr-team/seerr@0e636a3))
- *(truenas)* Update install/migration guide ([#&#8203;2491](seerr-team/seerr#2491)) - ([dc1734d](seerr-team/seerr@dc1734d))
- *(unraid)* Improve unraid migration guide  ([#&#8203;2470](seerr-team/seerr#2470)) - ([5e64d49](seerr-team/seerr@5e64d49))
- Update Unraid install and migration guides with dual permission methods ([#&#8203;2532](seerr-team/seerr#2532)) - ([a0d0eb1](seerr-team/seerr@a0d0eb1))
- Add a warning in migration-guide for third party installation ([#&#8203;2527](seerr-team/seerr#2527)) - ([7e9dff3](seerr-team/seerr@7e9dff3))
- Remove double quotes (") from DB\_HOST environment variable ([#&#8203;2514](seerr-team/seerr#2514)) - ([fa905be](seerr-team/seerr@fa905be))
- Add Unraid installation and migration guide ([#&#8203;2440](seerr-team/seerr#2440)) - ([b6a9132](seerr-team/seerr@b6a9132))
- Fix migration guide title ([#&#8203;2425](seerr-team/seerr#2425)) - ([39ae32f](seerr-team/seerr@39ae32f))

##### ⚡ Performance

- Add missing indexes on all foreign key columns ([#&#8203;2461](seerr-team/seerr#2461)) - ([c6bcfe0](seerr-team/seerr@c6bcfe0))

##### ⚙️ Miscellaneous Tasks

- *(changelog)* Fix changelog template ([#&#8203;2431](seerr-team/seerr#2431)) - ([c2977f6](seerr-team/seerr@c2977f6))
- *(eslint)* Add react/self-closing-comp ([#&#8203;2563](seerr-team/seerr#2563)) - ([cd8b386](seerr-team/seerr@cd8b386))
- *(github)* Add docs and maintenance issue templates ([#&#8203;2467](seerr-team/seerr#2467)) - ([cf4883a](seerr-team/seerr@cf4883a))
- *(helm)* Add GatewayAPI route support to helm chart ([#&#8203;2544](seerr-team/seerr#2544)) - ([3a42f59](seerr-team/seerr@3a42f59))
- *(helm)* Update ghcr.io/seerr-team/seerr ( 3.0.0 → 3.0.1 ) \[skip-ci] ([#&#8203;2441](seerr-team/seerr#2441)) - ([87fb0df](seerr-team/seerr@87fb0df))
- *(husky)* Fixed husky commit message from bash/zsh syntax to sh syntax ([#&#8203;2572](seerr-team/seerr#2572)) - ([a00c9e5](seerr-team/seerr@a00c9e5))
- *(release)* Prepare ${TAG\_VERSION} - ([94a70bb](seerr-team/seerr@94a70bb))
- Updated the Contributing and Security guides to reflect our current practices ([#&#8203;2579](seerr-team/seerr#2579)) - ([0d40a42](seerr-team/seerr@0d40a42))
- Disable nextjs telemetry ([#&#8203;2517](seerr-team/seerr#2517)) - ([cecdd63](seerr-team/seerr@cecdd63))
- Update contributing guide regarding Automated AI Agent ([#&#8203;2518](seerr-team/seerr#2518)) - ([880fbc9](seerr-team/seerr@880fbc9))
- Remove discord notification from release ([#&#8203;2501](seerr-team/seerr#2501)) - ([fba20c1](seerr-team/seerr@fba20c1))
- Add create-tag workflow to streamline release process ([#&#8203;2493](seerr-team/seerr#2493)) - ([06e5eb0](seerr-team/seerr@06e5eb0))
- Update concurrency logic ([#&#8203;2481](seerr-team/seerr#2481)) - ([4939f13](seerr-team/seerr@4939f13))
- Add semantic-pr workflow to enforce conventional commits ([#&#8203;2472](seerr-team/seerr#2472)) - ([5e57fdc](seerr-team/seerr@5e57fdc))

##### New Contributors ❤️

- [@&#8203;caillou](https://github.com/caillou) made their first contribution
- [@&#8203;Kenshin9977](https://github.com/Kenshin9977) made their first contribution
- [@&#8203;MagicLegend](https://github.com/MagicLegend) made their first contribution
- [@&#8203;wiiaam](https://github.com/wiiaam) made their first contribution
- [@&#8203;mjonkus](https://github.com/mjonkus) made their first contribution
- [@&#8203;nova-api](https://github.com/nova-api) made their first contribution
- [@&#8203;mreid-tt](https://github.com/mreid-tt) made their first contribution
- [@&#8203;DataBitz](https://github.com/DataBitz) made their first contribution
- [@&#8203;Hyperion2220](https://github.com/Hyperion2220) made their first contribution
- [@&#8203;blassley](https://github.com/blassley) made their first contribution
- [@&#8203;JanKleine](https://github.com/JanKleine) made their first contribution
- [@&#8203;koiralasandesh](https://github.com/koiralasandesh) made their first contribution<!-- generated by git-cliff -->

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNS43IiwidXBkYXRlZEluVmVyIjoiNDMuMjUuNyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiaW1hZ2UiXX0=-->

Reviewed-on: https://gitea.alexlebens.dev/alexlebens/infrastructure/pulls/4284
Co-authored-by: Renovate Bot <renovate-bot@alexlebens.net>
Co-committed-by: Renovate Bot <renovate-bot@alexlebens.net>
lucianchauvin pushed a commit to lucianchauvin/jellyseerr that referenced this pull request Apr 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Create a workflow that checks if GitHub PRs follow the Conventional Commits convention

4 participants