refactor: use multiconfig to read config
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				continuous-integration/drone/push Build is passing
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	continuous-integration/drone/push Build is passing
				
			This commit is contained in:
		
							parent
							
								
									540937c949
								
							
						
					
					
						commit
						7b34a86f67
					
				
							
								
								
									
										12
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								README.md
									
									
									
									
									
								
							|  | @ -5,7 +5,7 @@ | |||
| In order to register sandbox executor, you need to run go-judge before running this program. | ||||
| 
 | ||||
| ```bash | ||||
| $ make clean && make && ./_example/success/run.sh | ||||
| $ make clean && make && ./_example/success/run.sh && ./_example/compile_error/run.sh | ||||
| rm -rf ./build/* | ||||
| rm -rf *.out | ||||
| go build -o ./build/joj3 ./cmd/joj3 | ||||
|  | @ -14,7 +14,15 @@ go build -o ./build/joj3 ./cmd/joj3 | |||
| + cd ./_example/success | ||||
| + ./../../build/joj3 | ||||
| + cat ./joj3_result.json | ||||
| [{"Name":"compile","Results":[{"Score":100,"Comment":"compile done, executor status: run time: 265269232 ns, memory: 57790464 bytes"}]},{"Name":"run","Results":[{"Score":100,"Comment":"executor status: run time: 2033735 ns, memory: 13225984 bytes"},{"Score":100,"Comment":"executor status: run time: 3117399 ns, memory: 14548992 bytes"}]}] | ||||
| [{"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 -- ./_example/compile_error/run.sh | ||||
| + DIRNAME=./_example/compile_error | ||||
| + cd ./_example/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 - | ||||
| ``` | ||||
|  |  | |||
|  | @ -1,4 +1,3 @@ | |||
| logLevel = 0 | ||||
| [[stages]] | ||||
| name = "compile" | ||||
| [stages.executor] | ||||
|  |  | |||
|  | @ -3,8 +3,8 @@ package main | |||
| import "focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/stage" | ||||
| 
 | ||||
| type Conf struct { | ||||
| 	LogLevel   int | ||||
| 	OutputPath string | ||||
| 	LogLevel   int    `default:"0"` | ||||
| 	OutputPath string `default:"joj3_result.json"` | ||||
| 	Stages     []struct { | ||||
| 		Name     string | ||||
| 		Executor struct { | ||||
|  | @ -21,13 +21,6 @@ type Conf struct { | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| func DefaultConf() Conf { | ||||
| 	return Conf{ | ||||
| 		LogLevel:   0, | ||||
| 		OutputPath: "joj3_result.json", | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| type OptionalCmd struct { | ||||
| 	Args   *[]string | ||||
| 	Env    *[]string | ||||
|  |  | |||
|  | @ -10,19 +10,14 @@ import ( | |||
| 	_ "focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/parsers" | ||||
| 	"focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/stage" | ||||
| 
 | ||||
| 	// "github.com/pelletier/go-toml/v2" may panic on some error
 | ||||
| 	"github.com/BurntSushi/toml" | ||||
| 	"github.com/jinzhu/copier" | ||||
| 	"github.com/koding/multiconfig" | ||||
| ) | ||||
| 
 | ||||
| func parseConfFile(tomlPath *string) Conf { | ||||
| 	tomlConfig, err := os.ReadFile(*tomlPath) | ||||
| 	if err != nil { | ||||
| 		slog.Error("read toml config", "error", err) | ||||
| 		os.Exit(1) | ||||
| 	} | ||||
| 	conf := DefaultConf() | ||||
| 	err = toml.Unmarshal(tomlConfig, &conf) | ||||
| func parseConfFile(path string) Conf { | ||||
| 	m := multiconfig.NewWithPath(path) | ||||
| 	conf := Conf{} | ||||
| 	err := m.Load(&conf) | ||||
| 	if err != nil { | ||||
| 		slog.Error("parse stages config", "error", err) | ||||
| 		os.Exit(1) | ||||
|  | @ -89,9 +84,9 @@ func outputResult(conf Conf, results []stage.StageResult) error { | |||
| } | ||||
| 
 | ||||
| func main() { | ||||
| 	tomlPath := flag.String("c", "conf.toml", "file path of the toml config") | ||||
| 	tomlPath := flag.String("c", "conf.toml", "file path of the config file") | ||||
| 	flag.Parse() | ||||
| 	conf := parseConfFile(tomlPath) | ||||
| 	conf := parseConfFile(*tomlPath) | ||||
| 	setupSlog(conf) | ||||
| 	stages := generateStages(conf) | ||||
| 	defer stage.Cleanup() | ||||
|  |  | |||
							
								
								
									
										8
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								go.mod
									
									
									
									
									
								
							|  | @ -3,21 +3,25 @@ module focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3 | |||
| go 1.22.0 | ||||
| 
 | ||||
| require ( | ||||
| 	github.com/BurntSushi/toml v1.3.2 | ||||
| 	github.com/criyle/go-judge v1.8.2 | ||||
| 	github.com/mitchellh/mapstructure v1.5.0 | ||||
| 	google.golang.org/grpc v1.62.0 | ||||
| 	github.com/jinzhu/copier v0.4.0 | ||||
| 	github.com/koding/multiconfig v0.0.0-20171124222453-69c27309b2d7 | ||||
| ) | ||||
| 
 | ||||
| require ( | ||||
| 	github.com/BurntSushi/toml v1.3.2 // indirect | ||||
| 	github.com/creack/pty v1.1.21 // indirect | ||||
| 	github.com/criyle/go-sandbox v0.10.1 // indirect | ||||
| 	github.com/fatih/camelcase v1.0.0 // indirect | ||||
| 	github.com/fatih/structs v1.1.0 // indirect | ||||
| 	github.com/golang/protobuf v1.5.3 // indirect | ||||
| 	github.com/jinzhu/copier v0.4.0 | ||||
| 	golang.org/x/net v0.21.0 // indirect | ||||
| 	golang.org/x/sync v0.6.0 // indirect | ||||
| 	golang.org/x/sys v0.17.0 // indirect | ||||
| 	golang.org/x/text v0.14.0 // indirect | ||||
| 	google.golang.org/genproto/googleapis/rpc v0.0.0-20240228224816-df926f6c8641 // indirect | ||||
| 	google.golang.org/protobuf v1.32.0 // indirect | ||||
| 	gopkg.in/yaml.v2 v2.4.0 // indirect | ||||
| ) | ||||
|  |  | |||
							
								
								
									
										10
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								go.sum
									
									
									
									
									
								
							|  | @ -6,6 +6,10 @@ github.com/criyle/go-judge v1.8.2 h1:dGjLqJRBifqsLVZj1scr23zdM4wPe98HTIVgYzPuRxA | |||
| github.com/criyle/go-judge v1.8.2/go.mod h1:3RgsMp21D+UvXzkpOGsVFbLe2T2Lwk8jPEmCntQrvHQ= | ||||
| github.com/criyle/go-sandbox v0.10.1 h1:z9Il/UXQwKEvIwdr1wVheWWWAqGWtdTItBmEsWqFqT4= | ||||
| github.com/criyle/go-sandbox v0.10.1/go.mod h1:ivPw/HEh5unxVRlXJxCgkgTCuy+cxTkQDX7D2XQf/kg= | ||||
| github.com/fatih/camelcase v1.0.0 h1:hxNvNX/xYBp0ovncs8WyWZrOrpBNub/JfaMvbURyft8= | ||||
| github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= | ||||
| github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= | ||||
| github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= | ||||
| github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= | ||||
| github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= | ||||
| github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= | ||||
|  | @ -14,6 +18,8 @@ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= | |||
| github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | ||||
| github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8= | ||||
| github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= | ||||
| github.com/koding/multiconfig v0.0.0-20171124222453-69c27309b2d7 h1:SWlt7BoQNASbhTUD0Oy5yysI2seJ7vWuGUp///OM4TM= | ||||
| github.com/koding/multiconfig v0.0.0-20171124222453-69c27309b2d7/go.mod h1:Y2SaZf2Rzd0pXkLVhLlCiAXFCLSXAIbTKDivVgff/AM= | ||||
| github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= | ||||
| github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= | ||||
| golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= | ||||
|  | @ -33,3 +39,7 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 | |||
| google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= | ||||
| google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= | ||||
| google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= | ||||
| gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= | ||||
| gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||
| gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= | ||||
| gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user