summaryrefslogtreecommitdiff
path: root/archived/projt-launcher/docs/handbook/bot.md
diff options
context:
space:
mode:
Diffstat (limited to 'archived/projt-launcher/docs/handbook/bot.md')
-rw-r--r--archived/projt-launcher/docs/handbook/bot.md198
1 files changed, 198 insertions, 0 deletions
diff --git a/archived/projt-launcher/docs/handbook/bot.md b/archived/projt-launcher/docs/handbook/bot.md
new file mode 100644
index 0000000000..807f1da838
--- /dev/null
+++ b/archived/projt-launcher/docs/handbook/bot.md
@@ -0,0 +1,198 @@
+# Bot `bot/`
+
+> **Type**: Cloudflare Worker
+> **Platform**: Cloudflare Workers
+> **Purpose**: PR Automation & Labeling
+> **Latest Version**: 0.0.5-1
+
+---
+
+## Overview
+
+The ProjT Launcher bot is a Cloudflare Worker that automates pull request labeling based on changed files. It listens for GitHub webhook events and applies appropriate labels automatically.
+
+---
+
+## Features
+
+| Feature | Description |
+|---------|-------------|
+| **Auto-labeling** | Labels PRs based on file changes |
+| **Path mapping** | Configurable path-to-label rules |
+| **Webhook integration** | GitHub webhook receiver |
+| **Zero cold start** | Cloudflare Workers edge deployment |
+
+---
+
+## Architecture
+
+```
+┌─────────────┐ ┌──────────────────┐ ┌─────────────┐
+│ GitHub │────▶│ Cloudflare │────▶ │ GitHub │
+│ Webhook │ │ Worker (bot/) │ │ API │
+└─────────────┘ └──────────────────┘ └─────────────┘
+ │
+ ┌──────▼────────┐
+ │ wrangler.json │
+ │ (config) │
+ └───────────────┘
+```
+
+---
+
+## File Structure
+
+```
+bot/
+├── index.js # Main worker logic
+├── server.js # Local development server
+├── package.json # Dependencies
+└── wrangler.json # Cloudflare configuration
+```
+
+---
+
+## Label Rules
+
+The bot applies labels based on changed file paths:
+
+| Path Pattern | Label |
+|--------------|-------|
+| `launcher/**` | `launcher` |
+| `buildconfig/**` | `build` |
+| `cmake/**` | `build` |
+| `.github/workflows/**` | `ci` |
+| `docs/**` | `documentation` |
+| `zlib/**` | `library: zlib` |
+| `bzip2/**` | `library: bzip2` |
+| `quazip/**` | `library: quazip` |
+| `cmark/**` | `library: cmark` |
+| `tomlplusplus/**` | `library: toml++` |
+| `libqrencode/**` | `library: qrencode` |
+| `website/**` | `website` |
+
+---
+
+## Configuration
+
+### wrangler.json
+
+```json
+{
+ "name": "projtlauncher-bot",
+ "main": "index.js",
+ "compatibility_date": "2024-01-01",
+ "vars": {
+ "GITHUB_APP_ID": "your-app-id"
+ }
+}
+```
+
+### Environment Variables
+
+| Variable | Description |
+|----------|-------------|
+| `GITHUB_APP_ID` | GitHub App ID |
+| `GITHUB_APP_PRIVATE_KEY` | GitHub App private key |
+| `GITHUB_WEBHOOK_SECRET` | Webhook signature secret |
+
+---
+
+## Development
+
+### Prerequisites
+
+- Node.js 18+
+- Wrangler CLI (`npm install -g wrangler`)
+- Cloudflare account
+
+### Local Development
+
+```bash
+cd bot
+npm install
+
+# Start local dev server
+npm run dev
+# or
+wrangler dev
+```
+
+### Testing Webhooks Locally
+
+Use [smee.io](https://smee.io/) or ngrok to forward webhooks:
+
+```bash
+# Install smee client
+npm install -g smee-client
+
+# Forward webhooks
+smee -u https://smee.io/your-channel -t http://localhost:8787
+```
+
+---
+
+## Deployment
+
+### Deploy to Cloudflare
+
+```bash
+cd bot
+wrangler publish
+```
+
+### GitHub Webhook Setup
+
+1. Go to repository Settings → Webhooks
+2. Add webhook:
+ - **Payload URL**: `https://your-worker.workers.dev/webhook`
+ - **Content type**: `application/json`
+ - **Secret**: Your `GITHUB_WEBHOOK_SECRET`
+ - **Events**: Pull requests
+
+---
+
+## API Endpoints
+
+| Endpoint | Method | Description |
+|----------|--------|-------------|
+| `/` | GET | Health check |
+| `/webhook` | POST | GitHub webhook receiver |
+
+---
+
+## Security
+
+- ✅ **Signature verification** — HMAC-SHA256 webhook signatures
+- ✅ **App authentication** — GitHub App JWT tokens
+- ✅ **Secret management** — Cloudflare Workers secrets
+
+---
+
+## Troubleshooting
+
+### Bot not labeling PRs
+
+1. Check Cloudflare Workers logs
+2. Verify webhook delivery in GitHub settings
+3. Ensure secrets are configured correctly
+
+### Labels not created
+
+Labels must exist in the repository before the bot can apply them.
+
+---
+
+## Related Documentation
+
+- [CI Workflows](./workflows.md) — GitHub Actions integration
+- [GitHub Scripts](./ptcigh.md) — Additional automation
+
+---
+
+## External Links
+
+- [Cloudflare Workers Docs](https://developers.cloudflare.com/workers/)
+- [Wrangler CLI](https://developers.cloudflare.com/workers/wrangler/)
+- [GitHub Apps](https://docs.github.com/en/apps)
+- [GitHub Webhooks](https://docs.github.com/en/webhooks)