Skip to content

IronCore v0.3.2

Latest

Choose a tag to compare

@github-actions github-actions released this 20 Jul 12:43
· 6 commits to main since this release

Added

  • Update notifier — a gentle "a newer version is available" nudge. A new
    ironcore/update.py checks PyPI for a newer release of the ironcore-cli
    distribution and, when one exists, prints a one-line upgrade hint. It
    never auto-installs — a CLI that runs shell commands and edits files leaves
    the user in control of what version they run — so it only ever prints the
    command (pip install -U ironcore-cli / uv tool upgrade ironcore-cli /
    pipx upgrade ironcore-cli). The check is fail-silent (any network/DNS/
    timeout/bad-JSON error reads as "no update", never a traceback), cached for
    a day at ~/.ironcore/update-check.json (an atomic write, so a normal launch
    inside the window does not dial), short-timeout, and opt-out via a new
    [update] check setting (default true). It surfaces in exactly two places,
    and neither runs in a non-interactive / headless / CI context: ironcore doctor prints [--] update: <v> available … / [ok] up to date (<v>) (only
    when stdout is a real terminal; offline is never a doctor failure), and the
    TUI posts a single boot-style note in the background at startup. Headless
    ironcore exec and any non-TTY path never dial PyPI. Version comparison uses
    packaging.version (PEP 440, pre-release aware). Documented in docs/CONFIG.md
    §12, the ironcore init starter config, and the README's new "Updating"
    section. 31 new offline tests (tests/test_update.py + TUI/doctor additions),
    all inject the fetch so nothing dials.

Fixed

  • Update notifier: declared its packaging dependency so a stock install's
    ironcore doctor no longer crashes.
    ironcore/update.py's is_newer imports
    packaging.version, but packaging was not in the runtime dependencies — it
    was only reachable in the dev env because pytest pulls it in, so the whole
    green suite hid the gap. In a stock install (pip/pipx/uv tool install ironcore-cli into a clean env), packaging was absent, so ironcore doctor
    raised ModuleNotFoundError: No module named 'packaging' and exited 1 — a
    doctor failure caused solely by the notifier — and the TUI boot nudge was
    silently dead. packaging>=23.0 is now a declared runtime dependency.
    Defense in depth: is_newer's import moved inside its try (a future prune
    degrades to "no nudge", not a crash) and doctor's _report_update is wrapped
    fail-silent, so the maintenance ping can never be the reason a doctor run ends
    in a traceback. Three offline regression tests pin the declaration and both
    guards.