dagger

package module
v0.4.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 2, 2022 License: Apache-2.0 Imports: 22 Imported by: 309

README

Dagger Go SDK

A client package for running Dagger pipelines.

NOTE: the canonical version of this module is ./sdk/go in the dagger/dagger repo.

The dagger/dagger-go-sdk repo is a read-only replica; do not edit it.

The canonical import for this package is dagger.io/dagger.

Documentation

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func Serve

func Serve(server any)

Types

type CacheID

type CacheID string

A global cache volume identifier

type CacheVolume

type CacheVolume struct {
	// contains filtered or unexported fields
}

A directory whose contents persist across runs

func (*CacheVolume) ID

func (r *CacheVolume) ID(ctx context.Context) (CacheID, error)

func (*CacheVolume) XXX_GraphQLID added in v0.4.0

func (r *CacheVolume) XXX_GraphQLID(ctx context.Context) (string, error)

XXX_GraphQLID is an internal function. It returns the underlying type ID

func (*CacheVolume) XXX_GraphQLType added in v0.4.0

func (r *CacheVolume) XXX_GraphQLType() string

XXX_GraphQLType is an internal function. It returns the native GraphQL type name

type Client

type Client struct {
	Query
	// contains filtered or unexported fields
}

Client is the Dagger Engine Client

func Connect

func Connect(ctx context.Context, opts ...ClientOpt) (_ *Client, rerr error)

Connect to a Dagger Engine

func (*Client) Close

func (c *Client) Close() error

Close the engine connection

func (*Client) Do

func (c *Client) Do(ctx context.Context, req *Request, resp *Response) error

Do sends a GraphQL request to the engine

type ClientOpt

type ClientOpt interface {
	// contains filtered or unexported methods
}

ClientOpt holds a client option

func WithConfigPath

func WithConfigPath(path string) ClientOpt

WithConfigPath sets the engine config path

func WithLogOutput

func WithLogOutput(writer io.Writer) ClientOpt

WithLogOutput sets the progress writer

func WithNoExtensions

func WithNoExtensions() ClientOpt

WithNoExtensions disables installing extensions

func WithWorkdir

func WithWorkdir(path string) ClientOpt

WithWorkdir sets the engine workdir

type Container

type Container struct {
	// contains filtered or unexported fields
}

An OCI-compatible container, also known as a docker container

Example
package main

import (
	"context"
	"fmt"

	"dagger.io/dagger"
)

func main() {
	ctx := context.Background()
	client, err := dagger.Connect(ctx)
	if err != nil {
		panic(err)
	}
	defer client.Close()

	alpine := client.Container().From("alpine:3.16.2")

	out, err := alpine.Exec(dagger.ContainerExecOpts{
		Args: []string{"cat", "/etc/alpine-release"},
	}).Stdout().Contents(ctx)
	if err != nil {
		panic(err)
	}

	fmt.Println(out)

}
Output:

3.16.2

func (*Container) Build

func (r *Container) Build(context *Directory, opts ...ContainerBuildOpts) *Container

Initialize this container from a Dockerfile build

Example
package main

import (
	"context"
	"fmt"
	"strings"

	"dagger.io/dagger"
)

func main() {
	ctx := context.Background()
	client, err := dagger.Connect(ctx)
	if err != nil {
		panic(err)
	}
	defer client.Close()

	repo := client.Git("https://github.com/dagger/dagger").
		Tag("v0.3.0").
		Tree()

	daggerImg := client.Container().Build(repo)

	out, err := daggerImg.Exec(dagger.ContainerExecOpts{
		Args: []string{"version"},
	}).Stdout().Contents(ctx)
	if err != nil {
		panic(err)
	}

	words := strings.Split(strings.TrimSpace(out), " ")
	fmt.Println(words[0])

}
Output:

dagger

func (*Container) DefaultArgs

func (r *Container) DefaultArgs(ctx context.Context) ([]string, error)

Default arguments for future commands

func (*Container) Directory

func (r *Container) Directory(path string) *Directory

Retrieve a directory at the given path. Mounts are included.

func (*Container) Entrypoint

func (r *Container) Entrypoint(ctx context.Context) ([]string, error)

Entrypoint to be prepended to the arguments of all commands

func (*Container) EnvVariable

func (r *Container) EnvVariable(ctx context.Context, name string) (string, error)

The value of the specified environment variable

func (*Container) EnvVariables

func (r *Container) EnvVariables(ctx context.Context) ([]EnvVariable, error)

A list of environment variables passed to commands

func (*Container) Exec

func (r *Container) Exec(opts ...ContainerExecOpts) *Container

This container after executing the specified command inside it

func (*Container) ExitCode

func (r *Container) ExitCode(ctx context.Context) (int, error)

Exit code of the last executed command. Zero means success. Null if no command has been executed.

func (*Container) Export added in v0.4.0

func (r *Container) Export(ctx context.Context, path string, opts ...ContainerExportOpts) (bool, error)

Write the container as an OCI tarball to the destination file path on the host

func (*Container) FS

func (r *Container) FS() *Directory

This container's root filesystem. Mounts are not included.

func (*Container) File

func (r *Container) File(path string) *File

Retrieve a file at the given path. Mounts are included.

func (*Container) From

func (r *Container) From(address string) *Container

Initialize this container from the base image published at the given address

func (*Container) ID

func (r *Container) ID(ctx context.Context) (ContainerID, error)

A unique identifier for this container

func (*Container) Mounts

func (r *Container) Mounts(ctx context.Context) ([]string, error)

List of paths where a directory is mounted

func (*Container) Platform added in v0.4.0

func (r *Container) Platform(ctx context.Context) (Platform, error)

The platform this container executes and publishes as

func (*Container) Publish

func (r *Container) Publish(ctx context.Context, address string, opts ...ContainerPublishOpts) (string, error)

Publish this container as a new image, returning a fully qualified ref

func (*Container) Stderr

func (r *Container) Stderr() *File

The error stream of the last executed command. Null if no command has been executed.

func (*Container) Stdout

func (r *Container) Stdout() *File

The output stream of the last executed command. Null if no command has been executed.

func (*Container) User

func (r *Container) User(ctx context.Context) (string, error)

The user to be set for all commands

func (*Container) WithDefaultArgs

func (r *Container) WithDefaultArgs(opts ...ContainerWithDefaultArgsOpts) *Container

Configures default arguments for future commands

func (*Container) WithEntrypoint

func (r *Container) WithEntrypoint(args []string) *Container

This container but with a different command entrypoint

func (*Container) WithEnvVariable

func (r *Container) WithEnvVariable(name string, value string) *Container

This container plus the given environment variable

Example
package main

import (
	"context"
	"fmt"

	"dagger.io/dagger"
)

func main() {
	ctx := context.Background()
	client, err := dagger.Connect(ctx)
	if err != nil {
		panic(err)
	}
	defer client.Close()

	container := client.Container().From("alpine:3.16.2")

	container = container.WithEnvVariable("FOO", "bar")

	out, err := container.Exec(dagger.ContainerExecOpts{
		Args: []string{"sh", "-c", "echo $FOO"},
	}).Stdout().Contents(ctx)
	if err != nil {
		panic(err)
	}

	fmt.Println(out)

}
Output:

bar

func (*Container) WithFS

func (r *Container) WithFS(id *Directory) *Container

Initialize this container from this DirectoryID

func (*Container) WithMountedCache

func (r *Container) WithMountedCache(path string, cache *CacheVolume, opts ...ContainerWithMountedCacheOpts) *Container

This container plus a cache volume mounted at the given path

Example
package main

import (
	"context"
	"fmt"
	"strconv"
	"time"

	"dagger.io/dagger"
)

func main() {
	ctx := context.Background()
	client, err := dagger.Connect(ctx)
	if err != nil {
		panic(err)
	}
	defer client.Close()

	cacheKey := "example-" + time.Now().Format(time.RFC3339)

	cache := client.CacheVolume(cacheKey)

	container := client.Container().From("alpine:3.16.2")

	container = container.WithMountedCache("/cache", cache)

	var out string
	for i := 0; i < 5; i++ {
		out, err = container.Exec(dagger.ContainerExecOpts{
			Args: []string{
				"sh", "-c",
				"echo $0 >> /cache/x.txt; cat /cache/x.txt",
				strconv.Itoa(i),
			},
		}).Stdout().Contents(ctx)
		if err != nil {
			panic(err)
		}
	}

	fmt.Printf("%q", out)

}
Output:

"0\n1\n2\n3\n4\n"

func (*Container) WithMountedDirectory

func (r *Container) WithMountedDirectory(path string, source *Directory) *Container

This container plus a directory mounted at the given path

Example
package main

import (
	"context"
	"fmt"

	"dagger.io/dagger"
)

func main() {
	ctx := context.Background()
	client, err := dagger.Connect(ctx)
	if err != nil {
		panic(err)
	}
	defer client.Close()

	dir := client.Directory().
		WithNewFile("hello.txt", dagger.DirectoryWithNewFileOpts{
			Contents: "Hello, world!",
		}).
		WithNewFile("goodbye.txt", dagger.DirectoryWithNewFileOpts{
			Contents: "Goodbye, world!",
		})

	container := client.Container().From("alpine:3.16.2")

	container = container.WithMountedDirectory("/mnt", dir)

	out, err := container.Exec(dagger.ContainerExecOpts{
		Args: []string{"ls", "/mnt"},
	}).Stdout().Contents(ctx)
	if err != nil {
		panic(err)
	}

	fmt.Printf("%q", out)

}
Output:

"goodbye.txt\nhello.txt\n"

func (*Container) WithMountedFile

func (r *Container) WithMountedFile(path string, source *File) *Container

This container plus a file mounted at the given path

func (*Container) WithMountedSecret

func (r *Container) WithMountedSecret(path string, source *Secret) *Container

This container plus a secret mounted into a file at the given path

func (*Container) WithMountedTemp

func (r *Container) WithMountedTemp(path string) *Container

This container plus a temporary directory mounted at the given path

func (*Container) WithSecretVariable

func (r *Container) WithSecretVariable(name string, secret *Secret) *Container

This container plus an env variable containing the given secret

func (*Container) WithUser

func (r *Container) WithUser(name string) *Container

This container but with a different command user

func (*Container) WithWorkdir

func (r *Container) WithWorkdir(path string) *Container

This container but with a different working directory

func (*Container) WithoutEnvVariable

func (r *Container) WithoutEnvVariable(name string) *Container

This container minus the given environment variable

func (*Container) WithoutMount

func (r *Container) WithoutMount(path string) *Container

This container after unmounting everything at the given path.

func (*Container) Workdir

func (r *Container) Workdir(ctx context.Context) (string, error)

The working directory for all commands

func (*Container) XXX_GraphQLID added in v0.4.0

func (r *Container) XXX_GraphQLID(ctx context.Context) (string, error)

XXX_GraphQLID is an internal function. It returns the underlying type ID

func (*Container) XXX_GraphQLType added in v0.4.0

func (r *Container) XXX_GraphQLType() string

XXX_GraphQLType is an internal function. It returns the native GraphQL type name

type ContainerBuildOpts

type ContainerBuildOpts struct {
	Dockerfile string
}

ContainerBuildOpts contains options for Container.Build

type ContainerExecOpts

type ContainerExecOpts struct {
	Args           []string
	Stdin          string
	RedirectStdout string
	RedirectStderr string
}

ContainerExecOpts contains options for Container.Exec

type ContainerExportOpts added in v0.4.0

type ContainerExportOpts struct {
	PlatformVariants []*Container
}

ContainerExportOpts contains options for Container.Export

type ContainerID

type ContainerID string

A unique container identifier. Null designates an empty container (scratch).

type ContainerOpts

type ContainerOpts struct {
	ID       ContainerID
	Platform Platform
}

ContainerOpts contains options for Query.Container

type ContainerPublishOpts added in v0.4.0

type ContainerPublishOpts struct {
	PlatformVariants []*Container
}

ContainerPublishOpts contains options for Container.Publish

type ContainerWithDefaultArgsOpts

type ContainerWithDefaultArgsOpts struct {
	Args []string
}

ContainerWithDefaultArgsOpts contains options for Container.WithDefaultArgs

type ContainerWithMountedCacheOpts

type ContainerWithMountedCacheOpts struct {
	Source *Directory
}

ContainerWithMountedCacheOpts contains options for Container.WithMountedCache

type Directory

type Directory struct {
	// contains filtered or unexported fields
}

A directory

Example
package main

import (
	"context"
	"fmt"

	"dagger.io/dagger"
)

func main() {
	ctx := context.Background()
	client, err := dagger.Connect(ctx)
	if err != nil {
		panic(err)
	}
	defer client.Close()

	dir := client.Directory().
		WithNewFile("hello.txt", dagger.DirectoryWithNewFileOpts{
			Contents: "Hello, world!",
		}).
		WithNewFile("goodbye.txt", dagger.DirectoryWithNewFileOpts{
			Contents: "Goodbye, world!",
		})

	entries, err := dir.Entries(ctx)
	if err != nil {
		panic(err)
	}

	fmt.Println(entries)

}
Output:

[goodbye.txt hello.txt]

func (*Directory) Diff

func (r *Directory) Diff(other *Directory) *Directory

The difference between this directory and an another directory

func (*Directory) Directory

func (r *Directory) Directory(path string) *Directory

Retrieve a directory at the given path

func (*Directory) Entries

func (r *Directory) Entries(ctx context.Context, opts ...DirectoryEntriesOpts) ([]string, error)

Return a list of files and directories at the given path

func (*Directory) Export added in v0.4.0

func (r *Directory) Export(ctx context.Context, path string) (bool, error)

Write the contents of the directory to a path on the host

func (*Directory) File

func (r *Directory) File(path string) *File

Retrieve a file at the given path

func (*Directory) ID

func (r *Directory) ID(ctx context.Context) (DirectoryID, error)

The content-addressed identifier of the directory

func (*Directory) LoadProject

func (r *Directory) LoadProject(configPath string) *Project

load a project's metadata

func (*Directory) WithDirectory

func (r *Directory) WithDirectory(path string, directory *Directory, opts ...DirectoryWithDirectoryOpts) *Directory

This directory plus a directory written at the given path

func (*Directory) WithFile added in v0.4.0

func (r *Directory) WithFile(path string, source *File) *Directory

This directory plus the contents of the given file copied to the given path

func (*Directory) WithNewDirectory added in v0.4.0

func (r *Directory) WithNewDirectory(path string) *Directory

This directory plus a new directory created at the given path

func (*Directory) WithNewFile

func (r *Directory) WithNewFile(path string, opts ...DirectoryWithNewFileOpts) *Directory

This directory plus a new file written at the given path

func (*Directory) WithoutDirectory

func (r *Directory) WithoutDirectory(path string) *Directory

This directory with the directory at the given path removed

func (*Directory) WithoutFile

func (r *Directory) WithoutFile(path string) *Directory

This directory with the file at the given path removed

func (*Directory) XXX_GraphQLID added in v0.4.0

func (r *Directory) XXX_GraphQLID(ctx context.Context) (string, error)

XXX_GraphQLID is an internal function. It returns the underlying type ID

func (*Directory) XXX_GraphQLType added in v0.4.0

func (r *Directory) XXX_GraphQLType() string

XXX_GraphQLType is an internal function. It returns the native GraphQL type name

type DirectoryEntriesOpts

type DirectoryEntriesOpts struct {
	Path string
}

DirectoryEntriesOpts contains options for Directory.Entries

type DirectoryID

type DirectoryID string

A content-addressed directory identifier

type DirectoryOpts

type DirectoryOpts struct {
	ID DirectoryID
}

DirectoryOpts contains options for Query.Directory

type DirectoryWithDirectoryOpts added in v0.4.0

type DirectoryWithDirectoryOpts struct {
	Exclude []string
	Include []string
}

DirectoryWithDirectoryOpts contains options for Directory.WithDirectory

type DirectoryWithNewFileOpts

type DirectoryWithNewFileOpts struct {
	Contents string
}

DirectoryWithNewFileOpts contains options for Directory.WithNewFile

type EnvVariable

type EnvVariable struct {
	// contains filtered or unexported fields
}

EnvVariable is a simple key value object that represents an environment variable.

func (*EnvVariable) Name

func (r *EnvVariable) Name(ctx context.Context) (string, error)

name is the environment variable name.

func (*EnvVariable) Value

func (r *EnvVariable) Value(ctx context.Context) (string, error)

value is the environment variable value

type File

type File struct {
	// contains filtered or unexported fields
}

A file

func (*File) Contents

func (r *File) Contents(ctx context.Context) (string, error)

The contents of the file

func (*File) Export added in v0.4.0

func (r *File) Export(ctx context.Context, path string) (bool, error)

Write the file to a file path on the host

func (*File) ID

func (r *File) ID(ctx context.Context) (FileID, error)

The content-addressed identifier of the file

func (*File) Secret

func (r *File) Secret() *Secret

func (*File) Size

func (r *File) Size(ctx context.Context) (int, error)

The size of the file, in bytes

func (*File) XXX_GraphQLID added in v0.4.0

func (r *File) XXX_GraphQLID(ctx context.Context) (string, error)

XXX_GraphQLID is an internal function. It returns the underlying type ID

func (*File) XXX_GraphQLType added in v0.4.0

func (r *File) XXX_GraphQLType() string

XXX_GraphQLType is an internal function. It returns the native GraphQL type name

type FileID

type FileID string

type GitRef

type GitRef struct {
	// contains filtered or unexported fields
}

A git ref (tag or branch)

func (*GitRef) Digest

func (r *GitRef) Digest(ctx context.Context) (string, error)

The digest of the current value of this ref

func (*GitRef) Tree

func (r *GitRef) Tree() *Directory

The filesystem tree at this ref

type GitRepository

type GitRepository struct {
	// contains filtered or unexported fields
}

A git repository

Example
package main

import (
	"context"
	"fmt"
	"strings"

	"dagger.io/dagger"
)

func main() {
	ctx := context.Background()
	client, err := dagger.Connect(ctx)
	if err != nil {
		panic(err)
	}
	defer client.Close()

	readme, err := client.Git("https://github.com/dagger/dagger").
		Tag("v0.3.0").
		Tree().File("README.md").Contents(ctx)
	if err != nil {
		panic(err)
	}

	lines := strings.Split(strings.TrimSpace(readme), "\n")
	fmt.Println(lines[0])

}
Output:

## What is Dagger?

func (*GitRepository) Branch

func (r *GitRepository) Branch(name string) *GitRef

Details on one branch

func (*GitRepository) Branches

func (r *GitRepository) Branches(ctx context.Context) ([]string, error)

List of branches on the repository

func (*GitRepository) Tag

func (r *GitRepository) Tag(name string) *GitRef

Details on one tag

func (*GitRepository) Tags

func (r *GitRepository) Tags(ctx context.Context) ([]string, error)

List of tags on the repository

type Host

type Host struct {
	// contains filtered or unexported fields
}

Information about the host execution environment

func (*Host) Directory

func (r *Host) Directory(path string, opts ...HostDirectoryOpts) *Directory

Access a directory on the host

func (*Host) EnvVariable

func (r *Host) EnvVariable(name string) *HostVariable

Lookup the value of an environment variable. Null if the variable is not available.

func (*Host) Workdir

func (r *Host) Workdir(opts ...HostWorkdirOpts) *Directory

The current working directory on the host

Example
package main

import (
	"context"
	"fmt"
	"strings"

	"dagger.io/dagger"
)

func main() {
	ctx := context.Background()
	client, err := dagger.Connect(ctx, dagger.WithWorkdir("."))
	if err != nil {
		panic(err)
	}
	defer client.Close()

	readme, err := client.Host().Workdir().File("README.md").Contents(ctx)
	if err != nil {
		panic(err)
	}

	lines := strings.Split(strings.TrimSpace(readme), "\n")
	fmt.Println(lines[0])

}
Output:

# Dagger Go SDK

type HostDirectoryOpts added in v0.4.0

type HostDirectoryOpts struct {
	Exclude []string
	Include []string
}

HostDirectoryOpts contains options for Host.Directory

type HostVariable

type HostVariable struct {
	// contains filtered or unexported fields
}

An environment variable on the host environment

func (*HostVariable) Secret

func (r *HostVariable) Secret() *Secret

A secret referencing the value of this variable

func (*HostVariable) Value

func (r *HostVariable) Value(ctx context.Context) (string, error)

The value of this variable

type HostWorkdirOpts added in v0.4.0

type HostWorkdirOpts struct {
	Exclude []string
	Include []string
}

HostWorkdirOpts contains options for Host.Workdir

type Platform added in v0.4.0

type Platform string

type Project

type Project struct {
	// contains filtered or unexported fields
}

A set of scripts and/or extensions

func (*Project) Extensions

func (r *Project) Extensions(ctx context.Context) ([]Project, error)

extensions in this project

func (*Project) GeneratedCode

func (r *Project) GeneratedCode() *Directory

Code files generated by the SDKs in the project

func (*Project) Install

func (r *Project) Install(ctx context.Context) (bool, error)

install the project's schema

func (*Project) Name

func (r *Project) Name(ctx context.Context) (string, error)

name of the project

func (*Project) SDK

func (r *Project) SDK(ctx context.Context) (string, error)

sdk used to generate code for and/or execute this project

func (*Project) Schema

func (r *Project) Schema(ctx context.Context) (string, error)

schema provided by the project

type Query

type Query struct {
	// contains filtered or unexported fields
}

func (*Query) CacheVolume

func (r *Query) CacheVolume(key string) *CacheVolume

Construct a cache volume for a given cache key

func (*Query) Container

func (r *Query) Container(opts ...ContainerOpts) *Container

Load a container from ID. Null ID returns an empty container (scratch). Optional platform argument initializes new containers to execute and publish as that platform. Platform defaults to that of the builder's host.

func (*Query) DefaultPlatform added in v0.4.0

func (r *Query) DefaultPlatform(ctx context.Context) (Platform, error)

The default platform of the builder.

func (*Query) Directory

func (r *Query) Directory(opts ...DirectoryOpts) *Directory

Load a directory by ID. No argument produces an empty directory.

func (*Query) File

func (r *Query) File(id FileID) *File

Load a file by ID

func (*Query) Git

func (r *Query) Git(url string) *GitRepository

Query a git repository

func (*Query) HTTP

func (r *Query) HTTP(url string) *File

An http remote

func (*Query) Host

func (r *Query) Host() *Host

Query the host environment

func (*Query) Project

func (r *Query) Project(name string) *Project

Look up a project by name

func (*Query) Secret

func (r *Query) Secret(id SecretID) *Secret

Load a secret from its ID

type Request

type Request struct {
	// The literal string representing the GraphQL query, e.g.
	// `query myQuery { myField }`.
	Query string `json:"query"`
	// A JSON-marshalable value containing the variables to be sent
	// along with the query, or nil if there are none.
	Variables interface{} `json:"variables,omitempty"`
	// The GraphQL operation name. The server typically doesn't
	// require this unless there are multiple queries in the
	// document, but genqlient sets it unconditionally anyway.
	OpName string `json:"operationName"`
}

Request contains all the values required to build queries executed by the graphql.Client.

Typically, GraphQL APIs will accept a JSON payload of the form

{"query": "query myQuery { ... }", "variables": {...}}`

and Request marshals to this format. However, MakeRequest may marshal the data in some other way desired by the backend.

type Response

type Response struct {
	Data       interface{}            `json:"data"`
	Extensions map[string]interface{} `json:"extensions,omitempty"`
	Errors     gqlerror.List          `json:"errors,omitempty"`
}

Response that contains data returned by the GraphQL API.

Typically, GraphQL APIs will return a JSON payload of the form

{"data": {...}, "errors": {...}}

It may additionally contain a key named "extensions", that might hold GraphQL protocol extensions. Extensions and Errors are optional, depending on the values returned by the server.

type Secret

type Secret struct {
	// contains filtered or unexported fields
}

A reference to a secret value, which can be handled more safely than the value itself

func (*Secret) ID

func (r *Secret) ID(ctx context.Context) (SecretID, error)

The identifier for this secret

func (*Secret) Plaintext

func (r *Secret) Plaintext(ctx context.Context) (string, error)

The value of this secret

func (*Secret) XXX_GraphQLID added in v0.4.0

func (r *Secret) XXX_GraphQLID(ctx context.Context) (string, error)

XXX_GraphQLID is an internal function. It returns the underlying type ID

func (*Secret) XXX_GraphQLType added in v0.4.0

func (r *Secret) XXX_GraphQLType() string

XXX_GraphQLType is an internal function. It returns the native GraphQL type name

type SecretID

type SecretID string

A unique identifier for a secret

Directories

Path Synopsis
internal

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL