astro_run_scheduler/
lib.rs

1mod 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}