Skip to content

ci: infra-only pull requests need no changelog entry and cut no release - #821

Merged
szibis merged 1 commit into
mainfrom
ci/changelog-release-scope
Oct 22, 2026
Merged

szibis merged 1 commit into
mainfrom
ci/changelog-release-scope

Conversation

@szibis

@szibis szibis commented Oct 22, 2026

Copy link
Copy Markdown
Collaborator

Summary

The changelog gate and the release bot each kept their own list of paths that do not ship, and the lists disagreed. Both now ask the change classifier added in #820, so an infra-only pull request needs no changelog entry and cuts no release.

Builds on #820 (merged).

Changes

  • scripts/ci/check_changelog_pr.py
    • Imports the classifier from its own directory, so it works as a script and under unittest.
    • A path is non-release when it is a unit-test-only path, when the classifier says infra, or when it is the classifier machinery itself (rule P4). The old prefix and file lists are removed; a test checks that every path they listed is still non-release.
    • should_require_changelog returns False before the commit-subject check when no file is product. This does not use the unit-test exception, so a fix: that only edits internal/**/_test.go still needs an entry.
    • is_dependency_only_pr accepts a file that is non-release or a dependency manifest by name (go.mod, go.sum, Dockerfile, requirements*.txt, requirements*.in, package.json, package-lock.json, docker-compose*.yml). The separate .github/ clause is gone. Bench manifests are product for CI but pass the gate as dependency-only.
    • Unchanged: the released-history guard, the metadata-sync exemption and product pull request behaviour.
  • .github/workflows/auto-release.yaml: the DOCS_OR_CI_ONLY regex loop is replaced by the classifier over git diff --name-only <last tag>..HEAD. The release is skipped when no file ships, with P4 counting as not shipping. An empty list or a classifier error counts as product and falls through to the existing [Unreleased] check. The chart version edit that the metadata sync makes after every release is ignored while the chart still carries the released version; the tag is cut before that sync, so every range since a tag contains it.
  • scripts/ci/tests/test_check_changelog_pr.py: new cases, and two existing assertions updated (below).

Behaviour

Case Before After
fix(ci): ... touching only .github/, scripts/, security/ entry required no entry
ci: touching only .github/workflows/ci.yaml entry required no entry
feat: or fix: touching only docs/ or README.md entry required no entry
fix: touching only internal/x/y_test.go entry required entry required
fix: touching internal/ entry required entry required
Change to scripts/ci/change_scope.py or its workflow only entry required no entry
Dependabot #814, #816 (security/requirements-semgrep.*) entry required no entry
Dependabot #813 (bench/visual package files) entry required no entry
Dependabot #811 (test/e2e-ui package files) entry required no entry
Dependabot #810 (test compose file) entry required no entry
Dependabot #815 (website) no entry no entry
Merge range since tag with only infra files and the post-release chart version edit (v2.24.4 to #807) release cut release skipped
Merge range since tag with a chart template or other product file (v2.24.5 to #808) release release
Merge range with a go.mod change (Dependabot #812) release release

Proofs

Not applicable

Infra-only PR; product checks (e2e vs Loki, Grafana range matrix, visual, A/B, benchstat, load) do not apply.

The changelog gate and the release bot each kept their own list of paths
that do not ship. Both now ask the change classifier, so the lists cannot
drift apart.

Changelog gate: a pull request whose files are all infra needs no entry,
whatever its commit subjects say, so an infra-only fix(ci) no longer forces
one. A fix that only edits unit tests under internal still needs an entry.
A change to the classifier or its workflow counts as infra here, although
it runs every check. A dependency bump is accepted when every file is
non-release or a dependency manifest by file name, which covers the bench
manifests that are product for CI but not a release by themselves. The
released-history guard and the metadata-sync exemption are unchanged.

Release bot: the regex loop is replaced by the classifier, on the files
changed since the last tag. The release is skipped when none of them
ships. The chart version edit made by the metadata sync after each release
is ignored while the chart still carries the released version, because it
would otherwise make every range look like a chart change.
@github-actions github-actions Bot added size/L Large change scope/ci CI/CD maintenance Maintenance labels Oct 22, 2026
@github-actions

Copy link
Copy Markdown
Contributor

PR Quality Report

Compared against base branch main.

Coverage and tests

Signal Base PR Delta
Test count 11827 11827 0
Coverage 88.3% 88.4% +0.1% (improved)

Compatibility

Track Base PR Delta
Loki API 100.0% 11/11 (100.0%) 0.0% (stable)
Logs Drilldown 100.0% 17/17 (100.0%) 0.0% (stable)
VictoriaLogs 100.0% 11/11 (100.0%) 0.0% (stable)

Performance smoke

Performance smoke was skipped for this PR because no perf-sensitive paths changed.

State

  • Coverage, compatibility, and sampled performance are reported here from the same PR workflow.
  • This is a delta report, not a release gate by itself. Required checks still decide merge safety.
  • Performance smoke was intentionally skipped because no perf-sensitive paths changed in this PR.
  • Delta states use the same noise guards as the quality gate (percent + absolute + low-baseline checks), so report labels match merge-gate behavior.

@szibis
szibis merged commit 5656353 into main Oct 22, 2026
38 checks passed
@szibis
szibis deleted the ci/changelog-release-scope branch October 22, 2026 13:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

maintenance Maintenance scope/ci CI/CD size/L Large change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant