package main
import (
"dagger.io/dagger"
"universe.dagger.io/go"
"universe.dagger.io/docker"
"universe.dagger.io/alpine"
)
dagger.#Plan & {
client: {
filesystem: ".": read: {
contents: dagger.#FS
include: ["go.mod", "go.sum", "**/*.go"]
}
env: DOCKER_PASSWORD: dagger.#Secret
actions: {
// Alias to code
_code: client.filesystem.".".read.contents
// Improve go base image with useful tool
// Enable cgo by installing build-base
_base: go.#Image & {
packages: {
"build-base": version: _
bash: version: _
// Run go unit tests
unitTest: go.#Test & {
source: _code
package: "./..."
input: _base.output
// Build go project
build: go.#Build & {
// Build docker image (depends on build)
image: docker.#Build & {
steps: [
alpine.#Build,
docker.#Copy & {
contents: build.output
dest: "/usr/bin"
},
docker.#Set & {
config: cmd: ["<path/to/binary>"]
]
// Push image to remote registry (depends on image)
push: {
// Docker username
_dockerUsername: "<my_username>"
docker.#Push & {
"image": image.output
dest: "\(_dockerUsername)/<my_repository>"
auth: {
username: _dockerUsername
secret: client.env.DOCKER_PASSWORD