2023-02-05 23:44:06 +01:00
|
|
|
use crate::client::graphql_client;
|
|
|
|
use crate::querybuilder::Selection;
|
2023-02-17 12:33:16 +01:00
|
|
|
use dagger_core::connect_params::ConnectParams;
|
2023-02-19 17:21:40 +01:00
|
|
|
use derive_builder::Builder;
|
2023-02-17 12:33:16 +01:00
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
use std::process::Child;
|
|
|
|
use std::sync::Arc;
|
2023-02-05 23:44:06 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
|
2023-02-17 12:33:16 +01:00
|
|
|
pub struct CacheId(String);
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
|
2023-02-17 12:33:16 +01:00
|
|
|
pub struct ContainerId(String);
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
|
2023-02-17 12:33:16 +01:00
|
|
|
pub struct DirectoryId(String);
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
|
2023-02-17 12:33:16 +01:00
|
|
|
pub struct FileId(String);
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
|
2023-02-17 12:33:16 +01:00
|
|
|
pub struct Platform(String);
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
|
2023-02-17 12:33:16 +01:00
|
|
|
pub struct SecretId(String);
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
|
2023-02-17 12:33:16 +01:00
|
|
|
pub struct SocketId(String);
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
|
2023-01-30 20:44:48 +01:00
|
|
|
pub struct BuildArg {
|
2023-02-19 17:43:12 +01:00
|
|
|
pub name: String,
|
2023-02-19 17:49:22 +01:00
|
|
|
pub value: String,
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
|
|
|
pub struct CacheVolume {
|
|
|
|
pub proc: Arc<Child>,
|
|
|
|
pub selection: Selection,
|
|
|
|
pub conn: ConnectParams,
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-01 16:34:59 +01:00
|
|
|
|
|
|
|
impl CacheVolume {
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn id(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<CacheId> {
|
|
|
|
let mut query = self.selection.select("id");
|
2023-02-17 12:33:16 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-02-01 15:32:38 +01:00
|
|
|
}
|
2023-02-01 16:34:59 +01:00
|
|
|
}
|
2023-02-05 23:44:06 +01:00
|
|
|
pub struct Container {
|
|
|
|
pub proc: Arc<Child>,
|
|
|
|
pub selection: Selection,
|
2023-02-17 12:33:16 +01:00
|
|
|
pub conn: ConnectParams,
|
|
|
|
}
|
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Builder, Debug, PartialEq)]
|
|
|
|
pub struct ContainerBuildOpts<'a> {
|
2023-02-19 21:37:54 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
|
|
|
pub dockerfile: Option<&'a str>,
|
|
|
|
#[builder(setter(into, strip_option))]
|
2023-02-17 12:33:16 +01:00
|
|
|
pub build_args: Option<Vec<BuildArg>>,
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
|
|
|
pub target: Option<&'a str>,
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Builder, Debug, PartialEq)]
|
|
|
|
pub struct ContainerExecOpts<'a> {
|
2023-02-19 21:37:54 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
|
|
|
pub args: Option<Vec<&'a str>>,
|
|
|
|
#[builder(setter(into, strip_option))]
|
|
|
|
pub stdin: Option<&'a str>,
|
|
|
|
#[builder(setter(into, strip_option))]
|
|
|
|
pub redirect_stdout: Option<&'a str>,
|
|
|
|
#[builder(setter(into, strip_option))]
|
|
|
|
pub redirect_stderr: Option<&'a str>,
|
|
|
|
#[builder(setter(into, strip_option))]
|
2023-02-17 12:33:16 +01:00
|
|
|
pub experimental_privileged_nesting: Option<bool>,
|
|
|
|
}
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Builder, Debug, PartialEq)]
|
2023-02-19 17:29:59 +01:00
|
|
|
pub struct ContainerExportOpts {
|
2023-02-19 21:37:54 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
2023-02-17 12:33:16 +01:00
|
|
|
pub platform_variants: Option<Vec<ContainerId>>,
|
|
|
|
}
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Builder, Debug, PartialEq)]
|
|
|
|
pub struct ContainerPipelineOpts<'a> {
|
2023-02-19 21:37:54 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
|
|
|
pub description: Option<&'a str>,
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Builder, Debug, PartialEq)]
|
2023-02-19 17:29:59 +01:00
|
|
|
pub struct ContainerPublishOpts {
|
2023-02-19 21:37:54 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
2023-02-17 12:33:16 +01:00
|
|
|
pub platform_variants: Option<Vec<ContainerId>>,
|
|
|
|
}
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Builder, Debug, PartialEq)]
|
|
|
|
pub struct ContainerWithDefaultArgsOpts<'a> {
|
2023-02-19 21:37:54 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
|
|
|
pub args: Option<Vec<&'a str>>,
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Builder, Debug, PartialEq)]
|
|
|
|
pub struct ContainerWithDirectoryOpts<'a> {
|
2023-02-19 21:37:54 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
|
|
|
pub exclude: Option<Vec<&'a str>>,
|
|
|
|
#[builder(setter(into, strip_option))]
|
|
|
|
pub include: Option<Vec<&'a str>>,
|
2023-02-19 12:19:43 +01:00
|
|
|
}
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Builder, Debug, PartialEq)]
|
|
|
|
pub struct ContainerWithExecOpts<'a> {
|
2023-02-19 21:37:54 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
|
|
|
pub stdin: Option<&'a str>,
|
|
|
|
#[builder(setter(into, strip_option))]
|
|
|
|
pub redirect_stdout: Option<&'a str>,
|
|
|
|
#[builder(setter(into, strip_option))]
|
|
|
|
pub redirect_stderr: Option<&'a str>,
|
|
|
|
#[builder(setter(into, strip_option))]
|
2023-02-17 12:33:16 +01:00
|
|
|
pub experimental_privileged_nesting: Option<bool>,
|
|
|
|
}
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Builder, Debug, PartialEq)]
|
2023-02-19 17:29:59 +01:00
|
|
|
pub struct ContainerWithFileOpts {
|
2023-02-19 21:37:54 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
2023-02-17 12:33:16 +01:00
|
|
|
pub permissions: Option<isize>,
|
|
|
|
}
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Builder, Debug, PartialEq)]
|
2023-02-19 17:29:59 +01:00
|
|
|
pub struct ContainerWithMountedCacheOpts {
|
2023-02-19 21:37:54 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
2023-02-17 12:33:16 +01:00
|
|
|
pub source: Option<DirectoryId>,
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
2023-02-19 12:16:48 +01:00
|
|
|
pub sharing: Option<CacheSharingMode>,
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Builder, Debug, PartialEq)]
|
|
|
|
pub struct ContainerWithNewFileOpts<'a> {
|
2023-02-19 21:37:54 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
|
|
|
pub contents: Option<&'a str>,
|
|
|
|
#[builder(setter(into, strip_option))]
|
2023-02-17 12:33:16 +01:00
|
|
|
pub permissions: Option<isize>,
|
2023-02-05 23:44:06 +01:00
|
|
|
}
|
2023-02-01 16:34:59 +01:00
|
|
|
|
|
|
|
impl Container {
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn build(
|
|
|
|
&self,
|
|
|
|
context: DirectoryId,
|
|
|
|
) -> Container {
|
2023-02-19 17:43:12 +01:00
|
|
|
let mut query = self.selection.select("build");
|
|
|
|
|
|
|
|
query = query.arg("context", context);
|
|
|
|
|
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-19 17:43:12 +01:00
|
|
|
}
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn build_opts<'a>(
|
|
|
|
&self,
|
|
|
|
context: DirectoryId,
|
|
|
|
opts: ContainerBuildOpts<'a>
|
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("build");
|
|
|
|
|
2023-02-19 15:00:00 +01:00
|
|
|
query = query.arg("context", context);
|
2023-02-19 17:49:22 +01:00
|
|
|
if let Some(dockerfile) = opts.dockerfile {
|
|
|
|
query = query.arg("dockerfile", dockerfile);
|
|
|
|
}
|
|
|
|
if let Some(build_args) = opts.build_args {
|
|
|
|
query = query.arg("buildArgs", build_args);
|
|
|
|
}
|
|
|
|
if let Some(target) = opts.target {
|
|
|
|
query = query.arg("target", target);
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-01-30 20:53:53 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 15:32:38 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn default_args(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<Vec<String>> {
|
|
|
|
let mut query = self.selection.select("defaultArgs");
|
2023-02-01 15:32:38 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-02-01 15:32:38 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn directory(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
) -> Directory {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("directory");
|
2023-02-01 15:32:38 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("path", path.into());
|
2023-02-17 12:33:16 +01:00
|
|
|
|
|
|
|
return Directory {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-01-30 20:53:53 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn entrypoint(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<Vec<String>> {
|
|
|
|
let mut query = self.selection.select("entrypoint");
|
2023-01-30 20:53:53 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-01-30 20:53:53 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn env_variable(
|
|
|
|
&self,
|
|
|
|
name: impl Into<String>,
|
|
|
|
) -> eyre::Result<String> {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("envVariable");
|
2023-01-30 20:53:53 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("name", name.into());
|
2023-02-17 12:33:16 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn env_variables(
|
|
|
|
&self,
|
|
|
|
) -> Vec<EnvVariable> {
|
|
|
|
let mut query = self.selection.select("envVariables");
|
2023-02-05 23:44:06 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return vec![EnvVariable {
|
2023-02-05 23:44:06 +01:00
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
2023-02-17 12:33:16 +01:00
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}]
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn exec(
|
|
|
|
&self,
|
|
|
|
) -> Container {
|
|
|
|
let mut query = self.selection.select("exec");
|
2023-02-19 17:43:12 +01:00
|
|
|
|
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-19 17:43:12 +01:00
|
|
|
}
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn exec_opts<'a>(
|
|
|
|
&self,
|
|
|
|
opts: ContainerExecOpts<'a>
|
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("exec");
|
|
|
|
|
2023-02-19 17:49:22 +01:00
|
|
|
if let Some(args) = opts.args {
|
|
|
|
query = query.arg("args", args);
|
|
|
|
}
|
|
|
|
if let Some(stdin) = opts.stdin {
|
|
|
|
query = query.arg("stdin", stdin);
|
|
|
|
}
|
|
|
|
if let Some(redirect_stdout) = opts.redirect_stdout {
|
|
|
|
query = query.arg("redirectStdout", redirect_stdout);
|
|
|
|
}
|
|
|
|
if let Some(redirect_stderr) = opts.redirect_stderr {
|
|
|
|
query = query.arg("redirectStderr", redirect_stderr);
|
|
|
|
}
|
|
|
|
if let Some(experimental_privileged_nesting) = opts.experimental_privileged_nesting {
|
2023-02-19 21:37:54 +01:00
|
|
|
query = query.arg("experimentalPrivilegedNesting", experimental_privileged_nesting);
|
2023-02-05 23:44:06 +01:00
|
|
|
}
|
2023-01-30 20:53:53 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn exit_code(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<isize> {
|
|
|
|
let mut query = self.selection.select("exitCode");
|
2023-02-01 15:06:28 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-02-01 15:27:44 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn export(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
) -> eyre::Result<bool> {
|
2023-02-19 17:43:12 +01:00
|
|
|
let mut query = self.selection.select("export");
|
|
|
|
|
|
|
|
query = query.arg("path", path.into());
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-02-19 17:43:12 +01:00
|
|
|
}
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn export_opts(
|
2023-02-19 17:21:40 +01:00
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
2023-02-19 21:37:54 +01:00
|
|
|
opts: ContainerExportOpts
|
2023-02-19 17:21:40 +01:00
|
|
|
) -> eyre::Result<bool> {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("export");
|
2023-02-01 15:27:44 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("path", path.into());
|
2023-02-19 17:49:22 +01:00
|
|
|
if let Some(platform_variants) = opts.platform_variants {
|
|
|
|
query = query.arg("platformVariants", platform_variants);
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-02-01 15:27:44 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn file(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
) -> File {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("file");
|
2023-02-01 15:27:44 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("path", path.into());
|
2023-02-05 23:44:06 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return File {
|
2023-02-05 23:44:06 +01:00
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
2023-02-17 12:33:16 +01:00
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 15:27:44 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn from(
|
|
|
|
&self,
|
|
|
|
address: impl Into<String>,
|
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("from");
|
2023-02-01 15:06:28 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("address", address.into());
|
2023-02-01 15:06:28 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn fs(
|
|
|
|
&self,
|
|
|
|
) -> Directory {
|
|
|
|
let mut query = self.selection.select("fs");
|
2023-01-30 20:53:53 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Directory {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 15:32:38 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn id(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<ContainerId> {
|
|
|
|
let mut query = self.selection.select("id");
|
2023-01-30 20:53:53 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-01-30 20:53:53 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn label(
|
|
|
|
&self,
|
|
|
|
name: impl Into<String>,
|
|
|
|
) -> eyre::Result<String> {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("label");
|
2023-01-30 20:53:53 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("name", name.into());
|
2023-02-17 12:33:16 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-01-30 20:53:53 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn labels(
|
|
|
|
&self,
|
|
|
|
) -> Vec<Label> {
|
|
|
|
let mut query = self.selection.select("labels");
|
2023-02-01 15:06:28 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return vec![Label {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}]
|
2023-01-30 20:53:53 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn mounts(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<Vec<String>> {
|
|
|
|
let mut query = self.selection.select("mounts");
|
2023-01-30 20:53:53 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-02-01 15:27:44 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn pipeline(
|
|
|
|
&self,
|
|
|
|
name: impl Into<String>,
|
|
|
|
) -> Container {
|
2023-02-19 17:43:12 +01:00
|
|
|
let mut query = self.selection.select("pipeline");
|
|
|
|
|
|
|
|
query = query.arg("name", name.into());
|
|
|
|
|
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-19 17:43:12 +01:00
|
|
|
}
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn pipeline_opts<'a>(
|
|
|
|
&self,
|
|
|
|
name: impl Into<String>,
|
|
|
|
opts: ContainerPipelineOpts<'a>
|
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("pipeline");
|
2023-02-01 15:06:28 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("name", name.into());
|
2023-02-19 17:49:22 +01:00
|
|
|
if let Some(description) = opts.description {
|
|
|
|
query = query.arg("description", description);
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 15:27:44 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn platform(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<Platform> {
|
|
|
|
let mut query = self.selection.select("platform");
|
2023-02-01 15:06:28 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-01-30 20:53:53 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn publish(
|
|
|
|
&self,
|
|
|
|
address: impl Into<String>,
|
|
|
|
) -> eyre::Result<String> {
|
2023-02-19 17:43:12 +01:00
|
|
|
let mut query = self.selection.select("publish");
|
|
|
|
|
|
|
|
query = query.arg("address", address.into());
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-02-19 17:43:12 +01:00
|
|
|
}
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn publish_opts(
|
2023-02-19 15:18:25 +01:00
|
|
|
&self,
|
2023-02-19 17:21:40 +01:00
|
|
|
address: impl Into<String>,
|
2023-02-19 21:37:54 +01:00
|
|
|
opts: ContainerPublishOpts
|
2023-02-19 15:18:25 +01:00
|
|
|
) -> eyre::Result<String> {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("publish");
|
2023-01-30 20:53:53 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("address", address.into());
|
2023-02-19 17:49:22 +01:00
|
|
|
if let Some(platform_variants) = opts.platform_variants {
|
|
|
|
query = query.arg("platformVariants", platform_variants);
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn rootfs(
|
|
|
|
&self,
|
|
|
|
) -> Directory {
|
|
|
|
let mut query = self.selection.select("rootfs");
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Directory {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn stderr(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<String> {
|
|
|
|
let mut query = self.selection.select("stderr");
|
2023-02-05 23:44:06 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-02-01 15:06:28 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn stdout(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<String> {
|
|
|
|
let mut query = self.selection.select("stdout");
|
2023-01-30 20:53:53 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-02-01 15:06:28 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn user(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<String> {
|
|
|
|
let mut query = self.selection.select("user");
|
2023-01-30 20:53:53 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-02-01 15:27:44 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_default_args(
|
|
|
|
&self,
|
|
|
|
) -> Container {
|
|
|
|
let mut query = self.selection.select("withDefaultArgs");
|
2023-02-19 17:43:12 +01:00
|
|
|
|
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-19 17:43:12 +01:00
|
|
|
}
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_default_args_opts<'a>(
|
|
|
|
&self,
|
|
|
|
opts: ContainerWithDefaultArgsOpts<'a>
|
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withDefaultArgs");
|
2023-02-01 15:27:44 +01:00
|
|
|
|
2023-02-19 17:49:22 +01:00
|
|
|
if let Some(args) = opts.args {
|
|
|
|
query = query.arg("args", args);
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_directory(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
directory: DirectoryId,
|
|
|
|
) -> Container {
|
2023-02-19 17:43:12 +01:00
|
|
|
let mut query = self.selection.select("withDirectory");
|
|
|
|
|
|
|
|
query = query.arg("path", path.into());
|
|
|
|
query = query.arg("directory", directory);
|
|
|
|
|
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-19 17:43:12 +01:00
|
|
|
}
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_directory_opts<'a>(
|
2023-02-01 16:34:59 +01:00
|
|
|
&self,
|
2023-02-19 17:21:40 +01:00
|
|
|
path: impl Into<String>,
|
2023-02-17 12:33:16 +01:00
|
|
|
directory: DirectoryId,
|
2023-02-19 21:37:54 +01:00
|
|
|
opts: ContainerWithDirectoryOpts<'a>
|
2023-02-01 16:34:59 +01:00
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withDirectory");
|
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("path", path.into());
|
2023-02-19 15:00:00 +01:00
|
|
|
query = query.arg("directory", directory);
|
2023-02-19 17:49:22 +01:00
|
|
|
if let Some(exclude) = opts.exclude {
|
|
|
|
query = query.arg("exclude", exclude);
|
|
|
|
}
|
|
|
|
if let Some(include) = opts.include {
|
|
|
|
query = query.arg("include", include);
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-01-30 20:53:53 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-01-30 20:53:53 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_entrypoint(
|
|
|
|
&self,
|
|
|
|
args: Vec<impl Into<String>>,
|
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withEntrypoint");
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query = query.arg("args", args.into_iter().map(|i| i.into()).collect::<Vec<String>>());
|
2023-01-30 20:53:53 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-01-30 20:53:53 +01:00
|
|
|
}
|
2023-02-19 17:21:40 +01:00
|
|
|
pub fn with_env_variable(
|
|
|
|
&self,
|
|
|
|
name: impl Into<String>,
|
|
|
|
value: impl Into<String>,
|
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withEnvVariable");
|
2023-01-30 20:53:53 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("name", name.into());
|
|
|
|
query = query.arg("value", value.into());
|
2023-02-17 12:33:16 +01:00
|
|
|
|
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 15:06:28 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_exec(
|
|
|
|
&self,
|
|
|
|
args: Vec<impl Into<String>>,
|
|
|
|
) -> Container {
|
2023-02-19 17:43:12 +01:00
|
|
|
let mut query = self.selection.select("withExec");
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query = query.arg("args", args.into_iter().map(|i| i.into()).collect::<Vec<String>>());
|
2023-02-19 17:43:12 +01:00
|
|
|
|
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-19 17:43:12 +01:00
|
|
|
}
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_exec_opts<'a>(
|
2023-02-19 17:21:40 +01:00
|
|
|
&self,
|
|
|
|
args: Vec<impl Into<String>>,
|
2023-02-19 21:37:54 +01:00
|
|
|
opts: ContainerWithExecOpts<'a>
|
2023-02-19 17:21:40 +01:00
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withExec");
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query = query.arg("args", args.into_iter().map(|i| i.into()).collect::<Vec<String>>());
|
2023-02-19 17:49:22 +01:00
|
|
|
if let Some(stdin) = opts.stdin {
|
|
|
|
query = query.arg("stdin", stdin);
|
|
|
|
}
|
|
|
|
if let Some(redirect_stdout) = opts.redirect_stdout {
|
|
|
|
query = query.arg("redirectStdout", redirect_stdout);
|
|
|
|
}
|
|
|
|
if let Some(redirect_stderr) = opts.redirect_stderr {
|
|
|
|
query = query.arg("redirectStderr", redirect_stderr);
|
|
|
|
}
|
|
|
|
if let Some(experimental_privileged_nesting) = opts.experimental_privileged_nesting {
|
2023-02-19 21:37:54 +01:00
|
|
|
query = query.arg("experimentalPrivilegedNesting", experimental_privileged_nesting);
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_fs(
|
|
|
|
&self,
|
|
|
|
id: DirectoryId,
|
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withFS");
|
|
|
|
|
2023-02-19 15:00:00 +01:00
|
|
|
query = query.arg("id", id);
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_file(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
source: FileId,
|
|
|
|
) -> Container {
|
2023-02-19 17:43:12 +01:00
|
|
|
let mut query = self.selection.select("withFile");
|
|
|
|
|
|
|
|
query = query.arg("path", path.into());
|
|
|
|
query = query.arg("source", source);
|
|
|
|
|
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-19 17:43:12 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn with_file_opts(
|
2023-02-05 23:44:06 +01:00
|
|
|
&self,
|
2023-02-19 17:21:40 +01:00
|
|
|
path: impl Into<String>,
|
2023-02-17 12:33:16 +01:00
|
|
|
source: FileId,
|
2023-02-19 21:37:54 +01:00
|
|
|
opts: ContainerWithFileOpts
|
2023-02-05 23:44:06 +01:00
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withFile");
|
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("path", path.into());
|
2023-02-19 15:00:00 +01:00
|
|
|
query = query.arg("source", source);
|
2023-02-19 17:49:22 +01:00
|
|
|
if let Some(permissions) = opts.permissions {
|
|
|
|
query = query.arg("permissions", permissions);
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_label(
|
|
|
|
&self,
|
|
|
|
name: impl Into<String>,
|
|
|
|
value: impl Into<String>,
|
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withLabel");
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("name", name.into());
|
|
|
|
query = query.arg("value", value.into());
|
2023-02-17 12:33:16 +01:00
|
|
|
|
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_mounted_cache(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
cache: CacheId,
|
|
|
|
) -> Container {
|
2023-02-19 17:43:12 +01:00
|
|
|
let mut query = self.selection.select("withMountedCache");
|
|
|
|
|
|
|
|
query = query.arg("path", path.into());
|
|
|
|
query = query.arg("cache", cache);
|
|
|
|
|
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-19 17:43:12 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn with_mounted_cache_opts(
|
2023-02-01 16:34:59 +01:00
|
|
|
&self,
|
2023-02-19 17:21:40 +01:00
|
|
|
path: impl Into<String>,
|
2023-02-17 12:33:16 +01:00
|
|
|
cache: CacheId,
|
2023-02-19 21:37:54 +01:00
|
|
|
opts: ContainerWithMountedCacheOpts
|
2023-02-01 16:34:59 +01:00
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withMountedCache");
|
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("path", path.into());
|
2023-02-19 15:00:00 +01:00
|
|
|
query = query.arg("cache", cache);
|
2023-02-19 17:49:22 +01:00
|
|
|
if let Some(source) = opts.source {
|
|
|
|
query = query.arg("source", source);
|
|
|
|
}
|
|
|
|
if let Some(sharing) = opts.sharing {
|
|
|
|
query = query.arg("sharing", sharing);
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-19 17:21:40 +01:00
|
|
|
pub fn with_mounted_directory(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
source: DirectoryId,
|
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withMountedDirectory");
|
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("path", path.into());
|
2023-02-19 15:00:00 +01:00
|
|
|
query = query.arg("source", source);
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_mounted_file(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
source: FileId,
|
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withMountedFile");
|
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("path", path.into());
|
2023-02-19 15:00:00 +01:00
|
|
|
query = query.arg("source", source);
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_mounted_secret(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
source: SecretId,
|
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withMountedSecret");
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("path", path.into());
|
2023-02-19 15:00:00 +01:00
|
|
|
query = query.arg("source", source);
|
2023-02-17 12:33:16 +01:00
|
|
|
|
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_mounted_temp(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withMountedTemp");
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("path", path.into());
|
2023-02-17 12:33:16 +01:00
|
|
|
|
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_new_file(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
) -> Container {
|
2023-02-19 17:43:12 +01:00
|
|
|
let mut query = self.selection.select("withNewFile");
|
|
|
|
|
|
|
|
query = query.arg("path", path.into());
|
|
|
|
|
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-19 17:43:12 +01:00
|
|
|
}
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_new_file_opts<'a>(
|
2023-02-19 17:21:40 +01:00
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
2023-02-19 21:37:54 +01:00
|
|
|
opts: ContainerWithNewFileOpts<'a>
|
2023-02-19 17:21:40 +01:00
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withNewFile");
|
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("path", path.into());
|
2023-02-19 17:49:22 +01:00
|
|
|
if let Some(contents) = opts.contents {
|
|
|
|
query = query.arg("contents", contents);
|
|
|
|
}
|
|
|
|
if let Some(permissions) = opts.permissions {
|
|
|
|
query = query.arg("permissions", permissions);
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-19 12:16:48 +01:00
|
|
|
pub fn with_registry_auth(
|
|
|
|
&self,
|
2023-02-19 17:21:40 +01:00
|
|
|
address: impl Into<String>,
|
|
|
|
username: impl Into<String>,
|
2023-02-19 12:16:48 +01:00
|
|
|
secret: SecretId,
|
|
|
|
) -> Container {
|
|
|
|
let mut query = self.selection.select("withRegistryAuth");
|
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("address", address.into());
|
|
|
|
query = query.arg("username", username.into());
|
2023-02-19 15:00:00 +01:00
|
|
|
query = query.arg("secret", secret);
|
2023-02-19 12:16:48 +01:00
|
|
|
|
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-19 12:16:48 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_rootfs(
|
|
|
|
&self,
|
|
|
|
id: DirectoryId,
|
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withRootfs");
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-19 15:00:00 +01:00
|
|
|
query = query.arg("id", id);
|
2023-02-17 12:33:16 +01:00
|
|
|
|
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_secret_variable(
|
|
|
|
&self,
|
|
|
|
name: impl Into<String>,
|
|
|
|
secret: SecretId,
|
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withSecretVariable");
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("name", name.into());
|
2023-02-19 15:00:00 +01:00
|
|
|
query = query.arg("secret", secret);
|
2023-02-17 12:33:16 +01:00
|
|
|
|
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_unix_socket(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
source: SocketId,
|
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withUnixSocket");
|
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("path", path.into());
|
2023-02-19 15:00:00 +01:00
|
|
|
query = query.arg("source", source);
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_user(
|
|
|
|
&self,
|
|
|
|
name: impl Into<String>,
|
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withUser");
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("name", name.into());
|
2023-02-17 12:33:16 +01:00
|
|
|
|
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_workdir(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withWorkdir");
|
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("path", path.into());
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn without_env_variable(
|
|
|
|
&self,
|
|
|
|
name: impl Into<String>,
|
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withoutEnvVariable");
|
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("name", name.into());
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn without_label(
|
|
|
|
&self,
|
|
|
|
name: impl Into<String>,
|
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withoutLabel");
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("name", name.into());
|
2023-02-17 12:33:16 +01:00
|
|
|
|
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn without_mount(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withoutMount");
|
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("path", path.into());
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn without_registry_auth(
|
|
|
|
&self,
|
|
|
|
address: impl Into<String>,
|
|
|
|
) -> Container {
|
2023-02-19 12:16:48 +01:00
|
|
|
let mut query = self.selection.select("withoutRegistryAuth");
|
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("address", address.into());
|
2023-02-19 12:16:48 +01:00
|
|
|
|
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-19 12:16:48 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn without_unix_socket(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withoutUnixSocket");
|
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("path", path.into());
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn workdir(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<String> {
|
|
|
|
let mut query = self.selection.select("workdir");
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
|
|
|
}
|
2023-02-17 12:33:16 +01:00
|
|
|
pub struct Directory {
|
|
|
|
pub proc: Arc<Child>,
|
|
|
|
pub selection: Selection,
|
|
|
|
pub conn: ConnectParams,
|
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Builder, Debug, PartialEq)]
|
|
|
|
pub struct DirectoryDockerBuildOpts<'a> {
|
2023-02-19 21:37:54 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
|
|
|
pub dockerfile: Option<&'a str>,
|
|
|
|
#[builder(setter(into, strip_option))]
|
2023-02-17 12:33:16 +01:00
|
|
|
pub platform: Option<Platform>,
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
2023-02-17 12:33:16 +01:00
|
|
|
pub build_args: Option<Vec<BuildArg>>,
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
|
|
|
pub target: Option<&'a str>,
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Builder, Debug, PartialEq)]
|
|
|
|
pub struct DirectoryEntriesOpts<'a> {
|
2023-02-19 21:37:54 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
|
|
|
pub path: Option<&'a str>,
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Builder, Debug, PartialEq)]
|
|
|
|
pub struct DirectoryPipelineOpts<'a> {
|
2023-02-19 21:37:54 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
|
|
|
pub description: Option<&'a str>,
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Builder, Debug, PartialEq)]
|
|
|
|
pub struct DirectoryWithDirectoryOpts<'a> {
|
2023-02-19 21:37:54 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
|
|
|
pub exclude: Option<Vec<&'a str>>,
|
|
|
|
#[builder(setter(into, strip_option))]
|
|
|
|
pub include: Option<Vec<&'a str>>,
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Builder, Debug, PartialEq)]
|
2023-02-19 17:29:59 +01:00
|
|
|
pub struct DirectoryWithFileOpts {
|
2023-02-19 21:37:54 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
2023-02-17 12:33:16 +01:00
|
|
|
pub permissions: Option<isize>,
|
|
|
|
}
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Builder, Debug, PartialEq)]
|
2023-02-19 17:29:59 +01:00
|
|
|
pub struct DirectoryWithNewDirectoryOpts {
|
2023-02-19 21:37:54 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
2023-02-17 12:33:16 +01:00
|
|
|
pub permissions: Option<isize>,
|
|
|
|
}
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Builder, Debug, PartialEq)]
|
2023-02-19 17:29:59 +01:00
|
|
|
pub struct DirectoryWithNewFileOpts {
|
2023-02-19 21:37:54 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
2023-02-17 12:33:16 +01:00
|
|
|
pub permissions: Option<isize>,
|
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
|
|
|
|
impl Directory {
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn diff(
|
|
|
|
&self,
|
|
|
|
other: DirectoryId,
|
|
|
|
) -> Directory {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("diff");
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-19 15:00:00 +01:00
|
|
|
query = query.arg("other", other);
|
2023-02-17 12:33:16 +01:00
|
|
|
|
|
|
|
return Directory {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn directory(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
) -> Directory {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("directory");
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("path", path.into());
|
2023-02-17 12:33:16 +01:00
|
|
|
|
|
|
|
return Directory {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn docker_build(
|
|
|
|
&self,
|
|
|
|
) -> Container {
|
|
|
|
let mut query = self.selection.select("dockerBuild");
|
2023-02-19 17:43:12 +01:00
|
|
|
|
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-19 17:43:12 +01:00
|
|
|
}
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn docker_build_opts<'a>(
|
|
|
|
&self,
|
|
|
|
opts: DirectoryDockerBuildOpts<'a>
|
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("dockerBuild");
|
|
|
|
|
2023-02-19 17:49:22 +01:00
|
|
|
if let Some(dockerfile) = opts.dockerfile {
|
|
|
|
query = query.arg("dockerfile", dockerfile);
|
|
|
|
}
|
|
|
|
if let Some(platform) = opts.platform {
|
|
|
|
query = query.arg("platform", platform);
|
|
|
|
}
|
|
|
|
if let Some(build_args) = opts.build_args {
|
|
|
|
query = query.arg("buildArgs", build_args);
|
|
|
|
}
|
|
|
|
if let Some(target) = opts.target {
|
|
|
|
query = query.arg("target", target);
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn entries(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<Vec<String>> {
|
|
|
|
let mut query = self.selection.select("entries");
|
2023-02-19 17:43:12 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-02-19 17:43:12 +01:00
|
|
|
}
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn entries_opts<'a>(
|
|
|
|
&self,
|
|
|
|
opts: DirectoryEntriesOpts<'a>
|
|
|
|
) -> eyre::Result<Vec<String>> {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("entries");
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-19 17:49:22 +01:00
|
|
|
if let Some(path) = opts.path {
|
|
|
|
query = query.arg("path", path);
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn export(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
) -> eyre::Result<bool> {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("export");
|
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("path", path.into());
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn file(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
) -> File {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("file");
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("path", path.into());
|
2023-02-17 12:33:16 +01:00
|
|
|
|
|
|
|
return File {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn id(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<DirectoryId> {
|
|
|
|
let mut query = self.selection.select("id");
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn load_project(
|
|
|
|
&self,
|
|
|
|
config_path: impl Into<String>,
|
|
|
|
) -> Project {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("loadProject");
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("configPath", config_path.into());
|
2023-02-17 12:33:16 +01:00
|
|
|
|
|
|
|
return Project {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn pipeline(
|
|
|
|
&self,
|
|
|
|
name: impl Into<String>,
|
|
|
|
) -> Directory {
|
2023-02-19 17:43:12 +01:00
|
|
|
let mut query = self.selection.select("pipeline");
|
|
|
|
|
|
|
|
query = query.arg("name", name.into());
|
|
|
|
|
|
|
|
return Directory {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-19 17:43:12 +01:00
|
|
|
}
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn pipeline_opts<'a>(
|
|
|
|
&self,
|
|
|
|
name: impl Into<String>,
|
|
|
|
opts: DirectoryPipelineOpts<'a>
|
|
|
|
) -> Directory {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("pipeline");
|
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("name", name.into());
|
2023-02-19 17:49:22 +01:00
|
|
|
if let Some(description) = opts.description {
|
|
|
|
query = query.arg("description", description);
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Directory {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_directory(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
directory: DirectoryId,
|
|
|
|
) -> Directory {
|
2023-02-19 17:43:12 +01:00
|
|
|
let mut query = self.selection.select("withDirectory");
|
|
|
|
|
|
|
|
query = query.arg("path", path.into());
|
|
|
|
query = query.arg("directory", directory);
|
|
|
|
|
|
|
|
return Directory {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-19 17:43:12 +01:00
|
|
|
}
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_directory_opts<'a>(
|
2023-02-01 16:42:50 +01:00
|
|
|
&self,
|
2023-02-19 17:21:40 +01:00
|
|
|
path: impl Into<String>,
|
2023-02-17 12:33:16 +01:00
|
|
|
directory: DirectoryId,
|
2023-02-19 21:37:54 +01:00
|
|
|
opts: DirectoryWithDirectoryOpts<'a>
|
2023-02-01 16:42:50 +01:00
|
|
|
) -> Directory {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withDirectory");
|
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("path", path.into());
|
2023-02-19 15:00:00 +01:00
|
|
|
query = query.arg("directory", directory);
|
2023-02-19 17:49:22 +01:00
|
|
|
if let Some(exclude) = opts.exclude {
|
|
|
|
query = query.arg("exclude", exclude);
|
|
|
|
}
|
|
|
|
if let Some(include) = opts.include {
|
|
|
|
query = query.arg("include", include);
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Directory {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_file(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
source: FileId,
|
|
|
|
) -> Directory {
|
2023-02-19 17:43:12 +01:00
|
|
|
let mut query = self.selection.select("withFile");
|
|
|
|
|
|
|
|
query = query.arg("path", path.into());
|
|
|
|
query = query.arg("source", source);
|
|
|
|
|
|
|
|
return Directory {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-19 17:43:12 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn with_file_opts(
|
2023-02-05 23:44:06 +01:00
|
|
|
&self,
|
2023-02-19 17:21:40 +01:00
|
|
|
path: impl Into<String>,
|
2023-02-17 12:33:16 +01:00
|
|
|
source: FileId,
|
2023-02-19 21:37:54 +01:00
|
|
|
opts: DirectoryWithFileOpts
|
2023-02-05 23:44:06 +01:00
|
|
|
) -> Directory {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withFile");
|
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("path", path.into());
|
2023-02-19 15:00:00 +01:00
|
|
|
query = query.arg("source", source);
|
2023-02-19 17:49:22 +01:00
|
|
|
if let Some(permissions) = opts.permissions {
|
|
|
|
query = query.arg("permissions", permissions);
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return Directory {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_new_directory(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
) -> Directory {
|
2023-02-19 17:43:12 +01:00
|
|
|
let mut query = self.selection.select("withNewDirectory");
|
|
|
|
|
|
|
|
query = query.arg("path", path.into());
|
|
|
|
|
|
|
|
return Directory {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-19 17:43:12 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn with_new_directory_opts(
|
2023-02-17 12:33:16 +01:00
|
|
|
&self,
|
2023-02-19 17:21:40 +01:00
|
|
|
path: impl Into<String>,
|
2023-02-19 21:37:54 +01:00
|
|
|
opts: DirectoryWithNewDirectoryOpts
|
2023-02-17 12:33:16 +01:00
|
|
|
) -> Directory {
|
|
|
|
let mut query = self.selection.select("withNewDirectory");
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("path", path.into());
|
2023-02-19 17:49:22 +01:00
|
|
|
if let Some(permissions) = opts.permissions {
|
|
|
|
query = query.arg("permissions", permissions);
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Directory {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_new_file(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
contents: impl Into<String>,
|
|
|
|
) -> Directory {
|
2023-02-19 17:43:12 +01:00
|
|
|
let mut query = self.selection.select("withNewFile");
|
|
|
|
|
|
|
|
query = query.arg("path", path.into());
|
|
|
|
query = query.arg("contents", contents.into());
|
|
|
|
|
|
|
|
return Directory {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-19 17:43:12 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn with_new_file_opts(
|
2023-02-01 16:42:50 +01:00
|
|
|
&self,
|
2023-02-19 17:21:40 +01:00
|
|
|
path: impl Into<String>,
|
|
|
|
contents: impl Into<String>,
|
2023-02-19 21:37:54 +01:00
|
|
|
opts: DirectoryWithNewFileOpts
|
2023-02-01 16:42:50 +01:00
|
|
|
) -> Directory {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withNewFile");
|
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("path", path.into());
|
|
|
|
query = query.arg("contents", contents.into());
|
2023-02-19 17:49:22 +01:00
|
|
|
if let Some(permissions) = opts.permissions {
|
|
|
|
query = query.arg("permissions", permissions);
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Directory {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_timestamps(
|
|
|
|
&self,
|
|
|
|
timestamp: isize,
|
|
|
|
) -> Directory {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withTimestamps");
|
|
|
|
|
2023-02-19 15:00:00 +01:00
|
|
|
query = query.arg("timestamp", timestamp);
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Directory {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn without_directory(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
) -> Directory {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withoutDirectory");
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("path", path.into());
|
2023-02-17 12:33:16 +01:00
|
|
|
|
|
|
|
return Directory {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn without_file(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
) -> Directory {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withoutFile");
|
2023-02-01 15:32:38 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("path", path.into());
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Directory {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
pub struct EnvVariable {
|
|
|
|
pub proc: Arc<Child>,
|
|
|
|
pub selection: Selection,
|
|
|
|
pub conn: ConnectParams,
|
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
|
|
|
|
impl EnvVariable {
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn name(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<String> {
|
|
|
|
let mut query = self.selection.select("name");
|
2023-02-01 15:32:38 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn value(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<String> {
|
|
|
|
let mut query = self.selection.select("value");
|
2023-02-17 12:33:16 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-17 12:33:16 +01:00
|
|
|
pub struct File {
|
|
|
|
pub proc: Arc<Child>,
|
|
|
|
pub selection: Selection,
|
|
|
|
pub conn: ConnectParams,
|
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
|
|
|
|
impl File {
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn contents(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<String> {
|
|
|
|
let mut query = self.selection.select("contents");
|
2023-02-01 15:32:38 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn export(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
) -> eyre::Result<bool> {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("export");
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("path", path.into());
|
2023-02-17 12:33:16 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn id(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<FileId> {
|
|
|
|
let mut query = self.selection.select("id");
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn secret(
|
|
|
|
&self,
|
|
|
|
) -> Secret {
|
|
|
|
let mut query = self.selection.select("secret");
|
2023-02-17 12:33:16 +01:00
|
|
|
|
|
|
|
return Secret {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:34:59 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn size(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<isize> {
|
|
|
|
let mut query = self.selection.select("size");
|
2023-02-01 15:32:38 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn with_timestamps(
|
|
|
|
&self,
|
|
|
|
timestamp: isize,
|
|
|
|
) -> File {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("withTimestamps");
|
|
|
|
|
2023-02-19 15:00:00 +01:00
|
|
|
query = query.arg("timestamp", timestamp);
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return File {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-01 15:32:38 +01:00
|
|
|
}
|
2023-02-17 12:33:16 +01:00
|
|
|
pub struct GitRef {
|
|
|
|
pub proc: Arc<Child>,
|
|
|
|
pub selection: Selection,
|
|
|
|
pub conn: ConnectParams,
|
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Builder, Debug, PartialEq)]
|
|
|
|
pub struct GitRefTreeOpts<'a> {
|
2023-02-19 21:37:54 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
|
|
|
pub ssh_known_hosts: Option<&'a str>,
|
|
|
|
#[builder(setter(into, strip_option))]
|
2023-02-17 12:33:16 +01:00
|
|
|
pub ssh_auth_socket: Option<SocketId>,
|
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-01 16:34:59 +01:00
|
|
|
impl GitRef {
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn digest(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<String> {
|
|
|
|
let mut query = self.selection.select("digest");
|
2023-02-17 12:33:16 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn tree(
|
|
|
|
&self,
|
|
|
|
) -> Directory {
|
|
|
|
let mut query = self.selection.select("tree");
|
2023-02-19 17:43:12 +01:00
|
|
|
|
|
|
|
return Directory {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-19 17:43:12 +01:00
|
|
|
}
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn tree_opts<'a>(
|
|
|
|
&self,
|
|
|
|
opts: GitRefTreeOpts<'a>
|
|
|
|
) -> Directory {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("tree");
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-19 17:49:22 +01:00
|
|
|
if let Some(ssh_known_hosts) = opts.ssh_known_hosts {
|
|
|
|
query = query.arg("sshKnownHosts", ssh_known_hosts);
|
|
|
|
}
|
|
|
|
if let Some(ssh_auth_socket) = opts.ssh_auth_socket {
|
|
|
|
query = query.arg("sshAuthSocket", ssh_auth_socket);
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return Directory {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-01 16:34:59 +01:00
|
|
|
}
|
2023-02-17 12:33:16 +01:00
|
|
|
pub struct GitRepository {
|
|
|
|
pub proc: Arc<Child>,
|
|
|
|
pub selection: Selection,
|
|
|
|
pub conn: ConnectParams,
|
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
impl GitRepository {
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn branch(
|
|
|
|
&self,
|
|
|
|
name: impl Into<String>,
|
|
|
|
) -> GitRef {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("branch");
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("name", name.into());
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return GitRef {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn branches(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<Vec<String>> {
|
|
|
|
let mut query = self.selection.select("branches");
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn commit(
|
|
|
|
&self,
|
|
|
|
id: impl Into<String>,
|
|
|
|
) -> GitRef {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("commit");
|
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("id", id.into());
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return GitRef {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn tag(
|
|
|
|
&self,
|
|
|
|
name: impl Into<String>,
|
|
|
|
) -> GitRef {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("tag");
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("name", name.into());
|
2023-02-17 12:33:16 +01:00
|
|
|
|
|
|
|
return GitRef {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn tags(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<Vec<String>> {
|
|
|
|
let mut query = self.selection.select("tags");
|
2023-02-17 12:33:16 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-01 16:34:59 +01:00
|
|
|
}
|
2023-02-17 12:33:16 +01:00
|
|
|
pub struct Host {
|
|
|
|
pub proc: Arc<Child>,
|
|
|
|
pub selection: Selection,
|
|
|
|
pub conn: ConnectParams,
|
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Builder, Debug, PartialEq)]
|
|
|
|
pub struct HostDirectoryOpts<'a> {
|
2023-02-19 21:37:54 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
|
|
|
pub exclude: Option<Vec<&'a str>>,
|
|
|
|
#[builder(setter(into, strip_option))]
|
|
|
|
pub include: Option<Vec<&'a str>>,
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Builder, Debug, PartialEq)]
|
|
|
|
pub struct HostWorkdirOpts<'a> {
|
2023-02-19 21:37:54 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
|
|
|
pub exclude: Option<Vec<&'a str>>,
|
|
|
|
#[builder(setter(into, strip_option))]
|
|
|
|
pub include: Option<Vec<&'a str>>,
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-01 16:34:59 +01:00
|
|
|
impl Host {
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn directory(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
) -> Directory {
|
2023-02-19 17:43:12 +01:00
|
|
|
let mut query = self.selection.select("directory");
|
|
|
|
|
|
|
|
query = query.arg("path", path.into());
|
|
|
|
|
|
|
|
return Directory {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-19 17:43:12 +01:00
|
|
|
}
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn directory_opts<'a>(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
opts: HostDirectoryOpts<'a>
|
|
|
|
) -> Directory {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("directory");
|
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("path", path.into());
|
2023-02-19 17:49:22 +01:00
|
|
|
if let Some(exclude) = opts.exclude {
|
|
|
|
query = query.arg("exclude", exclude);
|
|
|
|
}
|
|
|
|
if let Some(include) = opts.include {
|
|
|
|
query = query.arg("include", include);
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Directory {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn env_variable(
|
|
|
|
&self,
|
|
|
|
name: impl Into<String>,
|
|
|
|
) -> HostVariable {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("envVariable");
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("name", name.into());
|
2023-02-17 12:33:16 +01:00
|
|
|
|
|
|
|
return HostVariable {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn unix_socket(
|
|
|
|
&self,
|
|
|
|
path: impl Into<String>,
|
|
|
|
) -> Socket {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("unixSocket");
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("path", path.into());
|
2023-02-17 12:33:16 +01:00
|
|
|
|
|
|
|
return Socket {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn workdir(
|
|
|
|
&self,
|
|
|
|
) -> Directory {
|
|
|
|
let mut query = self.selection.select("workdir");
|
2023-02-19 17:43:12 +01:00
|
|
|
|
|
|
|
return Directory {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-19 17:43:12 +01:00
|
|
|
}
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn workdir_opts<'a>(
|
|
|
|
&self,
|
|
|
|
opts: HostWorkdirOpts<'a>
|
|
|
|
) -> Directory {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("workdir");
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-19 17:49:22 +01:00
|
|
|
if let Some(exclude) = opts.exclude {
|
|
|
|
query = query.arg("exclude", exclude);
|
|
|
|
}
|
|
|
|
if let Some(include) = opts.include {
|
|
|
|
query = query.arg("include", include);
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Directory {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
pub struct HostVariable {
|
|
|
|
pub proc: Arc<Child>,
|
|
|
|
pub selection: Selection,
|
|
|
|
pub conn: ConnectParams,
|
|
|
|
}
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-01 16:42:50 +01:00
|
|
|
impl HostVariable {
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn secret(
|
|
|
|
&self,
|
|
|
|
) -> Secret {
|
|
|
|
let mut query = self.selection.select("secret");
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Secret {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn value(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<String> {
|
|
|
|
let mut query = self.selection.select("value");
|
2023-02-17 12:33:16 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-01 15:32:38 +01:00
|
|
|
}
|
2023-02-17 12:33:16 +01:00
|
|
|
pub struct Label {
|
|
|
|
pub proc: Arc<Child>,
|
|
|
|
pub selection: Selection,
|
|
|
|
pub conn: ConnectParams,
|
|
|
|
}
|
2023-02-01 15:32:38 +01:00
|
|
|
|
2023-02-01 16:42:50 +01:00
|
|
|
impl Label {
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn name(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<String> {
|
|
|
|
let mut query = self.selection.select("name");
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn value(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<String> {
|
|
|
|
let mut query = self.selection.select("value");
|
2023-02-17 12:33:16 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-17 12:33:16 +01:00
|
|
|
pub struct Project {
|
|
|
|
pub proc: Arc<Child>,
|
|
|
|
pub selection: Selection,
|
|
|
|
pub conn: ConnectParams,
|
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
|
|
|
|
impl Project {
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn extensions(
|
|
|
|
&self,
|
|
|
|
) -> Vec<Project> {
|
|
|
|
let mut query = self.selection.select("extensions");
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return vec![Project {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}]
|
2023-02-01 16:34:59 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn generated_code(
|
|
|
|
&self,
|
|
|
|
) -> Directory {
|
|
|
|
let mut query = self.selection.select("generatedCode");
|
2023-01-30 20:44:48 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Directory {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn install(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<bool> {
|
|
|
|
let mut query = self.selection.select("install");
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn name(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<String> {
|
|
|
|
let mut query = self.selection.select("name");
|
2023-02-17 12:33:16 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn schema(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<String> {
|
|
|
|
let mut query = self.selection.select("schema");
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn sdk(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<String> {
|
|
|
|
let mut query = self.selection.select("sdk");
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-01-30 20:44:48 +01:00
|
|
|
}
|
|
|
|
}
|
2023-02-05 23:44:06 +01:00
|
|
|
pub struct Query {
|
|
|
|
pub proc: Arc<Child>,
|
|
|
|
pub selection: Selection,
|
2023-02-17 12:33:16 +01:00
|
|
|
pub conn: ConnectParams,
|
|
|
|
}
|
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Builder, Debug, PartialEq)]
|
2023-02-19 17:29:59 +01:00
|
|
|
pub struct QueryContainerOpts {
|
2023-02-19 21:37:54 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
2023-02-17 12:33:16 +01:00
|
|
|
pub id: Option<ContainerId>,
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
2023-02-17 12:33:16 +01:00
|
|
|
pub platform: Option<Platform>,
|
|
|
|
}
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Builder, Debug, PartialEq)]
|
2023-02-19 17:29:59 +01:00
|
|
|
pub struct QueryDirectoryOpts {
|
2023-02-19 21:37:54 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
2023-02-17 12:33:16 +01:00
|
|
|
pub id: Option<DirectoryId>,
|
|
|
|
}
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Builder, Debug, PartialEq)]
|
2023-02-19 17:29:59 +01:00
|
|
|
pub struct QueryGitOpts {
|
2023-02-19 21:37:54 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
2023-02-17 12:33:16 +01:00
|
|
|
pub keep_git_dir: Option<bool>,
|
|
|
|
}
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Builder, Debug, PartialEq)]
|
|
|
|
pub struct QueryPipelineOpts<'a> {
|
2023-02-19 21:37:54 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
|
|
|
pub description: Option<&'a str>,
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Builder, Debug, PartialEq)]
|
2023-02-19 17:29:59 +01:00
|
|
|
pub struct QuerySocketOpts {
|
2023-02-19 21:37:54 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
#[builder(setter(into, strip_option))]
|
2023-02-17 12:33:16 +01:00
|
|
|
pub id: Option<SocketId>,
|
2023-02-05 23:44:06 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
|
|
|
|
impl Query {
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn cache_volume(
|
|
|
|
&self,
|
|
|
|
key: impl Into<String>,
|
|
|
|
) -> CacheVolume {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("cacheVolume");
|
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("key", key.into());
|
2023-02-17 12:33:16 +01:00
|
|
|
|
|
|
|
return CacheVolume {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn container(
|
|
|
|
&self,
|
|
|
|
) -> Container {
|
|
|
|
let mut query = self.selection.select("container");
|
2023-02-19 17:43:12 +01:00
|
|
|
|
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-19 17:43:12 +01:00
|
|
|
}
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn container_opts(
|
|
|
|
&self,
|
|
|
|
opts: QueryContainerOpts
|
|
|
|
) -> Container {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("container");
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-19 17:49:22 +01:00
|
|
|
if let Some(id) = opts.id {
|
|
|
|
query = query.arg("id", id);
|
|
|
|
}
|
|
|
|
if let Some(platform) = opts.platform {
|
|
|
|
query = query.arg("platform", platform);
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-05 23:44:06 +01:00
|
|
|
|
|
|
|
return Container {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
2023-02-17 12:33:16 +01:00
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn default_platform(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<Platform> {
|
|
|
|
let mut query = self.selection.select("defaultPlatform");
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn directory(
|
|
|
|
&self,
|
|
|
|
) -> Directory {
|
|
|
|
let mut query = self.selection.select("directory");
|
2023-02-19 17:43:12 +01:00
|
|
|
|
|
|
|
return Directory {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-19 17:43:12 +01:00
|
|
|
}
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn directory_opts(
|
|
|
|
&self,
|
|
|
|
opts: QueryDirectoryOpts
|
|
|
|
) -> Directory {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("directory");
|
|
|
|
|
2023-02-19 17:49:22 +01:00
|
|
|
if let Some(id) = opts.id {
|
|
|
|
query = query.arg("id", id);
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Directory {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn file(
|
|
|
|
&self,
|
|
|
|
id: FileId,
|
|
|
|
) -> File {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("file");
|
|
|
|
|
2023-02-19 15:00:00 +01:00
|
|
|
query = query.arg("id", id);
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return File {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn git(
|
|
|
|
&self,
|
|
|
|
url: impl Into<String>,
|
|
|
|
) -> GitRepository {
|
2023-02-19 17:43:12 +01:00
|
|
|
let mut query = self.selection.select("git");
|
|
|
|
|
|
|
|
query = query.arg("url", url.into());
|
|
|
|
|
|
|
|
return GitRepository {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-19 17:43:12 +01:00
|
|
|
}
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn git_opts(
|
|
|
|
&self,
|
|
|
|
url: impl Into<String>,
|
|
|
|
opts: QueryGitOpts
|
|
|
|
) -> GitRepository {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("git");
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("url", url.into());
|
2023-02-19 17:49:22 +01:00
|
|
|
if let Some(keep_git_dir) = opts.keep_git_dir {
|
|
|
|
query = query.arg("keepGitDir", keep_git_dir);
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return GitRepository {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn host(
|
|
|
|
&self,
|
|
|
|
) -> Host {
|
|
|
|
let mut query = self.selection.select("host");
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Host {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn http(
|
|
|
|
&self,
|
|
|
|
url: impl Into<String>,
|
|
|
|
) -> File {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("http");
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("url", url.into());
|
2023-02-17 12:33:16 +01:00
|
|
|
|
|
|
|
return File {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn pipeline(
|
|
|
|
&self,
|
|
|
|
name: impl Into<String>,
|
|
|
|
) -> Query {
|
2023-02-19 17:43:12 +01:00
|
|
|
let mut query = self.selection.select("pipeline");
|
|
|
|
|
|
|
|
query = query.arg("name", name.into());
|
|
|
|
|
|
|
|
return Query {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-19 17:43:12 +01:00
|
|
|
}
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn pipeline_opts<'a>(
|
|
|
|
&self,
|
|
|
|
name: impl Into<String>,
|
|
|
|
opts: QueryPipelineOpts<'a>
|
|
|
|
) -> Query {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("pipeline");
|
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("name", name.into());
|
2023-02-19 17:49:22 +01:00
|
|
|
if let Some(description) = opts.description {
|
|
|
|
query = query.arg("description", description);
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Query {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn project(
|
|
|
|
&self,
|
|
|
|
name: impl Into<String>,
|
|
|
|
) -> Project {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("project");
|
|
|
|
|
2023-02-19 17:21:40 +01:00
|
|
|
query = query.arg("name", name.into());
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Project {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn secret(
|
|
|
|
&self,
|
|
|
|
id: SecretId,
|
|
|
|
) -> Secret {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("secret");
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-19 15:00:00 +01:00
|
|
|
query = query.arg("id", id);
|
2023-02-17 12:33:16 +01:00
|
|
|
|
|
|
|
return Secret {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn socket(
|
|
|
|
&self,
|
|
|
|
) -> Socket {
|
|
|
|
let mut query = self.selection.select("socket");
|
2023-02-19 17:43:12 +01:00
|
|
|
|
|
|
|
return Socket {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-19 17:43:12 +01:00
|
|
|
}
|
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
pub fn socket_opts(
|
|
|
|
&self,
|
|
|
|
opts: QuerySocketOpts
|
|
|
|
) -> Socket {
|
2023-02-17 12:33:16 +01:00
|
|
|
let mut query = self.selection.select("socket");
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-19 17:49:22 +01:00
|
|
|
if let Some(id) = opts.id {
|
|
|
|
query = query.arg("id", id);
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-17 12:33:16 +01:00
|
|
|
return Socket {
|
|
|
|
proc: self.proc.clone(),
|
|
|
|
selection: query,
|
|
|
|
conn: self.conn.clone(),
|
2023-02-19 21:37:54 +01:00
|
|
|
}
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
pub struct Secret {
|
|
|
|
pub proc: Arc<Child>,
|
|
|
|
pub selection: Selection,
|
|
|
|
pub conn: ConnectParams,
|
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
|
|
|
|
impl Secret {
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn id(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<SecretId> {
|
|
|
|
let mut query = self.selection.select("id");
|
2023-02-01 16:42:50 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-02-17 12:33:16 +01:00
|
|
|
}
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn plaintext(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<String> {
|
|
|
|
let mut query = self.selection.select("plaintext");
|
2023-02-17 12:33:16 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
|
|
|
}
|
2023-02-17 12:33:16 +01:00
|
|
|
pub struct Socket {
|
|
|
|
pub proc: Arc<Child>,
|
|
|
|
pub selection: Selection,
|
|
|
|
pub conn: ConnectParams,
|
|
|
|
}
|
2023-02-01 16:42:50 +01:00
|
|
|
|
|
|
|
impl Socket {
|
2023-02-19 21:37:54 +01:00
|
|
|
pub async fn id(
|
|
|
|
&self,
|
|
|
|
) -> eyre::Result<SocketId> {
|
|
|
|
let mut query = self.selection.select("id");
|
2023-02-17 12:33:16 +01:00
|
|
|
|
2023-02-19 21:37:54 +01:00
|
|
|
query.execute(&graphql_client(&self.conn)).await
|
2023-02-01 16:42:50 +01:00
|
|
|
}
|
|
|
|
}
|
2023-02-19 17:21:40 +01:00
|
|
|
#[derive(Serialize, Clone, PartialEq, Debug)]
|
2023-02-19 12:16:48 +01:00
|
|
|
pub enum CacheSharingMode {
|
|
|
|
SHARED,
|
|
|
|
PRIVATE,
|
|
|
|
LOCKED,
|
|
|
|
}
|