mirror of
https://github.com/criyle/go-judge.git
synced 2025-11-04 14:50:02 +08:00
Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a4e3da8fac | ||
|
|
bf22d6f479 | ||
|
|
565f302e52 | ||
|
|
67e158fb8a | ||
|
|
bdc2f19232 | ||
|
|
ad661b1ad2 | ||
|
|
b613b1f747 | ||
|
|
81e22d4af1 | ||
|
|
03ad17a4c6 | ||
|
|
0ef1b987fa |
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
@ -27,6 +27,8 @@ jobs:
|
||||
go.sum
|
||||
- name: Remove unsupported tags
|
||||
run: git tag -d $(git tag -l "pb/*")
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
- name: Run GoReleaser
|
||||
uses: goreleaser/goreleaser-action@v6
|
||||
if: ${{ contains(github.ref, 'v') }}
|
||||
|
||||
130
.goreleaser.yaml
130
.goreleaser.yaml
@ -37,6 +37,9 @@ builds:
|
||||
goamd64:
|
||||
- v2
|
||||
- v3
|
||||
ignore:
|
||||
- goos: windows
|
||||
goarch: arm
|
||||
tags:
|
||||
- nomsgpack
|
||||
- grpcnotrace
|
||||
@ -67,21 +70,24 @@ builds:
|
||||
goamd64:
|
||||
- v2
|
||||
- v3
|
||||
ignore:
|
||||
- goos: windows
|
||||
goarch: arm
|
||||
tags:
|
||||
- nomsgpack
|
||||
- grpcnotrace
|
||||
- main: ./cmd/go-judge-ffi
|
||||
binary: go-judge-ffi
|
||||
id: go-judge-ffi
|
||||
env:
|
||||
- CGO_ENABLED=1
|
||||
buildmode: c-shared
|
||||
goos:
|
||||
- linux
|
||||
goarch:
|
||||
- amd64
|
||||
goamd64:
|
||||
- v2
|
||||
# - main: ./cmd/go-judge-ffi
|
||||
# binary: go-judge-ffi
|
||||
# id: go-judge-ffi
|
||||
# env:
|
||||
# - CGO_ENABLED=1
|
||||
# buildmode: c-shared
|
||||
# goos:
|
||||
# - linux
|
||||
# goarch:
|
||||
# - amd64
|
||||
# goamd64:
|
||||
# - v2
|
||||
- main: ./cmd/go-judge-init
|
||||
binary: go-judge-init
|
||||
id: go-judge-init
|
||||
@ -128,94 +134,24 @@ nfpms:
|
||||
# nix:
|
||||
# - name: go-judge
|
||||
# license: "mit"
|
||||
dockers:
|
||||
- image_templates:
|
||||
- "criyle/go-judge:{{ .Tag }}-amd64"
|
||||
use: buildx
|
||||
dockers_v2:
|
||||
- images:
|
||||
- criyle/go-judge
|
||||
dockerfile: "Dockerfile.goreleaser"
|
||||
goarch: amd64
|
||||
goamd64: v2
|
||||
tags:
|
||||
- "v{{ .Version }}"
|
||||
- "{{ if .IsNightly }}nightly{{ end }}"
|
||||
- "{{ if not .IsNightly }}latest{{ end }}"
|
||||
extra_files:
|
||||
- "mount.yaml"
|
||||
build_flag_templates:
|
||||
- "--platform=linux/amd64"
|
||||
- image_templates:
|
||||
- "criyle/go-judge:{{ .Tag }}-arm64"
|
||||
use: buildx
|
||||
goarch: "arm64"
|
||||
dockerfile: "Dockerfile.goreleaser"
|
||||
extra_files:
|
||||
- "mount.yaml"
|
||||
build_flag_templates:
|
||||
- "--platform=linux/arm64"
|
||||
- image_templates:
|
||||
- "criyle/go-judge:{{ .Tag }}-armv7"
|
||||
use: buildx
|
||||
goarch: "arm"
|
||||
goarm: "7"
|
||||
dockerfile: "Dockerfile.goreleaser"
|
||||
extra_files:
|
||||
- "mount.yaml"
|
||||
build_flag_templates:
|
||||
- "--platform=linux/arm/v7"
|
||||
- image_templates:
|
||||
- "criyle/go-judge:{{ .Tag }}-armv5"
|
||||
use: buildx
|
||||
goarch: "arm"
|
||||
goarm: "5"
|
||||
dockerfile: "Dockerfile.goreleaser"
|
||||
extra_files:
|
||||
- "mount.yaml"
|
||||
build_flag_templates:
|
||||
- "--platform=linux/arm/v5"
|
||||
- image_templates:
|
||||
- "criyle/go-judge:{{ .Tag }}-ppc64le"
|
||||
use: buildx
|
||||
dockerfile: "Dockerfile.goreleaser"
|
||||
goarch: ppc64le
|
||||
extra_files:
|
||||
- "mount.yaml"
|
||||
build_flag_templates:
|
||||
- "--platform=linux/ppc64le"
|
||||
- image_templates:
|
||||
- "criyle/go-judge:{{ .Tag }}-s390x"
|
||||
use: buildx
|
||||
dockerfile: "Dockerfile.goreleaser"
|
||||
goarch: s390x
|
||||
extra_files:
|
||||
- "mount.yaml"
|
||||
build_flag_templates:
|
||||
- "--platform=linux/s390x"
|
||||
# Debian is now supporting riscv64 on trixie
|
||||
- image_templates:
|
||||
- "criyle/go-judge:{{ .Tag }}-riscv64"
|
||||
use: buildx
|
||||
dockerfile: "Dockerfile.goreleaser"
|
||||
goarch: riscv64
|
||||
extra_files:
|
||||
- "mount.yaml"
|
||||
build_flag_templates:
|
||||
- "--platform=linux/riscv64"
|
||||
docker_manifests:
|
||||
- name_template: "criyle/go-judge:{{ .Tag }}"
|
||||
image_templates:
|
||||
- "criyle/go-judge:{{ .Tag }}-amd64"
|
||||
- "criyle/go-judge:{{ .Tag }}-arm64"
|
||||
- "criyle/go-judge:{{ .Tag }}-armv7"
|
||||
- "criyle/go-judge:{{ .Tag }}-armv5"
|
||||
- "criyle/go-judge:{{ .Tag }}-ppc64le"
|
||||
- "criyle/go-judge:{{ .Tag }}-s390x"
|
||||
- "criyle/go-judge:{{ .Tag }}-riscv64"
|
||||
- name_template: "criyle/go-judge:latest"
|
||||
image_templates:
|
||||
- "criyle/go-judge:{{ .Tag }}-amd64"
|
||||
- "criyle/go-judge:{{ .Tag }}-arm64"
|
||||
- "criyle/go-judge:{{ .Tag }}-armv7"
|
||||
- "criyle/go-judge:{{ .Tag }}-armv5"
|
||||
- "criyle/go-judge:{{ .Tag }}-ppc64le"
|
||||
- "criyle/go-judge:{{ .Tag }}-s390x"
|
||||
- "criyle/go-judge:{{ .Tag }}-riscv64"
|
||||
skip_push: auto
|
||||
platforms:
|
||||
- linux/amd64
|
||||
- linux/arm64
|
||||
- linux/arm/v7
|
||||
#- linux/arm/v5 disable for now: https://github.com/orgs/goreleaser/discussions/6005
|
||||
- linux/ppc64le
|
||||
- linux/s390x
|
||||
- linux/riscv64
|
||||
checksum:
|
||||
name_template: "checksums.txt"
|
||||
snapshot:
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
FROM debian:latest
|
||||
ARG TARGETPLATFORM
|
||||
WORKDIR /opt
|
||||
ENTRYPOINT [ "/opt/go-judge" ]
|
||||
COPY go-judge mount.yaml /opt/
|
||||
COPY $TARGETPLATFORM/go-judge mount.yaml /opt/
|
||||
|
||||
24
README.cn.md
24
README.cn.md
@ -29,8 +29,8 @@ docker run -it --rm --privileged --shm-size=256m -p 5050:5050 --name=go-judge cr
|
||||
- DELETE /file/:fileId 删除文件 ID 指定的文件
|
||||
- /ws /run 接口的 WebSocket 版
|
||||
- /stream 运行交互式命令。支持流式 api
|
||||
- /version 得到本程序编译版本和 go 语言运行时版本
|
||||
- /config 得到本程序部分运行参数,包括沙箱详细参数
|
||||
- /version 获取构建的 Git 版本 (例如 v1.9.0) 以及运行时信息 (go 版本, 操作系统, 平台)
|
||||
- /config 获取部分配置信息 (例如 fileStorePath, runnerConfig) 以及支持的功能特性
|
||||
|
||||
### REST API 接口定义
|
||||
|
||||
@ -70,7 +70,7 @@ docker run -it --rm --privileged --shm-size=256m -p 5050:5050 --name=go-judge cr
|
||||
- 默认监听地址是 `localhost:5050`,使用 `-http-addr` 指定
|
||||
- 默认 gRPC 接口处于关闭状态,使用 `-enable-grpc` 开启
|
||||
- 默认 gRPC 监听地址是 `localhost:5051` ,使用 `-grpc-addr` 指定
|
||||
- 默认日志等级是 info ,使用 `-silent` 关闭 或 使用 `-release` 开启 release 级别日志
|
||||
- 默认日志等级是 info ,使用 `-silent` 关闭 或 使用 `-release` 开启 release 级别日志(在 docker 中会自动开启)
|
||||
- 默认没有开启鉴权,使用 `-auth-token` 指定令牌鉴权
|
||||
- 默认没有开启 go 语言调试接口(`localhost:5052/debug`),使用 `-enable-debug` 开启,同时将日志层级设为 Debug
|
||||
- 默认没有开启 prometheus 监控接口,使用 `-enable-metrics` 开启 `localhost:5052/metrics`
|
||||
@ -82,7 +82,7 @@ docker run -it --rm --privileged --shm-size=256m -p 5050:5050 --name=go-judge cr
|
||||
- 使用 `-mount-conf` 指定沙箱文件系统挂载细节,详细请参见 [文件系统挂载](https://docs.goj.ac/cn/mount) (仅 Linux)
|
||||
- 使用 `-file-timeout` 指定文件存储文件最大时间。超出时间的文件将会删除。(例如指定 `30m` 时,缓存文件将在创建后 30 分钟删除)
|
||||
- 默认文件存储在共享内存文件系统中(`/dev/shm/`),可以使用 `-dir` 指定另外的本地目录为文件存储
|
||||
- 默认最大输出限制为 `256MiB`,使用 `-output-limit` 指定
|
||||
- 默认最大输出限制为 `256MiB`,使用 `-output-limit` 指定 POSIX rlimit 的输出限制
|
||||
- 默认最大 `copyOut` 文件大小为 `64MiB` ,使用 `-copy-out-limit` 指定
|
||||
|
||||
可以[在此查看更多配置文档](https://docs.goj.ac/cn/configuration)。
|
||||
@ -114,9 +114,7 @@ docker run -it --rm --privileged --shm-size=256m -p 5050:5050 --name=go-judge cr
|
||||
- Dangerous Syscall: 程序被 `seccomp` 过滤器结束(默认不启用)
|
||||
- Internal Error:
|
||||
- 指定程序路径不存在
|
||||
- 或者容器创建失败
|
||||
- 比如使用非特权 docker
|
||||
- 或者在个人目录下以 root 权限运行
|
||||
- 或者容器创建失败(比如使用非特权 docker)
|
||||
- 或者其他错误
|
||||
|
||||
### 容器的文件系统
|
||||
@ -148,7 +146,7 @@ docker run -it --rm --privileged --shm-size=256m -p 5050:5050 --name=go-judge cr
|
||||
|
||||
`go-judge` 目前已经支持 cgroup v2 鉴于越来越多的 Linux 发行版默认启用 cgroup v2 而不是 v1 (比如 Ubuntu 21.10+,Fedora 31+)。然而,对于内核版本小于 5.19 的版本,因为 cgroup v2 在内存控制器里面缺少 `memory.max_usage_in_bytes`,内存使用量计数会转而采用 `maxrss` 指标。这项指标会显示的比使用 cgroup v1 时候要稍多,在运行使用内存较少的程序时比较明显。对于内核版本大于或等于 5.19 的版本,`memory.peak` 会被采用。
|
||||
|
||||
同时,如果本程序在容器中运行,容器中的进程会被移到 `/api` cgroup v2 控制器中来开启 cgroup v2 嵌套支持。
|
||||
同时,如果本程序在容器中运行,容器中的进程会被移到 /api cgroup v2 层级中来开启 cgroup v2 嵌套支持。
|
||||
|
||||
在 `systemd` 为 `init` 的发行版中运行时,`go-judge` 会使用 `dbus` 通知 `systemd` 来创建一个临时 `scope` 作为 `cgroup` 的根。
|
||||
|
||||
@ -156,11 +154,11 @@ docker run -it --rm --privileged --shm-size=256m -p 5050:5050 --name=go-judge cr
|
||||
|
||||
#### 内存使用
|
||||
|
||||
控制进程通常会使用 `20M` 内存,每个容器进程最大会使用 `20M` 内存,每个请求最大会使用 `2 * 16M` + 总 `copyOutMax` 限制 * 2 内存。请注意,缓存文件会存储在宿主机的共享内存中 (`/dev/shm`),请保证其大小足够存储运行时最大可能文件。
|
||||
控制进程通常会使用 `20M` 内存。每个容器进程通常会占用 `20M` 内存 + 临时文件系统 (tmpfs) 大小 `2 * 128M`。对于每个请求,它将占用 用户程序限制的最大内存 + 额外限制 (`16k`) + 总 copy out 最大限制。请注意,缓存文件存储在宿主机的共享内存中 (`/dev/shm`),因此请确保分配了足够的空间。
|
||||
|
||||
比方说当同时请求数最大为 4 的时候,本程序最大会占用 `60 + (20+32) * 4M = 268M` + 总 copy out max 限制 * 8 内存 + 总运行程序最大内存限制。
|
||||
比方说当并发数(concurrency)为 4 时,容器本身可能占用高达 `60 + (20+32) * 4M = 268M` + 4 \* 总 copy out 限制 + 总请求的最大内存限制。
|
||||
|
||||
因为 go 语言 runtime 垃圾收集算法实现,有时并不会主动归还占用内存。这种情况可能会引发 OOM Killer 杀死进程,因此引入了一个后台检查线程用于在堆内存占用高时强制垃圾收集和归还内存。
|
||||
由于 Go 语言运行时(runtime)的限制,内存并不会自动返回给操作系统,这可能会导致 OOM Killer 杀死进程。因此引入了一个后台工作线程,用于检查堆内存使用情况并在必要时调用垃圾收集(GC)。
|
||||
|
||||
- `-force-gc-target` 默认 `20m`, 堆内存使用超过该值是强制垃圾收集和归还内存
|
||||
- `-force-gc-interval` 默认 `5s`, 为后台线程检查的频繁程度
|
||||
- `-force-gc-target` 默认 `20m`,触发 GC 的最小堆内存使用量
|
||||
- `-force-gc-interval` 默认 `5s`,检查内存使用情况的间隔时间
|
||||
|
||||
@ -211,6 +211,7 @@ func convertPBCmd(c *pb.Request_CmdType, srcPrefix []string) (cm worker.Cmd, err
|
||||
CopyOutCached: convertCopyOut(c.GetCopyOutCached()),
|
||||
CopyOutMax: c.GetCopyOutMax(),
|
||||
CopyOutDir: c.GetCopyOutDir(),
|
||||
CopyOutTruncate: c.GetCopyOutTruncate(),
|
||||
Symlinks: c.GetSymlinks(),
|
||||
}
|
||||
for _, f := range c.GetFiles() {
|
||||
|
||||
@ -16,6 +16,7 @@ import (
|
||||
"runtime"
|
||||
"runtime/debug"
|
||||
"strings"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/criyle/go-judge/cmd/go-judge/config"
|
||||
@ -106,9 +107,21 @@ func main() {
|
||||
newForceGCWorker(conf)
|
||||
|
||||
// Graceful shutdown...
|
||||
signal.Notify(sig, os.Interrupt)
|
||||
<-sig
|
||||
signal.Reset(os.Interrupt)
|
||||
signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM)
|
||||
loop:
|
||||
for s := range sig {
|
||||
switch s {
|
||||
case syscall.SIGINT:
|
||||
break loop
|
||||
case syscall.SIGTERM:
|
||||
if isManagedByPM2() {
|
||||
logger.Info("running with PM2, received SIGTERM (from systemd), ignoring")
|
||||
} else {
|
||||
break loop
|
||||
}
|
||||
}
|
||||
}
|
||||
signal.Reset(syscall.SIGINT, syscall.SIGTERM)
|
||||
|
||||
logger.Info("Shutting Down...")
|
||||
|
||||
@ -571,6 +584,7 @@ func generateHandleVersion(_ *config.Config, _ map[string]any) func(*gin.Context
|
||||
"addressSpaceLimit": true,
|
||||
"stream": true,
|
||||
"procPeak": true,
|
||||
"copyOutTruncate": true,
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -584,8 +598,24 @@ func generateHandleConfig(conf *config.Config, builderParam map[string]any) func
|
||||
"addressSpaceLimit": true,
|
||||
"stream": true,
|
||||
"procPeak": true,
|
||||
"copyOutTruncate": true,
|
||||
"fileStorePath": conf.Dir,
|
||||
"runnerConfig": builderParam,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func isManagedByPM2() bool {
|
||||
// List of environment variables that pm2 typically sets.
|
||||
pm2EnvVars := []string{
|
||||
"PM2_HOME",
|
||||
"PM2_JSON_PROCESSING",
|
||||
"NODE_APP_INSTANCE",
|
||||
}
|
||||
for _, v := range pm2EnvVars {
|
||||
if os.Getenv(v) != "" {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
@ -48,10 +48,11 @@ type Cmd struct {
|
||||
|
||||
CopyIn map[string]CmdFile `json:"copyIn"`
|
||||
|
||||
CopyOut []string `json:"copyOut"`
|
||||
CopyOutCached []string `json:"copyOutCached"`
|
||||
CopyOutMax uint64 `json:"copyOutMax"`
|
||||
CopyOutDir string `json:"copyOutDir"`
|
||||
CopyOut []string `json:"copyOut"`
|
||||
CopyOutCached []string `json:"copyOutCached"`
|
||||
CopyOutMax uint64 `json:"copyOutMax"`
|
||||
CopyOutDir string `json:"copyOutDir"`
|
||||
CopyOutTruncate bool `json:"copyOutTruncate"`
|
||||
|
||||
TTY bool `json:"tty,omitempty"`
|
||||
StrictMemoryLimit bool `json:"strictMemoryLimit"`
|
||||
@ -317,6 +318,7 @@ func convertCmd(c Cmd, srcPrefix []string) (worker.Cmd, error) {
|
||||
CopyOutCached: convertCopyOut(c.CopyOutCached),
|
||||
CopyOutMax: c.CopyOutMax,
|
||||
CopyOutDir: c.CopyOutDir,
|
||||
CopyOutTruncate: c.CopyOutTruncate,
|
||||
}
|
||||
for _, f := range c.Files {
|
||||
cf, err := convertCmdFile(f, srcPrefix)
|
||||
|
||||
1
env/env_cgroup_linux.go
vendored
1
env/env_cgroup_linux.go
vendored
@ -76,6 +76,7 @@ func startTransientUnit(conn *dbus.Conn, scopeName string, logger *zap.Logger) e
|
||||
dbus.PropWants(scopeName),
|
||||
dbus.PropPids(uint32(os.Getpid())),
|
||||
newSystemdProperty("Delegate", true),
|
||||
newSystemdProperty("KillMode", "process"),
|
||||
}
|
||||
ch := make(chan string, 1)
|
||||
if _, err := conn.StartTransientUnitContext(context.TODO(), scopeName, "replace", properties, ch); err != nil {
|
||||
|
||||
@ -50,8 +50,9 @@ type Cmd struct {
|
||||
Waiter func(context.Context, Process) bool
|
||||
|
||||
// file names to copyout after exec
|
||||
CopyOut []CmdCopyOutFile
|
||||
CopyOutMax Size // file size limit
|
||||
CopyOut []CmdCopyOutFile
|
||||
CopyOutMax Size // file size limit
|
||||
CopyOutTruncate bool
|
||||
|
||||
// CopyOutDir specifies a dir to dump all /w content
|
||||
CopyOutDir string
|
||||
|
||||
@ -98,7 +98,10 @@ func copyOutFile(
|
||||
s := stat.Size()
|
||||
if c.CopyOutMax > 0 && s > int64(c.CopyOutMax) {
|
||||
t = ErrCopyOutSizeExceeded
|
||||
return fmt.Errorf("copyout: %q size (%d) exceeds limit (%d)", n.Name, s, c.CopyOutMax)
|
||||
if !c.CopyOutTruncate {
|
||||
return fmt.Errorf("copyout: %q size (%d) exceeds limit (%d)", n.Name, s, c.CopyOutMax)
|
||||
}
|
||||
s = int64(c.CopyOutMax) + 1
|
||||
}
|
||||
// create store file
|
||||
buf, err := newStoreFile()
|
||||
@ -108,13 +111,17 @@ func copyOutFile(
|
||||
}
|
||||
|
||||
// Ensure not copy over file size
|
||||
_, err = buf.ReadFrom(io.LimitReader(cf, s))
|
||||
s, err = buf.ReadFrom(io.LimitReader(cf, s))
|
||||
if err != nil {
|
||||
t = ErrCopyOutCopyContent
|
||||
buf.Close()
|
||||
return fmt.Errorf("copyout: failed to copy content for %q: %w", n.Name, err)
|
||||
}
|
||||
put(buf, n.Name)
|
||||
if s > int64(c.CopyOutMax) {
|
||||
t = ErrCopyOutSizeExceeded
|
||||
return fmt.Errorf("copyout: %q size (%d) exceeds limit (%d)", n.Name, s, c.CopyOutMax)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
38
go.mod
38
go.mod
@ -5,7 +5,7 @@ go 1.25
|
||||
require (
|
||||
github.com/coreos/go-systemd/v22 v22.6.0
|
||||
github.com/creack/pty v1.1.24
|
||||
github.com/criyle/go-judge/pb v1.2.0
|
||||
github.com/criyle/go-judge/pb v1.3.0
|
||||
github.com/criyle/go-sandbox v0.11.8
|
||||
github.com/elastic/go-seccomp-bpf v1.6.0
|
||||
github.com/elastic/go-ucfg v0.8.8
|
||||
@ -21,20 +21,20 @@ require (
|
||||
github.com/prometheus/client_golang v1.23.2
|
||||
github.com/zsais/go-gin-prometheus v1.0.2
|
||||
go.uber.org/zap v1.27.0
|
||||
golang.org/x/net v0.44.0
|
||||
golang.org/x/net v0.46.0
|
||||
golang.org/x/sync v0.17.0
|
||||
golang.org/x/sys v0.36.0
|
||||
golang.org/x/term v0.35.0
|
||||
google.golang.org/grpc v1.75.1
|
||||
google.golang.org/protobuf v1.36.9
|
||||
golang.org/x/sys v0.37.0
|
||||
golang.org/x/term v0.36.0
|
||||
google.golang.org/grpc v1.76.0
|
||||
google.golang.org/protobuf v1.36.10
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/BurntSushi/toml v1.5.0 // indirect
|
||||
github.com/beorn7/perks v1.0.1 // indirect
|
||||
github.com/bytedance/gopkg v0.1.3 // indirect
|
||||
github.com/bytedance/sonic v1.14.1 // indirect
|
||||
github.com/bytedance/sonic/loader v0.3.0 // indirect
|
||||
github.com/bytedance/sonic v1.14.2 // indirect
|
||||
github.com/bytedance/sonic/loader v0.4.0 // indirect
|
||||
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
||||
github.com/cloudwego/base64x v0.1.6 // indirect
|
||||
github.com/fatih/camelcase v1.0.0 // indirect
|
||||
@ -43,7 +43,7 @@ require (
|
||||
github.com/gin-contrib/sse v1.1.0 // indirect
|
||||
github.com/go-playground/locales v0.14.1 // indirect
|
||||
github.com/go-playground/universal-translator v0.18.1 // indirect
|
||||
github.com/go-playground/validator/v10 v10.27.0 // indirect
|
||||
github.com/go-playground/validator/v10 v10.28.0 // indirect
|
||||
github.com/goccy/go-json v0.10.5 // indirect
|
||||
github.com/json-iterator/go v1.1.12 // indirect
|
||||
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
|
||||
@ -54,22 +54,22 @@ require (
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
||||
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
|
||||
github.com/prometheus/client_model v0.6.2 // indirect
|
||||
github.com/prometheus/common v0.66.1 // indirect
|
||||
github.com/prometheus/procfs v0.17.0 // indirect
|
||||
github.com/prometheus/common v0.67.2 // indirect
|
||||
github.com/prometheus/procfs v0.19.1 // indirect
|
||||
github.com/quic-go/qpack v0.5.1 // indirect
|
||||
github.com/quic-go/quic-go v0.54.0 // indirect
|
||||
github.com/quic-go/quic-go v0.55.0 // indirect
|
||||
github.com/sirupsen/logrus v1.9.3 // indirect
|
||||
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
|
||||
github.com/ugorji/go/codec v1.3.0 // indirect
|
||||
github.com/ugorji/go/codec v1.3.1 // indirect
|
||||
go.uber.org/mock v0.6.0 // indirect
|
||||
go.uber.org/multierr v1.11.0 // indirect
|
||||
go.yaml.in/yaml/v2 v2.4.3 // indirect
|
||||
golang.org/x/arch v0.21.0 // indirect
|
||||
golang.org/x/crypto v0.42.0 // indirect
|
||||
golang.org/x/mod v0.28.0 // indirect
|
||||
golang.org/x/text v0.29.0 // indirect
|
||||
golang.org/x/tools v0.37.0 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9 // indirect
|
||||
golang.org/x/arch v0.22.0 // indirect
|
||||
golang.org/x/crypto v0.43.0 // indirect
|
||||
golang.org/x/mod v0.29.0 // indirect
|
||||
golang.org/x/text v0.30.0 // indirect
|
||||
golang.org/x/tools v0.38.0 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20251022142026-3a174f9686a8 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
)
|
||||
|
||||
|
||||
84
go.sum
84
go.sum
@ -6,10 +6,10 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
||||
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
||||
github.com/bytedance/gopkg v0.1.3 h1:TPBSwH8RsouGCBcMBktLt1AymVo2TVsBVCY4b6TnZ/M=
|
||||
github.com/bytedance/gopkg v0.1.3/go.mod h1:576VvJ+eJgyCzdjS+c4+77QF3p7ubbtiKARP3TxducM=
|
||||
github.com/bytedance/sonic v1.14.1 h1:FBMC0zVz5XUmE4z9wF4Jey0An5FueFvOsTKKKtwIl7w=
|
||||
github.com/bytedance/sonic v1.14.1/go.mod h1:gi6uhQLMbTdeP0muCnrjHLeCUPyb70ujhnNlhOylAFc=
|
||||
github.com/bytedance/sonic/loader v0.3.0 h1:dskwH8edlzNMctoruo8FPTJDF3vLtDT0sXZwvZJyqeA=
|
||||
github.com/bytedance/sonic/loader v0.3.0/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI=
|
||||
github.com/bytedance/sonic v1.14.2 h1:k1twIoe97C1DtYUo+fZQy865IuHia4PR5RPiuGPPIIE=
|
||||
github.com/bytedance/sonic v1.14.2/go.mod h1:T80iDELeHiHKSc0C9tubFygiuXoGzrkjKzX2quAx980=
|
||||
github.com/bytedance/sonic/loader v0.4.0 h1:olZ7lEqcxtZygCK9EKYKADnpQoYkRQxaeY2NYzevs+o=
|
||||
github.com/bytedance/sonic/loader v0.4.0/go.mod h1:AR4NYCk5DdzZizZ5djGqQ92eEhCCcdf5x77udYiSJRo=
|
||||
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
|
||||
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI2M=
|
||||
@ -18,8 +18,8 @@ github.com/coreos/go-systemd/v22 v22.6.0 h1:aGVa/v8B7hpb0TKl0MWoAavPDmHvobFe5R5z
|
||||
github.com/coreos/go-systemd/v22 v22.6.0/go.mod h1:iG+pp635Fo7ZmV/j14KUcmEyWF+0X7Lua8rrTWzYgWU=
|
||||
github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s=
|
||||
github.com/creack/pty v1.1.24/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE=
|
||||
github.com/criyle/go-judge/pb v1.2.0 h1:XqR1CEE9ZR7+4nYPZqwIure4VuJOt4kmFygN7aeXeJg=
|
||||
github.com/criyle/go-judge/pb v1.2.0/go.mod h1:oANRvhBOHpu4WZhbWnm5IeTaLmTbGdZNUNwcnmQe6jI=
|
||||
github.com/criyle/go-judge/pb v1.3.0 h1:QTbamTUME3kk7h5Ec0uj0KHUnq1TXv+5oMV/hu2D1c8=
|
||||
github.com/criyle/go-judge/pb v1.3.0/go.mod h1:cC5K87NU3T1+dECrqOD2RcEFPK3YKd0J5bad5iIwLOA=
|
||||
github.com/criyle/go-sandbox v0.11.8 h1:u75C1dhEHrnLSrl/npYKtCnoetrSbmZ/MsoX2+WGyiA=
|
||||
github.com/criyle/go-sandbox v0.11.8/go.mod h1:XBP0h9fE3hexobrclZ3UtTmrETfsqUI1SR67qlUWBrk=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
@ -51,8 +51,8 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o
|
||||
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
|
||||
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
|
||||
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
|
||||
github.com/go-playground/validator/v10 v10.27.0 h1:w8+XrWVMhGkxOaaowyKH35gFydVHOvC0/uWoy2Fzwn4=
|
||||
github.com/go-playground/validator/v10 v10.27.0/go.mod h1:I5QpIEbmr8On7W0TktmJAumgzX4CA1XNl4ZmDuVHKKo=
|
||||
github.com/go-playground/validator/v10 v10.28.0 h1:Q7ibns33JjyW48gHkuFT91qX48KG0ktULL6FgHdG688=
|
||||
github.com/go-playground/validator/v10 v10.28.0/go.mod h1:GoI6I1SjPBh9p7ykNE/yj3fFYbyDOpwMn5KXd+m2hUU=
|
||||
github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4=
|
||||
github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
|
||||
github.com/goccy/go-yaml v1.18.0 h1:8W7wMFS12Pcas7KU+VVkaiCng+kG8QiFeFwzFb+rwuw=
|
||||
@ -110,14 +110,14 @@ github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h
|
||||
github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
|
||||
github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk=
|
||||
github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE=
|
||||
github.com/prometheus/common v0.66.1 h1:h5E0h5/Y8niHc5DlaLlWLArTQI7tMrsfQjHV+d9ZoGs=
|
||||
github.com/prometheus/common v0.66.1/go.mod h1:gcaUsgf3KfRSwHY4dIMXLPV0K/Wg1oZ8+SbZk/HH/dA=
|
||||
github.com/prometheus/procfs v0.17.0 h1:FuLQ+05u4ZI+SS/w9+BWEM2TXiHKsUQ9TADiRH7DuK0=
|
||||
github.com/prometheus/procfs v0.17.0/go.mod h1:oPQLaDAMRbA+u8H5Pbfq+dl3VDAvHxMUOVhe0wYB2zw=
|
||||
github.com/prometheus/common v0.67.2 h1:PcBAckGFTIHt2+L3I33uNRTlKTplNzFctXcWhPyAEN8=
|
||||
github.com/prometheus/common v0.67.2/go.mod h1:63W3KZb1JOKgcjlIr64WW/LvFGAqKPj0atm+knVGEko=
|
||||
github.com/prometheus/procfs v0.19.1 h1:QVtROpTkphuXuNlnCv3m1ut3JytkXHtQ3xvck/YmzMM=
|
||||
github.com/prometheus/procfs v0.19.1/go.mod h1:M0aotyiemPhBCM0z5w87kL22CxfcH05ZpYlu+b4J7mw=
|
||||
github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI=
|
||||
github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg=
|
||||
github.com/quic-go/quic-go v0.54.0 h1:6s1YB9QotYI6Ospeiguknbp2Znb/jZYjZLRXn9kMQBg=
|
||||
github.com/quic-go/quic-go v0.54.0/go.mod h1:e68ZEaCdyviluZmy44P6Iey98v/Wfz6HCjQEm+l8zTY=
|
||||
github.com/quic-go/quic-go v0.55.0 h1:zccPQIqYCXDt5NmcEabyYvOnomjs8Tlwl7tISjJh9Mk=
|
||||
github.com/quic-go/quic-go v0.55.0/go.mod h1:DR51ilwU1uE164KuWXhinFcKWGlEjzys2l8zUl5Ss1U=
|
||||
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
|
||||
github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
|
||||
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
|
||||
@ -125,18 +125,20 @@ github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVs
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
|
||||
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
||||
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
|
||||
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
|
||||
github.com/ugorji/go/codec v1.3.0 h1:Qd2W2sQawAfG8XSvzwhBeoGq71zXOC/Q1E9y/wUcsUA=
|
||||
github.com/ugorji/go/codec v1.3.0/go.mod h1:pRBVtBSKl77K30Bv8R2P+cLSGaTtex6fsA2Wjqmfxj4=
|
||||
github.com/ugorji/go/codec v1.3.1 h1:waO7eEiFDwidsBN6agj1vJQ4AG7lh2yqXyOXqhgQuyY=
|
||||
github.com/ugorji/go/codec v1.3.1/go.mod h1:pRBVtBSKl77K30Bv8R2P+cLSGaTtex6fsA2Wjqmfxj4=
|
||||
github.com/zsais/go-gin-prometheus v1.0.2 h1:3asLqrFltMdItpgr/OS4hYc8pLq3HzMa5T1gYuXBIZ0=
|
||||
github.com/zsais/go-gin-prometheus v1.0.2/go.mod h1:iKBYSOHzvGfe2FyGSOC8JSwUA0MITdnYzI6v+aAbw1Q=
|
||||
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
|
||||
@ -161,36 +163,36 @@ go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
|
||||
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
|
||||
go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
|
||||
go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
|
||||
golang.org/x/arch v0.21.0 h1:iTC9o7+wP6cPWpDWkivCvQFGAHDQ59SrSxsLPcnkArw=
|
||||
golang.org/x/arch v0.21.0/go.mod h1:dNHoOeKiyja7GTvF9NJS1l3Z2yntpQNzgrjh1cU103A=
|
||||
golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI=
|
||||
golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8=
|
||||
golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
|
||||
golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
|
||||
golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I=
|
||||
golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY=
|
||||
golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
|
||||
golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
|
||||
golang.org/x/arch v0.22.0 h1:c/Zle32i5ttqRXjdLyyHZESLD/bB90DCU1g9l/0YBDI=
|
||||
golang.org/x/arch v0.22.0/go.mod h1:dNHoOeKiyja7GTvF9NJS1l3Z2yntpQNzgrjh1cU103A=
|
||||
golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04=
|
||||
golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0=
|
||||
golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
|
||||
golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
|
||||
golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4=
|
||||
golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210=
|
||||
golang.org/x/oauth2 v0.32.0 h1:jsCblLleRMDrxMN29H3z/k1KliIvpLgCkE6R8FXXNgY=
|
||||
golang.org/x/oauth2 v0.32.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
|
||||
golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
|
||||
golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k=
|
||||
golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
|
||||
golang.org/x/term v0.35.0 h1:bZBVKBudEyhRcajGcNc3jIfWPqV4y/Kt2XcoigOWtDQ=
|
||||
golang.org/x/term v0.35.0/go.mod h1:TPGtkTLesOwf2DE8CgVYiZinHAOuy5AYUYT1lENIZnA=
|
||||
golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
|
||||
golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
|
||||
golang.org/x/tools v0.37.0 h1:DVSRzp7FwePZW356yEAChSdNcQo6Nsp+fex1SUW09lE=
|
||||
golang.org/x/tools v0.37.0/go.mod h1:MBN5QPQtLMHVdvsbtarmTNukZDdgwdwlO5qGacAzF0w=
|
||||
golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
|
||||
golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
|
||||
golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q=
|
||||
golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
|
||||
golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k=
|
||||
golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM=
|
||||
golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
|
||||
golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
|
||||
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-20250922171735-9219d122eba9 h1:V1jCN2HBa8sySkR5vLcCSqJSTMv093Rw9EJefhQGP7M=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9/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-20251022142026-3a174f9686a8 h1:M1rk8KBnUsBDg1oPGHNCxG4vc1f49epmTO7xscSajMk=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20251022142026-3a174f9686a8/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
|
||||
google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A=
|
||||
google.golang.org/grpc v1.76.0/go.mod h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c=
|
||||
google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
|
||||
google.golang.org/protobuf v1.36.10/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-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||
|
||||
@ -44,10 +44,10 @@ mount:
|
||||
- type: bind
|
||||
source: /dev/null
|
||||
target: /dev/null
|
||||
# java 17 wants /etc/java-17-openjdk
|
||||
# java 21 wants /etc/java-21-openjdk
|
||||
- type: bind
|
||||
source: /etc/java-17-openjdk
|
||||
target: /etc/java-17-openjdk
|
||||
source: /etc/java-21-openjdk
|
||||
target: /etc/java-21-openjdk
|
||||
readonly: true
|
||||
# node wants /dev/urandom
|
||||
- type: bind
|
||||
|
||||
@ -34,10 +34,11 @@ type Cmd struct {
|
||||
CopyIn map[string]CmdFile
|
||||
Symlinks map[string]string
|
||||
|
||||
CopyOut []CmdCopyOutFile
|
||||
CopyOutCached []CmdCopyOutFile
|
||||
CopyOutMax uint64
|
||||
CopyOutDir string
|
||||
CopyOut []CmdCopyOutFile
|
||||
CopyOutCached []CmdCopyOutFile
|
||||
CopyOutMax uint64
|
||||
CopyOutDir string
|
||||
CopyOutTruncate bool
|
||||
|
||||
TTY bool
|
||||
DataSegmentLimit bool
|
||||
|
||||
@ -391,6 +391,7 @@ func (w *worker) prepareCmd(rc Cmd, pipeFileName map[string]bool) (*envexec.Cmd,
|
||||
CopyOut: copyOut,
|
||||
CopyOutDir: copyOutDir,
|
||||
CopyOutMax: copyOutMax,
|
||||
CopyOutTruncate: rc.CopyOutTruncate,
|
||||
Waiter: wait.Wait,
|
||||
}, nil
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user