pr_01m47d24b0e6n91zwymwxg0vpx/crates/contracts/src/automations.rs
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.
| Automations: rules in .g1t/automations that act when something happens | 1 | //! The automations service: rules in a repository's `.g1t/automations/` |
| 2 | //! that act when something happens, in the way GitHub Actions' workflows | |
| 3 | //! do, but on g1t's events and with g1t's own steps. | |
| 4 | //! | |
| 5 | //! An automation says *on* which event (or a schedule, or by hand), *if* | |
| 6 | //! which conditions hold, *do* which steps: comment, label, put an agent | |
| 7 | //! on it, message the agent working on it, open, close or reopen an issue, | |
| 8 | //! post to a URL. Files on the default branch are the source of truth; each | |
| 9 | //! push reloads them. Every run is kept, step by step. | |
| 10 | //! | |
| 11 | //! Mirrors `packages/contracts/src/automations.ts`. | |
| 12 | ||
| 13 | use serde::{Deserialize, Serialize}; | |
| 14 | ||
| 15 | use crate::repos::RepoPath; | |
| 16 | use crate::{User, Viewer}; | |
| 17 | ||
| 18 | /// One automation, as read from its file. | |
| 19 | #[derive(Clone, Debug, Serialize, Deserialize)] | |
| 20 | #[serde(rename_all = "camelCase")] | |
| 21 | pub struct Automation { | |
| 22 | pub id: String, | |
| 23 | /// `owner/name`. | |
| 24 | pub repo: String, | |
| 25 | /// The file it comes from, such as `.g1t/automations/bugs.yml`. | |
| 26 | pub path: String, | |
| 27 | pub name: String, | |
| 28 | /// What starts it, in words: `issue.opened`, `every Monday at 09:00`. | |
| 29 | pub trigger: String, | |
| 30 | /// Its conditions and steps, in words, one each. | |
| 31 | pub conditions: Vec<String>, | |
| 32 | pub steps: Vec<String>, | |
| 33 | /// Whether it runs. Members can turn one off without changing its file. | |
| 34 | pub enabled: bool, | |
| 35 | /// Why the file could not be used, if it could not. | |
| 36 | pub error: Option<String>, | |
| 37 | /// Whether it can be run by hand. | |
| 38 | pub manual: bool, | |
| 39 | pub last_run: Option<AutomationRun>, | |
| 40 | } | |
| 41 | ||
| 42 | /// One step of a run, and how it went. | |
| 43 | #[derive(Clone, Debug, Serialize, Deserialize)] | |
| 44 | #[serde(rename_all = "camelCase")] | |
| 45 | pub struct StepResult { | |
| 46 | pub step: String, | |
| 47 | pub ok: bool, | |
| 48 | pub detail: String, | |
| 49 | } | |
| 50 | ||
| 51 | #[derive(Clone, Debug, Serialize, Deserialize)] | |
| 52 | #[serde(rename_all = "camelCase")] | |
| 53 | pub struct AutomationRun { | |
| 54 | pub id: String, | |
| 55 | pub automation_id: String, | |
| 56 | pub name: String, | |
| 57 | /// What started it: an event type, `schedule` or `manual`. | |
| 58 | pub event: String, | |
| 59 | /// The issue or pull request it acted on. | |
| 60 | pub number: Option<u32>, | |
| 61 | /// `succeeded`, `failed` (a step failed) or `skipped` (and why, in | |
| 62 | /// `reason`). | |
| 63 | pub status: String, | |
| 64 | pub reason: Option<String>, | |
| 65 | pub steps: Vec<StepResult>, | |
| 66 | /// Who started it by hand, or who caused the event. | |
| 67 | pub actor: Option<String>, | |
| 68 | /// RFC 3339. | |
| 69 | pub started_at: String, | |
| 70 | } | |
| 71 | ||
| 72 | /// `list`: a repository's automations. Returns `Outcome<Vec<Automation>>`. | |
| 73 | /// Anyone who can see the repository. | |
| 74 | #[derive(Debug, Serialize, Deserialize)] | |
| 75 | pub struct ListArgs { | |
| 76 | pub repo: RepoPath, | |
| 77 | pub viewer: Viewer, | |
| 78 | } | |
| 79 | ||
| 80 | /// `runs`: a repository's latest runs, newest first, of one automation or | |
| 81 | /// all. Returns `Outcome<Vec<AutomationRun>>`. | |
| 82 | #[derive(Debug, Serialize, Deserialize)] | |
| 83 | pub struct RunsArgs { | |
| 84 | pub repo: RepoPath, | |
| 85 | pub viewer: Viewer, | |
| 86 | #[serde(default)] | |
| 87 | pub automation: Option<String>, | |
| 88 | } | |
| 89 | ||
| 90 | /// `run`: runs an automation now, on an issue or pull request if given. | |
| 91 | /// Returns `Outcome<AutomationRun>`. Members only. | |
| 92 | #[derive(Debug, Serialize, Deserialize)] | |
| 93 | pub struct RunArgs { | |
| 94 | pub actor: User, | |
| 95 | pub repo: RepoPath, | |
| 96 | pub id: String, | |
| 97 | #[serde(default)] | |
| 98 | pub number: Option<u32>, | |
| 99 | } | |
| 100 | ||
| 101 | /// `set_enabled`: turns an automation on or off. Returns | |
| 102 | /// `Outcome<Automation>`. Members only. | |
| 103 | #[derive(Debug, Serialize, Deserialize)] | |
| 104 | pub struct SetEnabledArgs { | |
| 105 | pub actor: User, | |
| 106 | pub repo: RepoPath, | |
| 107 | pub id: String, | |
| 108 | pub enabled: bool, | |
| 109 | } |