Fix release provenance, E2E cleanup race, and stale docs - #157
Open
ClaudiaFang wants to merge 1 commit into
Open
Fix release provenance, E2E cleanup race, and stale docs#157ClaudiaFang wants to merge 1 commit into
ClaudiaFang wants to merge 1 commit into
Conversation
…eanup concurrency race, update stale docs - Replace ci.yml's `publish` job (build+attest+semantic-release, all inline and pre-tag) with `release-metadata` (semantic-release only: tag, changelog, GitHub Release shell entry). The old job attested `github.sha` but semantic-release's `@semantic-release/git` plugin tags a *later* `chore(release):` commit -- the attestation never matched the actual released commit. - Add `release-build.yml`, triggered by `release: published`, calling `firstsun-dev/.github`'s `obsidian-plugin-release-build.yml` (same pattern already used by watermark-bucket-uploader): checkout the exact tag, build once, attest, upload, and sha256-verify the uploaded bytes -- none of which the old `publish` job did. - Drop `@semantic-release/github`'s `assets` config in `.releaserc.json` -- asset upload now happens only in `release-build.yml`, never from semantic-release itself. Also drop the stale `feat/use-shared-workflow` branch entry (confirmed via `gh api` to no longer exist). - Fix `e2e-pr-cleanup.yml`/`e2e-branch-cleanup.yml`'s concurrency group: they used `e2e-<branch>-<provider>`, which no longer matches ci.yml's actual `ci-<branch>` group after ci.yml moved off per-provider groups -- so cleanup no longer queued behind a live E2E run as their own comments claimed, letting a PR-close/branch-delete cleanup race a live provider-e2e run and delete its namespace mid-flight. Now both use `ci-<branch>` to genuinely match. - Update docs/testing/real-provider-e2e.md, which still described the old per-source/per-provider concurrency scheme and conflated job-level fork-gating (skipped) with step-level workflow_dispatch gating (success with skipped steps). Part of a cross-repo CI architecture review across firstsun-dev/.github, watermark-bucket-uploader, and git-files-sync.
|
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.




Summary
ci.yml'spublishjob (build → attest → semantic-release, all inline against the pre-tag commit) is replaced withrelease-metadata(semantic-release only — tag/changelog/GitHub Release shell entry, no build/attest/upload). A newrelease-build.yml, triggered byrelease: published, callsfirstsun-dev/.github'sobsidian-plugin-release-build.yml— the same shared workflow watermark-bucket-uploader already uses — to check out the exact tag, build once, attest, upload, and sha256-verify the upload. This fixes a real provenance gap: the old job attestedgithub.sha, but@semantic-release/gittags a laterchore(release):commit, so the attestation never actually corresponded to the released commit, and there was no upload-integrity verification at all..releaserc.json: dropped@semantic-release/github'sassetsconfig (upload now only happens inrelease-build.yml) and the stalefeat/use-shared-workflowbranch entry (confirmed gone viagh api).e2e-pr-cleanup.yml/e2e-branch-cleanup.ymlused concurrency groupe2e-<branch>-<provider>, which no longer matchesci.yml's actualci-<branch>group sinceci.ymlmoved off per-provider groups — so cleanup no longer queued behind a live E2E run despite both files' comments claiming it did. A PR-close or branch-delete could delete an E2E namespace mid-run. Both now useci-<branch>to genuinely match. (One caveat left as an explicit comment ine2e-branch-cleanup.yml: whetherdeleteevents'github.event.refcarries arefs/heads/prefix couldn't be verified offline — flagged rather than silently assumed correct.)docs/testing/real-provider-e2e.md, which still described the old per-source/per-provider concurrency scheme and conflated job-level fork-gating (skipped) with step-levelworkflow_dispatchgating (successwith skipped steps).No changes to
changes,gitea-e2e,provider-e2e,lint,unit-test,build, orrequired-checks— the E2E DAG itself is untouched.Part of a cross-repo CI architecture review across
firstsun-dev/.github,watermark-bucket-uploader, andgit-files-sync. Companion PR: firstsun-dev/.github#19.Test plan
python3 -c "import yaml,sys; yaml.safe_load(open(sys.argv[1]))"passed on all modified/new workflow YAML (done locally).releaserc.jsonparses as valid JSON (done locally)release-metadatacreates a tag with no assets,release-build.ymlfires onrelease: published, and the resulting GitHub Release hasmain.js/manifest.json/styles.csswith an attestation matching the exact tagged commitprovider-e2erun is deliberately kept alive (keep_branch: true) to confirm cleanup now queues instead of racingCo-Authored-By: Claude Sonnet 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_011zVvyzHgtk7C51dpi8CGrp
🤖 Generated with Claude Code