#ci #concourse #resources #create #helper #build #org

concourse-resource

辅助创建用于Concourse CI的资源

4个版本 (2个重大变更)

0.3.0 2022年2月14日
0.2.1 2021年2月15日
0.2.0 2020年6月10日
0.1.0 2019年3月17日

#95 in #org

Apache-2.0

130KB
205 代码行

concourse-resource-rs License: MIT 构建状态 发布文档 Crate

主分支的API文档发布在此处。链接.

根据https://concourse-ci.org/implementing-resource-types.html在Rust中创建Concourse资源。

示例

更多示例请参阅示例.

包含的多阶段Dockerfile展示了如何构建一个最小化的Docker镜像以部署Concourse资源。要运行它

docker build --build-arg EXAMPLE=hello_world .

简单的hello world

use std::{fs::File, io::Write, path::Path};

use serde::{Deserialize, Serialize};

use concourse_resource::*;

struct HelloWorld {}

#[derive(Serialize, Deserialize)]
struct Version {
    ver: String,
}

impl Resource for HelloWorld {
    type Version = Version;

    type Source = concourse_resource::Empty;

    type InParams = concourse_resource::Empty;
    type InMetadata = concourse_resource::Empty;

    type OutParams = concourse_resource::Empty;
    type OutMetadata = concourse_resource::Empty;

    fn resource_check(_: Option<Self::Source>, _: Option<Self::Version>) -> Vec<Self::Version> {
        vec![Self::Version {
            ver: String::from("static"),
        }]
    }

    fn resource_in(
        _source: Option<Self::Source>,
        _version: Self::Version,
        _params: Option<Self::InParams>,
        output_path: &str,
    ) -> Result<InOutput<Self::Version, Self::InMetadata>, Box<dyn std::error::Error>> {
        let mut path = Path::new(output_path).to_path_buf();
        path.push("hello_world.txt");
        let mut file = File::create(path)?;
        file.write_all(b"hello, world!")?;

        Ok(InOutput {
            version: Self::Version {
                ver: String::from("static"),
            },
            metadata: None,
        })
    }

    fn resource_out(
        _: Option<Self::Source>,
        _: Option<Self::OutParams>,
        _: &str,
    ) -> OutOutput<Self::Version, Self::OutMetadata> {
        unimplemented!()
    }
}

create_resource!(HelloWorld);

依赖项

~0.7–1.6MB
~35K SLoC