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
每月下载次数 218
185KB
5K SLoC
Astro Run Server
astro-run-server
是 astro-run 的扩展,允许它作为服务运行并接受通过 gRPC 请求的运行器。
astro-run-server
通过 gRPC 流将来自 astro-run
的运行请求、插件事件、日志等转发到运行器,实现远程调用和多运行器调度。
示例
在您的 Cargo.toml
中将 astro-run
和 astro-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