forge
ExploreLog in

Tahinli/forge

public
0 watching
★ 0
2.4 KiB
1-- CI: runners, registration tokens, runs, jobs, artifacts and sealed repo secrets.
2-- Runner, registration and job tokens are stored as sha256 hex only. Timestamps are RFC 3339
3-- UTC stamps from time.rs. See docs/ci-interfaces.md section 2.
4
5CREATE TABLE ci_runners (
6 id TEXT PRIMARY KEY,
7 name TEXT NOT NULL,
8 labels TEXT NOT NULL,
9 secret_hash TEXT NOT NULL UNIQUE,
10 created_at TEXT NOT NULL,
11 last_seen_at TEXT NULL,
12 disabled INTEGER NOT NULL DEFAULT 0
13);
14
15CREATE TABLE ci_registration_tokens (
16 token_hash TEXT PRIMARY KEY,
17 created_by TEXT NOT NULL REFERENCES users(id),
18 created_at TEXT NOT NULL,
19 expires_at TEXT NOT NULL,
20 used_at TEXT NULL
21);
22
23CREATE TABLE ci_runs (
24 id TEXT PRIMARY KEY,
25 repo_id TEXT NOT NULL REFERENCES repos(id),
26 number INTEGER NOT NULL,
27 trigger TEXT NOT NULL,
28 git_ref TEXT NOT NULL,
29 commit_oid TEXT NOT NULL,
30 pull_number INTEGER NULL,
31 actor_id TEXT NOT NULL REFERENCES users(id),
32 state TEXT NOT NULL,
33 config_error TEXT NULL,
34 created_at TEXT NOT NULL,
35 finished_at TEXT NULL,
36 UNIQUE (repo_id, number)
37);
38
39CREATE TABLE ci_jobs (
40 id TEXT PRIMARY KEY,
41 run_id TEXT NOT NULL REFERENCES ci_runs(id) ON DELETE CASCADE,
42 name TEXT NOT NULL,
43 spec TEXT NOT NULL,
44 state TEXT NOT NULL,
45 runner_id TEXT NULL,
46 job_token_hash TEXT NULL,
47 exit_code INTEGER NULL,
48 message TEXT NULL,
49 queued_at TEXT NULL,
50 started_at TEXT NULL,
51 finished_at TEXT NULL,
52 heartbeat_at TEXT NULL,
53 cancel_requested INTEGER NOT NULL DEFAULT 0,
54 log_bytes INTEGER NOT NULL DEFAULT 0,
55 UNIQUE (run_id, name)
56);
57
58CREATE INDEX ci_jobs_queue ON ci_jobs(state, queued_at);
59
60CREATE TABLE ci_artifacts (
61 id TEXT PRIMARY KEY,
62 job_id TEXT NOT NULL REFERENCES ci_jobs(id) ON DELETE CASCADE,
63 name TEXT NOT NULL,
64 size INTEGER NOT NULL,
65 sha256 TEXT NOT NULL,
66 created_at TEXT NOT NULL,
67 UNIQUE (job_id, name)
68);
69
70CREATE TABLE ci_secrets (
71 repo_id TEXT NOT NULL REFERENCES repos(id),
72 name TEXT NOT NULL,
73 sealed BLOB NOT NULL,
74 created_at TEXT NOT NULL,
75 updated_at TEXT NOT NULL,
76 PRIMARY KEY (repo_id, name)
77);