Gitea actions based, 3rd generation of joint online judge.
https://github.com/joint-online-judge/JOJ3
|
All checks were successful
continuous-integration/drone/push Build is passing
|
||
|---|---|---|
| cmd | ||
| examples | ||
| internal | ||
| pkg | ||
| .drone.yml | ||
| .editorconfig | ||
| .gitignore | ||
| .golangci.yml | ||
| .pre-commit-config.yaml | ||
| go.mod | ||
| go.sum | ||
| Makefile | ||
| README.md | ||
JOJ3
Quick Start
In order to register the sandbox executor, you need to run go-judge before running this program.
$ export CONF_GITEATOKEN="<YOUR_TOKEN>" && make clean && make && ./examples/success/run.sh && ./examples/compile_error/run.sh
rm -rf ./build/*
rm -rf *.out
go build -o ./build/joj3 ./cmd/joj3
++ dirname -- ./examples/success/run.sh
+ DIRNAME=./examples/success
+ cd ./examples/success
+ ./../../build/joj3
+ cat ./joj3_result.json
[{"Name":"compile","Results":[{"Score":0,"Comment":""}]},{"Name":"run","Results":[{"Score":100,"Comment":"executor status: run time: 2811900 ns, memory: 16658432 bytes"},{"Score":100,"Comment":"executor status: run time: 2578200 ns, memory: 13094912 bytes"}]}]
+ rm -f ./joj3_result.json
+ cd -
++ dirname -- ./examples/compile_error/run.sh
+ DIRNAME=./examples/compile_error
+ cd ./examples/compile_error
+ ./../../build/joj3
+ cat ./joj3_result.json
[{"Name":"compile","Results":[{"Score":0,"Comment":"Unexpected executor status: Nonzero Exit Status."}]}]
+ rm -f ./joj3_result.json
+ cd -
For developers
Install pre-commit, golangci-lint, goimports.
Then install the pre-commit hooks. It will run some checks before you commit.
$ pre-commit install
pre-commit installed at .git/hooks/pre-commit
Models
The program parse the TOML file to run multiple stages.
Each stage contains a executor and parser.
Executor takes a Cmd and returns a ExecutorResult.
Parser takes a ExecutorResult and its conf and returns a ParserResult and bool to indicate whether we should skip the rest stages.
Cmd
Check Cmd in https://github.com/criyle/go-judge#rest-api-interface.
Some difference:
CopyInCwd bool: set totrueto add everything in the current working directory toCopyIn.CopyInCached map[string]string: key: file name in sandbox, value: file name used inCopyOutCached.LocalFile: now support relative path
ExecutorResult
Check Result in https://github.com/criyle/go-judge#rest-api-interface.
ParserResult
Score int: score of the stage.Comment string: comment of the stage.