microsoft/openvmm

Public

mirrored fromhttps://github.com/microsoft/openvmmAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
e8c4f2e8ffc1914ac7dab5e566370609f1f37cd7

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

flowey/flowey_lib_hvlite/src/artifact_guide.rs

90lines · modecode

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4//! Artifact: mdbook-rendered HvLite Guide
5
6/// Publish the artifact.
7pub mod publish {
8 use flowey::node::prelude::*;
9
10 flowey_request! {
11 pub struct Request {
12 pub rendered_guide: ReadVar<PathBuf>,
13 pub artifact_dir: ReadVar<PathBuf>,
14 pub done: WriteVar<SideEffect>,
15 }
16 }
17
18 new_simple_flow_node!(struct Node);
19
20 impl SimpleFlowNode for Node {
21 type Request = Request;
22
23 fn imports(ctx: &mut ImportCtx<'_>) {
24 ctx.import::<flowey_lib_common::copy_to_artifact_dir::Node>();
25 }
26
27 fn process_request(request: Self::Request, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> {
28 let Request {
29 rendered_guide,
30 artifact_dir,
31 done,
32 } = request;
33
34 let files = rendered_guide.map(ctx, |p| vec![("Guide".into(), p)]);
35 ctx.req(flowey_lib_common::copy_to_artifact_dir::Request {
36 debug_label: "guide".into(),
37 files,
38 artifact_dir,
39 done,
40 });
41
42 Ok(())
43 }
44 }
45}
46
47/// Resolve the contents of an existing artifact.
48pub mod resolve {
49 use flowey::node::prelude::*;
50
51 flowey_request! {
52 pub struct Request {
53 pub artifact_dir: ReadVar<PathBuf>,
54 pub rendered_guide: WriteVar<PathBuf>,
55 }
56 }
57
58 new_simple_flow_node!(struct Node);
59
60 impl SimpleFlowNode for Node {
61 type Request = Request;
62
63 fn imports(ctx: &mut ImportCtx<'_>) {
64 ctx.import::<flowey_lib_common::copy_to_artifact_dir::Node>();
65 }
66
67 fn process_request(request: Self::Request, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> {
68 let Request {
69 artifact_dir,
70 rendered_guide,
71 } = request;
72
73 ctx.emit_rust_step("resolve guide artifact", |ctx| {
74 let artifact_dir = artifact_dir.claim(ctx);
75 let rendered_guide = rendered_guide.claim(ctx);
76 move |rt| {
77 let artifact_dir = rt.read(artifact_dir);
78 let guide_dir = artifact_dir.join("Guide");
79 if !guide_dir.exists() {
80 anyhow::bail!("malformed artifact! did not find Guide/ folder");
81 }
82 rt.write(rendered_guide, &guide_dir);
83 Ok(())
84 }
85 });
86
87 Ok(())
88 }
89 }
90}
91