Add dagger golang use case
Signed-off-by: Vasek - Tom C <tom.chauveau@epitech.eu>
This commit is contained in:
parent
21c6af0678
commit
2d3acc61e0
32
docs/tests/use-cases/ci-cd-for-go-project/build/dagger.cue
Normal file
32
docs/tests/use-cases/ci-cd-for-go-project/build/dagger.cue
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
69
docs/tests/use-cases/ci-cd-for-go-project/push/dagger.cue
Normal file
69
docs/tests/use-cases/ci-cd-for-go-project/push/dagger.cue
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
34
docs/tests/use-cases/ci-cd-for-go-project/test/dagger.cue
Normal file
34
docs/tests/use-cases/ci-cd-for-go-project/test/dagger.cue
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
61
docs/use-cases/1216-go-on-docker-hub.md
Normal file
61
docs/use-cases/1216-go-on-docker-hub.md
Normal 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
|
@ -101,6 +101,15 @@ module.exports = {
|
|||||||
"use-cases/go-docker-swarm",
|
"use-cases/go-docker-swarm",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
type: "category",
|
||||||
|
label: "Use Cases",
|
||||||
|
collapsible: false,
|
||||||
|
collapsed: false,
|
||||||
|
items: [
|
||||||
|
"use-cases/go-on-docker-hub"
|
||||||
|
],
|
||||||
|
},
|
||||||
{
|
{
|
||||||
type: "link",
|
type: "link",
|
||||||
label: "⬅️ Dagger 0.1",
|
label: "⬅️ Dagger 0.1",
|
||||||
|
Reference in New Issue
Block a user