pr_01m47d15m3e54sn21z27rpy5n9/packages/contracts/src/actions.ts

182 lines5,588 bytesCodeBlame

Pick any line to see why it is the way it is: the commit, the pull request and issue it came from, and what the agent was thinking.

GitHub Actions on g1t, part three: .g1t/workflows, the pages, the docs1import type { User, Viewer } from "./identity";
2import type { RepoPath } from "./repos";
3import type { Result } from "./result";
4
5/**
6 * GitHub Actions workflows, run on g1t as they are. Mirrors
7 * `crates/contracts/src/actions.rs`.
8 */
9
10export type WorkflowNote = {
11 severity: "info" | "warning" | "unsupported";
12 job: string | null;
13 message: string;
14};
15
16/** One `workflow_dispatch` input, as written in the workflow. */
17export type DispatchInput = {
18 description?: string;
19 required?: boolean;
20 default?: string | number | boolean;
21 type?: "string" | "boolean" | "number" | "choice" | "environment";
22 options?: string[];
23};
24
25export type RunStatus = "pending" | "queued" | "in_progress" | "completed";
26export type Conclusion = "success" | "failure" | "cancelled" | "skipped";
27
28export type WorkflowRun = {
29 id: string;
30 workflowId: string;
31 path: string;
32 name: string;
33 title: string;
34 number: number;
35 attempt: number;
36 event: string;
37 ref: string;
38 sha: string;
39 pull: number | null;
40 status: RunStatus;
41 conclusion: Conclusion | null;
42 error: string | null;
43 actor: string | null;
44 createdAt: string;
45 startedAt: string | null;
46 finishedAt: string | null;
47};
48
49export type Workflow = {
50 id: string;
51 path: string;
52 name: string;
53 events: string[];
54 state: "active" | "disabled";
55 error: string | null;
56 notes: WorkflowNote[];
57 dispatch: Record<string, DispatchInput> | null;
58 lastRun: WorkflowRun | null;
59};
60
61export type StepState = {
62 number: number;
63 name: string;
64 status: "queued" | "in_progress" | "completed";
65 conclusion: Conclusion | null;
66 startedAt: string | null;
67 finishedAt: string | null;
68};
69
70export type Annotation = {
71 level: "error" | "warning" | "notice";
72 message: string;
73 title: string | null;
74 file: string | null;
75 line: number | null;
76};
77
78export type Job = {
79 id: string;
80 runId: string;
81 key: string;
82 name: string;
83 needs: string[];
Actions: reusable workflows in the repository84 /** `calling`: running the reusable workflow it calls, whose jobs follow it. */
85 status: "waiting" | "queued" | "in_progress" | "calling" | "completed";
GitHub Actions on g1t, part three: .g1t/workflows, the pages, the docs86 conclusion: Conclusion | null;
87 steps: StepState[];
88 annotations: Annotation[];
89 reason: string | null;
90 startedAt: string | null;
91 finishedAt: string | null;
92};
93
94export type RunDetail = { run: WorkflowRun; jobs: Job[]; notes: WorkflowNote[] };
95
96export type LogChunk = { seq: number; step: number; text: string };
97export type JobLog = { chunks: LogChunk[]; done: boolean };
98
Secrets and variables: one list, rows per environment, for workflows and deployments99/**
100 * Who may read a secret or variable: `workflows` (`secrets.*`, `vars.*` in
101 * GitHub Actions) and `deployments` (a deploy build's environment and the
102 * running app's bindings). Agents, checks and the merge queue never read
103 * any.
104 */
105export type SettingReader = "workflows" | "deployments";
106
107/**
108 * One row of secrets and variables, as Vercel lists environment variables:
109 * a key, its type, the environments it applies to and who reads it. A key
110 * may have one row per environment. Secrets' values are never returned.
111 */
GitHub Actions on g1t, part three: .g1t/workflows, the pages, the docs112export type Setting = {
Secrets and variables: one list, rows per environment, for workflows and deployments113 id: string;
GitHub Actions on g1t, part three: .g1t/workflows, the pages, the docs114 name: string;
Secrets and variables: one list, rows per environment, for workflows and deployments115 /** `variable` is shown as Config. Config may become a secret, never back. */
116 kind: SettingKind;
117 /** A variable's value. */
GitHub Actions on g1t, part three: .g1t/workflows, the pages, the docs118 value: string | null;
119 scope: "repository" | "workspace";
120 updatedAt: string;
Secrets and variables: one list, rows per environment, for workflows and deployments121 availableTo: SettingReader[];
122 /** The environments it applies to; empty is every environment. */
123 environments: string[];
124 /** A workspace's row: the repositories it reaches; empty is every one. */
125 repositories: string[];
126 /** Where to rotate it, or who to ask. */
127 note: string | null;
128 updatedBy: string | null;
GitHub Actions on g1t, part three: .g1t/workflows, the pages, the docs129};
130
Secrets and variables: one list, rows per environment, for workflows and deployments131/** What saving a row sets beyond its value; left out is unchanged. */
132export type SettingOptions = {
133 /** The row to change; left out, the key's row for every environment. */
134 id?: string;
135 availableTo?: SettingReader[];
136 environments?: string[];
137 repositories?: string[];
138 note?: string;
139};
140
GitHub Actions on g1t, part three: .g1t/workflows, the pages, the docs141export type SettingsOwner = { repo: RepoPath } | { workspace: string };
142export type SettingKind = "secret" | "variable";
Secrets and variables: one list, rows per environment, for workflows and deployments143/** `all` lists both. */
144export type SettingKindFilter = SettingKind | "all";
GitHub Actions on g1t, part three: .g1t/workflows, the pages, the docs145
146export type RunsFilter = {
147 workflow?: string;
148 branch?: string;
149 event?: string;
150 pull?: number;
151 sha?: string;
152 limit?: number;
153};
154
155export interface ActionsApi {
156 workflows(repo: RepoPath, viewer: Viewer): Promise<Result<Workflow[]>>;
157 runs(repo: RepoPath, viewer: Viewer, filter?: RunsFilter): Promise<Result<WorkflowRun[]>>;
158 run(repo: RepoPath, viewer: Viewer, id: string): Promise<Result<RunDetail>>;
159 logs(repo: RepoPath, viewer: Viewer, job: string, after?: number): Promise<Result<JobLog>>;
160 dispatch(
161 actor: User,
162 repo: RepoPath,
163 workflow: string,
164 ref: string | undefined,
165 inputs: Record<string, unknown>,
166 ): Promise<Result<WorkflowRun>>;
167 cancel(actor: User, repo: RepoPath, id: string): Promise<Result<WorkflowRun>>;
168 rerun(actor: User, repo: RepoPath, id: string, failedOnly?: boolean): Promise<Result<WorkflowRun>>;
169 setWorkflowEnabled(actor: User, repo: RepoPath, workflow: string, enabled: boolean): Promise<Result<Workflow>>;
Secrets and variables: one list, rows per environment, for workflows and deployments170 settings(actor: User, owner: SettingsOwner, kind: SettingKindFilter): Promise<Result<Setting[]>>;
171 /** `value` null keeps an existing entry's default value. */
172 setSetting(
173 actor: User,
174 owner: SettingsOwner,
175 kind: SettingKind,
176 name: string,
177 value: string | null,
178 options?: SettingOptions,
179 ): Promise<Result<Setting>>;
180 /** One row by `id`, or every row of the key. */
181 deleteSetting(actor: User, owner: SettingsOwner, kind: SettingKindFilter, name: string, id?: string): Promise<Result<boolean>>;
GitHub Actions on g1t, part three: .g1t/workflows, the pages, the docs182}