Skip to content

ci: add clean-install and pypi-consumer-install verification jobs - #90

Merged
netty-linux merged 1 commit into
masterfrom
ci/clean-install-verification
Aug 12, 2026
Merged

ci: add clean-install and pypi-consumer-install verification jobs#90
netty-linux merged 1 commit into
masterfrom
ci/clean-install-verification

Conversation

@netty-linux

Copy link
Copy Markdown
Owner

Summary

Two levels of "does this actually install cleanly" verification, neither
of which the existing cached CI jobs can answer:

  • clean-install (Level 1): uv sync --all-packages with Actions
    cache disabled. Proves the workspace resolves from a cold start, not
    from a cache artifact left over from before a resolution break landed.
    Runs on every PR/push.
  • pypi-consumer-install (Level 2): installs nullain-sdk,
    nullain-sdk[search-rust], and nullain-search directly from the
    public PyPI index, with no checkout of this repo. This is the
    scenario clean-install structurally cannot cover, since it always
    installs from source — and it's what would have caught Publicar nullain-search no PyPI e substituir tool.uv.sources por constraint de versão #77
    (search-rust's local-path tool.uv.sources override was internally
    consistent from source the whole time; only resolving the published
    extra from the public index surfaces that kind of break). Runs on push
    to main/master and daily via a new schedule trigger, since the
    public index can break with zero commits here (a yanked release, index
    downtime, a transitive dependency's breaking publish).

Test plan

  • Both jobs' YAML validated (yaml.safe_load)
  • All three pypi-consumer-install smoke test commands run manually against the real PyPI index in an isolated venv — nullain-sdk public API import, search-rust extra + RustSearchAdapter import, nullain-search's SearchIndex.index/.query — all passed
  • clean-install's smoke test (import nullain, nullain_tools, nullain_agentd) confirmed importable

Context

Companion PRs open in nullain-sdk-search and nullain-agent (nullain-agent-APP), each adding their own from-source clean-install job. Related: #77, #80, #81, #89.

🤖 Generated with Claude Code

Two levels of "does this actually install cleanly" that the existing
cached jobs can't answer:

- clean-install: uv sync --all-packages with Actions cache disabled —
  proves the workspace resolves from a cold start, not from an artifact
  left behind by a prior successful run. Runs on every PR/push.

- pypi-consumer-install: installs nullain-sdk, nullain-sdk[search-rust],
  and nullain-search directly from the public PyPI index, with no
  checkout of this repo — the scenario clean-install cannot cover, since
  it always installs from source. This is what would have caught #77
  (search-rust's local-path override was internally consistent from
  source the whole time; only resolving the published extra from the
  public index surfaces that kind of break). Runs on push to main/master
  and daily via a new schedule trigger, since the public index can break
  with zero commits here (a yanked release, index downtime, a transitive
  dependency's breaking publish).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@netty-linux
netty-linux merged commit f9f6c14 into master Aug 12, 2026
13 checks passed
netty-linux added a commit to netty-linux/nullain-agent that referenced this pull request Aug 12, 2026
`static`/`test` cache pip for CI speed, but a cache hit can mask a
genuinely broken pin (a version that no longer exists, a dependency
conflict only visible on a cold resolve). `docker-build` also installs
from a cold image, but that's a side effect of proving the deploy
artifact builds, not a declared clean-install check — this job is that
check, standalone from Docker.

Companion to netty-linux/nullain-agent-sdk#90 and
netty-linux/nullain-sdk-search#2.

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
netty-linux added a commit to netty-linux/nullain-sdk-search that referenced this pull request Aug 12, 2026
`test` caches via Swatinem/rust-cache — right for day-to-day CI speed,
but a cache hit can mask a genuinely broken cold build (a Cargo.lock
drift, a toolchain assumption that only holds with stale artifacts).
This job builds the workspace and the wheel from a cold start, no cache,
proving this repo is self-contained.

Companion to netty-linux/nullain-agent-sdk#90's pypi-consumer-install,
which covers the complementary case this can't: whether the *published*
nullain-search wheel actually installs and works for someone who never
cloned this repo.

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
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