flowey_lib_hvlite/_jobs/
cfg_hvlite_reposource.rs

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4//! Configures the repo source required by [`crate::git_checkout_openvmm_repo`]
5
6use flowey::node::prelude::*;
7
8flowey_request! {
9    #[derive(Clone)]
10    pub struct Params {
11        pub hvlite_repo_source: flowey_lib_common::git_checkout::RepoSource,
12    }
13}
14
15new_simple_flow_node!(struct Node);
16
17impl SimpleFlowNode for Node {
18    type Request = Params;
19
20    fn imports(ctx: &mut ImportCtx<'_>) {
21        ctx.import::<crate::git_checkout_openvmm_repo::Node>();
22        ctx.import::<flowey_lib_common::git_checkout::Node>();
23    }
24
25    fn process_request(request: Self::Request, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> {
26        let Params { hvlite_repo_source } = request;
27
28        if matches!(ctx.backend(), FlowBackend::Local) {
29            ctx.req(
30                flowey_lib_common::git_checkout::Request::LocalOnlyRequireExistingClones(
31                    !matches!(
32                        hvlite_repo_source,
33                        flowey_lib_common::git_checkout::RepoSource::LocalOnlyNewClone { .. }
34                    ),
35                ),
36            );
37        }
38
39        ctx.req(flowey_lib_common::git_checkout::Request::RegisterRepo {
40            repo_id: "openvmm".into(),
41            repo_src: hvlite_repo_source,
42            allow_persist_credentials: false,
43            depth: Some(1),           // shallow fetch
44            pre_run_deps: Vec::new(), // no special auth required
45        });
46
47        ctx.req(crate::git_checkout_openvmm_repo::req::SetRepoId(
48            ReadVar::from_static("openvmm".into()),
49        ));
50
51        Ok(())
52    }
53}