Local Development Setup
gitaiflow requires Python 3.11+ and native compilation toolchains (gcc/clang, patchelf, zstandard) if you intend to compile the binary locally.
On this page ▾
1. Environment Setup
git clone https://gitlab.com/clizero/gitaiflow.git
cd gitaiflow
python3 -m venv .venv
source .venv/bin/activate
pip install -e .[dev]
pip install -U nuitka zstandardOr via the Makefile:
make install2. Test Suite Execution
python3 -m pytest tests/ -vOr:
make testTests import the package directly from the checkout (pythonpath = ["."] in pyproject.toml). Filesystem-sensitive tests (usage log, telemetry consent) always isolate HOME to a temporary directory rather than touching the developer's real ~/.gitaiflow.
For the full deterministic regression suite (date parsing, version resolution, commit parsing, diff helpers, artifacts, JSON/Markdown output, usage logging, changelog bucketing/validation/rendering/merging) or telemetry consent tests specifically, see the internal regression-suite docs (not published here).
3. Linting
ruff check .Or:
make lint
make format # ruff check . --fix4. Local Native Compilation (macOS ARM64)
chmod +x scripts/install/compile.sh
./scripts/install/compile.shOr invoke Nuitka manually:
PYTHONPATH=. python3 -m nuitka \
--standalone \
--onefile \
--remove-output \
--assume-yes-for-downloads \
--include-package=gitaiflow \
--include-package-data=gitaiflow \
--include-package=httpx \
--include-package-data=certifi \
--output-dir=bin \
--output-filename=gitaiflow \
gitaiflow/generate_summary.py
chmod +x bin/gitaiflow
./bin/gitaiflow --versionOr via Makefile:
make compile
# copies bin/gitaiflow -> installers/gitaiflow-darwin-arm645. Cleaning Build Artifacts
make cleanRemoves build/, dist/, bin/, *.egg-info, .cache/, *.build, *.dist, and every file under installers/.
Repository Layout
Two independent things ship from this one repository: the gitaiflow binary (what end users install), and the telemetry receiver (a small internal service you run separately, not part of the binary). They share a repo and a CI pipeline but nothing else at runtime.
gitaiflow/ (repo root)
├── gitaiflow/ <- source package compiled into the binary
│ ├── config/
│ ├──
│ ├── prompts/
│ ├── templates/
│ └── generate_summary.py <- entry point
├── telemetry_server/ <- standalone Flask receiver, deployed separately
│ ├── app.py to its own host (internal runbook, not published here)
│ └── requirements.txt
├── scripts/
│ ├── install/
│ │ ├── compile.sh
│ │ ├── install.sh
│ │ └── install.ps1
│ ├── r2/
│ │ ├── gitai_manifest.json
│ │ ├── gitai_r2.sh
│ │ └── generate_gitai_manifest.py
│ └── release/
│ └── registry_update.sh
├── tests/
├── Makefile
├── pyproject.toml
└── README.mdFor the architecture behind the gitaiflow/ package, see ../architecture/gitaiflow.md.