diff --git a/go.mod b/go.mod index fe150d3..572f90c 100644 --- a/go.mod +++ b/go.mod @@ -5,15 +5,15 @@ go 1.24.0 toolchain go1.24.1 require ( - github.com/criyle/go-judge/pb v1.0.1 // TODO: update to latest version + github.com/criyle/go-judge/pb v1.3.2 github.com/go-git/go-git/v5 v5.16.2 github.com/jinzhu/copier v0.4.0 github.com/joint-online-judge/go-gitignore v0.0.0-20250212104351-ad79a46f8dcc github.com/koding/multiconfig v0.0.0-20171124222453-69c27309b2d7 github.com/mcuadros/go-defaults v1.2.0 github.com/mitchellh/mapstructure v1.5.0 - google.golang.org/grpc v1.75.1 - google.golang.org/protobuf v1.36.9 + google.golang.org/grpc v1.77.0 + google.golang.org/protobuf v1.36.11 ) require ( @@ -37,11 +37,11 @@ require ( github.com/sergi/go-diff v1.4.0 // indirect github.com/skeema/knownhosts v1.3.1 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect - golang.org/x/crypto v0.45.0 // indirect - golang.org/x/net v0.47.0 // indirect - golang.org/x/sys v0.38.0 // indirect - golang.org/x/text v0.31.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250929231259-57b25ae835d4 // indirect + golang.org/x/crypto v0.46.0 // indirect + golang.org/x/net v0.48.0 // indirect + golang.org/x/sys v0.39.0 // indirect + golang.org/x/text v0.32.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251213004720-97cd9d5aeac2 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/go.sum b/go.sum index 43b8a90..6a92f34 100644 --- a/go.sum +++ b/go.sum @@ -13,10 +13,8 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPd github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0= github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= -github.com/criyle/go-judge/pb v1.0.0 h1:8A4zHPPCGCDTuFY1GW5Hqpg+8ETIwzgXxiRpYKKb2zA= -github.com/criyle/go-judge/pb v1.0.0/go.mod h1:hjgixgK9NH9ktwc29xbXVdZDOlKfEkRkEbZ4W5bOMmw= -github.com/criyle/go-judge/pb v1.0.1 h1:jahloTEObPmfHK4js3Tudpk3kY9eOrzsXrYmSDlV2l8= -github.com/criyle/go-judge/pb v1.0.1/go.mod h1:oANRvhBOHpu4WZhbWnm5IeTaLmTbGdZNUNwcnmQe6jI= +github.com/criyle/go-judge/pb v1.3.2 h1:S0c0EqRF+xePOwcZxSb9mPV+bkXgfOX9f7SQMrcdeb4= +github.com/criyle/go-judge/pb v1.3.2/go.mod h1:QfjmF1w4t5ODXikuUcy8Alqb901R6p0HDxJXGKZy0NE= github.com/cyphar/filepath-securejoin v0.5.0 h1:hIAhkRBMQ8nIeuVwcAoymp7MY4oherZdAxD+m0u9zaw= github.com/cyphar/filepath-securejoin v0.5.0/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964 h1:y5HC9v93H5EPKqaS1UYVg1uYah5Xf51mBfIoWehClUQ= @@ -100,49 +98,49 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= -go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= -go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= -go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= -go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= -go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= -go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= -go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI= -go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg= -go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc= -go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps= -go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= -go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= +go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= +go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= +go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= +go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= +go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= +go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= +go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= +go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg= +go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM= +go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= +go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= +go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q= -golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4= +golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU= +golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= -golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= +golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= +golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= -golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= +golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU= -golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254= +golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q= +golang.org/x/term v0.38.0/go.mod h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= -golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= +golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= +golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250929231259-57b25ae835d4 h1:i8QOKZfYg6AbGVZzUAY3LrNWCKF8O6zFisU9Wl9RER4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250929231259-57b25ae835d4/go.mod h1:HSkG/KdJWusxU1F6CNrwNDjBMgisKxGnc5dAZfT0mjQ= -google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= -google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= -google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw= -google.golang.org/protobuf v1.36.9/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251213004720-97cd9d5aeac2 h1:2I6GHUeJ/4shcDpoUlLs/2WPnhg7yJwvXtqcMJt9liA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251213004720-97cd9d5aeac2/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= +google.golang.org/grpc v1.77.0 h1:wVVY6/8cGA6vvffn+wWK5ToddbgdU3d8MNENr4evgXM= +google.golang.org/grpc v1.77.0/go.mod h1:z0BY1iVj0q8E1uSQCjL9cppRj+gnZjzDnzV0dHhrNig= +google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= +google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/internal/executor/sandbox/convert.go b/internal/executor/sandbox/convert.go index fd92458..c907e17 100644 --- a/internal/executor/sandbox/convert.go +++ b/internal/executor/sandbox/convert.go @@ -8,33 +8,34 @@ import ( "github.com/criyle/go-judge/pb" "github.com/joint-online-judge/JOJ3/internal/stage" + "google.golang.org/protobuf/types/known/emptypb" ) // copied from https://github.com/criyle/go-judge/blob/master/cmd/go-judge-shell/grpc.go func convertPBCmd(cmd []stage.Cmd) []*pb.Request_CmdType { ret := make([]*pb.Request_CmdType, 0, len(cmd)) for _, c := range cmd { - ret = append(ret, &pb.Request_CmdType{ - Args: c.Args, - Env: c.Env, - Tty: c.TTY, - Files: convertPBFiles([]*stage.CmdFile{c.Stdin, c.Stdout, c.Stderr}), - CpuTimeLimit: c.CPULimit, - ClockTimeLimit: c.ClockLimit, - MemoryLimit: c.MemoryLimit, - StackLimit: c.StackLimit, - ProcLimit: c.ProcLimit, - CpuRateLimit: c.CPURateLimit, - CpuSetLimit: c.CPUSetLimit, - DataSegmentLimit: c.DataSegmentLimit, - AddressSpaceLimit: c.AddressSpaceLimit, - CopyIn: convertPBCopyIn(c.CopyIn, c.CopyInDir), - CopyOut: convertPBCopyOut(c.CopyOut), - CopyOutCached: convertPBCopyOut(c.CopyOutCached), - CopyOutMax: c.CopyOutMax, - CopyOutDir: c.CopyOutDir, - Symlinks: convertSymlink(c.CopyIn), - }) + req := &pb.Request_CmdType{} + req.SetArgs(c.Args) + req.SetEnv(c.Env) + req.SetTty(c.TTY) + req.SetFiles(convertPBFiles([]*stage.CmdFile{c.Stdin, c.Stdout, c.Stderr})) + req.SetCpuTimeLimit(c.CPULimit) + req.SetClockTimeLimit(c.ClockLimit) + req.SetMemoryLimit(c.MemoryLimit) + req.SetStackLimit(c.StackLimit) + req.SetProcLimit(c.ProcLimit) + req.SetCpuRateLimit(c.CPURateLimit) + req.SetCpuSetLimit(c.CPUSetLimit) + req.SetDataSegmentLimit(c.DataSegmentLimit) + req.SetAddressSpaceLimit(c.AddressSpaceLimit) + req.SetCopyIn(convertPBCopyIn(c.CopyIn, c.CopyInDir)) + req.SetCopyOut(convertPBCopyOut(c.CopyOut)) + req.SetCopyOutCached(convertPBCopyOut(c.CopyOutCached)) + req.SetCopyOutMax(c.CopyOutMax) + req.SetCopyOutDir(c.CopyOutDir) + req.SetSymlinks(convertSymlink(c.CopyIn)) + ret = append(ret, req) } return ret } @@ -81,10 +82,10 @@ func convertPBCopyOut(copyOut []string) []*pb.Request_CmdCopyOutFile { optional = true n = strings.TrimSuffix(n, "?") } - rt = append(rt, &pb.Request_CmdCopyOutFile{ - Name: n, - Optional: optional, - }) + elem := &pb.Request_CmdCopyOutFile{} + elem.SetName(n) + elem.SetOptional(optional) + rt = append(rt, elem) } return rt } @@ -113,6 +114,7 @@ func convertPBFiles(files []*stage.CmdFile) []*pb.Request_File { } func convertPBFile(i stage.CmdFile) *pb.Request_File { + req := &pb.Request_File{} switch { case i.Src != nil: if !filepath.IsAbs(*i.Src) { @@ -128,18 +130,34 @@ func convertPBFile(i stage.CmdFile) *pb.Request_File { s = []byte{} slog.Error("convert pb file read file", "path", *i.Src, "error", err) } - return &pb.Request_File{File: &pb.Request_File_Memory{Memory: &pb.Request_MemoryFile{Content: s}}} + m := &pb.Request_MemoryFile{} + m.SetContent(s) + req.SetMemory(m) + return req case i.Content != nil: s := strToBytes(*i.Content) - return &pb.Request_File{File: &pb.Request_File_Memory{Memory: &pb.Request_MemoryFile{Content: s}}} + m := &pb.Request_MemoryFile{} + m.SetContent(s) + req.SetMemory(m) + return req case i.FileID != nil: - return &pb.Request_File{File: &pb.Request_File_Cached{Cached: &pb.Request_CachedFile{FileID: *i.FileID}}} + c := &pb.Request_CachedFile{} + c.SetFileID(*i.FileID) + req.SetCached(c) + return req case i.Name != nil && i.Max != nil: - return &pb.Request_File{File: &pb.Request_File_Pipe{Pipe: &pb.Request_PipeCollector{Name: *i.Name, Max: *i.Max, Pipe: i.Pipe}}} + p := &pb.Request_PipeCollector{} + p.SetName(*i.Name) + p.SetMax(*i.Max) + p.SetPipe(i.Pipe) + req.SetPipe(p) + return req case i.StreamIn: - return &pb.Request_File{File: &pb.Request_File_StreamIn{}} + req.SetStreamIn(&emptypb.Empty{}) + return req case i.StreamOut: - return &pb.Request_File{File: &pb.Request_File_StreamOut{}} + req.SetStreamOut(&emptypb.Empty{}) + return req } return nil } @@ -148,17 +166,17 @@ func convertPBResult(res []*pb.Response_Result) []stage.ExecutorResult { ret := make([]stage.ExecutorResult, 0, len(res)) for _, r := range res { ret = append(ret, stage.ExecutorResult{ - Status: stage.Status(r.Status), - ExitStatus: int(r.ExitStatus), - Error: r.Error, - Time: r.Time, - Memory: r.Memory, - RunTime: r.RunTime, - ProcPeak: r.ProcPeak, - Files: convertFiles(r.Files), - Buffs: r.Files, - FileIDs: r.FileIDs, - FileError: convertPBFileError(r.FileError), + Status: stage.Status(r.GetStatus()), + ExitStatus: int(r.GetExitStatus()), + Error: r.GetError(), + Time: r.GetTime(), + Memory: r.GetMemory(), + RunTime: r.GetRunTime(), + ProcPeak: r.GetProcPeak(), + Files: convertFiles(r.GetFiles()), + Buffs: r.GetFiles(), + FileIDs: r.GetFileIDs(), + FileError: convertPBFileError(r.GetFileError()), }) } return ret @@ -176,9 +194,9 @@ func convertPBFileError(fe []*pb.Response_FileError) []stage.FileError { ret := make([]stage.FileError, 0, len(fe)) for _, v := range fe { ret = append(ret, stage.FileError{ - Name: v.Name, - Type: stage.FileErrorType(v.Type), - Message: v.Message, + Name: v.GetName(), + Type: stage.FileErrorType(v.GetType()), + Message: v.GetMessage(), }) } return ret diff --git a/internal/executor/sandbox/executor.go b/internal/executor/sandbox/executor.go index dda11bb..987382f 100644 --- a/internal/executor/sandbox/executor.go +++ b/internal/executor/sandbox/executor.go @@ -36,16 +36,17 @@ func (e *Sandbox) Run(cmds []stage.Cmd) ([]stage.ExecutorResult, error) { for i, pbCmd := range pbCmds { slog.Debug("sandbox execute", "i", i, "pbCmd size", proto.Size(pbCmd)) } - pbReq := &pb.Request{Cmd: pbCmds} + pbReq := &pb.Request{} + pbReq.SetCmd(pbCmds) slog.Debug("sandbox execute", "pbReq size", proto.Size(pbReq)) pbRet, err := e.execClient.Exec(context.TODO(), pbReq) if err != nil { return nil, err } - if pbRet.Error != "" { - return nil, fmt.Errorf("sandbox execute error: %s", pbRet.Error) + if pbRet.GetError() != "" { + return nil, fmt.Errorf("sandbox execute error: %s", pbRet.GetError()) } - results := convertPBResult(pbRet.Results) + results := convertPBResult(pbRet.GetResults()) for _, result := range results { maps.Copy(e.cachedMap, result.FileIDs) } @@ -54,9 +55,9 @@ func (e *Sandbox) Run(cmds []stage.Cmd) ([]stage.ExecutorResult, error) { func (e *Sandbox) Cleanup() error { for k, fileID := range e.cachedMap { - _, err := e.execClient.FileDelete(context.TODO(), &pb.FileID{ - FileID: fileID, - }) + req := &pb.FileID{} + req.SetFileID(fileID) + _, err := e.execClient.FileDelete(context.TODO(), req) if err != nil { slog.Error("sandbox cleanup", "error", err) }