Axylith · axle (editor) · hosted app
Axyloid is a small suite of automation bots for the Axylith ecosystem. Each bot runs in two ways: as a GitHub Action (zero-setup, runs in your CI) or as a hosted GitHub App (one-click install, runs on Axylith infrastructure). Same logic, two delivery modes.
- uses: Axylith/axyloid/action@v1
with:
bot: stats
scope: user
username: ${{ github.repository_owner }}
output: .github/assets/stats.svgRuns entirely inside GitHub-hosted runners. No external dependencies. Use this when:
|
Install from bots.axylith.com — one click, pick the repos, done. The hosted service receives webhooks from GitHub, runs the bots, and commits results back. No workflow files needed. Use this when:
|
name: Update stats badge
on:
schedule:
- cron: '0 6 * * *'
workflow_dispatch:
jobs:
stats:
runs-on: ubuntu-24.04
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- uses: Axylith/axyloid/action@v1
with:
bot: stats
scope: user
username: ${{ github.repository_owner }}
output: .github/assets/stats.svg
- uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_message: chore: update stats badge
file_pattern: .github/assets/stats.svg |
git clone https://github.com/Axylith/axyloid.git
cd axyloid
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
pytestRun a bot against the live GitHub API: export GITHUB_TOKEN=ghp_xxxxxxxxxxxxx
axyloid stats user \
--username YOUR_USERNAME \
--output /tmp/stats.svgRun the hosted server locally (needs a registered GitHub App): export GITHUB_APP_ID=12345
export GITHUB_PRIVATE_KEY_PATH=./secrets/app.pem
export GITHUB_WEBHOOK_SECRET=...
uvicorn server.main:app --reload |
|
Logic layers
|
Delivery layers
|
The pattern is four files. Look at stats as the reference implementation.
Pure logic. No I/O, no GitHub API knowledge if avoidable. Returns plain data structures. |
Argparse subcommand. Translates CLI flags into core function calls. Handles file output. |
FastAPI handler for hosted mode. Receives webhook payload, clones repo, invokes core, commits back. |
Unit tests with mock data. Integration tests against the real API live in a separate test file. |
Then register the subcommand in cli/main.py and the handler in server/main.py. The Action mode automatically picks it up — just document the new bot: value in the README.
|
Where things run
|
Security model
See SECURITY.md for the threat model. |
Axyloid follows the Axylith Contributing Guide and Code of Conduct. PRs welcome — open an issue first for non-trivial changes.
Apache 2.0. See LICENSE.
·
Part of the Axylith ecosystem.