wasi-module-sdk-go/api.go

76 lines
1.3 KiB
Go
Raw Normal View History

2023-05-08 13:21:31 +00:00
package sdk
import (
"context"
"io"
2023-08-15 20:10:30 +00:00
"log/slog"
2023-05-08 13:21:31 +00:00
"time"
2023-08-15 19:46:02 +00:00
2023-09-05 20:06:42 +00:00
commonv1 "code.icb4dc0.de/buildr/api/generated/common/v1"
2023-05-08 13:21:31 +00:00
)
2023-09-05 20:06:42 +00:00
type Category = commonv1.Category
2023-05-08 13:21:31 +00:00
const (
2023-09-05 20:06:42 +00:00
CategoryTool = commonv1.Category_CategoryTool
CategoryTask = commonv1.Category_CategoryTask
CategoryBuild = commonv1.Category_CategoryBuild
CategoryPackage = commonv1.Category_CategoryPackage
CategoryRelease = commonv1.Category_CategoryRelease
2023-05-08 13:21:31 +00:00
)
type StateMetadata struct {
ModifiedAt time.Time
TTL *time.Time
}
type ExecutionContext interface {
context.Context
WorkingDir() string
OutDir() string
BinariesDir() string
StdOut() io.Writer
StdErr() io.Writer
Logger() *slog.Logger
GetState(ctx context.Context, key string) ([]byte, StateMetadata, error)
SetState(ctx context.Context, key string, value []byte) error
}
2023-08-15 19:46:02 +00:00
type TaskSpec[T Module] struct {
Module T
ModuleName string
2023-09-05 20:06:42 +00:00
Container *commonv1.ContainerSpec
2023-08-15 19:46:02 +00:00
OutputDir string
}
2023-05-08 13:21:31 +00:00
type Module interface {
Execute(ctx ExecutionContext) error
Category() Category
Type() string
}
type Helper interface {
Help() Help
}
2023-05-08 13:21:31 +00:00
type BinaryNamer interface {
BinaryName() string
}
type ToolModule interface {
Module
BinaryNamer
}
type Factory interface {
Create() Module
}
var _ Factory = (*ModuleFactoryFunc)(nil)
type ModuleFactoryFunc func() Module
func (f ModuleFactoryFunc) Create() Module {
return f()
}