Repository navigation
feat: Phase 9 — ship it (packaging, release workflow, docs) - #14
Open
getdownandcode wants to merge 7 commits into
Open
getdownandcode wants to merge 7 commits into
getdownandcode wants to merge 7 commits into
Conversation
- dist name gitmate-cli (import package and CLI command stay gitmate); hatch wheel packages pinned to src/gitmate - authors, keywords, classifiers, project URLs; --version/-V via importlib.metadata - sdist excludes internal docs (plan.md, AGENTS.md)
Curated from gitmate changelog's own output over the full history (dogfooded); the tool's template fallback did the grouping after the API path was unavailable in the build sandbox.
Phase 8 landed with crash-safe prepare-commit-msg hooks; the diagram now shows the hook component plus install/prepare-commit-msg edges. Subtitle corrected from 'Target' to 'System' architecture (as-built). Validated 0 errors/0 crossings; PNG re-exported. Structural check only — pixel review pending (agent cannot view images).
build job runs tests, uv build, twine check, uploads artifacts with no OIDC; publish job (needs build) holds id-token: write scoped to itself alone; manual dispatches default to TestPyPI so a mistaken run cannot touch PyPI; tag pushes publish to PyPI and attach artifacts to a GitHub release.
…tory Real-user install paths (uv tool/pipx/pip install gitmate-cli), command reference, hooks section, architecture embed, live metrics table from gitmate stats with the development-period caveat, the hash-vs-semantic caching rationale, and the design-decisions story leading with graceful degradation and human-in-the-loop. Demo GIF embed pending recording.
- docs/demo.gif: real end-to-end recording (asciinema + agg after vhs could not drive ttyd on this machine): stage -> gitmate commit -> real gemini-3.5-flash-lite generation -> typed accept -> git log proof. - Pin google_genai.models logger to ERROR: the SDK's once-per-process AFC advisory printed above every generated message; genuine errors remain.
Owner
Author
|
Demo GIF landed (real recording of a real generation — |
…ve budget caps, slim sdist - commit/pr-summary/changelog now print a clean error for malformed or hand-edited config (including UnknownModelError mid-pipeline, a ConfigError subclass) instead of a raw traceback - budget_cap_usd rejects negative values at both entry points: config set and load_config (a negative cap permanently blocked generation) - sdist excludes docs/, .github/, uv.lock, .agents (drops ~2.5MB); templates and hook assets verified to still ship, .pre-commit-hooks.yaml kept - README: PyPI badges removed until first release, test count updated - 5 new tests: clean-error CLI paths for all three generation commands, negative-cap rejection at both layers
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.
Overview
Phase 9 per plan.md: finalize packaging, add the release pipeline, and finish the README. PyPI dist name is gitmate-cli (verified free on both PyPI and TestPyPI via the JSON API —
gitmateitself is permanently taken by an abandoned 2023 project). The CLI command and import package staygitmate.Changes
pyproject.toml— distgitmate-cli; authors/keywords/classifiers/URLs;[tool.hatch.build.targets.wheel] packages = ["src/gitmate"](needed after the rename); sdist excludes internal docs (plan.md,AGENTS.md— verified absent from a freshuv build);--version/-Vflag viaimportlib.metadata.CHANGELOG.md— v0.1.0 release notes, curated fromgitmate changelog's own output over the full history (dogfooded; the tool's template fallback did the grouping).install-hook/prepare-commit-msgedges), subtitle corrected from "Target" to "System" (as-built). Validated 0 errors / 0 crossings; PNG re-exported.release.yml— two-job PyPA pattern:build(pytest → uv build → uvx twine check → upload-artifact, no OIDC) →publish(needs: build,id-token: writescoped to this job only,uv publish). Manual dispatches default to TestPyPI so a mistaken run cannot touch real PyPI; tag pushesv*publish to PyPI and attach artifacts to a GitHub Release.gitmate stats(277 invocations, $0.0087 est. spend, dev-period caveat), the hash-vs-semantic caching rationale, and the design-decisions story (graceful degradation + human-in-the-loop first).Verification
uv buildinspected: sdist excludes plan.md/AGENTS.md, includes tests/docs/.pre-commit-hooks.yaml/uv.lock; wheel ships templates + both entry pointsOpen items (before merge)
gitmate config show→api_key: not set). Oncegitmate config set-keyis run, the GIF lands in this PR; alternatively approve a fallback-mode demo or drop the embed.v0.1.0tag.