-
Notifications
You must be signed in to change notification settings - Fork 2
how to contribute tooling
Active contributors: Magnus Hedemark
Build system, linters, CI workflows, and the SSX CLI that support development and deployment of SlopSearX.
The ssx CLI at the repository root provides an agent-friendly wrapper around the SlopSearX API:
python ssx search "quantum computing" --categories science
python ssx engines
python ssx health
python ssx configAll commands support --json for programmatic output. The default output format is YAML+Markdown, optimized for AI agent consumption. The CLI discovers the server URL from the SSX_URL env var (default: http://localhost:8080).
Commands:
-
ssx search <query>— Execute a search with optional category, engine, language, time-range, and page filters -
ssx engines— List all engines with their health status and categories -
ssx health— Check server and per-engine health -
ssx config— Show engine-to-categories mapping for runtime discovery
The project uses ruff for both linting and formatting:
ruff check . # Lint all files
ruff format . # Format all filesThere is no separate formatter (no Black, isort, or flake8 config). Ruff handles everything. Configuration is in pyproject.toml under [tool.ruff].
The project has four GitHub Actions workflows in .github/workflows/:
Runs on every push and PR. Two jobs:
-
Lint:
ruff check . -
Test:
pytest -von Python 3.12 and 3.13
Builds the Docker image and pushes to GitHub Container Registry (ghcr.io). Triggered on pushes to main and on version tags (v*).
Marks commits with a Factory Droid tag for session tracking. Runs on push to main.
Auto-reviews PRs using Factory Droid. Triggered on PR open and synchronize events.
The project uses pyproject.toml with setuptools. Key scripts:
pip install -e ".[dev]" # Development install with all extras
pytest -v # Run tests
ruff check . # LintDependencies are managed via pyproject.toml with a uv.lock file for reproducible installs.
Two Docker configurations exist:
-
Dockerfile— Multi-stage build. Copies the project, installs dependencies, and runs uvicorn on port 8080. -
docker-compose.yml— Orchestrates SlopSearX + Valkey. Builds from the Dockerfile and connects to a Valkey 8 Alpine container.
The .dockerignore excludes .venv, .git, __pycache__, and test artifacts.
The k8s/ directory contains Kustomize manifests for production deployment:
- Deployment with 3 replicas, resource requests/limits, and Valkey env vars
- ClusterIP service on port 8080
- HPA scaling from 3 to 100 replicas at 70% CPU utilization
Apply with: kubectl apply -k k8s/
| File | Description |
|---|---|
ssx |
Agent-friendly CLI for the SlopSearX API |
.github/workflows/ci.yml |
Main CI: lint + test on push/PR |
.github/workflows/docker.yml |
Docker build and push to ghcr.io |
.github/workflows/droid.yml |
Factory Droid tagging workflow |
.github/workflows/droid-review.yml |
Factory Droid PR review workflow |
Dockerfile |
Multi-stage production Docker build |
docker-compose.yml |
Local dev orchestration with Valkey |
k8s/ |
Kubernetes deployment manifests |
pyproject.toml |
Build config, dependencies, and ruff settings |