minor refactor

envfile
Ximo Guanter 3 years ago
parent aed887b584
commit 9184475e68

128
Cargo.lock generated

@ -2,9 +2,9 @@
# It is not intended for manual editing.
[[package]]
name = "addr2line"
version = "0.14.0"
version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c0929d69e78dd9bf5408269919fcbcaeb2e35e5d43e5815517cdc6a8e11a423"
checksum = "a55f82cfe485775d02112886f4169bde0c5894d75e79ead7eafe7e40a25e45f7"
dependencies = [
"gimli",
]
@ -159,9 +159,9 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
[[package]]
name = "byteorder"
version = "1.3.4"
version = "1.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de"
checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b"
[[package]]
name = "bytes"
@ -169,6 +169,12 @@ version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38"
[[package]]
name = "bytes"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ad1f8e949d755f9d79112b5bb46938e0ef9d3804a0b16dfab13aafcaa5f0fa72"
[[package]]
name = "cfg-if"
version = "0.1.10"
@ -264,7 +270,7 @@ dependencies = [
[[package]]
name = "dockerfile-plus"
version = "0.1.0"
version = "0.2.0"
dependencies = [
"anyhow",
"async-trait",
@ -276,7 +282,7 @@ dependencies = [
"futures",
"libc",
"mio",
"pin-project 1.0.2",
"pin-project 1.0.3",
"prost",
"prost-types",
"regex",
@ -375,9 +381,9 @@ checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
[[package]]
name = "futures"
version = "0.3.8"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b3b0c040a1fe6529d30b3c5944b280c7f0dcb2930d2c3062bca967b602583d0"
checksum = "c70be434c505aee38639abccb918163b63158a4b4bb791b45b7023044bdc3c9c"
dependencies = [
"futures-channel",
"futures-core",
@ -390,9 +396,9 @@ dependencies = [
[[package]]
name = "futures-channel"
version = "0.3.8"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4b7109687aa4e177ef6fe84553af6280ef2778bdb7783ba44c9dc3399110fe64"
checksum = "f01c61843314e95f96cc9245702248733a3a3d744e43e2e755e3c7af8348a0a9"
dependencies = [
"futures-core",
"futures-sink",
@ -400,15 +406,15 @@ dependencies = [
[[package]]
name = "futures-core"
version = "0.3.8"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "847ce131b72ffb13b6109a221da9ad97a64cbe48feb1028356b836b47b8f1748"
checksum = "db8d3b0917ff63a2a96173133c02818fac4a746b0a57569d3baca9ec0e945e08"
[[package]]
name = "futures-executor"
version = "0.3.8"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4caa2b2b68b880003057c1dd49f1ed937e38f22fcf6c212188a121f08cf40a65"
checksum = "9ee9ca2f7eb4475772cf39dd1cd06208dce2670ad38f4d9c7262b3e15f127068"
dependencies = [
"futures-core",
"futures-task",
@ -417,15 +423,15 @@ dependencies = [
[[package]]
name = "futures-io"
version = "0.3.8"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "611834ce18aaa1bd13c4b374f5d653e1027cf99b6b502584ff8c9a64413b30bb"
checksum = "e37c1a51b037b80922864b8eed90692c5cd8abd4c71ce49b77146caa47f3253b"
[[package]]
name = "futures-macro"
version = "0.3.8"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77408a692f1f97bcc61dc001d752e00643408fbc922e4d634c655df50d595556"
checksum = "0f8719ca0e1f3c5e34f3efe4570ef2c0610ca6da85ae7990d472e9cbfba13664"
dependencies = [
"proc-macro-hack",
"proc-macro2",
@ -435,24 +441,24 @@ dependencies = [
[[package]]
name = "futures-sink"
version = "0.3.8"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f878195a49cee50e006b02b93cf7e0a95a38ac7b776b4c4d9cc1207cd20fcb3d"
checksum = "f6adabac1290109cfa089f79192fb6244ad2c3f1cc2281f3e1dd987592b71feb"
[[package]]
name = "futures-task"
version = "0.3.8"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c554eb5bf48b2426c4771ab68c6b14468b6e76cc90996f528c3338d761a4d0d"
checksum = "a92a0843a2ff66823a8f7c77bffe9a09be2b64e533562c412d63075643ec0038"
dependencies = [
"once_cell",
]
[[package]]
name = "futures-util"
version = "0.3.8"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d304cff4a7b99cfb7986f7d43fbe93d175e72e704a8860787cc95e9ffd85cbd2"
checksum = "036a2107cdeb57f6d7322f1b6c363dad67cd63ca3b7d1b925bdf75bd5d96cda9"
dependencies = [
"futures-channel",
"futures-core",
@ -461,7 +467,7 @@ dependencies = [
"futures-sink",
"futures-task",
"memchr",
"pin-project 1.0.2",
"pin-project-lite 0.2.1",
"pin-utils",
"proc-macro-hack",
"proc-macro-nested",
@ -479,11 +485,11 @@ dependencies = [
[[package]]
name = "getrandom"
version = "0.1.15"
version = "0.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6"
checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
dependencies = [
"cfg-if 0.1.10",
"cfg-if 1.0.0",
"libc",
"wasi",
]
@ -500,7 +506,7 @@ version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e4728fd124914ad25e99e3d15a9361a879f6620f63cb56bbb08f95abb97a535"
dependencies = [
"bytes",
"bytes 0.5.6",
"fnv",
"futures-core",
"futures-sink",
@ -540,11 +546,11 @@ dependencies = [
[[package]]
name = "http"
version = "0.2.2"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "84129d298a6d57d246960ff8eb831ca4af3f96d29e2e28848dae275408658e26"
checksum = "7245cd7449cc792608c3c8a9eaf69bd4eabbabf802713748fd739c98b82f0747"
dependencies = [
"bytes",
"bytes 1.0.0",
"fnv",
"itoa",
]
@ -555,7 +561,7 @@ version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b"
dependencies = [
"bytes",
"bytes 0.5.6",
"http",
]
@ -583,7 +589,7 @@ version = "0.13.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6ad767baac13b44d4529fcf58ba2cd0995e36e7b435bc5b039de6f47e880dbf"
dependencies = [
"bytes",
"bytes 0.5.6",
"futures-channel",
"futures-core",
"futures-util",
@ -593,7 +599,7 @@ dependencies = [
"httparse",
"httpdate",
"itoa",
"pin-project 1.0.2",
"pin-project 1.0.3",
"socket2",
"tokio",
"tower-service",
@ -664,9 +670,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "libc"
version = "0.2.81"
version = "0.2.82"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1482821306169ec4d07f6aca392a4681f66c75c9918aa49641a2595db64053cb"
checksum = "89203f3fba0a3795506acaad8ebce3c80c0af93f994d5a1d7a0b1eeb23271929"
[[package]]
name = "log"
@ -817,11 +823,11 @@ dependencies = [
[[package]]
name = "pin-project"
version = "1.0.2"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ccc2237c2c489783abd8c4c80e5450fc0e98644555b1364da68cc29aa151ca7"
checksum = "5a83804639aad6ba65345661744708855f9fbcb71176ea8d28d05aeb11d975e7"
dependencies = [
"pin-project-internal 1.0.2",
"pin-project-internal 1.0.3",
]
[[package]]
@ -837,9 +843,9 @@ dependencies = [
[[package]]
name = "pin-project-internal"
version = "1.0.2"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8e8d2bf0b23038a4424865103a4df472855692821aab4e4f5c3312d461d9e5f"
checksum = "b7bcc46b8f73443d15bc1c5fecbb315718491fa9187fa483f0e359323cde8b3a"
dependencies = [
"proc-macro2",
"quote",
@ -854,9 +860,9 @@ checksum = "c917123afa01924fc84bb20c4c03f004d9c38e5127e3c039bbf7f4b9c76a2f6b"
[[package]]
name = "pin-project-lite"
version = "0.2.0"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6b063f57ec186e6140e2b8b6921e5f1bd89c7356dda5b33acc5401203ca6131c"
checksum = "e36743d754ccdf9954c2e352ce2d4b106e024c814f6499c2dadff80da9a442d8"
[[package]]
name = "pin-utils"
@ -897,7 +903,7 @@ version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ce49aefe0a6144a45de32927c77bd2859a5f7677b55f220ae5b744e87389c212"
dependencies = [
"bytes",
"bytes 0.5.6",
"prost-derive",
]
@ -907,7 +913,7 @@ version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "02b10678c913ecbd69350e8535c3aef91a8676c0773fc1d7b95cdd196d7f2f26"
dependencies = [
"bytes",
"bytes 0.5.6",
"heck",
"itertools",
"log",
@ -938,7 +944,7 @@ version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1834f67c0697c001304b75be76f67add9c89742eda3a085ad8ee0bb38c3417aa"
dependencies = [
"bytes",
"bytes 0.5.6",
"prost",
]
@ -1010,9 +1016,9 @@ checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
[[package]]
name = "regex"
version = "1.4.2"
version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38cf2c13ed4745de91a5eb834e11c00bcc3709e773173b2ce4c56c9fbde04b9c"
checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a"
dependencies = [
"aho-corasick",
"memchr",
@ -1022,9 +1028,9 @@ dependencies = [
[[package]]
name = "regex-syntax"
version = "0.6.21"
version = "0.6.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b181ba2dcf07aaccad5448e8ead58db5b742cf85dfe035e2227f137a539a189"
checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581"
[[package]]
name = "remove_dir_all"
@ -1115,9 +1121,9 @@ dependencies = [
[[package]]
name = "syn"
version = "1.0.56"
version = "1.0.58"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a9802ddde94170d186eeee5005b798d9c159fa970403f1be19976d0cfb939b72"
checksum = "cc60a3d73ea6594cd712d830cc1f0390fd71542d8c8cd24e70cc54cdfd5e05d5"
dependencies = [
"proc-macro2",
"quote",
@ -1161,9 +1167,9 @@ dependencies = [
[[package]]
name = "thread_local"
version = "1.0.1"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14"
checksum = "bb9bc092d0d51e76b2b19d9d85534ffc9ec2db959a2523cdae0697e2972cd447"
dependencies = [
"lazy_static",
]
@ -1189,7 +1195,7 @@ version = "0.2.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "099837d3464c16a808060bb3f02263b412f6fafcb5d01c533d309985fbeebe48"
dependencies = [
"bytes",
"bytes 0.5.6",
"fnv",
"futures-core",
"iovec",
@ -1219,7 +1225,7 @@ version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "be8242891f2b6cbef26a2d7e8605133c2c554cd35b3e4948ea892d6d68436499"
dependencies = [
"bytes",
"bytes 0.5.6",
"futures-core",
"futures-sink",
"log",
@ -1235,7 +1241,7 @@ dependencies = [
"async-stream",
"async-trait",
"base64",
"bytes",
"bytes 0.5.6",
"futures-core",
"futures-util",
"http",
@ -1334,9 +1340,9 @@ dependencies = [
[[package]]
name = "tower-layer"
version = "0.3.0"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a35d656f2638b288b33495d1053ea74c40dc05ec0b92084dd71ca5566c4ed1dc"
checksum = "343bc9466d3fe6b0f960ef45960509f84480bf4fd96f92901afe7ff3df9d3a62"
[[package]]
name = "tower-limit"
@ -1453,7 +1459,7 @@ checksum = "9f47026cdc4080c07e49b37087de021820269d996f581aac150ef9e5583eefe3"
dependencies = [
"cfg-if 1.0.0",
"log",
"pin-project-lite 0.2.0",
"pin-project-lite 0.2.1",
"tracing-attributes",
"tracing-core",
]

@ -1,6 +1,6 @@
[package]
name = "dockerfile-plus"
version = "0.1.0"
version = "0.2.0"
authors = ["Ximo Guanter <ximo.guanter@gmail.com>"]
edition = "2018"

@ -1,21 +0,0 @@
# Examples
In this folder you can find some example Dockerfile syntax extensions.
## Noop
This is the most basic example. It just adds a new instruction `NOOP` which does nothing (i.e. it is ignored). With this extension, the following Dockerfile would success fully compile:
```dockerfile
# syntax = edrevo/noop-dockerfile
NOOP
FROM alpine
NOOP
WORKDIR /
RUN echo "Hello World"
```

@ -41,7 +41,7 @@ where
Ok(response)
}
async fn solve<'a>(client: &mut LlbBridgeClient<Channel>, graph: Terminal<'a>) -> Result<String> {
async fn solve(client: &mut LlbBridgeClient<Channel>, graph: Terminal<'_>) -> Result<String> {
let solve_request = SolveRequest {
definition: Some(graph.into_definition()),
exporter_attr: vec![],
@ -62,13 +62,7 @@ async fn solve<'a>(client: &mut LlbBridgeClient<Channel>, graph: Terminal<'a>) -
}
}
async fn run() -> Result<()> {
let channel = {
Endpoint::from_static("http://[::]:50051")
.connect_with_connector(service_fn(stdio::stdio_connector))
.await?
};
let mut client = LlbBridgeClient::new(channel);
async fn run(mut client: LlbBridgeClient<Channel>) -> Result<ReturnRequest> {
let o: DockerfileOptions = options::from_env(std::env::vars())?;
let dockerfile_path = o
.filename
@ -80,24 +74,28 @@ async fn run() -> Result<()> {
let dockerfile_contents =
String::from_utf8(read_file(&mut client, &dockerfile_layer, dockerfile_path, None).await?)?;
let dockerfile_frontend = DockerfileFrontend::new(client.clone(), dockerfile_path);
let result = dockerfile_trap(client.clone(), dockerfile_frontend, dockerfile_contents)
.await
.unwrap_or_else(|e| ReturnRequest {
result: None,
error: Some(Status {
code: 128,
message: e.to_string(),
details: vec![],
}),
});
client.r#return(result).await?;
Ok(())
dockerfile_trap(client.clone(), dockerfile_frontend, dockerfile_contents).await
}
#[tokio::main]
async fn main() {
env_logger::init();
run().await.unwrap();
let channel = {
Endpoint::from_static("http://[::]:50051")
.connect_with_connector(service_fn(stdio::stdio_connector))
.await
.unwrap()
};
let mut client = LlbBridgeClient::new(channel);
let result = run(client.clone()).await.unwrap_or_else(|e| ReturnRequest {
result: None,
error: Some(Status {
code: 128,
message: e.to_string(),
details: vec![],
}),
});
client.r#return(result).await.unwrap();
}
#[derive(Debug, Deserialize)]

@ -1,40 +0,0 @@
use std::collections::HashMap;
use buildkit_proto::moby::buildkit::v1::frontend::CacheOptionsEntry as CacheOptionsEntryProto;
use serde::Deserialize;
#[derive(Clone, Debug, Deserialize, PartialEq)]
pub struct CacheOptionsEntry {
#[serde(rename = "Type")]
pub cache_type: CacheType,
#[serde(rename = "Attrs")]
pub attrs: HashMap<String, String>,
}
#[derive(Clone, Debug, Deserialize, PartialEq)]
#[serde(rename_all = "lowercase")]
pub enum CacheType {
Local,
Registry,
Inline,
}
impl Into<CacheOptionsEntryProto> for CacheOptionsEntry {
fn into(self) -> CacheOptionsEntryProto {
CacheOptionsEntryProto {
r#type: self.cache_type.into(),
attrs: self.attrs,
}
}
}
impl Into<String> for CacheType {
fn into(self) -> String {
match self {
CacheType::Local => "local".into(),
CacheType::Registry => "registry".into(),
CacheType::Inline => "inline".into(),
}
}
}

@ -1,9 +0,0 @@
use serde::Deserialize;
#[derive(Debug, PartialEq, Deserialize)]
#[serde(untagged)]
enum OptionValue {
Flag(bool),
Single(String),
Multiple(Vec<String>),
}

@ -1,123 +0,0 @@
mod default;
mod deserializer;
pub use self::deserializer::from_env;
pub mod common;
#[cfg(test)]
mod tests {
use std::path::PathBuf;
use super::*;
use serde::Deserialize;
#[derive(Debug, Deserialize, PartialEq)]
#[serde(untagged)]
#[serde(field_identifier, rename_all = "lowercase")]
enum Debug {
All,
LLB,
Frontend,
}
#[derive(Debug, Deserialize, PartialEq)]
#[serde(rename_all = "kebab-case")]
struct CustomOptions {
filename: Option<PathBuf>,
verbosity: u32,
#[serde(default)]
debug: Vec<Debug>,
#[serde(default)]
cache_imports: Vec<common::CacheOptionsEntry>,
}
#[test]
fn custom_options() {
let env = vec![
(
"BUILDKIT_FRONTEND_OPT_0".into(),
"filename=/path/to/Dockerfile".into(),
),
(
"BUILDKIT_FRONTEND_OPT_1".into(),
"debug=llb,frontend".into(),
),
(
"BUILDKIT_FRONTEND_OPT_2".into(),
r#"cache-imports=[{"Type":"local","Attrs":{"src":"cache"}}]"#.into(),
),
(
"BUILDKIT_FRONTEND_OPT_3".into(),
"verbosity=12345678".into(),
),
];
assert_eq!(
from_env::<CustomOptions, _>(env.into_iter()).unwrap(),
CustomOptions {
filename: Some(PathBuf::from("/path/to/Dockerfile")),
verbosity: 12_345_678,
debug: vec![Debug::LLB, Debug::Frontend],
cache_imports: vec![common::CacheOptionsEntry {
cache_type: common::CacheType::Local,
attrs: vec![("src".into(), "cache".into())].into_iter().collect()
}],
}
);
}
#[test]
fn env_variable_names() {
let env = vec![
(
"ANOTHER_OPT_0".into(),
"filename=/path/to/Dockerfile".into(),
),
(
"ANOTHER_OPT_2".into(),
r#"cache-imports=[{"Type":"local","Attrs":{"src":"cache"}}]"#.into(),
),
("BUILDKIT_FRONTEND_OPT_1".into(), "debug=all".into()),
(
"BUILDKIT_FRONTEND_OPT_2".into(),
"verbosity=12345678".into(),
),
];
assert_eq!(
from_env::<CustomOptions, _>(env.into_iter()).unwrap(),
CustomOptions {
filename: None,
verbosity: 12_345_678,
debug: vec![Debug::All],
cache_imports: vec![],
}
);
}
#[test]
fn empty_cache() {
let env = vec![
("BUILDKIT_FRONTEND_OPT_1".into(), "cache-imports=".into()),
(
"BUILDKIT_FRONTEND_OPT_2".into(),
"verbosity=12345678".into(),
),
];
assert_eq!(
from_env::<CustomOptions, _>(env.into_iter()).unwrap(),
CustomOptions {
filename: None,
verbosity: 12_345_678,
debug: vec![],
cache_imports: vec![],
}
);
}
}
Loading…
Cancel
Save