Merge remote-tracking branch 'origin/master' into scoreboard
This commit is contained in:
commit
17d17800bd
10
Makefile
10
Makefile
|
@ -1,19 +1,23 @@
|
|||
.PHONY: all clean test
|
||||
.PHONY: all build clean prepare-test test
|
||||
|
||||
BUILD_DIR = ./build
|
||||
TMP_DIR = ./tmp
|
||||
APPS := $(notdir $(wildcard ./cmd/*))
|
||||
FLAGS := "-s -w"
|
||||
|
||||
all:
|
||||
all: build
|
||||
|
||||
build:
|
||||
$(foreach APP,$(APPS), go build -ldflags=$(FLAGS) -o $(BUILD_DIR)/$(APP) ./cmd/$(APP);)
|
||||
|
||||
clean:
|
||||
rm -rf $(BUILD_DIR)/*
|
||||
rm -rf $(TMP_DIR)/*
|
||||
rm -rf *.out
|
||||
|
||||
prepare-test:
|
||||
git submodule update --init --remote
|
||||
|
||||
test:
|
||||
./scripts/prepare_test_repos.sh
|
||||
./scripts/prepare_test_repos.sh $(TMP_DIR)
|
||||
go test -coverprofile cover.out -v ./...
|
||||
|
|
|
@ -17,7 +17,7 @@ $ go build -o ./tmp/go-judge ./cmd/go-judge
|
|||
5. Run `go-judge`.
|
||||
```bash
|
||||
$ # make sure you are in go-judge directory
|
||||
$ ./tmp/go-judge -enable-grpc -enable-debug -enable-metrics
|
||||
$ ./tmp/go-judge -http-addr 0.0.0.0:5050 -grpc-addr 0.0.0.0:5051 -monitor-addr 0.0.0.0:5052 -enable-grpc -enable-debug -enable-metrics
|
||||
```
|
||||
|
||||
6. Pull submodules. It might be slow, so only run it when necessary.
|
||||
|
|
|
@ -10,9 +10,11 @@ import (
|
|||
)
|
||||
|
||||
type Conf struct {
|
||||
LogLevel int `default:"0"`
|
||||
OutputPath string `default:"joj3_result.json"`
|
||||
Stages []struct {
|
||||
SandboxExecServer string `default:"localhost:5051"`
|
||||
SandboxToken string `default:""`
|
||||
LogLevel int `default:"0"`
|
||||
OutputPath string `default:"joj3_result.json"`
|
||||
Stages []struct {
|
||||
Name string
|
||||
Executor struct {
|
||||
Name string
|
||||
|
|
|
@ -5,7 +5,7 @@ import (
|
|||
"log/slog"
|
||||
"os"
|
||||
|
||||
_ "focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/executors"
|
||||
"focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/executors"
|
||||
_ "focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/parsers"
|
||||
"focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/stage"
|
||||
|
||||
|
@ -77,6 +77,7 @@ func main() {
|
|||
os.Exit(1)
|
||||
}
|
||||
setupSlog(conf)
|
||||
executors.InitWithConf(conf.SandboxExecServer, conf.SandboxToken)
|
||||
stages := generateStages(conf)
|
||||
defer stage.Cleanup()
|
||||
results := stage.Run(stages)
|
||||
|
|
|
@ -66,7 +66,7 @@ func TestMain(t *testing.T) {
|
|||
scoreboard := scoreboard.Scoreboard{}
|
||||
scoreboard.Init()
|
||||
var tests []string
|
||||
root := "../../tmp/submodules/JOJ3-examples"
|
||||
root := "../../tmp/submodules/JOJ3-examples/examples/"
|
||||
err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
@ -2,8 +2,13 @@ package executors
|
|||
|
||||
import (
|
||||
_ "focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/executors/dummy"
|
||||
_ "focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/executors/sandbox"
|
||||
"focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/executors/sandbox"
|
||||
)
|
||||
|
||||
// this file does nothing but imports to ensure all the init() functions
|
||||
// in the subpackages are called
|
||||
|
||||
// overwrite the default registered executors
|
||||
func InitWithConf(sandboxExecServer, sandboxToken string) {
|
||||
sandbox.InitWithConf(sandboxExecServer, sandboxToken)
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package sandbox
|
||||
|
||||
import (
|
||||
"log/slog"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
@ -113,7 +114,12 @@ func convertPBFile(i stage.CmdFile) *pb.Request_File {
|
|||
i.Src = &absPath
|
||||
}
|
||||
}
|
||||
return &pb.Request_File{File: &pb.Request_File_Local{Local: &pb.Request_LocalFile{Src: *i.Src}}}
|
||||
s, err := os.ReadFile(*i.Src)
|
||||
if err != nil {
|
||||
s = []byte{}
|
||||
slog.Error("read file error", "path", *i.Src, "error", err)
|
||||
}
|
||||
return &pb.Request_File{File: &pb.Request_File_Memory{Memory: &pb.Request_MemoryFile{Content: s}}}
|
||||
case i.Content != nil:
|
||||
s := strToBytes(*i.Content)
|
||||
return &pb.Request_File{File: &pb.Request_File_Memory{Memory: &pb.Request_MemoryFile{Content: s}}}
|
||||
|
|
|
@ -18,6 +18,7 @@ type Sandbox struct {
|
|||
func (e *Sandbox) Run(cmds []stage.Cmd) ([]stage.ExecutorResult, error) {
|
||||
var err error
|
||||
if e.execClient == nil {
|
||||
slog.Debug("create exec client", "server", e.execServer)
|
||||
e.execClient, err = createExecClient(e.execServer, e.token)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
|
@ -8,9 +8,17 @@ var name = "sandbox"
|
|||
|
||||
func init() {
|
||||
stage.RegisterExecutor(name, &Sandbox{
|
||||
// TODO: read from conf
|
||||
execServer: "localhost:5051",
|
||||
token: "",
|
||||
cachedMap: make(map[string]string),
|
||||
})
|
||||
}
|
||||
|
||||
// overwrite the default registered executor
|
||||
func InitWithConf(execServer, token string) {
|
||||
stage.RegisterExecutor(name, &Sandbox{
|
||||
execServer: execServer,
|
||||
token: token,
|
||||
cachedMap: make(map[string]string),
|
||||
})
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
set -ex
|
||||
declare -A repo_names
|
||||
tmp_dir="./tmp"
|
||||
tmp_dir=${1:-./tmp}
|
||||
submodules_dir="$tmp_dir/submodules"
|
||||
rm -rf $submodules_dir
|
||||
mkdir -p $submodules_dir
|
||||
|
@ -24,6 +24,7 @@ for submodule in $submodules; do
|
|||
repo_names[$repo_name]=1
|
||||
cd $repo_dir
|
||||
git checkout -q $branch
|
||||
git reset -q --hard origin/$branch
|
||||
cd -
|
||||
submodule_dir="$submodules_dir/$repo_name/$submodule"
|
||||
mkdir -p $submodule_dir
|
||||
|
|
21
scripts/run_foreach_test_repos.sh
Executable file
21
scripts/run_foreach_test_repos.sh
Executable file
|
@ -0,0 +1,21 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -ex
|
||||
tmp_dir=${1:-./tmp}
|
||||
JOJ3=$(git rev-parse --show-toplevel)/build/joj3
|
||||
command=${2:-$JOJ3}
|
||||
submodules_dir="$tmp_dir/submodules"
|
||||
submodules=$(git config --file .gitmodules --get-regexp path | awk '{ print $2 }')
|
||||
for submodule in $submodules; do
|
||||
url=$(git config --file .gitmodules --get-regexp "submodule.$submodule.url" | awk '{ print $2 }')
|
||||
repo_name=$(echo $url | rev | cut -d'/' -f 1 | rev | cut -d'.' -f 1)
|
||||
submodule_dir="$submodules_dir/$repo_name/$submodule"
|
||||
cd $submodule_dir
|
||||
eval "$command"
|
||||
if [[ $command == $JOJ3 ]]; then
|
||||
if [ -f "./expected.json" ]; then
|
||||
mv -f "joj3_result.json" "expected.json"
|
||||
fi
|
||||
fi
|
||||
cd -
|
||||
done
|
Loading…
Reference in New Issue
Block a user