Improve go use case example according to Gerhard's review
Signed-off-by: Vasek - Tom C <tom.chauveau@epitech.eu>
This commit is contained in:
committed by
Vasek - Tom C
parent
2d3acc61e0
commit
6fe49a0294
@@ -14,48 +14,104 @@ to control the whole CI/CD process, from test to push into a remote registry.
|
||||
Following examples can be used as a template for any standalone go project.
|
||||
:::
|
||||
|
||||
## Test
|
||||
## Retrieve Go project
|
||||
|
||||
```cue file=../tests/use-cases/ci-cd-for-go-project/test/dagger.cue
|
||||
First important step is to make go project accessible in dagger plan.
|
||||
|
||||
You can indeed choose which files to include in the filesystem.
|
||||
Since it's a Golang project, filesystem should contain module and every go
|
||||
source files:
|
||||
|
||||
```cue file=../tests/use-cases/ci-cd-for-go-project/retrieve-go-project/dagger.cue
|
||||
```
|
||||
|
||||
You can then run unit test in your go project with
|
||||
:::tip
|
||||
To make it more accessible in actions, you can set a private field that will
|
||||
act as an alias.
|
||||
:::
|
||||
|
||||
```shell
|
||||
dagger do unit-test
|
||||
## Build a Go base image
|
||||
|
||||
[Dagger go universe](https://github.com/dagger/dagger/tree/main/pkg/universe.dagger.io/go)
|
||||
provide a [base image](https://github.com/dagger/dagger/blob/main/pkg/universe.dagger.io/go/image.cue)
|
||||
to build your pipeline but your project may use `CGO` or any external dependencies.
|
||||
|
||||
You can customize that base image to install required dependencies:
|
||||
|
||||
```cue file=../tests/use-cases/ci-cd-for-go-project/base.cue.fragment
|
||||
```
|
||||
|
||||
<!-- FIXME: we should write a bunch of documentation about TDD with dagger -->
|
||||
## Run unit test
|
||||
|
||||
Before deliver your application, you certainly want to run unit test.
|
||||
|
||||
By using previous steps, you can use the [test](https://github.com/dagger/dagger/blob/main/pkg/universe.dagger.io/go/test.cue)
|
||||
definition to run your unit test:
|
||||
|
||||
```cue file=../tests/use-cases/ci-cd-for-go-project/test.cue.fragment
|
||||
```
|
||||
|
||||
<!-- FIXME(TomChv): we should write a bunch of documentation about TDD with dagger -->
|
||||
:::tip
|
||||
You can also use dagger to write integration tests
|
||||
:::
|
||||
|
||||
## Build
|
||||
## Build Go binary
|
||||
|
||||
```cue file=../tests/use-cases/ci-cd-for-go-project/build/dagger.cue
|
||||
To put your go project on docker hub, you first need to compile a binary.
|
||||
|
||||
Go universe expose a [build](https://github.com/dagger/dagger/blob/main/pkg/universe.dagger.io/go/build.cue)
|
||||
definition so you can build a binary:
|
||||
|
||||
```cue file=../tests/use-cases/ci-cd-for-go-project/build.cue.fragment
|
||||
```
|
||||
|
||||
:::tip
|
||||
You can control the binary platform with `os` and `arch` field.
|
||||
:::
|
||||
|
||||
You can then build your binary with
|
||||
## Prepare docker image
|
||||
|
||||
```shell
|
||||
dagger do build
|
||||
To make it usable by other user, you must put your binary in an image and set an entrypoint.
|
||||
|
||||
For optimisation purpose, you can use alpine as base image to contain your binary:
|
||||
|
||||
```cue file=../tests/use-cases/ci-cd-for-go-project/image.cue.fragment
|
||||
```
|
||||
|
||||
## Push
|
||||
## Push to Docker Hub
|
||||
|
||||
```cue file=../tests/use-cases/ci-cd-for-go-project/push/dagger.cue
|
||||
To push an image to docker hub, you will need to forward credential to allow
|
||||
dagger push.
|
||||
|
||||
To not hard code your docker password in the plan, you can retrieve it as an
|
||||
environment value:
|
||||
|
||||
```cue
|
||||
dagger.#Plan & {
|
||||
client: {
|
||||
// ...
|
||||
|
||||
env: DOCKER_PASSWORD: dagger.#Secret
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
You can then build and push your go project with
|
||||
You can now push your image:
|
||||
|
||||
```shell
|
||||
dagger do push
|
||||
```cue file=../tests/use-cases/ci-cd-for-go-project/push.cue.fragment
|
||||
```
|
||||
|
||||
## Complete CI/CD
|
||||
|
||||
After merging all examples, you will have a complete CI/CD to deliver a go
|
||||
binary on Docker Hub.
|
||||
|
||||
```cue file=../tests/use-cases/ci-cd-for-go-project/complete-ci-cd/dagger.cue
|
||||
```
|
||||
|
||||
You can then use `dagger do` to select which action you want to run.
|
||||
|
||||
## Push multi-platform
|
||||
|
||||
Coming soon
|
||||
Coming soon...
|
||||
|
Reference in New Issue
Block a user