2023-04-14 18:08:59 +00:00
|
|
|
package v1
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"io"
|
2023-08-23 18:14:02 +00:00
|
|
|
"log/slog"
|
2023-05-02 16:44:47 +00:00
|
|
|
"os"
|
|
|
|
|
|
|
|
"code.icb4dc0.de/buildr/buildr/modules/state"
|
2023-04-14 18:08:59 +00:00
|
|
|
|
2023-09-12 16:43:34 +00:00
|
|
|
remotev1 "code.icb4dc0.de/buildr/api/generated/remote/v1"
|
2023-08-23 18:14:02 +00:00
|
|
|
|
2023-04-14 18:08:59 +00:00
|
|
|
"code.icb4dc0.de/buildr/buildr/modules"
|
|
|
|
)
|
|
|
|
|
|
|
|
var _ modules.ExecutionContext = (*ContainerExecutionContext)(nil)
|
|
|
|
|
|
|
|
func NewContainerExecutionContext(
|
|
|
|
ctx context.Context,
|
|
|
|
logger *slog.Logger,
|
2023-05-24 20:10:01 +00:00
|
|
|
name,
|
2023-04-14 18:08:59 +00:00
|
|
|
workingDir string,
|
2023-09-12 16:43:34 +00:00
|
|
|
sender StreamSender[*remotev1.ExecutionServerMessage],
|
2023-05-02 16:44:47 +00:00
|
|
|
remoteState *RemoteStateClient,
|
2023-04-14 18:08:59 +00:00
|
|
|
) *ContainerExecutionContext {
|
|
|
|
return &ContainerExecutionContext{
|
2023-05-02 16:44:47 +00:00
|
|
|
Context: ctx,
|
2023-05-24 20:10:01 +00:00
|
|
|
name: name,
|
2023-05-02 16:44:47 +00:00
|
|
|
remoteState: remoteState,
|
|
|
|
logger: logger,
|
|
|
|
workingDir: workingDir,
|
|
|
|
stdOutWriter: io.MultiWriter(newTaskOutputWriter(
|
2023-09-12 16:43:34 +00:00
|
|
|
remotev1.TaskOutputSource_TASK_OUTPUT_SOURCE_STDOUT,
|
2023-04-18 19:30:46 +00:00
|
|
|
sender,
|
2023-05-02 16:44:47 +00:00
|
|
|
), os.Stdout),
|
|
|
|
stdErrWriter: io.MultiWriter(newTaskOutputWriter(
|
2023-09-12 16:43:34 +00:00
|
|
|
remotev1.TaskOutputSource_TASK_OUTPUT_SOURCE_STDERR,
|
2023-04-18 19:30:46 +00:00
|
|
|
sender,
|
2023-05-02 16:44:47 +00:00
|
|
|
), os.Stderr),
|
2023-04-14 18:08:59 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
type ContainerExecutionContext struct {
|
|
|
|
context.Context
|
2023-06-22 16:06:56 +00:00
|
|
|
stdOutWriter io.Writer
|
|
|
|
stdErrWriter io.Writer
|
2023-04-18 19:30:46 +00:00
|
|
|
logger *slog.Logger
|
2023-05-02 16:44:47 +00:00
|
|
|
remoteState *RemoteStateClient
|
2023-05-24 20:10:01 +00:00
|
|
|
name string
|
2023-04-18 19:30:46 +00:00
|
|
|
workingDir string
|
2023-04-14 18:08:59 +00:00
|
|
|
}
|
|
|
|
|
2023-05-24 20:10:01 +00:00
|
|
|
func (c ContainerExecutionContext) Name() string {
|
|
|
|
return c.name
|
|
|
|
}
|
|
|
|
|
2023-05-02 16:44:47 +00:00
|
|
|
func (c ContainerExecutionContext) GetState(ctx context.Context, key string) ([]byte, state.Metadata, error) {
|
|
|
|
return c.remoteState.GetState(ctx, key)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c ContainerExecutionContext) SetState(ctx context.Context, key string, value []byte) error {
|
|
|
|
return c.remoteState.SetState(ctx, key, value)
|
|
|
|
}
|
|
|
|
|
2023-04-14 18:08:59 +00:00
|
|
|
func (c ContainerExecutionContext) WorkingDir() string {
|
|
|
|
return c.workingDir
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c ContainerExecutionContext) OutDir() string {
|
|
|
|
return c.workingDir
|
|
|
|
}
|
|
|
|
|
2023-04-24 08:37:08 +00:00
|
|
|
func (c ContainerExecutionContext) BinariesDir() string {
|
2023-04-20 09:23:13 +00:00
|
|
|
return "/opt/buildr/bin"
|
2023-04-14 18:08:59 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (c ContainerExecutionContext) StdOut() io.Writer {
|
2023-04-18 19:30:46 +00:00
|
|
|
return c.stdOutWriter
|
2023-04-14 18:08:59 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (c ContainerExecutionContext) StdErr() io.Writer {
|
2023-04-18 19:30:46 +00:00
|
|
|
return c.stdErrWriter
|
2023-04-14 18:08:59 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (c ContainerExecutionContext) Logger() *slog.Logger {
|
|
|
|
return c.logger
|
|
|
|
}
|