| 1 | /** SQLite schema of a repository Durable Object. Applied idempotently on construction. */ |
| 2 | export const REPO_SCHEMA = ` |
| 3 | CREATE TABLE IF NOT EXISTS meta (key TEXT PRIMARY KEY, value TEXT NOT NULL); |
| 4 | CREATE TABLE IF NOT EXISTS refs (name TEXT PRIMARY KEY, oid TEXT NOT NULL); |
| 5 | CREATE TABLE IF NOT EXISTS objects ( |
| 6 | oid TEXT PRIMARY KEY, type INTEGER NOT NULL, size INTEGER NOT NULL, data BLOB, r2 INTEGER NOT NULL DEFAULT 0 |
| 7 | ); |
| 8 | CREATE TABLE IF NOT EXISTS counters (name TEXT PRIMARY KEY, value INTEGER NOT NULL); |
| 9 | |
| 10 | CREATE TABLE IF NOT EXISTS issues ( |
| 11 | number INTEGER PRIMARY KEY, kind TEXT NOT NULL, title TEXT NOT NULL, body TEXT NOT NULL DEFAULT '', |
| 12 | state TEXT NOT NULL DEFAULT 'open', state_reason TEXT, author_id TEXT NOT NULL, author_login TEXT NOT NULL, |
| 13 | author_kind TEXT NOT NULL DEFAULT 'user', assignees TEXT NOT NULL DEFAULT '[]', labels TEXT NOT NULL DEFAULT '[]', |
| 14 | created_at TEXT NOT NULL, updated_at TEXT NOT NULL, closed_at TEXT, locked INTEGER NOT NULL DEFAULT 0 |
| 15 | ); |
| 16 | CREATE TABLE IF NOT EXISTS pulls ( |
| 17 | number INTEGER PRIMARY KEY, head_ref TEXT NOT NULL, head_sha TEXT NOT NULL, base_ref TEXT NOT NULL, |
| 18 | draft INTEGER NOT NULL DEFAULT 0, merged INTEGER NOT NULL DEFAULT 0, merged_at TEXT, merged_by TEXT, |
| 19 | merge_commit TEXT, requested_reviewers TEXT NOT NULL DEFAULT '[]', intent TEXT |
| 20 | ); |
| 21 | CREATE INDEX IF NOT EXISTS pulls_head ON pulls(head_ref); |
| 22 | CREATE TABLE IF NOT EXISTS comments ( |
| 23 | id TEXT PRIMARY KEY, number INTEGER NOT NULL, author_id TEXT NOT NULL, author_login TEXT NOT NULL, |
| 24 | author_kind TEXT NOT NULL DEFAULT 'user', body TEXT NOT NULL, created_at TEXT NOT NULL, updated_at TEXT NOT NULL, |
| 25 | review_id TEXT, path TEXT, line INTEGER, side TEXT, commit_id TEXT, in_reply_to TEXT, resolved INTEGER NOT NULL DEFAULT 0 |
| 26 | ); |
| 27 | CREATE INDEX IF NOT EXISTS comments_number ON comments(number); |
| 28 | CREATE TABLE IF NOT EXISTS reviews ( |
| 29 | id TEXT PRIMARY KEY, number INTEGER NOT NULL, author_id TEXT NOT NULL, author_login TEXT NOT NULL, |
| 30 | author_kind TEXT NOT NULL DEFAULT 'user', state TEXT NOT NULL, body TEXT NOT NULL DEFAULT '', commit_id TEXT NOT NULL, |
| 31 | submitted_at TEXT NOT NULL |
| 32 | ); |
| 33 | CREATE INDEX IF NOT EXISTS reviews_number ON reviews(number); |
| 34 | CREATE TABLE IF NOT EXISTS labels (name TEXT PRIMARY KEY, color TEXT NOT NULL, description TEXT NOT NULL DEFAULT ''); |
| 35 | CREATE TABLE IF NOT EXISTS protections (pattern TEXT PRIMARY KEY, rules TEXT NOT NULL); |
| 36 | CREATE TABLE IF NOT EXISTS secrets (name TEXT PRIMARY KEY, ciphertext TEXT NOT NULL, updated_at TEXT NOT NULL); |
| 37 | CREATE TABLE IF NOT EXISTS variables (name TEXT PRIMARY KEY, value TEXT NOT NULL, updated_at TEXT NOT NULL); |
| 38 | CREATE TABLE IF NOT EXISTS webhooks ( |
| 39 | id TEXT PRIMARY KEY, url TEXT NOT NULL, secret TEXT NOT NULL, events TEXT NOT NULL, active INTEGER NOT NULL DEFAULT 1, |
| 40 | created_at TEXT NOT NULL, last_status INTEGER, last_delivery_at TEXT |
| 41 | ); |
| 42 | CREATE TABLE IF NOT EXISTS checks ( |
| 43 | id TEXT PRIMARY KEY, sha TEXT NOT NULL, name TEXT NOT NULL, status TEXT NOT NULL, conclusion TEXT, |
| 44 | run_id TEXT, job_id TEXT, details_url TEXT, output TEXT, app TEXT NOT NULL DEFAULT 'diffinery-actions', |
| 45 | started_at TEXT, completed_at TEXT |
| 46 | ); |
| 47 | CREATE INDEX IF NOT EXISTS checks_sha ON checks(sha); |
| 48 | CREATE TABLE IF NOT EXISTS runs ( |
| 49 | id TEXT PRIMARY KEY, run_number INTEGER NOT NULL, workflow_path TEXT NOT NULL, workflow_name TEXT NOT NULL, |
| 50 | event TEXT NOT NULL, ref TEXT NOT NULL, sha TEXT NOT NULL, actor TEXT NOT NULL, status TEXT NOT NULL, |
| 51 | conclusion TEXT, created_at TEXT NOT NULL, updated_at TEXT NOT NULL, pr_number INTEGER, attempt INTEGER NOT NULL DEFAULT 1, |
| 52 | event_payload TEXT NOT NULL, inputs TEXT NOT NULL DEFAULT '{}', concurrency_group TEXT, display_title TEXT NOT NULL DEFAULT '' |
| 53 | ); |
| 54 | CREATE INDEX IF NOT EXISTS runs_created ON runs(created_at); |
| 55 | CREATE TABLE IF NOT EXISTS jobs ( |
| 56 | id TEXT PRIMARY KEY, run_id TEXT NOT NULL, job_key TEXT NOT NULL, name TEXT NOT NULL, status TEXT NOT NULL, |
| 57 | conclusion TEXT, matrix TEXT NOT NULL DEFAULT '{}', strategy TEXT NOT NULL DEFAULT '{}', started_at TEXT, completed_at TEXT, |
| 58 | outputs TEXT NOT NULL DEFAULT '{}', steps TEXT NOT NULL DEFAULT '[]', failure TEXT, token_hash TEXT, summary TEXT, |
| 59 | container TEXT, timeout_minutes INTEGER NOT NULL DEFAULT 360 |
| 60 | ); |
| 61 | CREATE INDEX IF NOT EXISTS jobs_run ON jobs(run_id); |
| 62 | CREATE TABLE IF NOT EXISTS logs (job_id TEXT NOT NULL, seq INTEGER NOT NULL, t TEXT NOT NULL, step INTEGER NOT NULL, text TEXT NOT NULL, PRIMARY KEY (job_id, seq)); |
| 63 | CREATE TABLE IF NOT EXISTS caches (key TEXT PRIMARY KEY, size INTEGER NOT NULL, created_at TEXT NOT NULL, last_used TEXT NOT NULL); |
| 64 | CREATE TABLE IF NOT EXISTS artifacts (id TEXT PRIMARY KEY, run_id TEXT NOT NULL, name TEXT NOT NULL, size INTEGER NOT NULL, created_at TEXT NOT NULL, UNIQUE(run_id, name)); |
| 65 | CREATE TABLE IF NOT EXISTS sandboxes (id TEXT PRIMARY KEY, secret TEXT NOT NULL, created_by TEXT NOT NULL, ref TEXT NOT NULL, created_at TEXT NOT NULL, status TEXT NOT NULL); |
| 66 | `; |