astro_run_scheduler/
lib.rs1mod default;
2
3use serde::{Deserialize, Serialize};
4use astro_run::{Context, Job, JobRunResult, Step, StepRunResult, Workflow, WorkflowRunResult};
5pub use default::DefaultScheduler;
6
7#[derive(Debug, Clone, Default, Serialize, Deserialize)]
8pub struct RunnerMetadata {
9 pub id: String,
10 pub os: String,
11 pub arch: String,
12 pub support_docker: bool,
13 pub support_host: bool,
14 pub version: String,
15 pub max_runs: i32,
16}
17
18#[astro_run::async_trait]
19pub trait Scheduler: Send + Sync {
20 fn on_run_workflow(&self, _workflow: Workflow) {}
21 fn on_run_job(&self, _job: Job) {}
22 fn on_run_step(&self, _step: Step) {}
23 fn on_step_completed(&self, _result: StepRunResult) {}
24 fn on_job_completed(&self, _result: JobRunResult) {}
25 fn on_workflow_completed(&self, _result: WorkflowRunResult) {}
26 async fn schedule<'a, 'b: 'a>(
27 &'b self,
28 runners: &'a [RunnerMetadata],
29 ctx: &Context,
30 ) -> Option<&'a RunnerMetadata>;
31}