Skip to content

ci: a no-release label lets a change that keeps the binaries skip the version; review follow-ups - #39

Merged
keyldev merged 1 commit into
masterfrom
ci/no-release-label
Oct 17, 2026
Merged

keyldev merged 1 commit into
masterfrom
ci/no-release-label

Conversation

@compot-dev

Copy link
Copy Markdown
Collaborator

Follow-ups from @keyldev's review:

This PR carries the no-release label itself: the only src/ change is a comment, the binaries stay the same, so no 0.3.2. #28 needed nothing more: the CLAUDE.md on master already has your points. The first real Telegram post comes with 0.3.2 (#38); I will check the channel then.

Tested in compot/cross on a scratch clone: a src/ change without a new version fails without the label and passes with NO_RELEASE=true (notice listing the files); NO_RELEASE=false fails. shellcheck v0.10.0 clean.

… version; review follow-ups

- check-version.sh: with NO_RELEASE=true (the pull request's no-release
  label) a change to the code or the build may keep CERBERUS_VERSION, for
  changes that leave the binaries as they are (keyldev on #26). The CI
  job passes the label and runs again when labels change.
- src/cerberus.c: the comment above CERBERUS_VERSION no longer says that
  release builds pass the tag in (keyldev on #37).
- READMEs: older instructions that download S99cerberus get a 404, run
  cerberus init-script instead (keyldev on #23); a rollback is a revert
  plus a new version; the no-release label.

This pull request carries the no-release label itself: the comment
change leaves the binaries as they are.

Tested: a src/ change without a new version fails without the label and
passes with NO_RELEASE=true; shellcheck clean.
@compot-dev compot-dev added the no-release Changes the build or the code without changing the binaries: no new version, no release label Oct 17, 2026
@qodo-free-for-open-source-projects

Copy link
Copy Markdown

PR Summary by Qodo

Allow labeled non-release changes to skip the version bump

✨ Enhancement 📝 Documentation 🕐 20-40 Minutes

Grey Divider

AI Description

• Allow labeled code or build changes to retain the version when binaries are unchanged.
• Recheck the version requirement when pull request labels change.
• Clarify init-script installation, release behavior, and rollback guidance in three languages.
Diagram

graph TD
  Labels["PR labels"] --> Job["Version bump job"] --> Check["Version check"] --> Changed{"Code changed?"}
  Changed -->|"yes, same version"| Labeled{"No-release label?"} -->|yes| Pass["Pass without bump"]
  Labeled -->|no| Reject["Require version bump"]
  Changed -->|no| Pass
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Compare built binaries against the base branch
  • ➕ Provides evidence that a labeled change does not alter release binaries.
  • ➖ Requires reproducible builds and substantially more CI work across architectures.

Recommendation: Keep the explicit label for this narrow exception: it makes the decision visible to reviewers without complicating the build pipeline. Reviewers must still verify that labeled changes leave the binaries unchanged; the label does not prove that automatically.

Files changed (6) +34 / -1

Enhancement (1) +9 / -0
check-version.shPermit unchanged versions with the no-release flag +9/-0

Permit unchanged versions with the no-release flag

• When code or build files change without a version bump, NO_RELEASE=true now passes the check and lists those files. Without the flag, the existing version-bump error remains.

.github/check-version.sh

Documentation (4) +20 / -1
README.mdClarify installation and no-release policy in English +7/-0

Clarify installation and no-release policy in English

• Explains that older S99cerberus release downloads return 404 and directs users to cerberus init-script. Documents the no-release exception and revert-plus-version rollback.

README.md

README.ru.mdClarify installation and no-release policy in Russian +7/-0

Clarify installation and no-release policy in Russian

• Adds the S99cerberus download warning and init-script replacement. Documents the no-release exception and rollback guidance.

README.ru.md

README.zh-CN.mdClarify installation and no-release policy in Chinese +5/-0

Clarify installation and no-release policy in Chinese

• Adds the S99cerberus download warning and init-script replacement. Documents the no-release exception and rollback guidance.

README.zh-CN.md

cerberus.cCorrect the source-version comment +1/-1

Correct the source-version comment

• Clarifies that CERBERUS_VERSION applies to release builds too, while make VERSION can override it for a test build. The version definition and executable behavior are unchanged.

src/cerberus.c

Other (1) +5 / -0
ci.ymlPass pull request label status to the version check +5/-0

Pass pull request label status to the version check

• The version job derives NO_RELEASE from pull request labels. The workflow also reruns when labels are added or removed so the check reflects the current label state.

.github/workflows/ci.yml

@qodo-free-for-open-source-projects

qodo-free-for-open-source-projects Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (1) 📎 Requirement gaps (0) 🎨 UX issues (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)

Grey Divider


Remediation recommended

1. Source changes can skip version history 📘 Rule violation ⚙ Maintainability
Description
check-version.sh lets NO_RELEASE=true bypass the version and changelog checks for changed
source, build files, and installers without verifying that released files are unchanged. When a
labeled pull request changes install.sh or uninstall.sh without bumping CERBERUS_VERSION, the
release job sees the existing version and asset names and skips publishing the updated script.
Code

.github/check-version.sh[R44-49]

+	if [ -n "$changed" ] && [ "${NO_RELEASE:-}" = true ]; then
+		echo "::notice::code or build changed, CERBERUS_VERSION stays $old: the no-release" \
+			"label says the binaries do not change"
+		echo "$changed"
+		exit 0
+	fi
Evidence
The checker includes installers in its changed-file set, but its NO_RELEASE branch exits
successfully for those changes without a new version or changelog section; the cited pull request
leaves CERBERUS_VERSION at 0.3.1 without a new changelog section. Release assembly copies
installers into assets only when publication runs, while the release job checks asset names rather
than contents and skips publication when the existing version already has all expected names.

CLAUDE.md: Update Version and Changelog for Build-Relevant Changes: CLAUDE.md: Update Version and Changelog for Build-Relevant Changes
.github/check-version.sh[44-49]
src/cerberus.c[71-74]
.github/check-version.sh[23-24]
.github/check-version.sh[41-54]
ci/assemble.sh[14-16]
.github/workflows/ci.yml[138-168]
.github/workflows/ci.yml[175-185]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
A `no-release` label currently lets changed source, build, or installer files pass the version check without establishing that released files are unchanged. An installer fix can therefore pass without a version bump and remain unpublished because the existing release already has assets with the expected names.
## Fix Focus Areas
- .github/check-version.sh[41-54]
- .github/workflows/ci.yml[138-168]
## Recommended Fix
Require a version bump and changelog section for changes to `install.sh`, `uninstall.sh`, or release assembly that alter published assets. Limit any `no-release` exemption to changes that do not affect released files; for source or build changes, verify that produced binaries are byte-for-byte unchanged before allowing the exception, or explicitly document and govern the exemption in the compliance policy so a label alone cannot bypass version history requirements.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Tip of the day
💡 Did you know, you can see how risky a PR is at a glance with blast radius labels

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment thread .github/check-version.sh
Comment on lines +44 to +49
if [ -n "$changed" ] && [ "${NO_RELEASE:-}" = true ]; then
echo "::notice::code or build changed, CERBERUS_VERSION stays $old: the no-release" \
"label says the binaries do not change"
echo "$changed"
exit 0
fi

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Remediation recommended

1. Source changes can skip version history 📘 Rule violation ⚙ Maintainability

check-version.sh lets NO_RELEASE=true bypass the version and changelog checks for changed
source, build files, and installers without verifying that released files are unchanged. When a
labeled pull request changes install.sh or uninstall.sh without bumping CERBERUS_VERSION, the
release job sees the existing version and asset names and skips publishing the updated script.
Agent Prompt
## Issue description
A `no-release` label currently lets changed source, build, or installer files pass the version check without establishing that released files are unchanged. An installer fix can therefore pass without a version bump and remain unpublished because the existing release already has assets with the expected names.

## Fix Focus Areas
- .github/check-version.sh[41-54]
- .github/workflows/ci.yml[138-168]

## Recommended Fix
Require a version bump and changelog section for changes to `install.sh`, `uninstall.sh`, or release assembly that alter published assets. Limit any `no-release` exemption to changes that do not affect released files; for source or build changes, verify that produced binaries are byte-for-byte unchanged before allowing the exception, or explicitly document and govern the exemption in the compliance policy so a label alone cannot bypass version history requirements.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

no-release Changes the build or the code without changing the binaries: no new version, no release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants