#workflow #runner #docker #automation #ci

astro-run-server

AstroRun 是一个高度可定制的流程编排器,允许用户定义自己的核心运行器。无论是 Docker 还是其他平台,AstroRun 都让用户能够轻松灵活地运行工作流。

7 个版本

0.1.6 2024 年 3 月 10 日
0.1.5 2024 年 2 月 25 日
0.1.4 2023 年 10 月 1 日
0.1.3 2023 年 9 月 10 日
0.1.1 2023 年 8 月 23 日

#57 in #runner

Download history 8/week @ 2024-03-28 2/week @ 2024-04-04 1/week @ 2024-06-06

每月下载次数 218

MIT 许可证

185KB
5K SLoC

Astro Run Server

astro-run-serverastro-run 的扩展,允许它作为服务运行并接受通过 gRPC 请求的运行器。

astro-run-server 通过 gRPC 流将来自 astro-run 的运行请求、插件事件、日志等转发到运行器,实现远程调用和多运行器调度。

示例

在您的 Cargo.toml 中将 astro-runastro-run-server 添加为依赖项

[dependencies]
astro-run = "0.1"
astro-run-server = "0.1"

Astro Run Server

use astro_run::{AstroRun, Result, Workflow};
use astro_run_server::AstroRunServer;

#[tokio::main]
async fn main() -> Result<()> {
  let server = AstroRunServer::new();

  // Start server in background
  let handle = tokio::spawn({
    let server = server.clone();

    async move {
      server.serve("127.0.0.1:5338").await.unwrap();
    }
  });

  let astro_run = AstroRun::builder().runner(server).build();

  let workflow = r#"
    jobs:
      test:
        name: Test Job
        steps:
          - timeout: 60m
            continue-on-error: false
            run: Hello World
      "#;

  let workflow = Workflow::builder()
    .config(workflow)
    .build(&astro_run)
    .unwrap();

  let ctx = astro_run.execution_context().build();

  // Run workflow
  let _res = workflow.run(ctx).await;

  // Wait for server to stop
  handle.await.unwrap();

  Ok(())
}

运行器

use astro_run::{stream, Context, Result, RunResult};
use astro_run_server::AstroRunRunner;

struct Runner {}

impl Runner {
  fn new() -> Self {
    Runner {}
  }
}

#[astro_run::async_trait]
impl astro_run::Runner for Runner {
  async fn run(&self, ctx: Context) -> astro_run::RunResponse {
    let (tx, rx) = stream();

    tx.log(ctx.command.run);
    tx.end(RunResult::Succeeded);

    Ok(rx)
  }
}

#[tokio::main]
async fn main() -> Result<()> {
  let runner = Runner::new();

  let mut astro_run_runner = AstroRunRunner::builder()
    .runner(runner)
    .url("http://127.0.0.1:5338")
    .id("test-runner")
    .build()
    .await
    .unwrap();

  astro_run_runner.start().await.unwrap();

  Ok(())
}

在上面的示例中,您可以使用 astro-runner 的特定实现替换运行器。

依赖项

~19–34MB
~660K SLoC