9个版本 (1个稳定版)
1.0.0 | 2024年7月20日 |
---|---|
0.1.7 | 2024年3月15日 |
0.1.5 | 2024年2月25日 |
0.1.4 | 2023年10月1日 |
0.1.1 | 2023年8月23日 |
#1267 in 网络编程
每月200次下载
190KB
5K SLoC
Astro Run Remote Runner
astro-run-remote-runner
是astro-run的一个扩展,允许运行器作为远程服务,并让astro-run
作为客户端通过gRPC请求连接。远程运行器使用流将运行时日志、事件等流式传输到客户端。
示例
在您的Cargo.toml
中添加astro-run
和astro-run-remote-runner
作为依赖项
[dependencies]
astro-run = "0.1"
astro-run-remote-runner = "0.1"
远程运行器服务器
use astro_run::{stream, Context, Result, RunResult};
use astro_run_remote_runner::AstroRunRemoteRunnerServer;
// Simulated implementation of a Runner
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 runner_server = AstroRunRemoteRunnerServer::builder()
.runner(runner)
.build()
.unwrap();
runner_server.serve("127.0.0.1:5002").await.unwrap();
Ok(())
}
Astro-Run客户端
use astro_run::{AstroRun, Result, Workflow};
use astro_run_remote_runner::AstroRunRemoteRunnerClient;
#[tokio::main]
async fn main() -> Result<()> {
let client_runner = AstroRunRemoteRunnerClient::builder().build().unwrap();
let handle = tokio::task::spawn({
let mut client_runner = client_runner.clone();
async move {
// Run the client runner in background
client_runner
.start(vec!["http://127.0.0.1:5002"])
.await
.unwrap();
}
});
let astro_run = AstroRun::builder().runner(client_runner).build();
let workflow = r#"
jobs:
job-id:
steps:
- run: Hello World
"#;
let workflow = Workflow::builder()
.config(workflow)
.build(&astro_run)
.await
.unwrap();
// Create a new execution context
let ctx = astro_run.execution_context().build();
// Run workflow
let _res = workflow.run(ctx).await;
// Wait for the client runner to finish
handle.await.unwrap();
Ok(())
}
在上面的示例中,您可以用astro-runner的特定实现替换运行器。
依赖项
~14–30MB
~505K SLoC