Skip to content

feat(ci): add release-dry-run workflow to omnibase_compat [OMN-4867] - #5

Merged
jonahgabriel merged 3 commits into
mainfrom
jonahgabriel/omn-4867-t8-a-add-release-dry-run-workflow-to-omnibase-compat
Mar 12, 2026
Merged

jonahgabriel merged 3 commits into
mainfrom
jonahgabriel/omn-4867-t8-a-add-release-dry-run-workflow-to-omnibase-compat

Conversation

@jonahgabriel

@jonahgabriel jonahgabriel commented Mar 12, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Creates .github/workflows/release-dry-run.yml that runs uv build on every PR targeting main
  • Verifies the package builds successfully (wheel + sdist) before merge
  • Follows the pattern established in omnibase_core
  • Adds a release-dry-run-summary job for branch protection gate compatibility

Linear

Closes OMN-4867

Risk

Low — adds a new CI workflow file only. No source code changes.

Test Evidence

Workflow triggers on pull_request targeting main. The uv build step produces dist/*.whl and dist/*.tar.gz. Acceptance: workflow runs and exits 0 on a clean PR.

Rollback

Delete .github/workflows/release-dry-run.yml.

Summary by CodeRabbit

  • Chores
    • Updated CI workflow to apply stricter dependency validation during the validation step.
    • Added a new release dry-run workflow to verify package builds and generate artifacts.

Creates .github/workflows/release-dry-run.yml that runs uv build on
every PR targeting main, verifying the package builds successfully
before merge. Follows the pattern established in omnibase_core.
@linear

linear Bot commented Mar 12, 2026

Copy link
Copy Markdown

OMN-4867

@coderabbitai

coderabbitai Bot commented Mar 12, 2026 •

Copy link
Copy Markdown

Warning

Rate limit exceeded

@jonahgabriel has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 15 minutes and 39 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Lite

Run ID: 55ebef68-fc24-48f4-87f9-45ae7f652064

📥 Commits

Reviewing files that changed from the base of the PR and between 333bb50 and 4cfc6c3.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (1)
  • pyproject.toml
📝 Walkthrough

Walkthrough

Two GitHub Actions workflows are modified: the CI workflow adds a --frozen flag to the dependency resolution step, and a new release-dry-run workflow is introduced to build and verify package artifacts before release.

Changes

Cohort / File(s) Summary
CI Workflow Update
.github/workflows/ci.yml
Modified uv sync --dev invocation to include --frozen flag, restricting dependency resolution to locked versions during validation.
Release Dry-Run Workflow
.github/workflows/release-dry-run.yml
New workflow introduced with dry-run job that checks out code, sets up Python 3.12, builds the package, and verifies artifacts (wheels and tarballs). Includes summary job that validates previous job status.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Poem

🐰 A frozen sync, so pristine and clean,
Dry-run builds verify what's been seen,
Wheels and tarballs, bundled with care,
Release-ready magic floats through the air! ✨

📝 Coding Plan
  • Generate coding plan for human review comments

Comment @coderabbitai help to get the list of available commands and usage tips.

…N-4867]

Pre-existing CI failure: ruff resolves to a version without manylinux_2_39 wheels
when uv sync runs without --frozen. Using --frozen ensures CI always uses the
exact versions pinned in uv.lock.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
.github/workflows/release-dry-run.yml (1)

15-17: Pin uv-version explicitly to ensure consistent toolchain behavior across CI and local environments.

Without pinning, setup-uv@v3 can use different uv versions on different runs, leading to potential behavioral differences. Currently neither workflow specifies a version.

Consider pinning to a specific stable version:

- uses: astral-sh/setup-uv@v3
  with:
    python-version: '3.12'
    uv-version: '0.x.y'  # Pin to a stable version

Ensure both .github/workflows/ci.yml and .github/workflows/release-dry-run.yml use the same pinned version for consistency.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/release-dry-run.yml around lines 15 - 17, The workflow
uses the astral-sh/setup-uv@v3 action without pinning the uv-version; update the
action invocation (the uses: astral-sh/setup-uv@v3 block where with:
python-version: '3.12' is set) to add an explicit uv-version key pinning to a
stable release (e.g., uv-version: '0.x.y'), and apply the same pinned uv-version
to the identical block in .github/workflows/ci.yml so both workflows use the
same toolchain version for consistency.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In @.github/workflows/release-dry-run.yml:
- Around line 15-17: The workflow uses the astral-sh/setup-uv@v3 action without
pinning the uv-version; update the action invocation (the uses:
astral-sh/setup-uv@v3 block where with: python-version: '3.12' is set) to add an
explicit uv-version key pinning to a stable release (e.g., uv-version: '0.x.y'),
and apply the same pinned uv-version to the identical block in
.github/workflows/ci.yml so both workflows use the same toolchain version for
consistency.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Lite

Run ID: 776ee3b2-66e5-4c9a-97f0-4ff3c272a5a4

📥 Commits

Reviewing files that changed from the base of the PR and between 12939b6 and 333bb50.

📒 Files selected for processing (2)
  • .github/workflows/ci.yml
  • .github/workflows/release-dry-run.yml

…4 [OMN-4867]

Pre-existing CI failure: uv resolves ruff to a version without manylinux_2_39
wheels when uv.lock is not committed. Fix: add uv.lock to version control and
configure tool.uv.required-environments to include linux/darwin/win32 platforms,
ensuring the resolver always pins a compatible ruff wheel.
@jonahgabriel
jonahgabriel merged commit 71dc340 into main Mar 12, 2026
7 checks passed
@jonahgabriel
jonahgabriel deleted the jonahgabriel/omn-4867-t8-a-add-release-dry-run-workflow-to-omnibase-compat branch April 4, 2026 02:17
jonahgabriel added a commit that referenced this pull request Aug 27, 2026
…w script refs (#196)

* fix(OMN-16700): restore the OCC manual-replay precheck + gate workflow script refs

`.github/workflows/call-occ-autobind.yml` and `call-occ-companion-effect.yml`
both run `python3 scripts/ci/occ_manual_replay_precheck.py pr_state.json`, and
that script has never existed in this repo. Every manual OCC replay dispatched
here died at `[Errno 2] No such file or directory` (run 33001337186) before the
precheck could decide anything -- the sanctioned recovery path for a missed
mint was a dead end.

Two changes:

1. `scripts/ci/occ_manual_replay_precheck.py`, ported from the canonical
   omniclaude copy (OMN-14993 origin in omnibase_infra#2411, hardened by
   OMN-15393 in omniclaude#1962).
2. A standing guard -- `tests/ci/test_workflow_script_refs_exist.py` plus the
   `Workflow Script Reference Gate` CI job and a matching pre-commit hook --
   asserting that every `scripts/**` path a `run:` step executes from the repo
   root exists in the tree. Detection alone would not have prevented this;
   the gate is wired on both surfaces in this PR (Operating Rule #5).

* fix: detach the workflow-script-refs gate from repo pytest wiring

The gate job runs in a bare env with only pytest and pyyaml. Two repo-level
pytest settings broke it for reasons unrelated to workflow script paths:
tests/conftest.py imports omnibase_core (ModuleNotFoundError, exit 4), and
pyproject combines --strict-config with pytest-asyncio config keys, so zero
tests run while collection still reports 12. --noconftest and -c /dev/null
detach both. The module resolves its repo root from __file__, so nothing it
checks changes.
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