Skip to content

ci: add create-tag workflow to streamline release process#2493

Merged
M0NsTeRRR merged 4 commits intodevelopfrom
feat/release-with-workflow-dispatch
Feb 18, 2026
Merged

ci: add create-tag workflow to streamline release process#2493
M0NsTeRRR merged 4 commits intodevelopfrom
feat/release-with-workflow-dispatch

Conversation

@M0NsTeRRR
Copy link
Copy Markdown
Member

@M0NsTeRRR M0NsTeRRR commented Feb 18, 2026

Description

I added a new create-tag workflow that can only be run on the main branch and streamlines the release process. It can be triggered via the web UI, automatically detects the appropriate tag, bumps the package.json version, commit it and creates a new tag. Afterward, the Seerr release workflow is triggered automatically.

To make it work, I set up a private key in the repository settings (deploy key + secret variable) because of this GitHub limitation.

I also removed the "skip ci" check from the other workflows, as GitHub Actions already supports this feature natively (reference).

How Has This Been Tested?

Create tag workflow run : https://github.com/M0NsTeRRR/seerr/actions/runs/22122957497
Seerr release workflow run : https://github.com/M0NsTeRRR/seerr/actions/runs/22122967642

Screenshots / Logs (if applicable)

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.
  • Successful build pnpm build
  • Translation keys pnpm i18n:extract
  • Database migration (if required)

Summary by CodeRabbit

  • Chores
    • Refined CI triggers so builds and notifications run more consistently across branches and commit messages.
  • New Features
    • Added an automated version-tagging workflow to compute, commit, and push release tags to streamline releases.

Signed-off-by: Ludovic Ortega <ludovic.ortega@adminafk.fr>
@M0NsTeRRR M0NsTeRRR requested a review from a team as a code owner February 18, 2026 01:45
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Feb 18, 2026

📝 Walkthrough

Walkthrough

Removes skip-ci conditions from existing CI workflow and adds a new "Create tag" GitHub Actions workflow that computes the next tag via git-cliff, updates package.json, commits the change, and creates & pushes a git tag on main branch pushes.

Changes

Cohort / File(s) Summary
CI Workflow Update
​.github/workflows/ci.yml
Removed skip-ci commit-message checks from build and Discord notification job conditions so jobs run without relying on commit message flags.
New Release Automation
​.github/workflows/create-tag.yml
Adds "Create tag" workflow with two jobs: determine-tag-version (runs git-cliff to compute TAG_VERSION) and create-tag (uses TAG_VERSION to bump package.json, commit changes, create and push the git tag).

Sequence Diagram(s)

sequenceDiagram
    participant Repo as Repository (push to main)
    participant Actions as GitHub Actions
    participant Cliff as git-cliff
    participant Runner as Job Runner (create-tag)
    participant Git as Git remote (origin)

    Repo->>Actions: push to main (or workflow_dispatch)
    Actions->>Cliff: run git-cliff to determine TAG_VERSION
    Cliff-->>Actions: outputs TAG_VERSION
    Actions->>Runner: start create-tag job with TAG_VERSION
    Runner->>Runner: bump package.json (no git hooks, no tag)
    Runner->>Git: commit changes and push
    Runner->>Git: create and push git tag (TAG_VERSION)
    Git-->>Repo: tag and commits available on origin
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐰 a rabbit in the CI garden
I sniffed the commits and found a clue,
git-cliff whispered a version new,
I nudged package.json, then gave a tug,
Pushed a tag upstream — hop, release snug! 🥕✨

🚥 Pre-merge checks | ✅ 4
✅ 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 create-tag workflow to streamline the release process.
Linked Issues check ✅ Passed The PR successfully implements automatic version bumping in package.json as required by issue #2428 through the new create-tag workflow.
Out of Scope Changes check ✅ Passed All changes are directly related to the objective: the create-tag workflow implements the auto-bump feature, and the ci.yml modifications support this workflow.

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


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

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

🧹 Nitpick comments (2)
.github/workflows/create-tag.yml (2)

84-87: Consider verifying the tag doesn't already exist before creating.

If someone manually created a tag or re-runs the workflow, the tag creation will fail. Adding a pre-check improves the error message and workflow reliability.

♻️ Optional defensive check
       - name: Create git tag
         run: |
+          if git rev-parse "${TAG_VERSION}" >/dev/null 2>&1; then
+            echo "::error::Tag ${TAG_VERSION} already exists"
+            exit 1
+          fi
           git tag "${TAG_VERSION}"
           git push origin "${TAG_VERSION}"
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/create-tag.yml around lines 84 - 87, Add a pre-check
before creating the git tag to verify TAG_VERSION doesn't already exist locally
or on origin; in the "Create git tag" step check for existence of ${TAG_VERSION}
(e.g., via git rev-parse or git ls-remote for origin) and only run git tag
${TAG_VERSION} / git push origin ${TAG_VERSION} when the tag is absent,
otherwise emit a clear message and fail or skip gracefully so re-runs or
manually-created tags don't cause an unhelpful error.

78-82: Scope git add to specific files and quote shell variables.

Using git add . could unintentionally stage files not related to the version bump. Additionally, quoting TAG_VERSION prevents potential issues with malformed version strings.

♻️ Proposed refinement
       - name: Commit updated files
         run: |
-          git add .
+          git add package.json
           git commit -m 'chore: prepare for release'
           git push
 
       - name: Create git tag
         run: |
-          git tag ${TAG_VERSION}
-          git push origin ${TAG_VERSION}
+          git tag "${TAG_VERSION}"
+          git push origin "${TAG_VERSION}"
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/create-tag.yml around lines 78 - 82, Replace the unscoped
staging and unquoted variable usage: avoid using "git add ." and instead
explicitly add only the files changed by the release (e.g., the version file(s)
your workflow updates such as package.json, package-lock.json, CHANGELOG.md or
VERSION) by replacing "git add ." with "git add <specific-file(s)>"; also quote
the TAG_VERSION variable wherever it is used (use "$TAG_VERSION") in commands
like git commit messages or git push refs to guard against spaces or special
characters. Ensure the commit command remains explicit (e.g., git commit -m
"chore: prepare for release $TAG_VERSION") and any push or tag creation uses
"$TAG_VERSION".
🤖 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/create-tag.yml:
- Around line 36-41: The "Get tag version" step captures git-cliff output into
the variable tag_version but does not validate it; add a check after computing
tag_version in that step to ensure it is non-empty and exit with a clear error
if empty (so the workflow stops before calling npm version). Specifically, in
the step that sets tag_version (the step with id git-cliff and variable
tag_version), test tag_version and if it's empty print a descriptive message to
the job log and exit non‑zero (and avoid writing an empty tag_version to
GITHUB_OUTPUT); this prevents subsequent steps (like the npm version invocation)
from running with an empty TAG_VERSION.

---

Nitpick comments:
In @.github/workflows/create-tag.yml:
- Around line 84-87: Add a pre-check before creating the git tag to verify
TAG_VERSION doesn't already exist locally or on origin; in the "Create git tag"
step check for existence of ${TAG_VERSION} (e.g., via git rev-parse or git
ls-remote for origin) and only run git tag ${TAG_VERSION} / git push origin
${TAG_VERSION} when the tag is absent, otherwise emit a clear message and fail
or skip gracefully so re-runs or manually-created tags don't cause an unhelpful
error.
- Around line 78-82: Replace the unscoped staging and unquoted variable usage:
avoid using "git add ." and instead explicitly add only the files changed by the
release (e.g., the version file(s) your workflow updates such as package.json,
package-lock.json, CHANGELOG.md or VERSION) by replacing "git add ." with "git
add <specific-file(s)>"; also quote the TAG_VERSION variable wherever it is used
(use "$TAG_VERSION") in commands like git commit messages or git push refs to
guard against spaces or special characters. Ensure the commit command remains
explicit (e.g., git commit -m "chore: prepare for release $TAG_VERSION") and any
push or tag creation uses "$TAG_VERSION".

Comment thread .github/workflows/create-tag.yml
sudo-kraken
sudo-kraken previously approved these changes Feb 18, 2026
Copy link
Copy Markdown
Contributor

@sudo-kraken sudo-kraken left a comment

Choose a reason for hiding this comment

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

Looks good to me. Will be a good addition to our workflows.

Copy link
Copy Markdown
Collaborator

@fallenbagel fallenbagel left a comment

Choose a reason for hiding this comment

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

Accidentally pressed copilot again. Lgtm!

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR adds automation for the release process by introducing a new create-tag workflow that runs on the main branch. The workflow automatically determines the next version using git-cliff, updates package.json, commits the change, and creates a tag that triggers the existing release workflow. Additionally, manual [skip ci] checks have been removed from CI workflows since GitHub Actions now natively supports this feature.

Changes:

  • Added new create-tag.yml workflow that automates version bumping and tag creation
  • Removed redundant manual [skip ci] checks from CI workflows (now handled natively by GitHub)

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

File Description
.github/workflows/create-tag.yml New workflow to automate release tagging process using git-cliff for version detection, npm for package.json updates, and git commands for committing and tagging
.github/workflows/ci.yml Removed manual [skip ci] condition checks as GitHub Actions now supports this natively

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .github/workflows/create-tag.yml Outdated
Comment thread .github/workflows/create-tag.yml Outdated
Comment thread .github/workflows/create-tag.yml
@M0NsTeRRR M0NsTeRRR enabled auto-merge (squash) February 18, 2026 11:50
@fallenbagel fallenbagel self-requested a review February 18, 2026 11:54
Copy link
Copy Markdown
Collaborator

@fallenbagel fallenbagel left a comment

Choose a reason for hiding this comment

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

There are two reviews by copilot that I believe might be worth checking out

Signed-off-by: Ludovic Ortega <ludovic.ortega@adminafk.fr>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
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.

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

Duplicate comments:
In @.github/workflows/create-tag.yml:
- Around line 36-41: The step that runs git-cliff (step name "Get tag version",
id "git-cliff") can produce an empty tag_version which is then exported; update
the step to validate tag_version after running git-cliff and before writing to
GITHUB_OUTPUT by checking if tag_version is non-empty, logging an error and
exiting non-zero (or setting a safe default) when it is empty, and only echoing
"tag_version=${tag_version}" to "$GITHUB_OUTPUT" when the value is present.

@M0NsTeRRR M0NsTeRRR merged commit 06e5eb0 into develop Feb 18, 2026
13 checks passed
@M0NsTeRRR M0NsTeRRR deleted the feat/release-with-workflow-dispatch branch February 18, 2026 12:22
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>
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.

Auto bump package.json version on release

4 participants