docs: add simple Go guide

Signed-off-by: Tanguy ⧓ Herrmann <tanguy@dagger.io>
This commit is contained in:
Tanguy ⧓ Herrmann 2022-04-13 16:30:28 +02:00
parent 3750422a55
commit f744996556
No known key found for this signature in database
GPG Key ID: 0FE2C1C97F50F73B
6 changed files with 96 additions and 0 deletions

33
docs/guides/1228-go-ci.md Normal file
View File

@ -0,0 +1,33 @@
---
slug: /1227/go-ci
displayed_sidebar: europa
---
# Go project CI
We want to run some tests and build a Go project with the `go` cue package.
## Plan
The plan consist of 2 actions:
- `test` for `go test`
- `build` for `go build`
both use the [Go dagger package](https://github.com/dagger/dagger/tree/main/pkg/universe.dagger.io/go)
```cue file=../plans/go-ci/plan.cue
```
## Go project
The project is a simple program that takes `$NAME` environment variable, use the [Go greeting package](https://github.com/dagger/dagger/tree/main/docs/plans/go-ci/hello/greeting) to print the `greeting.Greet()` out.
```go file=../plans/go-ci/hello/main.go
```
```go file=../plans/go-ci/hello/greeting/greeting.go
```
```go file=../plans/go-ci/hello/greeting/greeting_test.go
```

View File

@ -0,0 +1,3 @@
module dagger.io/testgreetci
go 1.17

View File

@ -0,0 +1,7 @@
package greeting
import "fmt"
func Greeting(name string) string {
return fmt.Sprintf("Hi %s!", name)
}

View File

@ -0,0 +1,13 @@
package greeting
import "testing"
func TestGreeting(t *testing.T) {
name := "Dagger Test"
expect := "Hi Dagger Test!"
value := Greeting(name)
if expect != value {
t.Fatalf("Hello(%s) = '%s', expected '%s'", name, value, expect)
}
}

View File

@ -0,0 +1,16 @@
package main
import (
"fmt"
"os"
"dagger.io/testgreetci/greeting"
)
func main() {
name := os.Getenv("NAME")
if name == "" {
name = "John Doe"
}
fmt.Printf(greeting.Greeting(name))
}

24
docs/plans/go-ci/plan.cue Normal file
View File

@ -0,0 +1,24 @@
package main
import (
"dagger.io/dagger"
"universe.dagger.io/go"
//"universe.dagger.io/bash"
)
dagger.#Plan & {
client: filesystem: "./hello": read: contents: dagger.#FS
actions: {
test: go.#Test & {
source: client.filesystem."./hello".read.contents
package: "./..."
}
build: go.#Build & {
source: client.filesystem."./hello".read.contents
}
}
}