package sdk import ( "context" "io" "log/slog" "time" commonv1 "code.icb4dc0.de/buildr/api/generated/common/v1" ) type Category = commonv1.Category const ( CategoryTool = commonv1.Category_CategoryTool CategoryTask = commonv1.Category_CategoryTask CategoryBuild = commonv1.Category_CategoryBuild CategoryPackage = commonv1.Category_CategoryPackage CategoryRelease = commonv1.Category_CategoryRelease ) 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 } type TaskSpec[T Module] struct { Module T ModuleName string Container *commonv1.ContainerSpec OutputDir string } type Module interface { Execute(ctx ExecutionContext) error Category() Category Type() string } type Helper interface { Help() Help } 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() }