WIP: feat: scoreboard (#15) #31
|  | @ -26,6 +26,13 @@ steps: | |||
|       commands: | ||||
|           - make prepare-test | ||||
|           - make test | ||||
|     - name: scoreboard | ||||
|       environment: | ||||
|           GITEA_ACCESS_TOKEN: | ||||
|               from_secret: gitea-token | ||||
|           GITEA_ORG_NAME: FOCS-dev | ||||
|       commands: | ||||
|           - bash scripts/submit_scoreboard_failedtable.sh | ||||
|     - name: store | ||||
|       commands: | ||||
|           - cp build/joj3 /home/drone/.local/bin/joj3 | ||||
|  |  | |||
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							|  | @ -125,3 +125,5 @@ $RECYCLE.BIN/ | |||
| build/ | ||||
| !examples/**/*.out | ||||
| tmp/ | ||||
| repos/ | ||||
| score.json | ||||
|  |  | |||
|  | @ -9,6 +9,7 @@ import ( | |||
| 	"strings" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/scoreboard" | ||||
| 	"focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/stage" | ||||
| ) | ||||
| 
 | ||||
|  | @ -62,6 +63,8 @@ func readStageResults(t *testing.T, path string) []stage.StageResult { | |||
| } | ||||
| 
 | ||||
| func TestMain(t *testing.T) { | ||||
| 	scoreboard := scoreboard.Scoreboard{} | ||||
| 	scoreboard.Init() | ||||
| 	var tests []string | ||||
| 	root := "../../tmp/submodules/JOJ3-examples/examples/" | ||||
| 	err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error { | ||||
|  | @ -107,6 +110,7 @@ func TestMain(t *testing.T) { | |||
| 			defer os.Remove(outputFile) | ||||
| 			main() | ||||
| 			stageResults := readStageResults(t, outputFile) | ||||
| 			scoreboard.AddScore(strings.TrimPrefix(tt, "/examples/"), stageResults) | ||||
| 			regex := true | ||||
| 			expectedFile := "expected_regex.json" | ||||
| 			if _, err := os.Stat(expectedFile); os.IsNotExist(err) { | ||||
|  | @ -117,4 +121,7 @@ func TestMain(t *testing.T) { | |||
| 			compareStageResults(t, stageResults, expectedStageResults, regex) | ||||
| 		}) | ||||
| 	} | ||||
| 	if !t.Failed() { | ||||
| 		scoreboard.SaveFile("../../score.json") | ||||
| 	} | ||||
| } | ||||
|  |  | |||
							
								
								
									
										40
									
								
								internal/scoreboard/scoreboard.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								internal/scoreboard/scoreboard.go
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,40 @@ | |||
| package scoreboard | ||||
| 
 | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"os" | ||||
| 
 | ||||
| 	"focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/stage" | ||||
| ) | ||||
| 
 | ||||
| type TestRecord struct { | ||||
| 	TestName     string              `json:"testname"` | ||||
| 	StageResults []stage.StageResult `json:"stageresults"` | ||||
| } | ||||
| 
 | ||||
| type ScoreboardData struct { | ||||
| 	TestRecords []TestRecord `json:"testrecords"` | ||||
| } | ||||
| 
 | ||||
| type Scoreboard struct { | ||||
| 	scoreboard ScoreboardData | ||||
| } | ||||
| 
 | ||||
| func (b *Scoreboard) Init() { | ||||
| 	b.scoreboard.TestRecords = make([]TestRecord, 0) | ||||
| } | ||||
| 
 | ||||
| func (b *Scoreboard) AddScore(testname string, results []stage.StageResult) { | ||||
| 	b.scoreboard.TestRecords = append(b.scoreboard.TestRecords, | ||||
| 		TestRecord{TestName: testname, StageResults: results}) | ||||
| } | ||||
| 
 | ||||
| func (b *Scoreboard) SaveFile(filePath string) { | ||||
| 	json_file, _ := os.Create(filePath) | ||||
| 	defer json_file.Close() | ||||
| 
 | ||||
| 	encoder := json.NewEncoder(json_file) | ||||
| 	encoder.SetEscapeHTML(false) | ||||
| 	encoder.SetIndent("", "  ") | ||||
| 	_ = encoder.Encode(b.scoreboard) | ||||
| } | ||||
							
								
								
									
										25
									
								
								scripts/submit_scoreboard_failedtable.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								scripts/submit_scoreboard_failedtable.sh
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,25 @@ | |||
| #!/bin/bash | ||||
| export ORIG_HOME=$(grep ^${USER}: /etc/passwd |cut -d : -f 6) | ||||
| PATH=$PATH:$ORIG_HOME/.local/bin | ||||
| 
 | ||||
| # if echo "${DRONE_REPO_NAME}" | grep -q '-'; then | ||||
| #     SUBMITTER_NAME=$(echo "${DRONE_REPO_NAME}" | cut -d'-' -f1); | ||||
| # else | ||||
| #     SUBMITTER_NAME=${DRONE_REPO_NAME}; | ||||
| # fi | ||||
| SUBMITTER_NAME=${DRONE_REPO_NAME} | ||||
| 
 | ||||
| mkdir repos | ||||
| 
 | ||||
| echo 'CANVAS_ACCESS_TOKEN=""' > .env | ||||
| echo 'CANVAS_COURSE_ID=0' >> .env | ||||
| echo 'GITEA_ACCESS_TOKEN=$GITEA_ACCESS_TOKEN' >> .env | ||||
| echo 'GITEA_ORG_NAME=$GITEA_ORG_NAME' >> .env | ||||
| echo 'MATTERMOST_TEAM=""' >> .env | ||||
| echo 'MATTERMOST_ACCESS_TOKEN=""' >> .env | ||||
| echo 'MATTERMOST_TEACHING_TEAM=[]' >> .env | ||||
| 
 | ||||
| joint-teapot JOJ3-scoreboard "score.json" $SUBMITTER_NAME "" "JOJ3-examples" "JOJ3_dev.csv" | ||||
| joint-teapot JOJ3-failed-table "score.json" "JOJ3-examples" $DRONE_REPO_NAME $DRONE_REMOTE_URL "JOJ3-failed.md" | ||||
| rm score.json | ||||
| rm .env | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user