Repository navigation
ci: install the wheels without dev dependencies and run one audit - #575
Merged
Merged
Conversation
Every CI job installs with uv sync, which uses uv.lock and the dev group. That hid both problems fixed in darnitdevorg#573: a release of tree-sitter-language-pack that the lockfile pins away, and a dependency core imported without declaring it. The new job builds the wheels, installs them with pip into a clean environment, and runs one level 1 audit. It does this twice: core and baseline only, then everything darnit-mcp pulls in. The minimal install matters because a sibling package can declare what core forgot. The logic is in scripts/non-dev-install-smoke.sh so it can be run locally. Signed-off-by: Marc-cn <130138935+Marc-cn@users.noreply.github.com> Assisted-by: Claude:claude-fable-5-1
mlieberman85
approved these changes
Oct 12, 2026
mlieberman85
left a comment
Contributor
There was a problem hiding this comment.
Thanks, this does what #573's review asked. I ran the script locally (uv 0.5.0 builds darnit-mcp fine). With packaging removed from darnit-core the minimal install fails and the full install passes, as you described. Pre-#573 wheels fail on Python 3.14/macOS with the AuthorityViolation crash.
- #582 changes the message to "could not be imported", so after it lands the
not installedgrep stops matching (thePass:check still catches it). Could you add that string, or better, use--output jsonand assert QA-05.01 is PASS and no result haserror.class == "evaluation"? - Could the wheel glob fail when
dist/holds more than one wheel per package? Locally a stale build gets picked silently. - Optional: in the full install, import every
darnit*module (pkgutil.walk_packages) so gittuf/reproducibility imports are covered too.
Drafted with Claude Code; reviewed and posted by me.
3 of 12 tasks
mlieberman85
added a commit
to mlieberman85/darnit
that referenced
this pull request
Oct 15, 2026
Assisted-by: Claude:claude-opus-5-5 Signed-off-by: Michael Lieberman <mlieberman85@gmail.com>
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
Follow-up to #573, as discussed there. Adds a CI job that installs darnit the way a user does and runs one audit.
Every existing job, including "Plugin discovery smoke", installs with
uv sync. That usesuv.lockand the dev group, so it cannot see (a) a newly published release of a dependency that breaks a fresh install, or (b) a dependency darnit imports without declaring it.scripts/non-dev-install-smoke.sh: creates a clean virtual environment, installs the given wheels with pip (fresh resolve, no lockfile, no dev dependencies), audits a throwaway repository at level 1, and fails if the audit exits non-zero, prints a traceback or "not installed", or passes no control.ci.yml, new jobnon_dev_install_smoke: builds the five wheels and runs the script twice, once withdarnit-core+darnit-baselineonly and once with everythingdarnit-mcppulls in. Python 3.12, to match the container image.Where it lives. You asked
release-smoke.ymlor its own job. I put it inci.ymlbecauserelease-smoke.ymlruns onworkflow_runafter a release is published, which is too late for this. The script takes a dist directory, sorelease-smoke.ymlcan call it too if you want the same check there.Why two installs.
darnit-reproducibilitydeclarespackaging. A fulldarnit-mcpinstall therefore hadpackagingeven when core did not declare it, and only the minimal install shows that gap. This also corrects something I wrote in #573: thepackaginghalf did not affect "any install from a built wheel", only installs withoutdarnit-reproducibility(such as the quick install infrom-source.md). Thetree-sitterhalf affected all of them.Type of Change
CI only. No package code changes.
Testing
uv run pytest tests/ -v) (not re-run: no package or test code changed)shellcheckclean on the script;ci.ymlparses)The script, run on RHEL 10.2 against wheels built from current main and from 190e85c (the commit before #573). "held" means
tree-sitter-language-pack<1.6.3forced throughPIP_CONSTRAINT, to reproduce the cap-only state:AuthorityViolationcrash)AuthorityViolationcrash)packagingcame through reproducibility)Not verified locally:
uv build --wheel --package darnit-mcpunder the pinned uv 0.5.0 (I have 0.13; the existing Build job only builds core and baseline). CI on this PR is the test of that.AI assistance
Claude Fable 5.1 wrote the script and drafted this description. I ran every case in the table myself. The commit carries an
Assisted-by: Claude:claude-fable-5-1trailer.Additional Notes