feat(sdk): move to &str instead of String and introduce builder.

This will make the api much easier to use, as we can now rely on ""
instead of "".into() for normal string values.

Introduced builder as well, which makes it much easier to use *Opts, as
it can handle the building of that, and get the benefits from String ->
&str, as that is currently not allowed for optional values
This commit is contained in:
2023-02-19 17:21:40 +01:00
committed by Kasper Juul Hermansen
parent 6e2292cf11
commit 94336d0637
18 changed files with 505 additions and 304 deletions

View File

@@ -4,37 +4,30 @@ fn main() -> eyre::Result<()> {
let client = dagger_sdk::connect()?;
let host_source_dir = client.host().directory(
"examples/build-the-application/app".into(),
"examples/build-the-application/app",
Some(HostDirectoryOpts {
exclude: Some(vec!["node_modules".into(), "ci/".into()]),
include: None,
marker: std::marker::PhantomData,
}),
);
let source = client
.container(None)
.from("node:16".into())
.with_mounted_directory("/src".into(), host_source_dir.id()?);
.from("node:16")
.with_mounted_directory("/src", host_source_dir.id()?);
let runner = source
.with_workdir("/src".into())
.with_exec(vec!["npm".into(), "install".into()], None);
.with_workdir("/src")
.with_exec(vec!["npm", "install"], None);
let test = runner.with_exec(
vec![
"npm".into(),
"test".into(),
"--".into(),
"--watchAll=false".into(),
],
None,
);
let test = runner.with_exec(vec!["npm", "test", "--", "--watchAll=false"], None);
let build_dir = test
.with_exec(vec!["npm".into(), "run".into(), "build".into()], None)
.directory("./build".into());
.with_exec(vec!["npm", "run", "build"], None)
.directory("./build");
let _ = build_dir.export("./build".into());
let _ = build_dir.export("./build");
let entries = build_dir.entries(None);

View File

@@ -1,49 +1,41 @@
use dagger_sdk::HostDirectoryOpts;
use rand::Rng;
fn main() -> eyre::Result<()> {
let client = dagger_sdk::connect()?;
let host_source_dir = client.host().directory(
"./examples/caching/app".into(),
Some(HostDirectoryOpts {
exclude: Some(vec!["node_modules".into(), "ci/".into()]),
include: None,
}),
"./examples/caching/app",
Some(
dagger_sdk::HostDirectoryOptsBuilder::default()
.exclude(vec!["node_modules", "ci/"])
.build()?,
),
);
let node_cache = client.cache_volume("node".into()).id()?;
let node_cache = client.cache_volume("node").id()?;
let source = client
.container(None)
.from("node:16".into())
.with_mounted_directory("/src".into(), host_source_dir.id()?)
.with_mounted_cache("/src/node_modules".into(), node_cache, None);
.from("node:16")
.with_mounted_directory("/src", host_source_dir.id()?)
.with_mounted_cache("/src/node_modules", node_cache, None);
let runner = source
.with_workdir("/src".into())
.with_exec(vec!["npm".into(), "install".into()], None);
.with_workdir("/src")
.with_exec(vec!["npm", "install"], None);
let test = runner.with_exec(
vec![
"npm".into(),
"test".into(),
"--".into(),
"--watchAll=false".into(),
],
None,
);
let test = runner.with_exec(vec!["npm", "test", "--", "--watchAll=false"], None);
let build_dir = test
.with_exec(vec!["npm".into(), "run".into(), "build".into()], None)
.directory("./build".into());
.with_exec(vec!["npm", "run", "build"], None)
.directory("./build");
let mut rng = rand::thread_rng();
let ref_ = client
.container(None)
.from("nginx".into())
.with_directory("/usr/share/nginx/html".into(), build_dir.id()?, None)
.from("nginx")
.with_directory("/usr/share/nginx/html", build_dir.id()?, None)
.publish(
format!("ttl.sh/hello-dagger-rs-{}:1h", rng.gen::<u64>()),
None,

View File

@@ -7,7 +7,7 @@ fn main() -> eyre::Result<()> {
let context_dir = client
.host()
.directory("./examples/existing-dockerfile/app".into(), None);
.directory("./examples/existing-dockerfile/app", None);
let ref_ = client
.container(None)

View File

@@ -3,8 +3,8 @@ fn main() -> eyre::Result<()> {
let version = client
.container(None)
.from("golang:1.19".into())
.with_exec(vec!["go".into(), "version".into()], None)
.from("golang:1.19")
.with_exec(vec!["go", "version".into()], None)
.stdout()?;
println!("Hello from Dagger and {}", version.trim());

View File

@@ -5,42 +5,35 @@ fn main() -> eyre::Result<()> {
let client = dagger_sdk::connect()?;
let host_source_dir = client.host().directory(
"examples/publish-the-application/app".into(),
"examples/publish-the-application/app",
Some(HostDirectoryOpts {
exclude: Some(vec!["node_modules".into(), "ci/".into()]),
exclude: Some(vec!["node_modules", "ci/"]),
include: None,
marker: std::marker::PhantomData,
}),
);
let source = client
.container(None)
.from("node:16".into())
.with_mounted_directory("/src".into(), host_source_dir.id()?);
.from("node:16")
.with_mounted_directory("/src", host_source_dir.id()?);
let runner = source
.with_workdir("/src".into())
.with_exec(vec!["npm".into(), "install".into()], None);
.with_workdir("/src")
.with_exec(vec!["npm", "install"], None);
let test = runner.with_exec(
vec![
"npm".into(),
"test".into(),
"--".into(),
"--watchAll=false".into(),
],
None,
);
let test = runner.with_exec(vec!["npm", "test", "--", "--watchAll=false"], None);
let build_dir = test
.with_exec(vec!["npm".into(), "run".into(), "build".into()], None)
.directory("./build".into());
.with_exec(vec!["npm", "run", "build"], None)
.directory("./build");
let mut rng = rand::thread_rng();
let ref_ = client
.container(None)
.from("nginx".into())
.with_directory("/usr/share/nginx/html".into(), build_dir.id()?, None)
.from("nginx")
.with_directory("/usr/share/nginx/html", build_dir.id()?, None)
.publish(
format!("ttl.sh/hello-dagger-rs-{}:1h", rng.gen::<u64>()),
None,

View File

@@ -6,45 +6,38 @@ fn main() -> eyre::Result<()> {
let output = "examples/publish-the-application/app/build";
let host_source_dir = client.host().directory(
"examples/publish-the-application/app".into(),
"examples/publish-the-application/app",
Some(HostDirectoryOpts {
exclude: Some(vec!["node_modules".into(), "ci/".into()]),
exclude: Some(vec!["node_modules", "ci/"]),
include: None,
marker: std::marker::PhantomData,
}),
);
let source = client
.container(None)
.from("node:16".into())
.with_mounted_directory("/src".into(), host_source_dir.id()?);
.from("node:16")
.with_mounted_directory("/src", host_source_dir.id()?);
let runner = source
.with_workdir("/src".into())
.with_exec(vec!["npm".into(), "install".into()], None);
.with_workdir("/src")
.with_exec(vec!["npm", "install"], None);
let test = runner.with_exec(
vec![
"npm".into(),
"test".into(),
"--".into(),
"--watchAll=false".into(),
],
None,
);
let test = runner.with_exec(vec!["npm", "test", "--", "--watchAll=false"], None);
let _ = test
.with_exec(vec!["npm".into(), "run".into(), "build".into()], None)
.directory("./build".into())
.export(output.into());
.with_exec(vec!["npm", "run", "build"], None)
.directory("./build")
.export(output);
let mut rng = rand::thread_rng();
let ref_ = client
.container(None)
.from("nginx".into())
.from("nginx")
.with_directory(
"/usr/share/nginx/html".into(),
client.host().directory(output.into(), None).id()?,
"/usr/share/nginx/html",
client.host().directory(output, None).id()?,
None,
)
.publish(

View File

@@ -4,32 +4,25 @@ fn main() -> eyre::Result<()> {
let client = dagger_sdk::connect()?;
let host_source_dir = client.host().directory(
"examples/test-the-application/app".into(),
"examples/test-the-application/app",
Some(HostDirectoryOpts {
exclude: Some(vec!["node_modules".into(), "ci/".into()]),
exclude: Some(vec!["node_modules", "ci/"]),
include: None,
marker: std::marker::PhantomData,
}),
);
let source = client
.container(None)
.from("node:16".into())
.with_mounted_directory("/src".into(), host_source_dir.id()?);
.from("node:16")
.with_mounted_directory("/src", host_source_dir.id()?);
let runner = source
.with_workdir("/src".into())
.with_exec(vec!["npm".into(), "install".into()], None);
.with_workdir("/src")
.with_exec(vec!["npm", "install"], None);
let out = runner
.with_exec(
vec![
"npm".into(),
"test".into(),
"--".into(),
"--watchAll=false".into(),
],
None,
)
.with_exec(vec!["npm", "test", "--", "--watchAll=false"], None)
.stderr()?;
println!("{}", out);