How to develop, test, and submit changes to raged.
# Clone the repo
git clone https://github.com/<org>/raged.git
cd raged
# Start infrastructure
docker compose up -d
# Pull embedding model
curl http://localhost:11434/api/pull -d '{"name":"nomic-embed-text"}'
# Install and build both packages
cd api && npm install && npm run build && cd ..
cd cli && npm install && npm run build && cd ..
flowchart LR
B[Create branch] --> C[Write failing test]
C --> I[Implement]
I --> T[Run tests]
T --> P{Pass?}
P -->|No| I
P -->|Yes| CO[Commit]
CO --> PR[Open PR]
style C fill:#fff3e0
style CO fill:#c8e6c9
feat/<short-description> # New features
fix/<short-description> # Bug fixes
docs/<short-description> # Documentation
refactor/<short-description> # Code improvements
test/<short-description> # Test additions
Follow Conventional Commits:
feat: add query caching for repeated searches
fix: handle empty file during indexing
docs: add Mermaid diagram to architecture doc
refactor: extract embedding client interface
test: add unit tests for chunking module
chore: update dependencies
Keep the first line under 72 characters. Add a body for complex changes.
mainThe CI workflow is in .github/workflows/ci.yaml.
Use Actions → Run workflow to manually trigger .github/workflows/pages.yml when needed.
api and cli (build, lint)worker-ci matrix (test, lint)docker-build-node builds API and indexer images via matrixdocker-build-worker builds the worker image separatelyThis structure keeps jobs focused and reduces duplication.
Docker images are automatically published to GitHub Container Registry (GHCR) via .github/workflows/publish-images.yaml.
Manual Dispatch:
gh workflow runMain Branch Pushes:
mainmain and sha-<commit-short-sha>ghcr.io/mfittko/raged-api:main, ghcr.io/mfittko/raged-api:sha-abc1234Version Tag Pushes:
v*.*.* (e.g., v0.6.0)<version>, <major>.<minor>, <major>, and latestv0.6.0 produces:
ghcr.io/mfittko/raged-api:0.6.0ghcr.io/mfittko/raged-api:0.6ghcr.io/mfittko/raged-api:0ghcr.io/mfittko/raged-api:latestAll three core components are published:
ghcr.io/mfittko/raged-apighcr.io/mfittko/ragedghcr.io/mfittko/raged-workerTo publish a new version:
# Create tag + GitHub release notes from CHANGELOG.md
export OPENAI_API_KEY=your_key_here
scripts/create-release.sh v0.6.0
# Or auto-increment the next stable semver tag
scripts/create-release.sh --bump patch
# Dry-run notes generation without pushing tag/release
scripts/create-release.sh v0.6.0 --dry-run
The script will:
CHANGELOG.mdTarget direction: release automatically from main after merge.
Current gap: we do not yet have remote-deployment smoke tests to validate the newly released image in an environment before finalizing a stable release. Until that exists, releases remain script-driven.
When smoke-test infrastructure is available, automate release creation with a main-triggered workflow that:
The publish-images workflow will automatically build and publish all three images with multi-arch support (linux/amd64, linux/arm64) and semantic tags (0.6.0, 0.6, 0, latest).
Note:
v prefix (e.g., v0.6.0), but Docker image tags do not (e.g., 0.6.0). Always reference images without the v prefix in Helm values and deployment configurations.latest tag is updated only on version tag pushes. Main branch pushes publish main and sha-* tags for development builds.linux/amd64 and linux/arm64GITHUB_TOKEN with packages: write permissionWorker dependencies are split by purpose:
worker/requirements.txt → runtime dependenciesworker/requirements-test.txt → test dependencies (extends runtime)worker/requirements-lint.txt → lint-only dependenciesPinned lock files are committed and used in CI and Docker builds:
worker/requirements.lockworker/requirements-test.lockworker/requirements-lint.lockWhen changing worker dependency inputs, regenerate lock files in worker/:
cd worker
python3 -m pip install pip-tools
python3 -m piptools compile requirements.txt -o requirements.lock
python3 -m piptools compile requirements-test.txt -o requirements-test.lock
python3 -m piptools compile requirements-lint.txt -o requirements-lint.lock
Commit both the changed input file(s) and generated lock file(s) in the same PR.
raged/
├── api/ → Fastify RAG API (see api/AGENTS.md)
├── cli/ → CLI indexer tool (see cli/AGENTS.md)
├── chart/ → Helm chart (see chart/AGENTS.md)
├── docs/ → Documentation (see docs/AGENTS.md)
├── .claude/ → Claude Code skill definitions
├── .github/ → CI/CD workflows
└── AGENTS.md → Project-wide coding principles
import/export, not require)any in new codeSee AGENTS.md for the full set of conventions.
api/src/server.tsdocs/09-api-reference.mdcli/src/index.tsusage() function with all flagsdocs/03-cli.md