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. | In order to register sandbox executor, you need to run go-judge before running this program. | ||||||
| 
 | 
 | ||||||
| ```bash | ```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 ./build/* | ||||||
| rm -rf *.out | rm -rf *.out | ||||||
| go build -o ./build/joj3 ./cmd/joj3 | go build -o ./build/joj3 ./cmd/joj3 | ||||||
|  | @ -14,7 +14,15 @@ go build -o ./build/joj3 ./cmd/joj3 | ||||||
| + cd ./_example/success | + cd ./_example/success | ||||||
| + ./../../build/joj3 | + ./../../build/joj3 | ||||||
| + cat ./joj3_result.json | + 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 | + rm -f ./joj3_result.json | ||||||
| + cd - | + cd - | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
|  | @ -1,4 +1,3 @@ | ||||||
| logLevel = 0 |  | ||||||
| [[stages]] | [[stages]] | ||||||
| name = "compile" | name = "compile" | ||||||
| [stages.executor] | [stages.executor] | ||||||
|  |  | ||||||
|  | @ -3,8 +3,8 @@ package main | ||||||
| import "focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/stage" | import "focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/stage" | ||||||
| 
 | 
 | ||||||
| type Conf struct { | type Conf struct { | ||||||
| 	LogLevel   int | 	LogLevel   int    `default:"0"` | ||||||
| 	OutputPath string | 	OutputPath string `default:"joj3_result.json"` | ||||||
| 	Stages     []struct { | 	Stages     []struct { | ||||||
| 		Name     string | 		Name     string | ||||||
| 		Executor struct { | 		Executor struct { | ||||||
|  | @ -21,13 +21,6 @@ type Conf struct { | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func DefaultConf() Conf { |  | ||||||
| 	return Conf{ |  | ||||||
| 		LogLevel:   0, |  | ||||||
| 		OutputPath: "joj3_result.json", |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| type OptionalCmd struct { | type OptionalCmd struct { | ||||||
| 	Args   *[]string | 	Args   *[]string | ||||||
| 	Env    *[]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/parsers" | ||||||
| 	"focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/stage" | 	"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/jinzhu/copier" | ||||||
|  | 	"github.com/koding/multiconfig" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func parseConfFile(tomlPath *string) Conf { | func parseConfFile(path string) Conf { | ||||||
| 	tomlConfig, err := os.ReadFile(*tomlPath) | 	m := multiconfig.NewWithPath(path) | ||||||
| 	if err != nil { | 	conf := Conf{} | ||||||
| 		slog.Error("read toml config", "error", err) | 	err := m.Load(&conf) | ||||||
| 		os.Exit(1) |  | ||||||
| 	} |  | ||||||
| 	conf := DefaultConf() |  | ||||||
| 	err = toml.Unmarshal(tomlConfig, &conf) |  | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		slog.Error("parse stages config", "error", err) | 		slog.Error("parse stages config", "error", err) | ||||||
| 		os.Exit(1) | 		os.Exit(1) | ||||||
|  | @ -89,9 +84,9 @@ func outputResult(conf Conf, results []stage.StageResult) error { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func main() { | 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() | 	flag.Parse() | ||||||
| 	conf := parseConfFile(tomlPath) | 	conf := parseConfFile(*tomlPath) | ||||||
| 	setupSlog(conf) | 	setupSlog(conf) | ||||||
| 	stages := generateStages(conf) | 	stages := generateStages(conf) | ||||||
| 	defer stage.Cleanup() | 	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 | go 1.22.0 | ||||||
| 
 | 
 | ||||||
| require ( | require ( | ||||||
| 	github.com/BurntSushi/toml v1.3.2 |  | ||||||
| 	github.com/criyle/go-judge v1.8.2 | 	github.com/criyle/go-judge v1.8.2 | ||||||
| 	github.com/mitchellh/mapstructure v1.5.0 | 	github.com/mitchellh/mapstructure v1.5.0 | ||||||
| 	google.golang.org/grpc v1.62.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 ( | require ( | ||||||
|  | 	github.com/BurntSushi/toml v1.3.2 // indirect | ||||||
| 	github.com/creack/pty v1.1.21 // indirect | 	github.com/creack/pty v1.1.21 // indirect | ||||||
| 	github.com/criyle/go-sandbox v0.10.1 // 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/golang/protobuf v1.5.3 // indirect | ||||||
| 	github.com/jinzhu/copier v0.4.0 |  | ||||||
| 	golang.org/x/net v0.21.0 // indirect | 	golang.org/x/net v0.21.0 // indirect | ||||||
| 	golang.org/x/sync v0.6.0 // indirect | 	golang.org/x/sync v0.6.0 // indirect | ||||||
| 	golang.org/x/sys v0.17.0 // indirect | 	golang.org/x/sys v0.17.0 // indirect | ||||||
| 	golang.org/x/text v0.14.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/genproto/googleapis/rpc v0.0.0-20240228224816-df926f6c8641 // indirect | ||||||
| 	google.golang.org/protobuf v1.32.0 // 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-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 h1:z9Il/UXQwKEvIwdr1wVheWWWAqGWtdTItBmEsWqFqT4= | ||||||
| github.com/criyle/go-sandbox v0.10.1/go.mod h1:ivPw/HEh5unxVRlXJxCgkgTCuy+cxTkQDX7D2XQf/kg= | 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.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= | ||||||
| github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= | github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= | ||||||
| github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= | 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/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 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8= | ||||||
| github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= | 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 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= | ||||||
| github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= | github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= | ||||||
| golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= | 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.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= | ||||||
| google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= | google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= | ||||||
| google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= | 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