package module import ( "fmt" "log/slog" "os" rpcv1 "code.icb4dc0.de/buildr/api/generated/rpc/v1" "code.icb4dc0.de/buildr/wasi-module-sdk-go/exec" sdk "code.icb4dc0.de/buildr/wasi-module-sdk-go" ) var ( _ sdk.Module = (*HelloWorld)(nil) _ sdk.Helper = (*HelloWorld)(nil) ) type HelloWorld struct { Name string } func (h HelloWorld) Execute(ctx sdk.ExecutionContext) error { logger := ctx.Logger() logger.Info("Executing hello world", slog.String("name", h.Name)) if f, err := os.CreateTemp(ctx.OutDir(), "hello_world.*.txt"); err != nil { return err } else if err = f.Close(); err != nil { return err } if foundPath, err := exec.LookPath("go"); err != nil { return err } else { logger.Info("found path for go", slog.String("path", foundPath)) } cmd := exec.NewCommand("/bin/bash", "-c", `set -ex; echo "Hello process execution!"`) if err := cmd.Run(); err != nil { return err } fmt.Println("Hello world") _, _ = fmt.Fprint(ctx.StdOut(), "Hello world via pipeline") return nil } func (HelloWorld) Category() sdk.Category { return sdk.CategoryTask } func (HelloWorld) Type() string { return "hello_world" } func (h HelloWorld) Help() sdk.Help { return sdk.Help{ Name: "Hello World", Description: `Example to illustrate how to use the Buildr plugin API.`, Examples: []sdk.Example{ { Name: "Simple example", Description: `well, you know, hello world`, Spec: sdk.TaskSpec[sdk.Module]{ ModuleName: "hello_world", Module: HelloWorld{ Name: "Ted Tester", }, }, }, { Name: "Container example", Description: `well, you know, hello world, but in a container!`, Spec: sdk.TaskSpec[sdk.Module]{ ModuleName: "hello_world", Module: HelloWorld{ Name: "Paul Player", }, Container: &rpcv1.ContainerSpec{ Image: "busybox", }, }, }, }, } }