feat: collect pending changes between production and the default branch - #1
Merged
Merged
Conversation
lesnik512
commented
Sep 28, 2026
lesnik512
commented
Sep 28, 2026
Drops the stateful fake and the version-metadata stub. --version no longer falls back to "0"; the floors job installs the package so its metadata exists.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
First version of
release-scope collect: for each selected GitLab service it writes one JSON report of everything between the commit running in production and the head of the default branch. Jira lookups (summary, status, "Release" notes, related services) are not included yet.What a row is
The range is
<production deployment sha>..<default branch>withfirst_parent=true, newest first. Each row is one merged MR or one direct commit:updated_after= the oldest commit date in the range);commits/:sha/merge_requests, keeping only merged MRs into the default branch. Commits of the same MR end up in the same row.A row lists the tags pointing at its commits (each with its latest tag pipeline), the environments running one of its commits, the Jira keys found in the MR title, branch and description (or the commit message for direct commits), and the latest
pushpipeline on the default branch for its newest commit. Failed jobs include both jobs and bridges;allow_failureis reported rather than filtered out.Design choices
updated_at. It is pruned to what the run used, written atomically, and dropped on a schema mismatch (ADR-0001). When a service fails, its previous cache entries are kept.(?<![A-Za-z0-9])[A-Z][A-Z0-9]+-\d+(?![A-Z0-9]). Unlike a\bpattern, it catches keys in branch names likefeature/ABC-1_x. An optional project-key allowlist drops false positives such asUTF-8.bridgesroute.trigger_jobsreplaces it only from GitLab 19.2, and self-managed instances are often older.RELEASE_SCOPE_*env vars.Not in this PR
key in (...)) for summary, status and the "Release" section.Checks
just lint-ci,just adr-checkandjust test-ci(100% line coverage) pass locally on 3.14. The suite also passes on 3.11 and at the declared dependency floors (uv pip compile --resolution lowest-directthen--no-buildinstall, as thefloorsjob does).Review follow-ups
side_effectlist for the multi-page test. The happy-path tests keep respx'sassert_all_called; tests that stop early opt out one by one.--versionno longer falls back to"0"when package metadata is missing. Because of that, thefloorsjob addsuv pip install --no-deps -e .after the org-standard install. The dependency floors are unchanged; the package just has to be installed for its metadata to exist. This is the one place this repo's_checks.ymldiffers from the org'sfloorssnippet.httpx2marker in apytest_configurethat the package never exports, so the marker is registered inpyproject.toml.