Releases: vig-os/devcontainer
Releases · vig-os/devcontainer
0.3.4
Immutable
release. Only release title and notes can be modified.
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
Immutable
release. Only release title and notes can be modified.
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
Immutable
release. Only release title and notes can be modified.
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
Immutable
release. Only release title and notes can be modified.
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