Skip to content

chore: release 0.3.3#516

Merged
vig-os-release-app[bot] merged 38 commits intomainfrom
release/0.3.3
Apr 10, 2026
Merged

chore: release 0.3.3#516
vig-os-release-app[bot] merged 38 commits intomainfrom
release/0.3.3

Conversation

@vig-os-release-app
Copy link
Copy Markdown
Contributor

@vig-os-release-app vig-os-release-app Bot commented Apr 10, 2026

Release 0.3.3 - 2026-04-10

This PR prepares release 0.3.3 for merge to main.

0.3.3 - 2026-04-10

Added

  • Renovate changelog automation (#506)
    • renovate-changelog-pr CLI tool parses Renovate PR metadata and inserts Keep-a-Changelog entries under ## Unreleased
    • renovate-changelog workflow runs on pull_request_target for renovate[bot] PRs in both upstream and workspace template
  • Devcontainer image version pinning (#509)
    • .vig-os file at repo root declares DEVCONTAINER_VERSION as the single source of truth for CI container image tags
    • resolve-image composite action resolves the image tag and validates it exists in GHCR
  • GITHUB_REPOSITORY resolution for workspace init (#509)
    • parse-github-remote-lib.sh extracts owner/repo from HTTPS, SSH, and git@ GitHub URLs
    • install.sh gains --repo flag; init-workspace.sh replaces {{GITHUB_REPOSITORY}} in workspace template files

Changed

  • Switch from Dependabot to Renovate (#509)
    • Replace .github/dependabot.yml with renovate.json and shared renovate-default.json preset
    • Renovate covers all ecosystems previously tracked (github-actions, pip, npm, docker) plus template directories not reachable by Dependabot
  • Sync workflows run in devcontainer image (#509)
    • sync-issues and sync-main-to-dev use resolve-image and run inside the pinned devcontainer, removing the setup-env composite action dependency and the inlined retry helper
    • sync-main-to-dev creates sync branches via git push instead of the GitHub refs API
  • Smoke-test dispatch triggers promote-release for final releases (#511)
    • Final releases dispatch downstream promote-release.yml instead 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

Removed

  • Dependabot configuration (#509)
    • Delete .github/dependabot.yml and assets/workspace/.github/dependabot.yml

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

Security

  • Nightly Trivy gate remediation (OpenSSL, gh, typos) (#512)
    • Pin python:3.12-slim-bookworm to current digest and add targeted libssl3/openssl upgrade to 3.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 plus jwt-token false positive
    • Suppress unfixable base-image CVEs: ncurses (CVE-2025-69720), SQLite (CVE-2025-7458), systemd (CVE-2026-29111), zlib/minizip (CVE-2023-45853)

commit-action-bot Bot and others added 30 commits April 6, 2026 04:50
…-to-dev-4-1

Add Unreleased sectoin to CHANGELOG
Automated sync of `main` to `dev` found **merge conflicts** that required
manual resolution.
gh api does not support --arg (that is a jq flag). Split the call into
gh api --paginate followed by piped jq -s --arg. In the RC tag cleanup
steps, distinguish API failure (skip deletion with warning) from
confirmed "no release" (proceed with deletion).

Refs: #507
## Description

The promote-release validate step queried `GET
/repos/{owner}/{repo}/releases/tags/{tag}`, which does not return draft
releases (404). The workflow now uses the paginated releases list API
and jq to select the release by `tag_name`, so draft releases created by
`release.yml` are found. The RC git tag cleanup step uses the same
lookup so “release exists” stays correct for drafts if they ever apply.

## Type of Change

- [ ] `feat` -- New feature
- [x] `fix` -- Bug fix
- [ ] `docs` -- Documentation only
- [ ] `chore` -- Maintenance task (deps, config, etc.)
- [ ] `refactor` -- Code restructuring (no behavior change)
- [ ] `test` -- Adding or updating tests
- [x] `ci` -- CI/CD pipeline changes
- [ ] `build` -- Build system or dependency changes
- [ ] `revert` -- Reverts a previous commit
- [ ] `style` -- Code style (formatting, whitespace)

### Modifiers

- [ ] Breaking change (`!`) -- This change breaks backward compatibility

## Changes Made

- `.github/workflows/promote-release.yml` — Draft release verification
and RC tag cleanup use `gh api …/releases --paginate` with `jq` to match
`tag_name` instead of the per-tag endpoint.
- `assets/workspace/.github/workflows/promote-release.yml` — Same
behavior for the downstream template.
- `CHANGELOG.md` — Unreleased **Fixed** entry for #507.
- `assets/workspace/.devcontainer/CHANGELOG.md` — Synced copy of the
changelog entry (manifest sync).

## Changelog Entry

### Fixed

- **Promote-release draft release validation**
([#507](#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`

## Testing

- [ ] Tests pass locally (`just test`)
- [ ] Manual testing performed (describe below)

### Manual Testing Details

N/A — workflow-only change; not exercised locally against GitHub.
Pre-commit (yaml/yamllint) passed on commit.

## Checklist

- [ ] My code follows the project's style guidelines
- [ ] I have performed a self-review of my code
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] I have updated the documentation accordingly (edit
`docs/templates/`, then run `just docs`)
- [x] I have updated `CHANGELOG.md` in the `[Unreleased]` section (and
pasted the entry above)
- [ ] My changes generate no new warnings or errors
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published

## Additional Notes

N/A

Refs: #507
GitHub Actions sets GITHUB_REPOSITORY for the job; subshells inherited it and
short-circuited resolve_github_repository before reading git origin.

Refs: #509
…ngelog (#513)

## Description

Implements [#509](#509)
(switch from Dependabot to Renovate for dependency updates, including
template paths Dependabot could not scan) and
[#506](#506) (automatic
`CHANGELOG.md` updates on Renovate PRs via `pull_request_target` and
`renovate-changelog-pr`). Adds `.vig-os` + `resolve-image` so
`sync-issues` and `sync-main-to-dev` run in the pinned devcontainer
image; `install.sh` / `init-workspace.sh` resolve `GITHUB_REPOSITORY`
for templated `renovate.json`.

## Type of Change

- [x] `feat` -- New feature
- [ ] `fix` -- Bug fix
- [x] `docs` -- Documentation only
- [x] `chore` -- Maintenance task (deps, config, etc.)
- [ ] `refactor` -- Code restructuring (no behavior change)
- [x] `test` -- Adding or updating tests
- [x] `ci` -- CI/CD pipeline changes
- [ ] `build` -- Build system or dependency changes
- [ ] `revert` -- Reverts a previous commit
- [ ] `style` -- Code style (formatting, whitespace)

### Modifiers

- [ ] Breaking change (`!`) -- This change breaks backward compatibility

## Changes Made

- **27 files**, ~1164 insertions / ~247 deletions vs `dev` (includes
merge commit from `origin/dev`).
- **Renovate / Dependabot:** Remove root and workspace `dependabot.yml`;
add `renovate.json`, `assets/workspace/renovate.json`,
`renovate-default.json`, smoke-test `renovate.json`; update
`CODEOWNERS`.
- **CI image pinning:** Add `.vig-os`, `.github/actions/resolve-image/`,
`release.yml` step to bump `DEVCONTAINER_VERSION` on final release;
`sync-issues.yml` / `sync-main-to-dev.yml` use resolved GHCR tag,
`safe.directory`, drop `setup-env` / inlined retry; sync branch creation
uses `git push`.
- **Workspace init:** `parse-github-remote-lib.sh`, `Containerfile`
placeholder manifest, `install.sh --repo`, `init-workspace.sh` +
BATS/install/conftest updates.
- **Changelog automation:** `renovate_changelog_pr.py`, tests, console
script in `pyproject.toml`, root + workspace `renovate-changelog.yml`;
`scripts/manifest.toml` syncs new paths.
- **Docs:** `CHANGELOG.md` and synced
`assets/workspace/.devcontainer/CHANGELOG.md`.

## Changelog Entry

### Added

- **Renovate changelog automation**
([#506](#506))
- `renovate-changelog-pr` CLI tool parses Renovate PR metadata and
inserts Keep-a-Changelog entries under `## Unreleased`
- `renovate-changelog` workflow runs on `pull_request_target` for
`renovate[bot]` PRs in both upstream and workspace template
- **Devcontainer image version pinning**
([#509](#509))
- `.vig-os` file at repo root declares `DEVCONTAINER_VERSION` as the
single source of truth for CI container image tags
- `resolve-image` composite action resolves the image tag and validates
it exists in GHCR
- **`GITHUB_REPOSITORY` resolution for workspace init**
([#509](#509))
- `parse-github-remote-lib.sh` extracts `owner/repo` from HTTPS, SSH,
and `git@` GitHub URLs
- `install.sh` gains `--repo` flag; `init-workspace.sh` replaces
`{{GITHUB_REPOSITORY}}` in workspace template files

### Changed

- **Switch from Dependabot to Renovate**
([#509](#509))
- Replace `.github/dependabot.yml` with `renovate.json` and shared
`renovate-default.json` preset
- Renovate covers all ecosystems previously tracked (github-actions,
pip, npm, docker) plus template directories not reachable by Dependabot
- **Sync workflows run in devcontainer image**
([#509](#509))
- `sync-issues` and `sync-main-to-dev` use `resolve-image` and run
inside the pinned devcontainer, removing the `setup-env` composite
action dependency and the inlined retry helper
- `sync-main-to-dev` creates sync branches via `git push` instead of the
GitHub refs API

### Removed

- **Dependabot configuration**
([#509](#509))
- Delete `.github/dependabot.yml` and
`assets/workspace/.github/dependabot.yml`

## Testing

- [x] Tests pass locally (`just test`)
- [ ] Manual testing performed (describe below)

### Manual Testing Details

N/A (CI and scripted tests cover changes; Renovate/changelog workflow
validates in GitHub after merge).

## Checklist

- [x] My code follows the project's style guidelines
- [x] I have performed a self-review of my code
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] I have updated the documentation accordingly (edit
`docs/templates/`, then run `just docs`)
- [x] I have updated `CHANGELOG.md` in the `[Unreleased]` section (and
pasted the entry above)
- [x] My changes generate no new warnings or errors
- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [x] Any dependent changes have been merged and published

## Additional Notes

- Branch merged latest `origin/dev` before PR (includes unrelated doc
sync under `docs/pull-requests/`).
- Commit 6 subject is `docs:` (not `docs(changelog):`) due to commit-msg
scope allowlist.

Refs: #509, #506
- Pin python:3.12-slim-bookworm base image to latest digest
- Add targeted libssl3/openssl upgrade to 3.0.19-1~deb12u2
  (CVE-2026-28390, CVE-2026-31790)
- Refresh .trivyignore:
  - Drop resolved: CVE-2025-68121, CVE-2025-61726, CVE-2025-61728,
    CVE-2025-61730, CVE-2025-15558, CVE-2026-33186
  - Add gh Go stdlib: CVE-2026-32281, CVE-2026-32288, CVE-2026-32289
  - Add typos dependency: CVE-2026-25727
  - Add jwt-token false positive suppression

Refs: #512
#514)

## Description

Remediate HIGH/CRITICAL vulnerabilities found by the nightly Trivy
security scan on the `:latest` image. Upgrades fixable packages
(OpenSSL) and refreshes `.trivyignore` with properly documented
suppressions for unfixable base-image CVEs and Go stdlib issues in
vendored binaries.

## Type of Change

- [ ] `feat` -- New feature
- [x] `fix` -- Bug fix
- [ ] `docs` -- Documentation only
- [ ] `chore` -- Maintenance task (deps, config, etc.)
- [ ] `refactor` -- Code restructuring (no behavior change)
- [ ] `test` -- Adding or updating tests
- [ ] `ci` -- CI/CD pipeline changes
- [ ] `build` -- Build system or dependency changes
- [ ] `revert` -- Reverts a previous commit
- [ ] `style` -- Code style (formatting, whitespace)

### Modifiers

- [ ] Breaking change (`!`) -- This change breaks backward compatibility

## Changes Made

- **`Containerfile`** — Update `python:3.12-slim-bookworm` pinned
digest; add targeted `apt-get install --only-upgrade` for `libssl3` and
`openssl` to `3.0.19-1~deb12u2` (CVE-2026-28390, CVE-2026-31790).
- **`.trivyignore`** — Drop resolved suppressions (gh/docker-cli
CVE-2025-15558, gRPC CVE-2026-33186, older Go stdlib CVEs); add
suppressions for unfixable base-image CVEs (ncurses CVE-2025-69720,
SQLite CVE-2025-7458, systemd CVE-2026-29111, zlib/minizip
CVE-2023-45853), new Go stdlib CVEs in gh (CVE-2026-32281,
CVE-2026-32288, CVE-2026-32289), typos dependency (CVE-2026-25727), and
`jwt-token` false positive.
- **`CHANGELOG.md`** / **`assets/workspace/.devcontainer/CHANGELOG.md`**
— Add Security entry under Unreleased.

## Changelog Entry

### Security

- **Nightly Trivy gate remediation (OpenSSL, gh, typos)**
([#512](#512))
- Pin `python:3.12-slim-bookworm` to current digest and add targeted
`libssl3`/`openssl` upgrade to `3.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 plus `jwt-token` false
positive
- Suppress unfixable base-image CVEs: ncurses (CVE-2025-69720), SQLite
(CVE-2025-7458), systemd (CVE-2026-29111), zlib/minizip (CVE-2023-45853)

## Testing

- [ ] Tests pass locally (`just test`)
- [ ] Manual testing performed (describe below)

### Manual Testing Details

N/A — changes are to Containerfile build directives and Trivy
suppression metadata. Verification will occur via the CI image build and
nightly Trivy scan.

## Checklist

- [x] My code follows the project's style guidelines
- [x] I have performed a self-review of my code
- [x] I have commented my code, particularly in hard-to-understand areas
- [ ] I have updated the documentation accordingly (edit
`docs/templates/`, then run `just docs`)
- [x] I have updated `CHANGELOG.md` in the `[Unreleased]` section (and
pasted the entry above)
- [x] My changes generate no new warnings or errors
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published

## Additional Notes

This PR addresses the automated issue opened by the nightly Trivy
security scan workflow. The OpenSSL CVEs are fixable via an apt upgrade;
remaining findings are unfixable in Debian bookworm stable and are
suppressed with risk assessments and expiration dates in `.trivyignore`.

Refs: #512
Replace merge-release-pr with wait-release-pr-ci that polls required checks on the release PR (fail/cancel fast, 30m timeout). Add a final-only job that dispatches promote-release.yml on dev with the base version and waits for success so the downstream draft GitHub Release is published, the release PR merges to main, and RC tag cleanup can run. Preflight now requires promote-release.yml alongside prepare-release and release.

Summary treats trigger-promote-release as mandatory success for final dispatches and as skipped-only for candidates. notify-failure lists the new jobs.

Document the workflow contract, receiver steps, and promote gate in docs/CROSS_REPO_RELEASE_GATE.md. Record the change under Unreleased in CHANGELOG.md and the workspace devcontainer changelog mirror.

Refs: #511
c-vigo and others added 4 commits April 10, 2026 15:12
Fail fast on closed/merged PR and on gh CLI errors instead of
spinning silently until timeout.

Refs: #511
## Description

Updates the smoke-test `repository-dispatch` workflow so **final**
releases dispatch downstream `promote-release.yml` (publish draft
release, merge release PR, RC tag cleanup) instead of merging the
release PR from the listener alone. **RC** dispatches wait for required
checks on the release PR and stop with the PR left open. Preflight now
requires `promote-release.yml` on the `dev` ref. Cross-repo gate docs
describe the split behavior and that the canonical flow no longer needs
a manual publish on smoke-test before upstream promote.

## Type of Change

- [ ] `feat` -- New feature
- [ ] `fix` -- Bug fix
- [ ] `docs` -- Documentation only
- [ ] `chore` -- Maintenance task (deps, config, etc.)
- [ ] `refactor` -- Code restructuring (no behavior change)
- [ ] `test` -- Adding or updating tests
- [x] `ci` -- CI/CD pipeline changes
- [ ] `build` -- Build system or dependency changes
- [ ] `revert` -- Reverts a previous commit
- [ ] `style` -- Code style (formatting, whitespace)

### Modifiers

- [ ] Breaking change (`!`) -- This change breaks backward compatibility

## Changes Made

- `assets/smoke-test/.github/workflows/repository-dispatch.yml`
  - Add `promote-release.yml` to preflight `REQUIRED_WORKFLOWS`.
- Replace `merge-release-pr` with `wait-release-pr-ci` (`gh pr checks
--required`, fail/cancel handling, 30m timeout).
- Add `trigger-promote-release` for `release_kind == final` only:
dispatch and poll `promote-release.yml` on `dev` with `version` = base
semver.
- Update `summary` / `notify-failure` dependencies and result checks
(final requires promote success; candidate requires promote skipped).
- `docs/CROSS_REPO_RELEASE_GATE.md` — contract, receiver steps, promote
gate wording for automated downstream publish.
- `CHANGELOG.md` and `assets/workspace/.devcontainer/CHANGELOG.md` —
Unreleased **Changed** entry for #511.

## Changelog Entry

```diff
@@ -27,6 +27,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 - **Sync workflows run in devcontainer image** ([#509](#509))
   - `sync-issues` and `sync-main-to-dev` use `resolve-image` and run inside the pinned devcontainer, removing the `setup-env` composite action dependency and the inlined retry helper
   - `sync-main-to-dev` creates sync branches via `git push` instead of the GitHub refs API
+- **Smoke-test dispatch triggers promote-release for final releases** ([#511](#511))
+  - Final releases dispatch downstream `promote-release.yml` instead 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`
 
 ### Deprecated
```

## Testing

- [ ] Tests pass locally (`just test`)
- [ ] Manual testing performed (describe below)

### Manual Testing Details

N/A — GitHub Actions workflow and documentation only; end-to-end
validation happens after the template is deployed to
`vig-os/devcontainer-smoke-test` (see issue prerequisite: PR #510 merged
there).

## Checklist

- [x] My code follows the project's style guidelines
- [x] I have performed a self-review of my code
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] I have updated the documentation accordingly (edit
`docs/templates/`, then run `just docs`)
- [x] I have updated `CHANGELOG.md` in the `[Unreleased]` section (and
pasted the entry above)
- [x] My changes generate no new warnings or errors
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published

## Additional Notes

N/A

Refs: #511
Move Unreleased content to [0.3.3] - TBD
and create fresh empty Unreleased section for continued development.
Strip empty Unreleased section from release branch.
Release date TBD (set during finalization).
@c-vigo c-vigo self-assigned this Apr 10, 2026
@c-vigo c-vigo marked this pull request as ready for review April 10, 2026 13:29
@c-vigo c-vigo self-requested a review as a code owner April 10, 2026 13:29
commit-action-bot Bot and others added 4 commits April 10, 2026 13:54
Set release date to 2026-04-10 and regenerate release docs.

Refs: #516
The GitHub API only returns draft releases to tokens with push access.
The validate job had contents:read, so the draft release check always
failed. Elevate to contents:write and use github.token for the
workspace template variant (upstream already used github.token).

TDD skipped: CI workflow YAML — only verifiable via GitHub Actions run.

Refs: #517
## Description

The Promote Release workflow always fails at the "Verify draft GitHub
Release exists" step in the `validate` job. The GitHub API only returns
draft releases to tokens with push access (`contents: write`), but the
`validate` job had `contents: read` and the workspace template variant
was using the release app token which also lacked push-level
permissions.

This PR elevates the `validate` job permissions to `contents: write` in
both the upstream and workspace `promote-release.yml`, and switches the
workspace template's draft release check to use `github.token` (the
upstream already used it).

## Type of Change

- [ ] `feat` -- New feature
- [x] `fix` -- Bug fix
- [ ] `docs` -- Documentation only
- [ ] `chore` -- Maintenance task (deps, config, etc.)
- [ ] `refactor` -- Code restructuring (no behavior change)
- [ ] `test` -- Adding or updating tests
- [x] `ci` -- CI/CD pipeline changes
- [ ] `build` -- Build system or dependency changes
- [ ] `revert` -- Reverts a previous commit
- [ ] `style` -- Code style (formatting, whitespace)

### Modifiers

- [ ] Breaking change (`!`) -- This change breaks backward compatibility

## Changes Made

- `.github/workflows/promote-release.yml` — change `validate` job
`contents: read` to `contents: write`
- `assets/workspace/.github/workflows/promote-release.yml` — change
`validate` job `contents: read` to `contents: write`; switch `GH_TOKEN`
in the draft release check step from the release app token to `${{
github.token }}`
- `CHANGELOG.md` — add Fixed entry for #517
- `assets/workspace/.devcontainer/CHANGELOG.md` — synced by pre-commit
hook

## Changelog Entry

### Fixed

- **Promote-release validate job cannot see draft releases**
([#517](#517))
- Elevate `validate` job permissions to `contents: write` so the token
has push-level access required by the GitHub API to list draft releases
- Use `github.token` instead of the release app token for the draft
release check in workspace `promote-release.yml`

## Testing

- [ ] Tests pass locally (`just test`)
- [ ] Manual testing performed (describe below)

### Manual Testing Details

TDD skipped: CI workflow YAML changes can only be verified by running
the actual GitHub Actions pipeline. Verification will occur when the
Promote Release workflow is re-run for 0.3.3.

## Checklist

- [x] My code follows the project's style guidelines
- [x] I have performed a self-review of my code
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] I have updated the documentation accordingly (edit
`docs/templates/`, then run `just docs`)
- [x] I have updated `CHANGELOG.md` in the `[Unreleased]` section (and
pasted the entry above)
- [x] My changes generate no new warnings or errors
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] New and existing unit tests pass locally with my changes
- [x] Any dependent changes have been merged and published

## Additional Notes

This fix affects both the upstream and workspace template
`promote-release.yml`. The upstream workflow already used `${{
github.token }}` for the draft release check but still had `contents:
read`, so only the permission needed changing. The workspace template
also needed the token source switched from the release app token to `${{
github.token }}`.

Refs: #517
@vig-os-release-app vig-os-release-app Bot merged commit 46c966c into main Apr 10, 2026
14 checks passed
@vig-os-release-app vig-os-release-app Bot deleted the release/0.3.3 branch April 10, 2026 16:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant