Repository navigation
fix: release recovery, package inventory and update checks - #17
Merged
Merged
Conversation
…w findings - release.yml: a real (non-dry-run) dispatch from any ref other than refs/heads/main fails in the plan job before anything is built. - release.yml: the tag is now pushed after verification but before any NuGet upload, and the GitHub release is created last. The tag records the source commit before anything irreversible, so a later run after main moved hits the existing tag-at-another-commit refusal instead of filling a partial upload in from different source. - release.yml / compute-version.sh: a version that is tagged but has no GitHub release is planned again (resumed) instead of skipped as released. compute-version.sh prints the tagged version on its exit 3. - verify-packages.py: packages are classified by id; every runtime package must carry a native payload, and --expect-complete checks the full helper/meta/runtime inventory from gen-nuspec.sh (ALL_RIDS and the SPDX cells) rather than only the metas that were found. --cells narrows it for CI, which packs one cell in full. - check-updates.yml: every page of upstream releases is read, not the newest 100. - ci.yml: the pack matrix comes from versions.json through a resolve job, which result now also needs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # .github/workflows/release.yml
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.
Fixes from a review of the release and CI workflows.
Release (
release.yml,scripts/compute-version.sh)::error::whendry_runis off andgithub.refis notrefs/heads/main. Dry runs still work from any ref. Push runs only ever happen on main, so they are unaffected.--skip-duplicatefilled in the rest of the set from a different commit. Now that later run finds the tag at another commit and the existing refusal stops it before any upload. The error says to re-run the original run, which uses the same commit. The GitHub release is still created last, with--verify-tag, so it marks the version as finished. The ordering is explained in a comment in the workflow.compute-version.shstill exits 3 for an upstream build that is already tagged, and now also prints that version on stdout. The planner then checks for a GitHub release (GET releases/tags/v<version>). A 404 means the version is unfinished, so it is planned again under the same version. Any other API error fails the plan rather than guessing. Every step is conditional on its own absence (tag already at this commit,--skip-duplicate, release already there), so a resume picks up where the failed run stopped. A resume never publishes from a commit other than the one the tag points at: the tag check runs before any upload.Package verification (
scripts/verify-packages.py).Allmeta or runtime, for a known cell and RID. An unrecognised id fails.if payloadand could never fire, so an empty runtime package passed. The lib/*.dll and notices checks now also run for every runtime package.--expect-completenow checks the full expected inventory: the helper, plus every cell's.Alland allALL_RIDSruntime packages. Cells and RIDs both come fromgen-nuspec.sh(theSPDXtable andALL_RIDS). Before, the check only covered metas that happened to be present, so a cell that failed to pack entirely went unnoticed.--cells: CI packs only LGPLv2 in full, so it now passes--expect-complete --cells LGPLv2. The release keeps checking all four cells.I checked this with synthetic feeds built in memory (10 cases):
--cellswith a subset, and a subset feed run without--expect-complete.main, five of these cases give the wrong result: the empty-package, missing-cell and missing-metas feeds all pass there.Update check (
check-updates.yml)gh api --paginate repos/devenvy/ffmpeg/releases, with drafts and pre-releases filtered out. Before, only the newest 100 were read, so a quiet series could fall out of the window, match nothing and fail every run.CI (
ci.yml)versions.jsonthrough a smallresolvejob, the same sourcesmoke-test.ymluses.resultnow needsresolveas well and is still the single required check.Local checks
shellcheck scripts/*.sh, actionlint and zizmor (offline) are all clean.🤖 Generated with Claude Code