dev #10

Merged
李衍志523370910113 merged 238 commits from dev into master 2025-03-05 16:20:39 +08:00
26 changed files with 696 additions and 431 deletions
Showing only changes of commit 4758e3be7a - Show all commits

2
.gitignore vendored
View File

@ -15,7 +15,7 @@ dist/
downloads/
eggs/
.eggs/
# lib/
lib/
jon-lee marked this conversation as resolved Outdated

should be ignored

should be ignored

fixed

fixed
lib64/
parts/
sdist/

View File

@ -29,13 +29,13 @@ def convert(
result_conf = result.Config(
name=task_conf.task.name,
# exact folder difference specified by type
log_path=f"{Path.home()}/.cache/joj3/{task_conf.task.type_}.log",
log_path=f"/home/tt/.cache/joj3/{task_conf.task.type_}.log",
jon-lee marked this conversation as resolved Outdated

Make this Path.home() default to /home/tt. For now, create a const for this dir.

Make this `Path.home()` default to `/home/tt`. For now, create a const for this dir.

fixed

fixed
expire_unix_timestamp=(
int(task_conf.release.deadline.timestamp())
if task_conf.release.deadline
else -1
),
jon-lee marked this conversation as resolved Outdated

where is it used?

where is it used?

this should be storing all the files that are about to be copy in or out

this should be storing all the files that are about to be copy in or out

It is as the input and output for the following functions about parsers

It is as the input and output for the following functions about parsers

so this feature is not implemented?

so this feature is not implemented?
    if not repo_conf.force_skip_health_check_on_test or not current_test:
        result_conf.stage.stages.append(get_health_check_config(repo_conf))
    cached: List[str] = []
    # Convert each stage in the task configuration
    for task_stage in task_conf.stages:
        executor_with_config, cached = get_executor_with_config(task_stage, cached)
        conf_stage = get_conf_stage(task_stage, executor_with_config)
        conf_stage = fix_result_detail(task_stage, conf_stage)
        conf_stage = fix_dummy(task_stage, conf_stage)
        conf_stage = fix_keyword(task_stage, conf_stage)
        conf_stage = fix_file(task_stage, conf_stage)
        conf_stage = fix_diff(task_stage, conf_stage, task_conf)
        result_conf.stage.stages.append(conf_stage)

it is

    for task_stage in task_conf.stages:
        executor_with_config, cached = get_executor_with_config(task_stage, cached)

this is a loop, so this cached will be updated in every round of stage

```python if not repo_conf.force_skip_health_check_on_test or not current_test: result_conf.stage.stages.append(get_health_check_config(repo_conf)) cached: List[str] = [] # Convert each stage in the task configuration for task_stage in task_conf.stages: executor_with_config, cached = get_executor_with_config(task_stage, cached) conf_stage = get_conf_stage(task_stage, executor_with_config) conf_stage = fix_result_detail(task_stage, conf_stage) conf_stage = fix_dummy(task_stage, conf_stage) conf_stage = fix_keyword(task_stage, conf_stage) conf_stage = fix_file(task_stage, conf_stage) conf_stage = fix_diff(task_stage, conf_stage, task_conf) result_conf.stage.stages.append(conf_stage) ``` it is ```python for task_stage in task_conf.stages: executor_with_config, cached = get_executor_with_config(task_stage, cached) ``` this is a loop, so this `cached` will be updated in every round of stage

The return value is unnecessary.

The return value is unnecessary.

I have a lazing coding style here, everything has get imported would get exported, so should maintain this until the end of the loop. Everything is exported in previous stage would be imported in the next stage.

I have a lazing coding style here, everything has get imported would get exported, so should maintain this until the end of the loop. Everything is exported in previous stage would be imported in the next stage.
  1. The return value is unnecessary
  2. It should be a set
1. The return value is unnecessary 2. It should be a `set`

try it yourself

try it yourself

I see why

I see why

resolved.

resolved.
actor_csv_path=f"{Path.home()}/.config/joj/students.csv", # students.csv position
actor_csv_path="/home/tt/.config/joj/students.csv", # students.csv position
max_total_score=repo_conf.max_total_score,
stage=result.Stage(
stages=[],
@ -75,7 +75,7 @@ def convert_joj1(joj1_conf: joj1.Config) -> task.Config:
)
def distribute_json(folder_path: Path, repo_obj: Any, conf_root: Path) -> None:
def distribute_json(folder_path: str, repo_obj: Any, conf_root: Path) -> None:
for root, _, files in os.walk(folder_path):
for file in files:
if file.endswith(".toml"):

View File

@ -9,6 +9,7 @@ import yaml
from joj3_config_generator.convert import convert as convert_conf
from joj3_config_generator.convert import convert_joj1 as convert_joj1_conf
from joj3_config_generator.convert import distribute_json
from joj3_config_generator.models import joj1, repo, task
from joj3_config_generator.utils.logger import logger
@ -42,14 +43,14 @@ def convert(
"-r",
help="This would be where you put your repo.toml file",
),
debug: bool = typer.Option(
False, "--debug", "-d", help="Enable debug mode for more verbose output"
distribute: bool = typer.Option(
False, "--distribute", "-d", help="This flag determine whether to distribute"
),
) -> Dict[str, Any]:
logger.info(f"Converting files in {repo_path.absolute()}")
logger.info(f"Converting files in {root.absolute()}")
repo_toml_path = os.path.join(repo_path.absolute(), "basic", "repo.toml")
task_toml_path = os.path.join(repo_path.absolute(), "basic", "task.toml")
result_json_path = os.path.join(repo_path.absolute(), "basic", "task.json")
task_toml_path = os.path.join(root.absolute(), "basic", "task.toml")
result_json_path = os.path.join(root.absolute(), "basic", "task.json")
with open(repo_toml_path, encoding=None) as repo_file:
repo_toml = repo_file.read()
with open(task_toml_path, encoding=None) as task_file:
@ -65,5 +66,8 @@ def convert(
# distribution on json
# need a get folder path function
# distribute_json(root.absolute(), repo_obj, root)
if distribute:
folder_path = "/home/tt/.config/joj"
folder_path = f"{Path.home()}/Desktop/engr151-joj/home/tt/.config/joj/homework"
distribute_json(folder_path, repo_obj, conf_root=root)
return result_dict

View File

@ -1,7 +1,7 @@
from datetime import datetime
jon-lee marked this conversation as resolved Outdated

every field in this file should not be optional. we give an default value here if any field does not exist

every field in this file should not be optional. we give an default value here if any field does not exist

and use underscore naming in this file

and use underscore naming in this file

every field in this file should not be optional. we give an default value here if any field does not exist

fixed

> every field in this file should not be optional. we give an default value here if any field does not exist fixed

and use underscore naming in this file

fixed.

> and use underscore naming in this file fixed.
from typing import Any, Dict, List, Optional, Type
from pydantic import BaseModel, Field, model_validator
from pydantic import BaseModel, Field, model_serializer, model_validator
class ParserResultDetail(BaseModel):
@ -79,7 +79,7 @@ class Stage(BaseModel):
skip: Optional[list[str]] = []
# cases related
cases: Optional[Dict[str, "Stage"]] = {}
cases: Optional[Dict[str, "Stage"]] = None
diff: Optional[ParserDiff] = ParserDiff()
class Config:
jon-lee marked this conversation as resolved Outdated

deprecated

deprecated

@bomingzh any suggestions on the structure?

@bomingzh any suggestions on the structure?
PydanticDeprecatedSince20: Support for class-based `config` is deprecated, use ConfigDict instead. Deprecated in Pydantic V2.0 to be removed in V3.0. See Pydantic V2 Migration Guide at https://errors.pydantic.dev/2.9/migration/
``` PydanticDeprecatedSince20: Support for class-based `config` is deprecated, use ConfigDict instead. Deprecated in Pydantic V2.0 to be removed in V3.0. See Pydantic V2 Migration Guide at https://errors.pydantic.dev/2.9/migration/ ```

fixed with model_config

fixed with `model_config`

str here need to be a StrEnum now.

str here need to be a `StrEnum` now.

But I guess we don't know the set of case in advance, making it dynamic StrEnum is meaningless

But I guess we don't know the set of case in advance, making it dynamic `StrEnum` is meaningless

line changed, the comment is for parsers

line changed, the comment is for `parsers`
@ -91,13 +91,13 @@ class Stage(BaseModel):
cases = {k: v for k, v in values.items() if k.startswith("case")}
for key in cases:
values.pop(key)
values["cases"] = {k: Stage(**v) for k, v in cases.items()}
values["cases"] = {k: v for k, v in cases.items()}
return values
class Release(BaseModel):
deadline: Optional[datetime] # RFC 3339 formatted date-time with offset
begin_time: Optional[datetime]
deadline: Optional[datetime] = None # RFC 3339 formatted date-time with offset
begin_time: Optional[datetime] = None
jon-lee marked this conversation as resolved Outdated

begin_time and end_time to make them match

`begin_time` and `end_time` to make them match

resolved

resolved
class Task(BaseModel):

View File

@ -42,8 +42,8 @@ def get_joj1_run_stage(joj1_config: joj1.Config) -> task.Stage:
else default_mem
),
),
cases={f"case{i}": cases_conf[i] for i, _ in enumerate(joj1_config.cases)},
)
cases={f"case{i}": cases_conf[i] for i, _ in enumerate(cases_conf)},
) # TODO: no strong pattern match here, use dict instead
return run_config

View File

@ -27,9 +27,7 @@ def get_teapot_stage(repo_conf: repo.Config) -> result.StageDetail:
with_=result.ExecutorWith(
default=result.Cmd(
args=shlex.split(args_),
env=[
f"LOG_FILE_PATH={Path.home()}/.cache/joint-teapot-debug.log"
], # TODO: fix it according to the task name
env=["LOG_FILE_PATH=/home/tt/.cache/joint-teapot-debug.log"],
),
cases=[],
),
@ -72,7 +70,7 @@ def get_debug_args(repo_conf: repo.Config) -> str:
args = ""
args = (
args
+ f"/usr/local/bin/joint-teapot joj3-check-env {Path.home()}/.config/teapot/teapot.env --grading-repo-name {get_grading_repo_name()} --group-config "
+ f"/usr/local/bin/joint-teapot joj3-check-env /home/tt/.config/teapot/teapot.env --grading-repo-name {get_grading_repo_name()} --group-config "
)
group_config = ""
for i, name in enumerate(repo_conf.groups.name):

View File

@ -61,7 +61,7 @@ def get_executorWithConfig(
else []
),
copy_in={
jon-lee marked this conversation as resolved Outdated

not necessary

not necessary

resolved.

resolved.
file: result.CmdFile(src=f"{Path.home()}/{conf_root}/tools/{file}")
file: result.CmdFile(src=f"/home/tt/{conf_root}/tools/{file}")
# all copyin files store in this tools folder
# are there any corner cases
for file in copy_in_files
@ -277,7 +277,7 @@ def fix_diff(
stage_cases.append(
result.OptionalCmd(
stdin=result.CmdFile(
src=f"{Path.home()}/{conf_root}/{task_conf.task.type_}/{stdin}"
src=f"/home/tt/{conf_root}/{task_conf.task.type_}/{stdin}"
),
args=(shlex.split(command) if command is not None else None),
cpu_limit=cpu_limit,
@ -300,7 +300,7 @@ def fix_diff(
{
"score": diff_output.score,
"fileName": "stdout",
"answerPath": f"{Path.home()}/{conf_root}/{task_conf.task.type_}/{stdout}",
"answerPath": f"/home/tt/{conf_root}/{task_conf.task.type_}/{stdout}",
"forceQuitOnDiff": diff_output.forcequit,
"alwaysHide": diff_output.hide,
"compareSpace": not diff_output.ignorespaces,

View File

@ -12,6 +12,8 @@ dependencies = [
"pydantic>=2.9.2",
"inquirer>=3.4.0",
"rtoml>=0.11.0",
"humanfriendly>=10.0",
"pytimeparse>=1.1.8",
]
requires-python = ">=3.9"
authors = [{ name = "JOJ3-dev", email = "joj3@focs.ji.sjtu.edu.cn" }]

View File

@ -1,9 +1,9 @@
{
"name": "hw7 ex2",
"logPath": "/home/nuvole0217/.cache/joj3/homework/h7/e2.log",
"logPath": "/home/tt/.cache/joj3/homework/h7/e2.log",
"expireUnixTimestamp": 1735574399,
"effectiveUnixTimestamp": -1,
"actorCsvPath": "/home/nuvole0217/.config/joj/students.csv",
"actorCsvPath": "/home/tt/.config/joj/students.csv",
"maxTotalScore": 100,
"stage": {
"sandboxExecServer": "172.17.0.1:5051",
@ -82,7 +82,7 @@
"args": [
"/usr/local/bin/joint-teapot",
"joj3-check-env",
"/home/nuvole0217/.config/teapot/teapot.env",
"/home/tt/.config/teapot/teapot.env",
"--grading-repo-name",
"Nuvole-joj",
"--group-config",
@ -153,7 +153,7 @@
"cpuSetLimit": "",
"copyIn": {
"tools/compile": {
"src": "/home/nuvole0217/./tools/tools/compile",
"src": "/home/tt/.config/joj/tools/tools/compile",
"max": 419430400
}
},
@ -243,7 +243,7 @@
"cpuSetLimit": "",
"copyIn": {
"tools/filelength": {
"src": "/home/nuvole0217/./tools/tools/filelength",
"src": "/home/tt/.config/joj/tools/tools/filelength",
"max": 419430400
}
},
@ -352,7 +352,7 @@
"cpuSetLimit": "",
"copyIn": {
"tests/homework/h7/.clang-tidy": {
"src": "/home/nuvole0217/./tools/tests/homework/h7/.clang-tidy",
"src": "/home/tt/.config/joj/tools/tests/homework/h7/.clang-tidy",
"max": 419430400
}
},
@ -719,7 +719,7 @@
"PATH=/usr/bin:/bin:/usr/local/bin"
],
"stdin": {
"src": "/home/nuvole0217/./homework/h7/e2/case0.in",
"src": "/home/tt/.config/joj/homework/h7/e2/case0.in",
"max": 419430400
},
"cpuLimit": 1000000000,
@ -736,7 +736,7 @@
"PATH=/usr/bin:/bin:/usr/local/bin"
],
"stdin": {
"src": "/home/nuvole0217/./homework/h7/e2/case1.in",
"src": "/home/tt/.config/joj/homework/h7/e2/case1.in",
"max": 419430400
},
"cpuLimit": 1000000000,
@ -762,7 +762,7 @@
{
"score": 5,
"fileName": "stdout",
"answerPath": "/home/nuvole0217/./homework/h7/e2/case0.out",
"answerPath": "/home/tt/.config/joj/homework/h7/e2/case0.out",
"forceQuitOnDiff": false,
"alwaysHide": false,
"compareSpace": false
@ -774,7 +774,7 @@
{
"score": 5,
"fileName": "stdout",
"answerPath": "/home/nuvole0217/./homework/h7/e2/case1.out",
"answerPath": "/home/tt/.config/joj/homework/h7/e2/case1.out",
"forceQuitOnDiff": false,
"alwaysHide": false,
"compareSpace": false
@ -818,7 +818,7 @@
"100"
],
"env": [
"LOG_FILE_PATH=/home/nuvole0217/.cache/joint-teapot-debug.log"
"LOG_FILE_PATH=/home/tt/.cache/joint-teapot-debug.log"
],
"stdin": {
"content": "",

View File

@ -0,0 +1,657 @@
[[stages]]
name = "This is the converted joj1 run stage"
score = 100
parsers = ["diff", "result-status"]
skip = []
[stages.limit]
mem = 32000000
cpu = 1
stderr = 800
stdout = 800
[stages.dummy]
comment = ""
score = 0
forcequit = false
[stages.result-status]
comment = ""
score = 0
forcequit = false
[stages.keyword]
keyword = []
weight = []
[stages.clangtidy]
keyword = []
weight = []
[stages.cppcheck]
keyword = []
weight = []
[stages.cpplint]
keyword = []
weight = []
[stages.result-detail]
time = true
mem = true
stdout = false
stderr = false
exitstatus = false
[stages.file]
[stages.cases.cases]
score = 0
parsers = []
skip = []
[stages.cases.cases.limit]
mem = 800
cpu = 1000
stderr = 800
stdout = 800
[stages.cases.cases.dummy]
comment = ""
score = 0
forcequit = false
[stages.cases.cases.result-status]
comment = ""
score = 0
forcequit = false
[stages.cases.cases.keyword]
keyword = []
weight = []
[stages.cases.cases.clangtidy]
keyword = []
weight = []
[stages.cases.cases.cppcheck]
keyword = []
weight = []
[stages.cases.cases.cpplint]
keyword = []
weight = []
[stages.cases.cases.result-detail]
time = true
mem = true
stdout = false
stderr = false
exitstatus = false
[stages.cases.cases.file]
[stages.cases.cases.cases.case0]
command = "-abcd --aaaa bbbb"
in = "case0.in"
out = "case0.out"
score = 10
parsers = []
skip = []
[stages.cases.cases.cases.case0.limit]
mem = 32000000
cpu = 1
stderr = 800
stdout = 800
[stages.cases.cases.cases.case0.dummy]
comment = ""
score = 0
forcequit = false
[stages.cases.cases.cases.case0.result-status]
comment = ""
score = 0
forcequit = false
[stages.cases.cases.cases.case0.keyword]
keyword = []
weight = []
[stages.cases.cases.cases.case0.clangtidy]
keyword = []
weight = []
[stages.cases.cases.cases.case0.cppcheck]
keyword = []
weight = []
[stages.cases.cases.cases.case0.cpplint]
keyword = []
weight = []
[stages.cases.cases.cases.case0.result-detail]
time = true
mem = true
stdout = false
stderr = false
exitstatus = false
[stages.cases.cases.cases.case0.file]
[stages.cases.cases.cases.case0.cases]
[stages.cases.cases.cases.case0.diff.output]
score = 0
ignorespaces = true
hide = false
forcequit = false
[stages.cases.cases.cases.case1]
in = "case1.in"
out = "case1.out"
score = 10
parsers = []
skip = []
[stages.cases.cases.cases.case1.limit]
mem = 32000000
cpu = 1
stderr = 800
stdout = 800
[stages.cases.cases.cases.case1.dummy]
comment = ""
score = 0
forcequit = false
[stages.cases.cases.cases.case1.result-status]
comment = ""
score = 0
forcequit = false
[stages.cases.cases.cases.case1.keyword]
keyword = []
weight = []
[stages.cases.cases.cases.case1.clangtidy]
keyword = []
weight = []
[stages.cases.cases.cases.case1.cppcheck]
keyword = []
weight = []
[stages.cases.cases.cases.case1.cpplint]
keyword = []
weight = []
[stages.cases.cases.cases.case1.result-detail]
time = true
mem = true
stdout = false
stderr = false
exitstatus = false
[stages.cases.cases.cases.case1.file]
[stages.cases.cases.cases.case1.cases]
[stages.cases.cases.cases.case1.diff.output]
score = 0
ignorespaces = true
hide = false
forcequit = false
[stages.cases.cases.cases.case2]
in = "case2.in"
out = "case2.out"
score = 10
parsers = []
skip = []
[stages.cases.cases.cases.case2.limit]
mem = 32000000
cpu = 1
stderr = 800
stdout = 800
[stages.cases.cases.cases.case2.dummy]
comment = ""
score = 0
forcequit = false
[stages.cases.cases.cases.case2.result-status]
comment = ""
score = 0
forcequit = false
[stages.cases.cases.cases.case2.keyword]
keyword = []
weight = []
[stages.cases.cases.cases.case2.clangtidy]
keyword = []
weight = []
[stages.cases.cases.cases.case2.cppcheck]
keyword = []
weight = []
[stages.cases.cases.cases.case2.cpplint]
keyword = []
weight = []
[stages.cases.cases.cases.case2.result-detail]
time = true
mem = true
stdout = false
stderr = false
exitstatus = false
[stages.cases.cases.cases.case2.file]
[stages.cases.cases.cases.case2.cases]
[stages.cases.cases.cases.case2.diff.output]
score = 0
ignorespaces = true
hide = false
forcequit = false
[stages.cases.cases.cases.case3]
in = "case3.in"
out = "case3.out"
score = 10
parsers = []
skip = []
[stages.cases.cases.cases.case3.limit]
mem = 32000000
cpu = 1
stderr = 800
stdout = 800
[stages.cases.cases.cases.case3.dummy]
comment = ""
score = 0
forcequit = false
[stages.cases.cases.cases.case3.result-status]
comment = ""
score = 0
forcequit = false
[stages.cases.cases.cases.case3.keyword]
keyword = []
weight = []
[stages.cases.cases.cases.case3.clangtidy]
keyword = []
weight = []
[stages.cases.cases.cases.case3.cppcheck]
keyword = []
weight = []
[stages.cases.cases.cases.case3.cpplint]
keyword = []
weight = []
[stages.cases.cases.cases.case3.result-detail]
time = true
mem = true
stdout = false
stderr = false
exitstatus = false
[stages.cases.cases.cases.case3.file]
[stages.cases.cases.cases.case3.cases]
[stages.cases.cases.cases.case3.diff.output]
score = 0
ignorespaces = true
hide = false
forcequit = false
[stages.cases.cases.cases.case4]
in = "case4.in"
out = "case4.out"
score = 10
parsers = []
skip = []
[stages.cases.cases.cases.case4.limit]
mem = 32000000
cpu = 1
stderr = 800
stdout = 800
[stages.cases.cases.cases.case4.dummy]
comment = ""
score = 0
forcequit = false
[stages.cases.cases.cases.case4.result-status]
comment = ""
score = 0
forcequit = false
[stages.cases.cases.cases.case4.keyword]
keyword = []
weight = []
[stages.cases.cases.cases.case4.clangtidy]
keyword = []
weight = []
[stages.cases.cases.cases.case4.cppcheck]
keyword = []
weight = []
[stages.cases.cases.cases.case4.cpplint]
keyword = []
weight = []
[stages.cases.cases.cases.case4.result-detail]
time = true
mem = true
stdout = false
stderr = false
exitstatus = false
[stages.cases.cases.cases.case4.file]
[stages.cases.cases.cases.case4.cases]
[stages.cases.cases.cases.case4.diff.output]
score = 0
ignorespaces = true
hide = false
forcequit = false
[stages.cases.cases.cases.case5]
in = "case5.in"
out = "case5.out"
score = 10
parsers = []
skip = []
[stages.cases.cases.cases.case5.limit]
mem = 32000000
cpu = 1
stderr = 800
stdout = 800
[stages.cases.cases.cases.case5.dummy]
comment = ""
score = 0
forcequit = false
[stages.cases.cases.cases.case5.result-status]
comment = ""
score = 0
forcequit = false
[stages.cases.cases.cases.case5.keyword]
keyword = []
weight = []
[stages.cases.cases.cases.case5.clangtidy]
keyword = []
weight = []
[stages.cases.cases.cases.case5.cppcheck]
keyword = []
weight = []
[stages.cases.cases.cases.case5.cpplint]
keyword = []
weight = []
[stages.cases.cases.cases.case5.result-detail]
time = true
mem = true
stdout = false
stderr = false
exitstatus = false
[stages.cases.cases.cases.case5.file]
[stages.cases.cases.cases.case5.cases]
[stages.cases.cases.cases.case5.diff.output]
score = 0
ignorespaces = true
hide = false
forcequit = false
[stages.cases.cases.cases.case6]
in = "case6.in"
out = "case6.out"
score = 10
parsers = []
skip = []
[stages.cases.cases.cases.case6.limit]
mem = 32000000
cpu = 1
stderr = 800
stdout = 800
[stages.cases.cases.cases.case6.dummy]
comment = ""
score = 0
forcequit = false
[stages.cases.cases.cases.case6.result-status]
comment = ""
score = 0
forcequit = false
[stages.cases.cases.cases.case6.keyword]
keyword = []
weight = []
[stages.cases.cases.cases.case6.clangtidy]
keyword = []
weight = []
[stages.cases.cases.cases.case6.cppcheck]
keyword = []
weight = []
[stages.cases.cases.cases.case6.cpplint]
keyword = []
weight = []
[stages.cases.cases.cases.case6.result-detail]
time = true
mem = true
stdout = false
stderr = false
exitstatus = false
[stages.cases.cases.cases.case6.file]
[stages.cases.cases.cases.case6.cases]
[stages.cases.cases.cases.case6.diff.output]
score = 0
ignorespaces = true
hide = false
forcequit = false
[stages.cases.cases.cases.case7]
in = "case7.in"
out = "case7.out"
score = 10
parsers = []
skip = []
[stages.cases.cases.cases.case7.limit]
mem = 32000000
cpu = 1
stderr = 800
stdout = 800
[stages.cases.cases.cases.case7.dummy]
comment = ""
score = 0
forcequit = false
[stages.cases.cases.cases.case7.result-status]
comment = ""
score = 0
forcequit = false
[stages.cases.cases.cases.case7.keyword]
keyword = []
weight = []
[stages.cases.cases.cases.case7.clangtidy]
keyword = []
weight = []
[stages.cases.cases.cases.case7.cppcheck]
keyword = []
weight = []
[stages.cases.cases.cases.case7.cpplint]
keyword = []
weight = []
[stages.cases.cases.cases.case7.result-detail]
time = true
mem = true
stdout = false
stderr = false
exitstatus = false
[stages.cases.cases.cases.case7.file]
[stages.cases.cases.cases.case7.cases]
[stages.cases.cases.cases.case7.diff.output]
score = 0
ignorespaces = true
hide = false
forcequit = false
[stages.cases.cases.cases.case8]
in = "case8.in"
out = "case8.out"
score = 10
parsers = []
skip = []
[stages.cases.cases.cases.case8.limit]
mem = 32000000
cpu = 1
stderr = 800
stdout = 800
[stages.cases.cases.cases.case8.dummy]
comment = ""
score = 0
forcequit = false
[stages.cases.cases.cases.case8.result-status]
comment = ""
score = 0
forcequit = false
[stages.cases.cases.cases.case8.keyword]
keyword = []
weight = []
[stages.cases.cases.cases.case8.clangtidy]
keyword = []
weight = []
[stages.cases.cases.cases.case8.cppcheck]
keyword = []
weight = []
[stages.cases.cases.cases.case8.cpplint]
keyword = []
weight = []
[stages.cases.cases.cases.case8.result-detail]
time = true
mem = true
stdout = false
stderr = false
exitstatus = false
[stages.cases.cases.cases.case8.file]
[stages.cases.cases.cases.case8.cases]
[stages.cases.cases.cases.case8.diff.output]
score = 0
ignorespaces = true
hide = false
forcequit = false
[stages.cases.cases.cases.case9]
in = "case9.in"
out = "case9.out"
score = 10
parsers = []
skip = []
[stages.cases.cases.cases.case9.limit]
mem = 32000000
cpu = 1
stderr = 800
stdout = 800
[stages.cases.cases.cases.case9.dummy]
comment = ""
score = 0
forcequit = false
[stages.cases.cases.cases.case9.result-status]
comment = ""
score = 0
forcequit = false
[stages.cases.cases.cases.case9.keyword]
keyword = []
weight = []
[stages.cases.cases.cases.case9.clangtidy]
keyword = []
weight = []
[stages.cases.cases.cases.case9.cppcheck]
keyword = []
weight = []
[stages.cases.cases.cases.case9.cpplint]
keyword = []
weight = []
[stages.cases.cases.cases.case9.result-detail]
time = true
mem = true
stdout = false
stderr = false
exitstatus = false
[stages.cases.cases.cases.case9.file]
[stages.cases.cases.cases.case9.cases]
[stages.cases.cases.cases.case9.diff.output]
score = 0
ignorespaces = true
hide = false
forcequit = false
[stages.cases.cases.diff.output]
score = 0
ignorespaces = true
hide = false
forcequit = false
[stages.diff.output]
score = 0
ignorespaces = true
hide = false
forcequit = false
[task]
type = ""
name = "Blank Task"
[release]

View File

@ -1,33 +0,0 @@
*.avi filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.djvu filter=lfs diff=lfs merge=lfs -text
*.doc filter=lfs diff=lfs merge=lfs -text
*.docx filter=lfs diff=lfs merge=lfs -text
*.epub filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.ipynb filter=lfs diff=lfs merge=lfs -text
*.jpeg filter=lfs diff=lfs merge=lfs -text
*.JPEG filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.JPG filter=lfs diff=lfs merge=lfs -text
*.mkv filter=lfs diff=lfs merge=lfs -text
*.mp4 filter=lfs diff=lfs merge=lfs -text
*.ods filter=lfs diff=lfs merge=lfs -text
*.odt filter=lfs diff=lfs merge=lfs -text
*.otf filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.PDF filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.PNG filter=lfs diff=lfs merge=lfs -text
*.ppt filter=lfs diff=lfs merge=lfs -text
*.pptx filter=lfs diff=lfs merge=lfs -text
*.ps filter=lfs diff=lfs merge=lfs -text
*.rar filter=lfs diff=lfs merge=lfs -text
*.tar filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.webm filter=lfs diff=lfs merge=lfs -text
*.xls filter=lfs diff=lfs merge=lfs -text
*.xlsx filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text

View File

@ -1,23 +0,0 @@
################################
## White list based gitignore ##
################################
# forbidden
*
.*
# allowed
!.gitignore
!.gitattributes
!.gitea/
!.gitea/issue_template/
!.gitea/workflows/
!*.yaml
!Makefile
!CMakeLists.txt
!h[0-8]/
!*.m
!*.c
!*.cpp
!*.h
!*.md

View File

@ -1,19 +0,0 @@
name: Run JOJ3 on Push
on: [push]
jobs:
run:
container:
image: focs.ji.sjtu.edu.cn:5000/gitea/runner-images:focs-ubuntu-latest-slim
volumes:
- /home/tt/.config:/home/tt/.config
- /home/tt/.cache:/home/tt/.cache
- /home/tt/.ssh:/home/tt/.ssh
steps:
- name: Check out repository code
uses: https://gitea.com/BoYanZh/checkout@focs
with:
fetch-depth: 0
- name: run joj3
run: |
sudo -E -u tt joj3 -conf-root /home/tt/.config/joj/tests/homework

View File

@ -1,21 +0,0 @@
name: Run JOJ3 on Release
on:
release:
types: [published]
jobs:
run:
container:
image: focs.ji.sjtu.edu.cn:5000/gitea/runner-images:focs-ubuntu-latest-slim
volumes:
- /home/tt/.config:/home/tt/.config
- /home/tt/.cache:/home/tt/.cache
- /home/tt/.ssh:/home/tt/.ssh
steps:
- name: Check out repository code
uses: https://gitea.com/BoYanZh/checkout@focs
with:
fetch-depth: 0
- name: run joj3
run: |
sudo -E -u tt joj3 -conf-root "/home/tt/.config/joj/tests/homework" -conf-name "conf-release.json" -tag "${{ github.ref_name }}"

View File

@ -1,33 +0,0 @@
*.avi filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.djvu filter=lfs diff=lfs merge=lfs -text
*.doc filter=lfs diff=lfs merge=lfs -text
*.docx filter=lfs diff=lfs merge=lfs -text
*.epub filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.ipynb filter=lfs diff=lfs merge=lfs -text
*.jpeg filter=lfs diff=lfs merge=lfs -text
*.JPEG filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.JPG filter=lfs diff=lfs merge=lfs -text
*.mkv filter=lfs diff=lfs merge=lfs -text
*.mp4 filter=lfs diff=lfs merge=lfs -text
*.ods filter=lfs diff=lfs merge=lfs -text
*.odt filter=lfs diff=lfs merge=lfs -text
*.otf filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.PDF filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.PNG filter=lfs diff=lfs merge=lfs -text
*.ppt filter=lfs diff=lfs merge=lfs -text
*.pptx filter=lfs diff=lfs merge=lfs -text
*.ps filter=lfs diff=lfs merge=lfs -text
*.rar filter=lfs diff=lfs merge=lfs -text
*.tar filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.webm filter=lfs diff=lfs merge=lfs -text
*.xls filter=lfs diff=lfs merge=lfs -text
*.xlsx filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text

View File

@ -1,23 +0,0 @@
################################
## White list based gitignore ##
################################
# forbidden
*
.*
# allowed
!.gitignore
!.gitattributes
!.gitea/
!.gitea/issue_template/
!.gitea/workflows/
!*.yaml
!Makefile
!CMakeLists.txt
!h[0-8]/
!*.m
!*.c
!*.cpp
!*.h
!*.md

View File

@ -1,19 +0,0 @@
name: Run JOJ3 on Push
on: [push]
jobs:
run:
container:
image: focs.ji.sjtu.edu.cn:5000/gitea/runner-images:focs-ubuntu-latest-slim
volumes:
- /home/tt/.config:/home/tt/.config
- /home/tt/.cache:/home/tt/.cache
- /home/tt/.ssh:/home/tt/.ssh
steps:
- name: Check out repository code
uses: https://gitea.com/BoYanZh/checkout@focs
with:
fetch-depth: 0
- name: run joj3
run: |
sudo -E -u tt joj3 -conf-root /home/tt/.config/joj/homework

View File

@ -1,21 +0,0 @@
name: Run JOJ3 on Release
on:
release:
types: [published]
jobs:
run:
container:
image: focs.ji.sjtu.edu.cn:5000/gitea/runner-images:focs-ubuntu-latest-slim
volumes:
- /home/tt/.config:/home/tt/.config
- /home/tt/.cache:/home/tt/.cache
- /home/tt/.ssh:/home/tt/.ssh
steps:
- name: Check out repository code
uses: https://gitea.com/BoYanZh/checkout@focs
with:
fetch-depth: 0
- name: run joj3
run: |
sudo -E -u tt joj3 -conf-root "/home/tt/.config/joj/homework" -conf-name "conf-release.json" -tag "${{ github.ref_name }}"

View File

@ -1,33 +0,0 @@
*.avi filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.djvu filter=lfs diff=lfs merge=lfs -text
*.doc filter=lfs diff=lfs merge=lfs -text
*.docx filter=lfs diff=lfs merge=lfs -text
*.epub filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.ipynb filter=lfs diff=lfs merge=lfs -text
*.jpeg filter=lfs diff=lfs merge=lfs -text
*.JPEG filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.JPG filter=lfs diff=lfs merge=lfs -text
*.mkv filter=lfs diff=lfs merge=lfs -text
*.mp4 filter=lfs diff=lfs merge=lfs -text
*.ods filter=lfs diff=lfs merge=lfs -text
*.odt filter=lfs diff=lfs merge=lfs -text
*.otf filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.PDF filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.PNG filter=lfs diff=lfs merge=lfs -text
*.ppt filter=lfs diff=lfs merge=lfs -text
*.pptx filter=lfs diff=lfs merge=lfs -text
*.ps filter=lfs diff=lfs merge=lfs -text
*.rar filter=lfs diff=lfs merge=lfs -text
*.tar filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.webm filter=lfs diff=lfs merge=lfs -text
*.xls filter=lfs diff=lfs merge=lfs -text
*.xlsx filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text

View File

@ -1,29 +0,0 @@
################################
## White list based gitignore ##
################################
# forbidden
*
.*
# allowed
!.gitignore
!.gitattributes
!.gitea/
!.gitea/issue_template/
!.gitea/workflows/
!src/
src/*
!src/ipa
!src/ipa/*.h
!src/ipa/*.cpp
!src/ipa/Makefile
!src/pms
!src/pms/*.cpp
!src/pms/*.h
!src/pms/Makefile
!CMakeLists.txt
!Makefile
!*.md
!*.yaml

View File

@ -1,19 +0,0 @@
name: Run JOJ3 on Push
on: [push]
jobs:
run:
container:
image: focs.ji.sjtu.edu.cn:5000/gitea/runner-images:focs-ubuntu-latest-slim
volumes:
- /home/tt/.config:/home/tt/.config
- /home/tt/.cache:/home/tt/.cache
- /home/tt/.ssh:/home/tt/.ssh
steps:
- name: Check out repository code
uses: https://gitea.com/BoYanZh/checkout@focs
with:
fetch-depth: 0
- name: run joj3
run: |
sudo -E -u tt joj3 -conf-root /home/tt/.config/joj/tests/projects/p3

View File

@ -1,21 +0,0 @@
name: Run JOJ3 on Release
on:
release:
types: [published]
jobs:
run:
container:
image: focs.ji.sjtu.edu.cn:5000/gitea/runner-images:focs-ubuntu-latest-slim
volumes:
- /home/tt/.config:/home/tt/.config
- /home/tt/.cache:/home/tt/.cache
- /home/tt/.ssh:/home/tt/.ssh
steps:
- name: Check out repository code
uses: https://gitea.com/BoYanZh/checkout@focs
with:
fetch-depth: 0
- name: run joj3
run: |
sudo -E -u tt joj3 -conf-root "/home/tt/.config/joj/tests/projects/p3" -conf-name "conf-release.json" -tag "${{ github.ref_name }}"

View File

@ -1,33 +0,0 @@
*.avi filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.djvu filter=lfs diff=lfs merge=lfs -text
*.doc filter=lfs diff=lfs merge=lfs -text
*.docx filter=lfs diff=lfs merge=lfs -text
*.epub filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.ipynb filter=lfs diff=lfs merge=lfs -text
*.jpeg filter=lfs diff=lfs merge=lfs -text
*.JPEG filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.JPG filter=lfs diff=lfs merge=lfs -text
*.mkv filter=lfs diff=lfs merge=lfs -text
*.mp4 filter=lfs diff=lfs merge=lfs -text
*.ods filter=lfs diff=lfs merge=lfs -text
*.odt filter=lfs diff=lfs merge=lfs -text
*.otf filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.PDF filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.PNG filter=lfs diff=lfs merge=lfs -text
*.ppt filter=lfs diff=lfs merge=lfs -text
*.pptx filter=lfs diff=lfs merge=lfs -text
*.ps filter=lfs diff=lfs merge=lfs -text
*.rar filter=lfs diff=lfs merge=lfs -text
*.tar filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.webm filter=lfs diff=lfs merge=lfs -text
*.xls filter=lfs diff=lfs merge=lfs -text
*.xlsx filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text

View File

@ -1,29 +0,0 @@
################################
## White list based gitignore ##
################################
# forbidden
*
.*
# allowed
!.gitignore
!.gitattributes
!.gitea/
!.gitea/issue_template/
!.gitea/workflows/
!src/
src/*
!src/ipa
!src/ipa/*.h
!src/ipa/*.cpp
!src/ipa/Makefile
!src/pms
!src/pms/*.cpp
!src/pms/*.h
!src/pms/Makefile
!CMakeLists.txt
!Makefile
!*.md
!*.yaml

View File

@ -1,19 +0,0 @@
name: Run JOJ3 on Push
on: [push]
jobs:
run:
container:
image: focs.ji.sjtu.edu.cn:5000/gitea/runner-images:focs-ubuntu-latest-slim
volumes:
- /home/tt/.config:/home/tt/.config
- /home/tt/.cache:/home/tt/.cache
- /home/tt/.ssh:/home/tt/.ssh
steps:
- name: Check out repository code
uses: https://gitea.com/BoYanZh/checkout@focs
with:
fetch-depth: 0
- name: run joj3
run: |
sudo -E -u tt joj3 -conf-root /home/tt/.config/joj/projects/p3

View File

@ -1,21 +0,0 @@
name: Run JOJ3 on Release
on:
release:
types: [published]
jobs:
run:
container:
image: focs.ji.sjtu.edu.cn:5000/gitea/runner-images:focs-ubuntu-latest-slim
volumes:
- /home/tt/.config:/home/tt/.config
- /home/tt/.cache:/home/tt/.cache
- /home/tt/.ssh:/home/tt/.ssh
steps:
- name: Check out repository code
uses: https://gitea.com/BoYanZh/checkout@focs
with:
fetch-depth: 0
- name: run joj3
run: |
sudo -E -u tt joj3 -conf-root "/home/tt/.config/joj/projects/p3" -conf-name "conf-release.json" -tag "${{ github.ref_name }}"