Releases: vig-os/devcontainer
0.3.9
Fixed
- Stop promote-release cleanup from orphaning RC draft pre-releases (#623)
- The cleanup step deleted RC draft pre-releases with
gh release delete <tag>, which cannot resolve a draft, then deleted the git RC tag anyway — stranding the draft and making it undiscoverable on later runs (the loop was seeded from git tags) - Cleanup now enumerates RC draft pre-releases from the releases list, deletes them by release id, removes a git RC tag only when no release is attached, and fails loudly if any RC draft survives — also reclaiming drafts whose tag was already removed by an earlier partial run
- The cleanup step deleted RC draft pre-releases with
0.3.8
Fixed
- Prevent prepare-release from branching
release/X.Y.Zat the pre-freeze dev SHA (#617)- The "Create release branch from dev" step now polls dev until it advances past the captured pre-freeze SHA before branching, and hard-fails if it never does, closing a read-after-write race that could create a release branch missing the
## [X.Y.Z] - TBDfreeze
- The "Create release branch from dev" step now polls dev until it advances past the captured pre-freeze SHA before branching, and hard-fails if it never does, closing a read-after-write race that could create a release branch missing the
- Make smoke-test dispatch idempotent across candidate→final on one base version (#612)
prepare-changelog finalizeis now a no-op when the version heading is already dated, instead of erroringprepare-changelog preparefolds an existing same-version heading back into a single## [X.Y.Z] - TBDsection instead of stacking a duplicate- New
prepare-changelog reset-version <version>command reverts a dated heading back to- TBD(idempotent); the smoke-test dispatch template runs it at dispatch start and scopes its deploy-seed check to theUnreleasedsection
- Fix release PR body truncation when changelog bullets quote a version heading (#620)
- The "Extract CHANGELOG content for PR body" step now anchors its
sedrange to start-of-line headings, so an inline backtick-quoted heading inside a bullet no longer ends the range early
- The "Extract CHANGELOG content for PR body" step now anchors its
0.3.7
Changed
- Consolidate Renovate dependency updates (588, 589, 606, 607) (#588, #589, #606, #607)
- Update
actions/checkouttov7.0.0,taiki-e/install-actiondigest toab08a3b,astral-sh/setup-uvto0.11.23, and theaquasecurity/trivy-actionscanner tov0.71.2 - Bump Python deps:
pytest9.1.1,ruff0.15.18 (root);numpy2.5.0,scipy1.18.0 (workspace template); lockfile refreshed
- Update
Fixed
- Prune RC draft pre-releases in promote cleanup (#600)
- Cleanup now deletes
X.Y.Z-rcNdraft pre-releases (and their now-orphaned tags); guarded to never touch published releases
- Cleanup now deletes
Security
- Consolidate container-image vulnerability scanning to a single source of truth (#604)
- PR CI Trivy is now a blocking gate only (fail on fixable HIGH/CRITICAL) and no longer uploads SARIF to the Security tab
- The nightly scheduled scan of the published
:latestimage (container-image-latest) is now the single authoritative scan for the GitHub Security tab, ending duplicate/stale alert categories - Dismissed orphaned
container-image-scheduledand stalecontainer-imagecode-scanning alerts that could no longer auto-close
0.3.6
Changed
- Migrate
actions/create-github-app-tokentoclient-id(#576)- Replace deprecated
app-idinput withclient-idacross root, workspace template, and smoke-test workflows - Requires org-level
COMMIT_APP_CLIENT_IDandRELEASE_APP_CLIENT_IDsecrets (GitHub App Client ID, not numeric App ID)
- Replace deprecated
- Consolidate Renovate dependency updates (586–589) (#586, #587, #588, #589)
- Bump
python:3.14-slim-bookwormbase image to multi-arch index digestsha256:7e2f304… - Update
taiki-e/install-actiondigest tobafb217,astral-sh/setup-uvto0.11.21, and other GitHub Actions minor/patch versions - Bump
requires-pythonto==3.14.6and Python deps:pytest9.1.0,ruff0.15.17,github-backup0.63.0 (lockfile refreshed)
- Bump
Fixed
-
Smoke-test
prepare-releasefailed on empty Unreleased section (#597)- The smoke-test fixture has no hand-authored changelog entries, so each release freeze left
## Unreleasedempty and the downstreamprepare-releasegate rejected it ("Unreleased section has no entries") - The deploy step in
repository-dispatch.ymlnow seeds a deploy entry into## Unreleasedwhen it is empty, so the smoke-test release pipeline can always proceed
- The smoke-test fixture has no hand-authored changelog entries, so each release freeze left
-
sync-main-to-devcould silently drop the fresh## Unreleasedscaffold (#590)prepare-releaseno longer strips## Unreleasedfrom the release branch, somainkeeps an empty## Unreleasedabove the dated release (matchingdev)- With the section present on both branches it is stable common context in the
main↔devmerge base, so the sync merge preserves it cleanly instead of resolving inmain's favour and dropping it - Applied to both the canonical workflow and the workspace template so adopters (e.g.
part-registry) inherit the fix
-
devcontainer-upgrade/ install URL 404s (#591)- Replace the unhosted
vig-os.github.io/devcontainer/install.shPages URL with the canonicalraw.githubusercontent.com/vig-os/devcontainer/main/install.shalready used inREADME.md - Pipe the installer to
bashinstead ofsh(the script has a#!/bin/bashshebang and uses bashisms), matching the canonical form - Fixes the actual
just devcontainer-upgradehost command plus error hints, the version-check upgrade nag, smoke-test install docs, andinstall.shusage/--helpoutput
- Replace the unhosted
-
GHCR RC artifacts never pruned after promote-release (#583)
- Switch GHCR package-version deletes to
GITHUB_TOKENwith repo Admin on thedevcontainerpackage (one-time Manage Actions access grant) - Replace blanket
sha256-*deletion with digest-aware selection that prunes RC images and matching RC cosign signatures only - Fail the cleanup step loudly when deletes fail or RC tags remain (job still uses
continue-on-error)
- Switch GHCR package-version deletes to
0.3.5
Changed
-
Consolidate Renovate dependency updates (#550)
- Python 3.12 → 3.14.5 (
Containerfile,requires-python, and lockfile) - CI runners
ubuntu-22.04→24.04and Node.js 22 → 24 - GitHub Actions major bumps:
setup-nodev6,setup-uvv8,github-scriptv9 - SHA-pinned digest updates for checkout, codeql, create-github-app-token, and taiki-e/install-action
- Pin Python, npm, and workspace template dependencies to exact versions (#530)
@devcontainers/cli0.87.0 (#538)
- Python 3.12 → 3.14.5 (
-
Bump expected tool versions in image tests
gh2.92 → 2.93,just1.50 → 1.52,cargo-binstall1.18 → 1.20 to match latest upstream releases
-
Consolidate Renovate dependency updates (553–556) (#553, #554, #555, #556)
- Pin
pytestto 9.0.3, bumppytest-covto 7.1.0,richto 15.0.0 - Bump
github-backupto 0.62.1,pre-committo 4.6.0,ruffto 0.15.16,pip-licensesto 5.5.5 - Bump expected
pre-commitversion in image tests to 4.6 - Bump
actions/dependency-review-actionto v5.0.0
- Pin
Fixed
-
Renovate PR CI gates expired or broken (#550)
- Renovate changelog workflow now runs under
bashsoset -euo pipefailworks inside the container - Taplo lint hook no longer fetches remote schema catalogs (fetch started failing in taplo 0.10)
- Renewed dependency-review allow-list exception for bats-file false positive (
GHSA-wvrr-2x4r-394v)
- Renovate changelog workflow now runs under
-
Image tests red on stale cargo-binstall pin (#557)
- Bump expected
cargo-binstallto 1.20 to match the latest upstream release the image installs
- Bump expected
-
arm64 release build failed with "exec format error" (#578)
- Restore the multi-arch index digest for
python:3.14-slim-bookworm(sha256:a9bee155…); the previous bump pinned the amd64-only child manifest, so the arm64 build pulled an amd64 image and the firstRUNdied withexec /bin/sh: exec format error - Document in
Containerfilethat manual base-image pins must use the index digest, never a per-platform child manifest
- Restore the multi-arch index digest for
Security
-
Accept Debian won't-fix LOW CVEs in .trivyignore (#566)
- Document 78 unfixed LOW Debian OS-package CVEs from the next-release image with shared risk note and 2026-12-01 expiration
- Add
check-expirationsutility with pre-commit and CI enforcement so expired.trivyignoreentries fail the pipeline - Security tab LOW count drops after the next release refreshes
:latest
-
Bump base image digest and clear fixable OS-package CVEs (#565)
- Keep
python:3.14-slim-bookwormpinned to its multi-arch index digest (sha256:a9bee155…) - Retain targeted
libgnutls30=3.7.9-2+deb12u7upgrade (base shipsdeb12u6; fixable GnuTLS CVEs requiredeb12u7) - CI Trivy gate passes with zero fixable HIGH/CRITICAL OS findings after rebuild
- Keep
-
Patch fixable OpenSSL HIGH CVE blocking the 0.3.5 release (#580)
- Targeted
libssl3/opensslupgrade to3.0.20-1~deb12u2(base shipsdeb12u1); clearsCVE-2026-45447flagged by the release Trivy gate
- Targeted
-
Refresh bundled gh and uv to clear Go and Rust CVEs (#564)
- Fresh image build pulls latest
ghv2.93.0 anduvv0.11.19, clearing all bundled-tool HIGH findings except one awaiting upstream uv/uvxRust crate CVEs (includingrustls-webpkiGHSA-82j2-j2ch-gfr8) no longer reported after rebuild- Remaining
ghGo-stdlib HIGH (CVE-2026-42504) kept in.trivyignoreuntilghships a Go 1.26.4 rebuild
- Fresh image build pulls latest
-
Update pytest to v9.0.3 (#528)
- Security patch for pytest dependency bump
-
Remediate nightly scan gate failures on :latest (#549)
- Patched
libgnutls30to3.7.9-2+deb12u7for fixable GnuTLS CVEs (retained across the 3.14 base rebase; see #565)
- Patched
-
Resolve repo-owned workflow security findings (#562)
- Split Renovate changelog automation into read-only
pull_requestbuild + privilegedworkflow_runcommit, removingpull_request_targetand PR-head checkout under elevated permissions (ScorecardDangerousWorkflowID) - Add GitHub Actions to CodeQL language matrix so stale
actions/missing-workflow-permissionsalerts auto-close on the next default-branch run - Add explicit
permissions:to workspacerelease-extension.ymltemplate; downstream smoke-test updates flow through release re-sync - Document accepted OpenSSF Scorecard posture (Fuzzing, CII) and verified branch-protection rulesets in
SECURITY.md
- Split Renovate changelog automation into read-only
-
Update vulnerable Python dependencies (#563)
- Bump
urllib32.7.0,requests2.34.2,idna3.18,Pygments2.20.0 in the repo lockfile - Constrain workspace-template jupyter stack to patched versions (
notebook7.5.6,jupyterlab4.5.7,jupyter-server2.18.0,mistune3.2.1)
- Bump
-
Add downstream SECURITY.md template and close smoke-test Scorecard gaps (#568)
- Add
assets/workspace/SECURITY.mdso generated and smoke-test repos ship a security policy (clears ScorecardSecurityPolicyIDon the next release re-sync) - Document
FuzzingIDandCIIBestPracticesIDas accepted won't-fix posture in the template policy - Document smoke-test-specific accepted findings (branch-protection, code-review, pinned
download-then-run) in theassets/smoke-test/overlay, accepted because the deploy-validation repo runs fully unattended
- Add
0.3.4
Added
- Renovate config validation on pull requests (#520)
- Workflow discovers tracked
renovate*.jsonfiles (excludingassets/workspace/renovate.json, whoseextendsuses an unresolved template placeholder) and runsrenovate-config-validator --stricton the rest when renovate JSON changes just test-renovaterecipe mirrors the workflow locally and is included injust test
- Workflow discovers tracked
Changed
- Bump expected tool versions in image tests
gh2.89 → 2.92,just1.49 → 1.50,cargo-binstall1.17 → 1.18 to match the latest upstream releases the image now installs
Fixed
- Renovate preset blocked all dependency updates (#520)
- Split Python
packageRulessomatchUpdateTypesandrangeStrategyare not combined in one rule; renamebaseBranchestobaseBranchPatterns - Remove invalid
uvfromenabledManagers(pep621continues to handlepyproject.tomlanduv.lock)
- Split Python
0.3.3
Added
- Renovate changelog automation (#506)
renovate-changelog-prCLI tool parses Renovate PR metadata and inserts Keep-a-Changelog entries under## Unreleasedrenovate-changelogworkflow runs onpull_request_targetforrenovate[bot]PRs in both upstream and workspace template
- Devcontainer image version pinning (#509)
.vig-osfile at repo root declaresDEVCONTAINER_VERSIONas the single source of truth for CI container image tagsresolve-imagecomposite action resolves the image tag and validates it exists in GHCR
GITHUB_REPOSITORYresolution for workspace init (#509)parse-github-remote-lib.shextractsowner/repofrom HTTPS, SSH, andgit@GitHub URLsinstall.shgains--repoflag;init-workspace.shreplaces{{GITHUB_REPOSITORY}}in workspace template files
Changed
- Switch from Dependabot to Renovate (#509)
- Replace
.github/dependabot.ymlwithrenovate.jsonand sharedrenovate-default.jsonpreset - Renovate covers all ecosystems previously tracked (github-actions, pip, npm, docker) plus template directories not reachable by Dependabot
- Replace
- Sync workflows run in devcontainer image (#509)
sync-issuesandsync-main-to-devuseresolve-imageand run inside the pinned devcontainer, removing thesetup-envcomposite action dependency and the inlined retry helpersync-main-to-devcreates sync branches viagit pushinstead of the GitHub refs API
- Smoke-test dispatch triggers promote-release for final releases (#511)
- Final releases dispatch downstream
promote-release.ymlinstead of merging the release PR directly, publishing the draft GitHub Release and satisfying the upstream promote-time downstream gate - RC releases wait for release PR required checks but no longer merge the PR to
main
- Final releases dispatch downstream
Removed
- Dependabot configuration (#509)
- Delete
.github/dependabot.ymlandassets/workspace/.github/dependabot.yml
- Delete
Fixed
- Promote-release draft release validation (#507)
- Use the paginated releases list API with jq instead of
GET /releases/tags/{tag}, which returns 404 for draft releases - Apply the same release lookup for RC git tag cleanup in upstream and workspace
promote-release.yml
- Use the paginated releases list API with jq instead of
Security
- Nightly Trivy gate remediation (OpenSSL, gh, typos) (#512)
- Pin
python:3.12-slim-bookwormto current digest and add targetedlibssl3/opensslupgrade to3.0.19-1~deb12u2(CVE-2026-28390, CVE-2026-31790) - Refresh
.trivyignore: drop resolved gh/docker-cli and gRPC entries; add Go stdlib and typos-related suppressions plusjwt-tokenfalse positive - Suppress unfixable base-image CVEs: ncurses (CVE-2025-69720), SQLite (CVE-2025-7458), systemd (CVE-2026-29111), zlib/minizip (CVE-2023-45853)
- Pin
0.3.2
Added
- Downstream
promote-release.ymlworkspace template (#463)- Add
assets/workspace/.github/workflows/promote-release.ymlas the counter-party to rootpromote-release.yml: validate draft release and release PR, publish the release, merge tomain, best-effort git RC tag cleanup (no GHCR/cosign/smoke-test gate) - Document in
docs/DOWNSTREAM_RELEASE.mdand aligndocs/RELEASE_CYCLE.mdPhase 5 for consumer vs upstream paths
- Add
- Optional draft pre-release for downstream release candidates (#463)
- Workspace
release.ymladdscreate-release(workflow_dispatch, defaultfalse);release-publish.ymlcreates a draft GitHub pre-release only when set forcandidateruns - Smoke-test
repository-dispatch.ymlpassescreate-release=truewhen triggering downstreamrelease.yml just publish-candidateforwardscreate-releaseinjustfile.ghand the workspace template copy
- Workspace
Changed
- RELEASE_APP permissions and GHCR cleanup token model (#463)
- Document Packages read/write on the org for
promote-releasecleanup, align the app table indocs/RELEASE_CYCLE.md, and explain why cleanup uses the GitHub App token instead ofGITHUB_TOKEN
- Document Packages read/write on the org for
- Promote-release cleans up stale RC artifacts after merge (#463)
- Best-effort job deletes GHCR package versions for
${VERSION}-rc*andsha256-*-only orphans, and deletes remote git RC tags for that base version when no GitHub Release exists; does not fail the workflow on error
- Best-effort job deletes GHCR package versions for
- Downstream release helper recipes via GitHub justfile import (#373)
- Move
prepare-release,finalize-release,publish-candidate, andreset-changelogintojustfile.ghso downstream workspace templates expose these release helpers by default - Keep root recipe availability (including
pull) throughimport 'justfile.gh'while consolidating release helper ownership in the GitHub-focused recipe file; the workspace template copy omits thepullrecipe
- Move
- Split final release into publish and promote phases (#456)
- Final
release.ymlpublishes versioned GHCR tags and a draft GitHub Release but no longer updates:latest - New
promote-release.ymlruns after downstream smoke-test publishes its final release: updates:latest, publishes the draft release, merges the release PR tomain - Add
just promote-releaseinjustfile.gh(and workspace template copy)
- Final
- Smoke-test dispatch fails fast when deploy PR checks fail (#381)
wait-deploy-mergeinassets/smoke-test/.github/workflows/repository-dispatch.ymlexits as soon as all required checks have completed with failures instead of waiting for the merge poll timeout (gh pr checks --required)
- Scheduled security scan pulls GHCR
:latestinstead of rebuilding (#461)- Runs nightly at 05:00 UTC, pulls the published image, gates on fixable HIGH/CRITICAL vulnerabilities, auto-creates a deduplicated GitHub issue on failure, and uploads SARIF under
container-image-latest
- Runs nightly at 05:00 UTC, pulls the published image, gates on fixable HIGH/CRITICAL vulnerabilities, auto-creates a deduplicated GitHub issue on failure, and uploads SARIF under
- Dependabot dependency update batch (#474)
- Bump
github/codeql-actionfrom4.34.1to4.35.1 - Bump
sigstore/cosign-installerfrom4.1.0to4.1.1
- Bump
- Dependabot dependency update batch (#488, #489)
- Bump
@devcontainers/clifrom0.84.1to0.85.0 - Bump
docker/login-actionfrom4.0.0to4.1.0
- Bump
- Simplify
just pullinjustfile.gh(#482)- Pull
ghcr.io/vig-os/devcontainerby tag; drop redundant shell fallback, per-reciperepoargument, and unusedREGISTRY_TESTTLS path (importedjustfile.ghcannot reference rootrepo)
- Pull
- prepare-changelog finalize adds GitHub release link to version headings (#496)
finalize_release_datewrites## [X.Y.Z](https://github.com/owner/repo/releases/tag/X.Y.Z) - date; repository slug comes fromGITHUB_REPOSITORY(set in Actions) or fromprepare-changelog finalize ... --github-repository owner/repounpreparerecognizes linked## [semver](url) - …headings
Removed
- One-time GHCR/git RC prune script (#463)
- Remove
scripts/prune-ghcr-tags.sh; RC andsha256-*orphan cleanup remains in rootpromote-release.yml
- Remove
- Downstream RC pre-release gate from release validate job (#463)
- Removed dead
if: falsesteps fromrelease.yml; downstream final release is verified only inpromote-release.ymlbefore promote
- Removed dead
- Nightly full CI schedule from
ci.yml(#492)- Remove the
scheduletrigger and schedule-only checkout overrides; CI remains on pull requests andworkflow_dispatchonly - Nightly GHCR
:latestscan insecurity-scan.ymlis unchanged
- Remove the
Fixed
- Prepare-release changelog commits silently skipped due to FILE_PATHS delimiter mismatch (#483)
- Change
FILE_PATHSfrom space-separated to comma-separated in allcommit-actionsteps ofprepare-release.ymlso the action correctly commits bothCHANGELOG.mdandassets/workspace/.devcontainer/CHANGELOG.md - Join finalization changed files with commas in
release.yml(Collect finalization files) socommit-actionreceives multiple paths correctly
- Change
publish-candidaterecipe sends unknowncreate-releaseinput (#479)- Remove
create-releaseparameter and-fflag from upstreamjustfile.gh; the input was added to the downstream workflow only but the recipe was updated in both places
- Remove
- Image tests expect current
justminor (#479)- Align
EXPECTED_VERSIONS["just"]with the latestjustrelease installed by the Containerfile (1.49.x)
- Align
- Git commit now falls back to nano when editor config is unusable (#383)
setup-git-conf.shnow validates the effective Git editor and setscore.editor=nanoonly when the configured editor is missing or invalid in-container- Add integration regression coverage to ensure invalid editor settings are corrected during setup
- Release finalize no longer races sync-issues; CHANGELOG TBD verified after reset (#455)
- Run
sync-issuesafter capturing finalize SHA so downstream build/publish use the finalized commit - Fail finalize if
CHANGELOG.mdstill contains## [version] - TBDaftergit reset --hard
- Run
- generate-docs pre-commit runs when CHANGELOG.md changes (#455)
- Keeps README “Latest Version” and other generated docs aligned with the changelog
- prepare-release tolerates GitHub API ref propagation and reliable CHANGELOG rollback (#453)
- Poll until the new release branch ref resolves before
commit-actioncommits to it - Fetch dev
CHANGELOG.mdby resolved commit SHA during rollback so Contents API staleness does not skip the rollback commit
- Poll until the new release branch ref resolves before
- sync-main-to-dev sync job no longer depends on dev's setup-env (#459)
- Inline the same
retryshell helper used bysetup-envso the job works whenmain's workflow expects helpers not yet ondev
- Inline the same
- CI container build avoids shared-runner Docker Hub rate limits (#473)
build-imagelogs in todocker.iobeforesetup-buildx-actionwhenDOCKERHUB_USERNAMEandDOCKERHUB_TOKENsecrets are set;ci.ymlandrelease.ymlpass them- Omitting secrets (e.g. forks) keeps prior anonymous-pull behavior
- Release finalize commit blocked by Release protection ruleset (#487)
- Generate a dedicated Commit App token (
COMMIT_APP_ID) for thecommit-actionstep in thefinalizejob ofrelease.yml, matching the pattern used byprepare-release.ymland other workflows; the previous Release App token lacked ruleset bypass
- Generate a dedicated Commit App token (
- Release finalize installs just for doc generation (#494)
- Remove
install-just: 'false'from the finalize jobsetup-envstep sodocs/generate.pycan runjust --list get_just_help()exits non-zero on failure instead of writing placeholder content into generated docs
- Remove
- Release rollback and CI
retryexit codes (#500)retryshell helper now propagates the command's non-zero exit code when all attempts fail- Release rollback creates a fast-forward revert commit via the Git API instead of force-pushing, compatible with branch protection on
release/* - Rollback Git Data API steps authenticate with the Commit app token (same as finalize) so protected
release/*ref updates are not blocked - Canonical
retry()implementation lives in.github/scripts/retry.sh;setup-envand BATS source it so CI and tests stay aligned (sync-main-to-dev.ymlkeeps an inline copy documented as in sync)
- Release rollback restores release PR body after finalize (#502)
rollbackjob in ...
0.3.1
Added
- Split downstream release workflow with project-owned extension hook (#326)
- Add local
workflow_callrelease phases (release-core.yml,release-publish.yml) and a lightweightrelease.ymlorchestrator inassets/workspace/.github/workflows/ - Add
release_kindsupport with candidate mode (X.Y.Z-rcN) and final mode (X.Y.Z) in downstream release workflows - Candidate mode now auto-computes the next RC tag, skips CHANGELOG finalization/sync-issues, and publishes a GitHub pre-release
- Add project-owned
release-extension.ymlstub and preserve it duringinit-workspace.sh --forceupgrades - Add
validate-contractcomposite action for single-source contract version validation - Add downstream release contract documentation and GHCR extension example in
docs/DOWNSTREAM_RELEASE.md
- Add local
jqin devcontainer image (#425)- Install the
jqCLI in the GHCR image so containerized workflows (e.g.release-corevalidate / downstream Release Core) can pipe JSON throughjq
- Install the
Changed
- Dependabot dependency update batch (#302, #303, #305, #306, #307, #308, #309)
- Bump
@devcontainers/clifrom0.81.1to0.84.0andbats-assertfromv2.2.0tov2.2.4 - Bump GitHub Actions:
actions/download-artifact(4.3.0->8.0.1),actions/github-script(7.1.0->8.0.0),actions/attest-build-provenance(3.0.0->4.1.0),actions/checkout(4.3.1->6.0.2) - Bump release workflow action pins:
sigstore/cosign-installer(4.0.0->4.1.0) andanchore/sbom-action(0.22.2->0.23.1)
- Bump
- Dependabot dependency update batch (#314, #315, #316, #317)
- Bump GitHub Actions:
actions/attest-sbom(3.0.0->4.0.0),actions/upload-artifact(4.6.2->7.0.0),actions/create-github-app-token(2.2.1->3.0.0) - Bump
docker/login-actionfrom3.7.0to4.0.0 - Bump
justminor version from1.46to1.47
- Bump GitHub Actions:
- Node24-ready GitHub Actions pin refresh for shared composite actions (#321)
- Update Docker build path pins in
build-image(docker/setup-buildx-action,docker/metadata-action,docker/build-push-action) to Node24-compatible releases - Set
setup-envdefault Node runtime to24and upgradeactions/setup-node - Align test composite actions with newer pins (
actions/checkout,actions/cache,actions/upload-artifact)
- Update Docker build path pins in
- Smoke-test dispatch payload now carries source run traceability metadata (#289)
- Candidate release dispatches now include source repo/workflow/run/SHA metadata plus a deterministic
correlation_id - Smoke-test dispatch receiver logs normalized source context, derives source run URL when possible, and writes it to workflow summary output
- Release-cycle docs now define required vs optional dispatch payload keys and the future callback contract path for
publish-candidate
- Candidate release dispatches now include source repo/workflow/run/SHA metadata plus a deterministic
- Smoke-test repository dispatch now runs for final releases too (#173)
release.ymlnow triggers the existing smoke-test dispatch contract for bothcandidateandfinalrelease kinds- Final release summaries and release-cycle documentation now reflect dispatch behavior for both release modes
- Workspace CI templates now use a single container-based workflow (#327)
- Consolidate
assets/workspace/.github/workflows/ci.ymlas the canonical CI workflow and remove the obsoleteci-container.ymltemplate - Extract reusable
assets/workspace/.github/actions/resolve-imageand run workspace release tests in the same containerized workflow model - Update smoke-test and release-cycle documentation to reference the single CI workflow contract
- Consolidate
- Final release now requires downstream RC pre-release gate (#331)
- Add upstream final-release validation that requires a downstream GitHub pre-release for the latest published RC tag
- Move smoke-test dispatch to a dedicated release job and include
release_kindin the dispatch payload - Add downstream
repository-dispatch.ymltemplate that runs smoke tests and creates pre-release/final release artifacts
- Ship changelog into workspace payload and smoke-test deploy root (#333)
- Sync canonical
CHANGELOG.mdinto both workspace root and.devcontainer/template paths - Smoke-test dispatch now copies
.devcontainer/CHANGELOG.mdto repository root so deploy output keeps a root changelog
- Sync canonical
- Final release now publishes a GitHub Release with finalized notes (#310)
- Add a final-only publish step in
.github/workflows/release.ymlthat creates a GitHub Release forX.Y.Z - Source GitHub Release notes from the finalized
CHANGELOG.mdsection and fail the run if notes extraction or release publishing fails
- Add a final-only publish step in
- Release dispatch and publish ordering hardened for 0.3.1 (#336)
- Make smoke-test dispatch fire-and-forget in
.github/workflows/release.ymland decouple rollback from downstream completion timing - Add bounded retries to the final-release downstream RC pre-release gate API check
- Move final GitHub Release creation to the end of publish so artifact publication/signing completes before release object creation
- Add concurrency control to
assets/smoke-test/.github/workflows/repository-dispatch.ymlto prevent overlapping dispatch races - Handle smoke-test dispatch failures with a targeted issue while avoiding destructive rollback after publish artifacts are already released
- Make smoke-test dispatch fire-and-forget in
- Redesigned smoke-test dispatch release orchestration (#358)
- Replace premature
publish-releasebehavior with full downstream orchestration: deploy-to-dev merge gate,prepare-release.yml, release PR readiness/approval, andrelease.ymldispatch polling - Add upstream failure issue reporting with job-phase results and cleanup guidance when dispatch orchestration fails
- Replace premature
- Smoke-test release orchestration now runs as two phases (#402)
- Keep
repository-dispatch.ymlfocused on deploy/prepare/release-PR readiness and move release dispatch to a dedicated merged-PR workflow (on-release-pr-merge.yml) - Add release-kind labeling and auto-merge enablement for release PRs, and keep upstream failure notifications in both phases
- Remove release-branch upstream
CHANGELOG.mdsync fromrepository-dispatch.yml(previously added in #358)
- Keep
- Dependabot dependency update batch (#414)
- Bump
github/codeql-actionfrom4.32.6to4.34.1andanchore/sbom-actionfrom0.23.1to0.24.0 - Bump
actions/cacherestore/save pins from5.0.3to5.0.4insync-issues.yml
- Bump
- Dependabot dependency update batch (#413)
- Bump
@devcontainers/clifrom0.84.0to0.84.1
- Bump
- cursor-agent install is now resilient to CDN failures (#434)
- Retries 3 times with backoff before giving up
- Build succeeds without cursor-agent when Cursor's CDN is unavailable
- Immutable GitHub releases, tag rulesets, and forward-fix policy (#446)
- Final releases create a draft GitHub Release for human review before publishing; rollback no longer deletes remote tags
- Release workflows skip redundant tag push when the tag already matches the finalized commit; workspace
release-core/release-publishand smoke-test failure guidance updated accordingly - Document tag rulesets, immutable releases, and recovery in
docs/RELEASE_CYCLE.md,docs/DOWNSTREAM_RELEASE.md, anddocs/CROSS_REPO_RELEASE_GATE.md
- Container image tests expect current GitHub CLI minor line
- Update
tests/test_image.pyEXPECTED_VERSIONS["gh"]to2.89.to match the CLI shipped in the image
- Update
Removed
- PR Title Check GitHub Actions workflow (#444)
- Remove
.github/workflows/pr-title-check.yml; commit message rules remain enforced via local hooks andvalidate-commit-msg - Remove
--subject-onlyfromvalidate-commit-msg(it existed only for PR title CI)
- Remove
Fixed
- Smoke-test deploy restores workspace CHANGELOG for prepare-release (#417)
- Add
prepare-changelog unprepareto rename the top## [semver] - …heading to## Unreleased init-workspace.sh --smoke-testcopies.devcontainer/CHANGELOG.mdinto workspaceCHANGELOG.mdand runs unprepare; remove duplicate remap from smoke-test dispatch workflow
- Add
- Release app permission docs now include downstream workflow dispatch requirements (#397)
- Update
docs/RELEASE_CYCLE.md...
- Update