feat: run stages and teapot in joj3 #47
|  | @ -18,6 +18,8 @@ type Conf struct { | ||||||
| 	SandboxToken      string `default:""` | 	SandboxToken      string `default:""` | ||||||
| 	LogPath           string `default:""` | 	LogPath           string `default:""` | ||||||
| 	OutputPath        string `default:"joj3_result.json"` | 	OutputPath        string `default:"joj3_result.json"` | ||||||
|  | 	GradingRepoName   string `default:""` | ||||||
|  | 	SkipTeapot        bool   `default:"true"` | ||||||
| 	Stages            []struct { | 	Stages            []struct { | ||||||
| 		Name     string | 		Name     string | ||||||
| 		Group    string | 		Group    string | ||||||
|  |  | ||||||
|  | @ -1,20 +1,57 @@ | ||||||
| package teapot | package teapot | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
|  | 	"fmt" | ||||||
| 	"log/slog" | 	"log/slog" | ||||||
|  | 	"os" | ||||||
| 	"os/exec" | 	"os/exec" | ||||||
|  | 	"strings" | ||||||
| 
 | 
 | ||||||
| 	"github.com/joint-online-judge/JOJ3/cmd/joj3/conf" | 	"github.com/joint-online-judge/JOJ3/cmd/joj3/conf" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func Run(conf conf.Conf) error { | func Run(conf conf.Conf) error { | ||||||
| 	// TODO: call teapot
 | 	if conf.SkipTeapot { | ||||||
| 	cmd := exec.Command("joint-teapot", "--help") | 		return nil | ||||||
|  | 	} | ||||||
|  | 	os.Setenv("LOG_FILE_PATH", "/home/tt/.cache/joint-teapot-debug.log") | ||||||
|  | 	os.Setenv("_TYPER_STANDARD_TRACEBACK", "1") | ||||||
|  | 	envFilePath := "/home/tt/.config/teapot/teapot.env" | ||||||
|  | 	actor := os.Getenv("GITHUB_ACTOR") | ||||||
|  | 	repository := os.Getenv("GITHUB_REPOSITORY") | ||||||
|  | 	runNumber := os.Getenv("GITHUB_RUN_NUMBER") | ||||||
|  | 	if actor == "" || repository == "" || strings.Count(repository, "/") != 1 || | ||||||
|  | 		runNumber == "" { | ||||||
|  | 		slog.Error("teapot env not set") | ||||||
|  | 		return fmt.Errorf("teapot env not set") | ||||||
|  | 	} | ||||||
|  | 	repoParts := strings.Split(repository, "/") | ||||||
|  | 	repoName := repoParts[1] | ||||||
|  | 	cmd := exec.Command("joint-teapot", "joj3-scoreboard", | ||||||
|  | 		envFilePath, conf.OutputPath, actor, conf.GradingRepoName, repoName, | ||||||
|  | 		runNumber) // #nosec G204
 | ||||||
| 	output, err := cmd.CombinedOutput() | 	output, err := cmd.CombinedOutput() | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		slog.Error("running git command:", "err", err) | 		slog.Error("running git command:", "err", err) | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	slog.Info("joint-teapot run", "output", string(output)) | 	slog.Info("joint-teapot joj3-scoreboard", "output", string(output)) | ||||||
|  | 	cmd = exec.Command("joint-teapot", "joj3-failed-table", | ||||||
|  | 		envFilePath, conf.OutputPath, actor, conf.GradingRepoName, repoName, | ||||||
|  | 		runNumber) // #nosec G204
 | ||||||
|  | 	output, err = cmd.CombinedOutput() | ||||||
|  | 	if err != nil { | ||||||
|  | 		slog.Error("running git command:", "err", err) | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	slog.Info("joint-teapot joj3-failed-table", "output", string(output)) | ||||||
|  | 	cmd = exec.Command("joint-teapot", "joj3-create-result-issue", | ||||||
|  | 		envFilePath, conf.OutputPath, repoName, runNumber) // #nosec G204
 | ||||||
|  | 	output, err = cmd.CombinedOutput() | ||||||
|  | 	if err != nil { | ||||||
|  | 		slog.Error("running git command:", "err", err) | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	slog.Info("joint-teapot joj3-create-result-issue", "output", string(output)) | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user