Add dagger golang use case

Signed-off-by: Vasek - Tom C <tom.chauveau@epitech.eu>
This commit is contained in:
Tom Chauveau 2022-03-15 14:32:26 +01:00 committed by Vasek - Tom C
parent 21c6af0678
commit 2d3acc61e0
No known key found for this signature in database
GPG Key ID: 175D82E572427960
5 changed files with 205 additions and 0 deletions

View File

@ -0,0 +1,32 @@
package main
import (
"dagger.io/dagger"
"universe.dagger.io/go"
)
dagger.#Plan & {
client: {
// Retrieve go source code
filesystem: ".": read: {
contents: dagger.#FS
include: ["go.mod", "go.sum", "**/*.go"]
}
}
actions: {
// Alias to code directory
_code: client.filesystem.".".read.contents
// Improved go base image with useful tool
// Enable cgo by installing build-base
_base: go.#Image & {
packages: "build-base": version: _
}
// Build go project
build: go.#Build & {
source: _code
}
}
}

View File

@ -0,0 +1,69 @@
package main
import (
"dagger.io/dagger"
"universe.dagger.io/go"
"universe.dagger.io/docker"
"universe.dagger.io/alpine"
)
dagger.#Plan & {
client: {
// Retrieve go source code
filesystem: ".": read: {
contents: dagger.#FS
include: ["go.mod", "go.sum", "**/*.go"]
}
// Retrieve docker password from environment
env: DOCKER_PASSWORD: dagger.#Secret
}
actions: {
// Alias to code
_code: client.filesystem.".".read.contents
// Improved go base image with useful tool
_base: go.#Image & {
packages: "build-base": version: _
}
// Build go project
build: go.#Build & {
source: _code
}
// Build docker image (depends on build)
image: {
_base: alpine.#Build & {}
docker.#Build & {
steps: [
docker.#Copy & {
input: _base.output
contents: build.output
dest: "/usr/bin"
},
docker.#Set & {
config: cmd: ["/<path>/<to>/<your>/<binary>"]
},
]
}
}
// Push image to remote registry (depends on image)
push: {
// Docker username
_dockerUsername: "<docker username>"
docker.#Push & {
"image": image.output
dest: "\(_dockerUsername)/<repository>:<tag>"
auth: {
username: "\(_dockerUsername)"
secret: client.env.DOCKER_PASSWORD
}
}
}
}
}

View File

@ -0,0 +1,34 @@
package main
import (
"dagger.io/dagger"
"universe.dagger.io/go"
)
dagger.#Plan & {
client: {
// Retrieve go source code
filesystem: ".": read: {
contents: dagger.#FS
include: ["go.mod", "go.sum", "**/*.go"]
}
}
actions: {
// Alias to code directory
_code: client.filesystem.".".read.contents
// Improved go base image with useful tool
// Enable cgo by installing build-base
_base: go.#Image & {
packages: "build-base": version: _
}
// Run go unit test
"unit-test": go.#Test & {
source: _code
package: "./..."
input: _base.output
}
}
}

View File

@ -0,0 +1,61 @@
---
slug: /1216/ci-cd-for-go-project
displayed_sidebar: europa
---
# Go on Docker Hub
Dagger stand as a powerful CI/CD tool that works on any environment.
For instance, you can use [go package](https://github.com/dagger/dagger/tree/main/pkg/universe.dagger.io/go)
to control the whole CI/CD process, from test to push into a remote registry.
:::tip
Following examples can be used as a template for any standalone go project.
:::
## Test
```cue file=../tests/use-cases/ci-cd-for-go-project/test/dagger.cue
```
You can then run unit test in your go project with
```shell
dagger do unit-test
```
<!-- FIXME: we should write a bunch of documentation about TDD with dagger -->
:::tip
You can also use dagger to write integration tests
:::
## Build
```cue file=../tests/use-cases/ci-cd-for-go-project/build/dagger.cue
```
:::tip
You can control the binary platform with `os` and `arch` field.
:::
You can then build your binary with
```shell
dagger do build
```
## Push
```cue file=../tests/use-cases/ci-cd-for-go-project/push/dagger.cue
```
You can then build and push your go project with
```shell
dagger do push
```
## Push multi-platform
Coming soon

View File

@ -101,6 +101,15 @@ module.exports = {
"use-cases/go-docker-swarm",
],
},
{
type: "category",
label: "Use Cases",
collapsible: false,
collapsed: false,
items: [
"use-cases/go-on-docker-hub"
],
},
{
type: "link",
label: "⬅️ Dagger 0.1",