forjar 1.4.1

Rust-native Infrastructure as Code — bare-metal first, BLAKE3 state, provenance tracing
Documentation
use super::*;
use std::collections::HashMap;

pub(super) fn dag_config(names: &[&str], edges: &[(&str, &str)]) -> ForjarConfig {
    let mut resources = indexmap::IndexMap::new();
    for name in names {
        let mut deps = vec![];
        for (from, to) in edges {
            if to == name {
                deps.push(from.to_string());
            }
        }
        resources.insert(
            name.to_string(),
            Resource {
                resource_type: ResourceType::Package,
                machine: MachineTarget::Single("m1".to_string()),
                state: None,
                depends_on: deps,
                provider: Some("apt".to_string()),
                packages: vec!["x".to_string()],
                version: None,
                path: None,
                content: None,
                source: None,
                target: None,
                owner: None,
                group: None,
                mode: None,
                name: None,
                enabled: None,
                restart_on: vec![],
                triggers: vec![],
                fs_type: None,
                options: None,
                uid: None,
                shell: None,
                home: None,
                groups: vec![],
                ssh_authorized_keys: vec![],
                system_user: false,
                schedule: None,
                command: None,
                image: None,
                ports: vec![],
                environment: vec![],
                volumes: vec![],
                restart: None,
                protocol: None,
                port: None,
                action: None,
                from_addr: None,
                recipe: None,
                inputs: HashMap::new(),
                arch: vec![],
                tags: vec![],
                resource_group: None,
                when: None,
                count: None,
                for_each: None,
                chroot_dir: None,
                namespace_uid: None,
                namespace_gid: None,
                seccomp: false,
                netns: false,
                cpuset: None,
                memory_limit: None,
                overlay_lower: None,
                overlay_upper: None,
                overlay_work: None,
                overlay_merged: None,
                format: None,
                quantization: None,
                checksum: None,
                cache_dir: None,
                gpu_backend: None,
                driver_version: None,
                cuda_version: None,
                rocm_version: None,
                devices: vec![],
                persistence_mode: None,
                compute_mode: None,
                gpu_memory_limit_mb: None,
                output_artifacts: vec![],
                completion_check: None,
                timeout: None,
                working_dir: None,
                task_mode: None,
                task_inputs: vec![],
                stages: vec![],
                cache: false,
                gpu_device: None,
                restart_delay: None,
                quality_gate: None,
                health_check: None,
                restart_policy: None,
                pre_apply: None,
                post_apply: None,
                lifecycle: None,
                store: false,
                sudo: false,
                script: None,
                gather: vec![],
                scatter: vec![],
                build_machine: None,
                repo: None,
                tag: None,
                asset_pattern: None,
                binary: None,
                install_dir: None,
            },
        );
    }
    let mut machines = indexmap::IndexMap::new();
    machines.insert(
        "m1".to_string(),
        Machine {
            hostname: "m1".to_string(),
            addr: "1.1.1.1".to_string(),
            user: "root".to_string(),
            arch: "x86_64".to_string(),
            ssh_key: None,
            roles: vec![],
            transport: None,
            container: None,
            pepita: None,
            cost: 0,
            allowed_operators: vec![],
        },
    );
    ForjarConfig {
        version: "1.0".to_string(),
        name: "test".to_string(),
        description: None,
        params: HashMap::new(),
        machines,
        resources,
        policy: Policy::default(),
        outputs: indexmap::IndexMap::new(),
        policies: vec![],
        data: indexmap::IndexMap::new(),
        includes: vec![],
        include_provenance: HashMap::new(),
        checks: indexmap::IndexMap::new(),
        moved: vec![],
        secrets: Default::default(),
        environments: indexmap::IndexMap::new(),
        dist: None,
    }
}

pub(super) fn test_params() -> HashMap<String, serde_yaml_ng::Value> {
    HashMap::from([(
        "val".to_string(),
        serde_yaml_ng::Value::String("resolved".to_string()),
    )])
}

pub(super) fn make_base_resource() -> Resource {
    Resource {
        resource_type: ResourceType::File,
        machine: MachineTarget::Single("m1".to_string()),
        state: None,
        depends_on: vec![],
        provider: None,
        packages: vec![],
        version: None,
        path: None,
        content: None,
        source: None,
        target: None,
        owner: None,
        group: None,
        mode: None,
        name: None,
        enabled: None,
        restart_on: vec![],
        triggers: vec![],
        fs_type: None,
        options: None,
        uid: None,
        shell: None,
        home: None,
        groups: vec![],
        ssh_authorized_keys: vec![],
        system_user: false,
        schedule: None,
        command: None,
        image: None,
        ports: vec![],
        environment: vec![],
        volumes: vec![],
        restart: None,
        protocol: None,
        port: None,
        action: None,
        from_addr: None,
        recipe: None,
        inputs: HashMap::new(),
        arch: vec![],
        tags: vec![],
        resource_group: None,
        when: None,
        count: None,
        for_each: None,
        chroot_dir: None,
        namespace_uid: None,
        namespace_gid: None,
        seccomp: false,
        netns: false,
        cpuset: None,
        memory_limit: None,
        overlay_lower: None,
        overlay_upper: None,
        overlay_work: None,
        overlay_merged: None,
        format: None,
        quantization: None,
        checksum: None,
        cache_dir: None,
        gpu_backend: None,
        driver_version: None,
        cuda_version: None,
        rocm_version: None,
        devices: vec![],
        persistence_mode: None,
        compute_mode: None,
        gpu_memory_limit_mb: None,
        output_artifacts: vec![],
        completion_check: None,
        timeout: None,
        working_dir: None,
        task_mode: None,
        task_inputs: vec![],
        stages: vec![],
        cache: false,
        gpu_device: None,
        restart_delay: None,
        quality_gate: None,
        health_check: None,
        restart_policy: None,
        pre_apply: None,
        post_apply: None,
        lifecycle: None,
        store: false,
        sudo: false,
        script: None,
        gather: vec![],
        scatter: vec![],
        build_machine: None,
        repo: None,
        tag: None,
        asset_pattern: None,
        binary: None,
        install_dir: None,
    }
}