OXYGENHUB
# f8cf54e99879 oxygenhub / crates / hub / migrations / 0011_flow.sql
2.0 KiB · SQL · last changed OxygenFlow runs: pushes start pipeline runs, a runner API with job tokens, jobs as checks, and a Flow tab with the job graph and live logs 1 month ago source blame history raw
42fa9554 Andy McCall ↶ 1
-- OxygenFlow runs, jobs and their logs (hub spec §13.2).
2
3
CREATE TABLE flow_runs (
4
    id            INTEGER PRIMARY KEY,
5
    repo_id       INTEGER NOT NULL REFERENCES repositories(id) ON DELETE CASCADE,
6
    bookmark      TEXT NOT NULL,
7
    -- The bookmark's state hash (checks are keyed by it) and its heads, joined with '+'.
8
    state         TEXT NOT NULL,
9
    heads         TEXT NOT NULL,
10
    pipeline_hash TEXT NOT NULL DEFAULT '',
11
    status        TEXT NOT NULL CHECK (status IN ('queued', 'running', 'passed', 'failed', 'error')),
12
    -- Pipeline problems, one per line, for a run in error.
13
    error         TEXT NOT NULL DEFAULT '',
14
    actor         TEXT NOT NULL DEFAULT '',
15
    created_ms    INTEGER NOT NULL,
16
    finished_ms   INTEGER
17
);
18
CREATE INDEX flow_runs_by_repo ON flow_runs (repo_id, id DESC);
19
20
CREATE TABLE flow_jobs (
21
    id           INTEGER PRIMARY KEY,
22
    run_id       INTEGER NOT NULL REFERENCES flow_runs(id) ON DELETE CASCADE,
23
    name         TEXT NOT NULL,
24
    depth        INTEGER NOT NULL,
25
    -- JSON: the job's dependencies, compiled form and sandbox (flow-core types).
26
    depends      TEXT NOT NULL,
27
    spec         TEXT NOT NULL,
28
    sandbox      TEXT NOT NULL,
29
    runtime      TEXT NOT NULL,
30
    status       TEXT NOT NULL CHECK (status IN ('queued', 'running', 'passed', 'failed', 'skipped', 'error')),
31
    runner       TEXT NOT NULL DEFAULT '',
32
    token_hash   TEXT NOT NULL DEFAULT '',
33
    started_ms   INTEGER,
34
    finished_ms  INTEGER,
35
    exit_code    INTEGER,
36
    error        TEXT NOT NULL DEFAULT '',
37
    receipt      TEXT NOT NULL DEFAULT '',
38
    receipt_hash TEXT NOT NULL DEFAULT '',
39
    log_count    INTEGER NOT NULL DEFAULT 0,
40
    UNIQUE (run_id, name)
41
);
42
CREATE INDEX flow_jobs_queued ON flow_jobs (status, id);
43
CREATE INDEX flow_jobs_token ON flow_jobs (token_hash) WHERE token_hash <> '';
44
45
CREATE TABLE flow_logs (
46
    job_id INTEGER NOT NULL REFERENCES flow_jobs(id) ON DELETE CASCADE,
47
    seq    INTEGER NOT NULL,
48
    t      INTEGER NOT NULL,
49
    stream TEXT NOT NULL,
50
    text   TEXT NOT NULL,
51
    PRIMARY KEY (job_id, seq)
52
);