Dagger
Search

z5labs

and release pipelines for Go projects. Construct via the GoApp or GoLib
factories on Z5labs; call the terminal Ci method to run the pipeline.

Installation

dagger install github.com/z5labs/devex/daggerverse/z5labs@93616a322270189d6f9aa8985071fa6dd1f9282e

Types

Z5Labs 🔗

Z5labs is the root module type. Construct project archetypes via GoApp / GoLib.

goApp() 🔗

GoApp wires up an opinionated CI/release pipeline for a package main Go application. Call Ci to run checks + multi-arch buildpublish, or Builder to produce the same image single-arch locally.

publishOn is a regex evaluated against source repo’s HEAD refs (after normalizing refs/remotes/origin/Xrefs/heads/X); matches trigger publish. When registry is set, auth is required.

platforms defaults to [“linux/amd64”,“linux/arm64”].

registryService, when non-nil, is bound as the “registry” alias on the publishing container — used by tests against a local registry:2 service and by callers whose private registry is itself a Dagger service.

Return Type
GoApp !
Arguments
NameTypeDefault ValueDescription
sourceDirectory !-No description provided
pkgString "."No description provided
binaryNameString -No description provided
publishOnString "^refs/heads/main$"No description provided
registryString -No description provided
authUsernameString "ci"No description provided
authSecret -No description provided
lintConfigFile -No description provided
platforms[String ! ] -No description provided
registryServiceService -No description provided
Example
dagger -m github.com/z5labs/devex/daggerverse/z5labs@93616a322270189d6f9aa8985071fa6dd1f9282e call \
 go-app --source DIR_PATH
func (m *MyModule) Example(source *dagger.Directory) *dagger.Z5LabsGoApp  {
	return dag.
			Z5labs().
			Goapp(source)
}
@function
def example(source: dagger.Directory) -> dagger.Z5LabsGoApp:
	return (
		dag.z5labs()
		.goapp(source)
	)
@func()
example(source: Directory): Z5LabsGoApp {
	return dag
		.z5labs()
		.goApp(source)
}

goLib() 🔗

GoLib wires up the checks-only pipeline for a Go library. v1 has no publish equivalent for libraries.

Return Type
GoLib !
Arguments
NameTypeDefault ValueDescription
sourceDirectory !-No description provided
lintConfigFile -No description provided
Example
dagger -m github.com/z5labs/devex/daggerverse/z5labs@93616a322270189d6f9aa8985071fa6dd1f9282e call \
 go-lib --source DIR_PATH
func (m *MyModule) Example(source *dagger.Directory) *dagger.Z5LabsGoLib  {
	return dag.
			Z5labs().
			Golib(source)
}
@function
def example(source: dagger.Directory) -> dagger.Z5LabsGoLib:
	return (
		dag.z5labs()
		.golib(source)
	)
@func()
example(source: Directory): Z5LabsGoLib {
	return dag
		.z5labs()
		.goLib(source)
}

GoApp 🔗

GoApp is the application archetype. Construct via Z5labs.GoApp.

builder() 🔗

Builder returns the local-dev sibling that produces the same image CI would publish, single-arch (host platform).

Return Type
Builder !
Example
dagger -m github.com/z5labs/devex/daggerverse/z5labs@93616a322270189d6f9aa8985071fa6dd1f9282e call \
 go-app --source DIR_PATH \
 builder
func (m *MyModule) Example(source *dagger.Directory) *dagger.Z5LabsBuilder  {
	return dag.
			Z5labs().
			Goapp(source).
			Builder()
}
@function
def example(source: dagger.Directory) -> dagger.Z5LabsBuilder:
	return (
		dag.z5labs()
		.goapp(source)
		.builder()
	)
@func()
example(source: Directory): Z5LabsBuilder {
	return dag
		.z5labs()
		.goApp(source)
		.builder()
}

ci() 🔗

Ci runs the standardized GoApp pipeline: verify .git exists, run the shared check stages (fmt+vet+lint+test -race) once, build a scratch image per platform, then conditionally publish per the publishOn filter.

Publish is a side-effecting operation against an external registry, so the whole pipeline is uncached — re-runs (e.g. after a retry, or after a new ref appears within the same engine session) must actually push.

Return Type
Void !
Example
dagger -m github.com/z5labs/devex/daggerverse/z5labs@93616a322270189d6f9aa8985071fa6dd1f9282e call \
 go-app --source DIR_PATH \
 ci
func (m *MyModule) Example(ctx context.Context, source *dagger.Directory)   {
	return dag.
			Z5labs().
			Goapp(source).
			Ci(ctx)
}
@function
async def example(source: dagger.Directory) -> None:
	return await (
		dag.z5labs()
		.goapp(source)
		.ci()
	)
@func()
async example(source: Directory): Promise<void> {
	return dag
		.z5labs()
		.goApp(source)
		.ci()
}

GoLib 🔗

GoLib is the library archetype. Construct via Z5labs.GoLib.

ci() 🔗

Ci runs the standardized check stages (fmt, vet, lint, test -race) against the supplied library source.

Return Type
Void !
Example
dagger -m github.com/z5labs/devex/daggerverse/z5labs@93616a322270189d6f9aa8985071fa6dd1f9282e call \
 go-lib --source DIR_PATH \
 ci
func (m *MyModule) Example(ctx context.Context, source *dagger.Directory)   {
	return dag.
			Z5labs().
			Golib(source).
			Ci(ctx)
}
@function
async def example(source: dagger.Directory) -> None:
	return await (
		dag.z5labs()
		.golib(source)
		.ci()
	)
@func()
async example(source: Directory): Promise<void> {
	return dag
		.z5labs()
		.goLib(source)
		.ci()
}

Builder 🔗

Builder produces the same image GoApp.Ci would publish, single-arch (host platform). Used for local development to verify the artifact before pushing.

binary() 🔗

Binary returns the host-platform compiled binary as a *dagger.File.

Return Type
File !
Example
dagger -m github.com/z5labs/devex/daggerverse/z5labs@93616a322270189d6f9aa8985071fa6dd1f9282e call \
 go-app --source DIR_PATH \
 builder \
 binary
func (m *MyModule) Example(source *dagger.Directory) *dagger.File  {
	return dag.
			Z5labs().
			Goapp(source).
			Builder().
			Binary()
}
@function
def example(source: dagger.Directory) -> dagger.File:
	return (
		dag.z5labs()
		.goapp(source)
		.builder()
		.binary()
	)
@func()
example(source: Directory): File {
	return dag
		.z5labs()
		.goApp(source)
		.builder()
		.binary()
}

container() 🔗

Container returns the host-platform scratch image containing the compiled binary at /app/ with that path as entrypoint.

Return Type
Container !
Example
dagger -m github.com/z5labs/devex/daggerverse/z5labs@93616a322270189d6f9aa8985071fa6dd1f9282e call \
 go-app --source DIR_PATH \
 builder \
 container
func (m *MyModule) Example(source *dagger.Directory) *dagger.Container  {
	return dag.
			Z5labs().
			Goapp(source).
			Builder().
			Container()
}
@function
def example(source: dagger.Directory) -> dagger.Container:
	return (
		dag.z5labs()
		.goapp(source)
		.builder()
		.container()
	)
@func()
example(source: Directory): Container {
	return dag
		.z5labs()
		.goApp(source)
		.builder()
		.container()
}