dev #10

Merged
李衍志523370910113 merged 238 commits from dev into master 2025-03-05 16:20:39 +08:00
9 changed files with 195 additions and 127 deletions
Showing only changes of commit f163b88a6b - Show all commits
joj3_config_generator
tests
convert/basic
immutable_file

View File

@ -33,7 +33,7 @@ def convert(repo_conf: repo.Config, task_conf: task.Config) -> result.Config:
# Construct healthcheck stage
healthcheck_stage = get_healthcheck_config(repo_conf)
result_conf.stage.stages.append(healthcheck_stage)
cached: list[str] = []
cached: List[str] = []
# Convert each stage in the task configuration
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.
for task_stage in task_conf.stages:
executor_with_config, cached = get_executorWithConfig(task_stage, cached)

View File

@ -8,7 +8,7 @@ class CmdFile(BaseModel):
content: Optional[str] = None
file_id: Optional[str] = Field(None, serialization_alias="fileId")
name: Optional[str] = None
max: Optional[int] = 40 * 1024 * 1024
max: Optional[int] = 400 * 1024 * 1024
symlink: Optional[str] = None
stream_in: bool = Field(False, serialization_alias="streamIn")
stream_out: bool = Field(False, serialization_alias="streamOut")
@ -24,7 +24,7 @@ class Cmd(BaseModel):
cpu_limit: int = Field(4 * 1000000000000, serialization_alias="cpuLimit")
jon-lee marked this conversation as resolved Outdated

default value too large, should be 1s 128MB

default value too large, should be 1s 128MB

will fix later, we need to hold some test I reckon?

will fix later, we need to hold some test I reckon?

@bomingzh fixed

@bomingzh fixed
real_cpu_limit: int = Field(0, serialization_alias="realCpuLimit")
clock_limit: int = Field(8 * 1000000000000, serialization_alias="clockLimit")
memory_limit: int = Field(80 * 1024 * 1024, serialization_alias="memoryLimit")
memory_limit: int = Field(800 * 1024 * 1024, serialization_alias="memoryLimit")
stack_limit: int = Field(0, serialization_alias="stackLimit")
proc_limit: int = Field(50, serialization_alias="procLimit")
proc_limit: int = Field(50, serialization_alias="procLimit")
jon-lee marked this conversation as resolved Outdated

unit?

unit?

I think timeparse and humanfriendly would deal wth that?

I think `timeparse` and `humanfriendly` would deal wth that?

resolved.

resolved.
@ -54,7 +54,7 @@ class OptionalCmd(BaseModel):
real_cpu_limit: Optional[int] = Field(None, serialization_alias="realCpuLimit")
clock_limit: Optional[int] = Field(8 * 1000000000000, serialization_alias="clockLimit")
memory_limit: Optional[int] = Field(
80 * 1024 * 1024, serialization_alias="memoryLimit"
800 * 1024 * 1024, serialization_alias="memoryLimit"
)
stack_limit: Optional[int] = Field(None, serialization_alias="stackLimit")
proc_limit: Optional[int] = Field(50, serialization_alias="procLimit")

View File

@ -40,10 +40,10 @@ class Files(BaseModel):
class Limit(BaseModel):
mem: Optional[int] = 4
cpu: Optional[int] = 4
stderr: Optional[int] = 4
stdout: Optional[int] = 4
mem: Optional[int] = 800
cpu: Optional[int] = 1000
stderr: Optional[int] = 800
stdout: Optional[int] = 800
class Stage(BaseModel):

View File

@ -47,8 +47,7 @@ def get_healthcheck_cmd(repo_conf: repo.Config) -> result.Cmd:
immutable_files = immutable_files + name + " "
else:
immutable_files = immutable_files + name + ","
# FIXME: need to make solution and make things easier to edit with global scope
chore = f"./repo-health-checker -root=. "
chore = f"/tmp/repo-health-checker -root=. "
args = ""
args = args + chore
args = args + repo_size
@ -63,7 +62,7 @@ def get_healthcheck_cmd(repo_conf: repo.Config) -> result.Cmd:
args=shlex.split(args),
copy_in={
# This path is hardcoded
f"./repo-health-checker": result.CmdFile(
f"/tmp/repo-health-checker": result.CmdFile(
src="/usr/local/bin/repo-health-checker"
)
},

View File

@ -1,5 +1,5 @@
import shlex
jon-lee marked this conversation as resolved

Path should not be relative to JOJ3_CONFIG_ROOT in this file, should be relative to task.toml dir

Path should not be relative to `JOJ3_CONFIG_ROOT` in this file, should be relative to `task.toml` dir

I reckon you said things is relative to JOJ3_CONFIG_ROOT in JTC before. we have a task.type in task.toml to mend the path

I reckon you said things is relative to `JOJ3_CONFIG_ROOT` in JTC before. we have a `task.type` in `task.toml` to mend the path

config.path is relative to JOJ3_CONFIG_ROOT.

`config.path` is relative to `JOJ3_CONFIG_ROOT`.

could you explain further? I m not quite sure my understanding is clear.

could you explain further? I m not quite sure my understanding is clear.

In joj3_config_generator/models/task.py, Config.path is relative to JOJ3_CONFIG_ROOT, so task.toml will located at JOJ3_CONFIG_ROOT / task_conf.path in JTC.

In `joj3_config_generator/models/task.py`, `Config.path` is relative to `JOJ3_CONFIG_ROOT`, so `task.toml` will located at `JOJ3_CONFIG_ROOT / task_conf.path` in JTC.
from typing import Tuple
from typing import Tuple, List
jon-lee marked this conversation as resolved

Some with_.update is still using raw dict, not model with model_dump.

Some `with_.update` is still using raw dict, not model with `model_dump`.
from joj3_config_generator.models import result, task
@ -29,8 +29,8 @@ def get_conf_stage(
def get_executorWithConfig(
task_stage: task.Stage, cached: list[str]
) -> Tuple[result.ExecutorWith, list[str]]:
task_stage: task.Stage, cached: List[str]
) -> Tuple[result.ExecutorWith, List[str]]:
file_import = (
jon-lee marked this conversation as resolved Outdated

should loop through conf_stage.parsers here and update the with field according to the parser name.

should loop through `conf_stage.parsers` here and update the `with` field according to the parser name.

I think its already implemented in each of the fix_parsers functions

I think its already implemented in each of the `fix_parsers` functions

No, do not find the parser in the fix_xxx function. Instead, iterate through the parsers here and decide how to fill in the with.

No, do not find the parser in the `fix_xxx` function. Instead, iterate through the parsers here and decide how to fill in the `with`.

resolved.

resolved.

Use a dict to store parser name, field, function to process.

    process_dict: Dict[
        str, Tuple[Callable[[result.ParserConfig, BaseModel], None], BaseModel]
    ] = {
        "clangtidy": (fix_keyword, task_stage.clangtidy),
        "keyword": (fix_keyword, task_stage.keyword),
        "diff": (fix_diff, task_stage.diff),
    }
    for i, parser in enumerate(task_stage.parsers):
        if parser in process_dict:
            func, parser_model = process_dict[parser]
            func(conf_stage.parsers[i], parser_model)
Use a dict to store parser name, field, function to process. ``` process_dict: Dict[ str, Tuple[Callable[[result.ParserConfig, BaseModel], None], BaseModel] ] = { "clangtidy": (fix_keyword, task_stage.clangtidy), "keyword": (fix_keyword, task_stage.keyword), "diff": (fix_diff, task_stage.diff), } for i, parser in enumerate(task_stage.parsers): if parser in process_dict: func, parser_model = process_dict[parser] func(conf_stage.parsers[i], parser_model) ```

resolved.

resolved.
task_stage.files.import_
jon-lee marked this conversation as resolved Outdated

Do we need to support both kinds of names?

Do we need to support both kinds of names?

probably yes, since it is easy for new ta to type it wrong

probably yes, since it is easy for new ta to type it wrong

parsers name should be a str enum, force them to use the correct names

parsers name should be a str enum, force them to use the correct names

ok, then removed.

ok, then removed.
if hasattr(task_stage, "files")
jon-lee marked this conversation as resolved Outdated

underscore

underscore

fixed

fixed
@ -58,39 +58,39 @@ def get_executorWithConfig(
file: result.CmdFile(src=f"/home/tt/.config/joj/{file}")
for file in copy_in_files
},
copy_in_cached={file: file for file in copy_in_files},
copy_in_cached={file: file for file in cached},
copy_out_cached=file_export if file_export is not None else [],
cpu_limit=(
jon-lee marked this conversation as resolved Outdated

not necessary

not necessary

resolved.

resolved.
task_stage.limit.cpu * 1_000_000_000
task_stage.limit.cpu * 1_000_000_000_000
if task_stage.limit is not None and task_stage.limit.cpu is not None
else 4 * 1_000_000_000
else 80 * 1_000_000_000_000
),
clock_limit=(
2 * task_stage.limit.cpu * 1_000_000_000
2 * task_stage.limit.cpu * 1_000_000_000_000
if task_stage.limit is not None and task_stage.limit.cpu is not None
else 8 * 1_000_000_000
else 80 * 1_000_000_000_000
),
memory_limit=(
task_stage.limit.mem * 1_024 * 1_024
if task_stage.limit is not None and task_stage.limit.mem is not None
else 4 * 1_024 * 1_024
else 800 * 1_024 * 1_024
jon-lee marked this conversation as resolved Outdated

do not use getattr, visit the field explictly

do not use `getattr`, visit the field explictly

resolved.

resolved.
),
stderr=result.CmdFile(
name="stderr",
jon-lee marked this conversation as resolved Outdated

is there a conclusion now? or it should have a prefix TODO: ?

is there a conclusion now? or it should have a prefix `TODO: `?

so far works fine on 280 sides, indicating that pbs in 151 can be resolved with proper guidelines I think.

so far works fine on 280 sides, indicating that pbs in 151 can be resolved with proper guidelines I think.

ok, then add that prefix

ok, then add that prefix
max=(
jon-lee marked this conversation as resolved Outdated

is it in the correct unit?
Give all the fields in Limit a default value and make it non optional in task_stage.limit

is it in the correct unit? Give all the fields in `Limit` a default value and make it non optional in task_stage.limit

resolved

resolved
task_stage.limit.stderr * 1_000_000_000
task_stage.limit.stderr * 1_000_000_000_000
if task_stage.limit is not None
and task_stage.limit.stderr is not None
else 4 * 1_024 * 1_024
else 800 * 1_024 * 1_024
),
),
stdout=result.CmdFile(
name="stdout",
max=(
task_stage.limit.stdout * 1_000_000_000
task_stage.limit.stdout * 1_000_000_000_000
if task_stage.limit is not None
and task_stage.limit.stdout is not None
else 4 * 1_024 * 1_024
else 800 * 1_024 * 1_024
),
jon-lee marked this conversation as resolved Outdated

The reason for the suffix in keyword_parser_?

The reason for the suffix in `keyword_parser_`?

just forgot to remove, sorry

just forgot to remove, sorry
),
),

View File

@ -15,11 +15,11 @@
"with": {
"default": {
"args": [
"./repo-health-checker",
"/tmp/repo-health-checker",
"-root=.",
"-repoSize=50.5",
"-meta=Readme.md",
"-checkFileSumList=a5b63323a692d3d8b952442969649b4f823d58dae26429494f613df160710dfc,b1bbad25b830db0a77b15a033f9ca1b7ab44c1d2d05056412bd3e4421645f0bf,1965adff52af61da8b9e089ff580d60f7e4c294a2930b9809c5cbdf76528de4d,c8bd62bf5297bac738b3845612fd595d677884093070904375463ab7953fce28",
"-checkFileSumList=a5b63323a692d3d8b952442969649b4f823d58dae26429494f613df160710dfc,b1bbad25b830db0a77b15a033f9ca1b7ab44c1d2d05056412bd3e4421645f0bf,7300de510e1674f6d533ae799eb5395fae6d5fbe6f64ff5047480e503602a4da,ad7ba6fbee5d80e018e4190e31bd842553d540044f0faf13592d73cef93a061b",
"-checkFileNameList=.gitignore,.gitattributes,.gitea/workflows/push.yaml,.gitea/workflows/release.yaml"
],
"env": [
@ -27,7 +27,7 @@
],
"stdin": {
"content": "",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
@ -49,15 +49,15 @@
"cpuLimit": 4000000000000,
"realCpuLimit": 0,
"clockLimit": 8000000000000,
"memoryLimit": 83886080,
"memoryLimit": 838860800,
"stackLimit": 0,
"procLimit": 50,
"cpuRateLimit": 0,
"cpuSetLimit": "",
"copyIn": {
"./repo-health-checker": {
"/tmp/repo-health-checker": {
"src": "/usr/local/bin/repo-health-checker",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
@ -101,29 +101,29 @@
],
"stdin": {
"content": "",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"stdout": {
"name": "stdout",
"max": 4000000000,
"max": 800000000000000,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"stderr": {
"name": "stderr",
"max": 4000000000,
"max": 800000000000000,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"cpuLimit": 4000000000,
"cpuLimit": 1000000000000000,
"realCpuLimit": 0,
"clockLimit": 8000000000,
"memoryLimit": 4194304,
"clockLimit": 2000000000000000,
"memoryLimit": 838860800,
"stackLimit": 0,
"procLimit": 50,
"cpuRateLimit": 0,
@ -131,23 +131,21 @@
"copyIn": {
"tools/compile": {
"src": "/home/tt/.config/joj/tools/compile",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
}
},
"copyInCached": {
"tools/compile": "tools/compile"
},
"copyInCached": {},
"copyInDir": ".",
"copyOut": [],
"copyOutCached": [
"h6/build/ex3",
"build/asan",
"build/ubsan",
"build/msan",
"build/compile_commands.json"
"h6/build/asan",
"h6/build/ubsan",
"h6/build/msan",
"h6/build/compile_commands.json"
],
"copyOutMax": 0,
"copyOutDir": "",
@ -209,29 +207,29 @@
],
"stdin": {
"content": "",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"stdout": {
"name": "stdout",
"max": 4000000000,
"max": 800000000000000,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"stderr": {
"name": "stderr",
"max": 4000000000,
"max": 800000000000000,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"cpuLimit": 4000000000,
"cpuLimit": 1000000000000000,
"realCpuLimit": 0,
"clockLimit": 8000000000,
"memoryLimit": 4194304,
"clockLimit": 2000000000000000,
"memoryLimit": 838860800,
"stackLimit": 0,
"procLimit": 50,
"cpuRateLimit": 0,
@ -239,14 +237,18 @@
"copyIn": {
"tools/filelength": {
"src": "/home/tt/.config/joj/tools/filelength",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
}
},
"copyInCached": {
"tools/filelength": "tools/filelength"
"h6/build/ex3": "h6/build/ex3",
"h6/build/asan": "h6/build/asan",
"h6/build/ubsan": "h6/build/ubsan",
"h6/build/msan": "h6/build/msan",
"h6/build/compile_commands.json": "h6/build/compile_commands.json"
},
"copyInDir": ".",
"copyOut": [],
@ -323,29 +325,29 @@
],
"stdin": {
"content": "",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"stdout": {
"name": "stdout",
"max": 65000000000,
"max": 65000000000000,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"stderr": {
"name": "stderr",
"max": 4000000000,
"max": 800000000000000,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"cpuLimit": 4000000000,
"cpuLimit": 1000000000000000,
"realCpuLimit": 0,
"clockLimit": 8000000000,
"memoryLimit": 4194304,
"clockLimit": 2000000000000000,
"memoryLimit": 838860800,
"stackLimit": 0,
"procLimit": 50,
"cpuRateLimit": 0,
@ -353,14 +355,25 @@
"copyIn": {
"projects/p2/.clang-tidy": {
"src": "/home/tt/.config/joj/projects/p2/.clang-tidy",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"build/compile_commands.json": {
"src": "/home/tt/.config/joj/build/compile_commands.json",
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
}
},
"copyInCached": {
"projects/p2/.clang-tidy": "projects/p2/.clang-tidy"
"h6/build/ex3": "h6/build/ex3",
"h6/build/asan": "h6/build/asan",
"h6/build/ubsan": "h6/build/ubsan",
"h6/build/msan": "h6/build/msan",
"h6/build/compile_commands.json": "h6/build/compile_commands.json"
},
"copyInDir": ".",
"copyOut": [],
@ -464,35 +477,41 @@
],
"stdin": {
"content": "",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"stdout": {
"name": "stdout",
"max": 4000000000,
"max": 800000000000000,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"stderr": {
"name": "stderr",
"max": 65000000000,
"max": 65000000000000,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"cpuLimit": 4000000000,
"cpuLimit": 1000000000000000,
"realCpuLimit": 0,
"clockLimit": 8000000000,
"memoryLimit": 4194304,
"clockLimit": 2000000000000000,
"memoryLimit": 838860800,
"stackLimit": 0,
"procLimit": 50,
"cpuRateLimit": 0,
"cpuSetLimit": "",
"copyIn": {},
"copyInCached": {},
"copyInCached": {
"h6/build/ex3": "h6/build/ex3",
"h6/build/asan": "h6/build/asan",
"h6/build/ubsan": "h6/build/ubsan",
"h6/build/msan": "h6/build/msan",
"h6/build/compile_commands.json": "h6/build/compile_commands.json"
},
"copyInDir": ".",
"copyOut": [],
"copyOutCached": [],
@ -571,35 +590,41 @@
],
"stdin": {
"content": "",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"stdout": {
"name": "stdout",
"max": 65000000000,
"max": 65000000000000,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"stderr": {
"name": "stderr",
"max": 4000000000,
"max": 800000000000000,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"cpuLimit": 4000000000,
"cpuLimit": 1000000000000000,
"realCpuLimit": 0,
"clockLimit": 8000000000,
"memoryLimit": 4194304,
"clockLimit": 2000000000000000,
"memoryLimit": 838860800,
"stackLimit": 0,
"procLimit": 50,
"cpuRateLimit": 0,
"cpuSetLimit": "",
"copyIn": {},
"copyInCached": {},
"copyInCached": {
"h6/build/ex3": "h6/build/ex3",
"h6/build/asan": "h6/build/asan",
"h6/build/ubsan": "h6/build/ubsan",
"h6/build/msan": "h6/build/msan",
"h6/build/compile_commands.json": "h6/build/compile_commands.json"
},
"copyInDir": ".",
"copyOut": [],
"copyOutCached": [],
@ -680,35 +705,49 @@
],
"stdin": {
"content": "",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"stdout": {
"name": "stdout",
"max": 4000000000,
"max": 800000000000000,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"stderr": {
"name": "stderr",
"max": 4000000000,
"max": 800000000000000,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"cpuLimit": 4000000000,
"cpuLimit": 1000000000000000,
"realCpuLimit": 0,
"clockLimit": 8000000000,
"memoryLimit": 4194304,
"clockLimit": 2000000000000000,
"memoryLimit": 838860800,
"stackLimit": 0,
"procLimit": 50,
"cpuRateLimit": 0,
"cpuSetLimit": "",
"copyIn": {},
"copyInCached": {},
"copyIn": {
"build/asan": {
"src": "/home/tt/.config/joj/build/asan",
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
}
},
"copyInCached": {
"h6/build/ex3": "h6/build/ex3",
"h6/build/asan": "h6/build/asan",
"h6/build/ubsan": "h6/build/ubsan",
"h6/build/msan": "h6/build/msan",
"h6/build/compile_commands.json": "h6/build/compile_commands.json"
},
"copyInDir": ".",
"copyOut": [],
"copyOutCached": [],
@ -761,35 +800,49 @@
],
"stdin": {
"content": "",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"stdout": {
"name": "stdout",
"max": 4000000000,
"max": 800000000000000,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"stderr": {
"name": "stderr",
"max": 4000000000,
"max": 800000000000000,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"cpuLimit": 4000000000,
"cpuLimit": 1000000000000000,
"realCpuLimit": 0,
"clockLimit": 8000000000,
"memoryLimit": 4194304,
"clockLimit": 2000000000000000,
"memoryLimit": 838860800,
"stackLimit": 0,
"procLimit": 50,
"cpuRateLimit": 0,
"cpuSetLimit": "",
"copyIn": {},
"copyInCached": {},
"copyIn": {
"build/msan": {
"src": "/home/tt/.config/joj/build/msan",
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
}
},
"copyInCached": {
"h6/build/ex3": "h6/build/ex3",
"h6/build/asan": "h6/build/asan",
"h6/build/ubsan": "h6/build/ubsan",
"h6/build/msan": "h6/build/msan",
"h6/build/compile_commands.json": "h6/build/compile_commands.json"
},
"copyInDir": ".",
"copyOut": [],
"copyOutCached": [],
@ -842,35 +895,49 @@
],
"stdin": {
"content": "",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"stdout": {
"name": "stdout",
"max": 4000000000,
"max": 800000000000000,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"stderr": {
"name": "stderr",
"max": 4000000000,
"max": 800000000000000,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"cpuLimit": 4000000000,
"cpuLimit": 1000000000000000,
"realCpuLimit": 0,
"clockLimit": 8000000000,
"memoryLimit": 4194304,
"clockLimit": 2000000000000000,
"memoryLimit": 838860800,
"stackLimit": 0,
"procLimit": 50,
"cpuRateLimit": 0,
"cpuSetLimit": "",
"copyIn": {},
"copyInCached": {},
"copyIn": {
"build/ubsan": {
"src": "/home/tt/.config/joj/build/ubsan",
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
}
},
"copyInCached": {
"h6/build/ex3": "h6/build/ex3",
"h6/build/asan": "h6/build/asan",
"h6/build/ubsan": "h6/build/ubsan",
"h6/build/msan": "h6/build/msan",
"h6/build/compile_commands.json": "h6/build/compile_commands.json"
},
"copyInDir": ".",
"copyOut": [],
"copyOutCached": [],
@ -922,29 +989,29 @@
],
"stdin": {
"content": "",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"stdout": {
"name": "stdout",
"max": 4000000000,
"max": 800000000000000,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"stderr": {
"name": "stderr",
"max": 4000000000,
"max": 800000000000000,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"cpuLimit": 4000000000,
"cpuLimit": 1000000000000000,
"realCpuLimit": 0,
"clockLimit": 8000000000,
"memoryLimit": 4194304,
"clockLimit": 2000000000000000,
"memoryLimit": 838860800,
"stackLimit": 0,
"procLimit": 50,
"cpuRateLimit": 0,
@ -952,46 +1019,46 @@
"copyIn": {
"h6/build/ex2": {
"src": "/home/tt/.config/joj/h6/build/ex2",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"h6/build/ex4": {
"src": "/home/tt/.config/joj/h6/build/ex4",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"h6/build/ex5": {
"src": "/home/tt/.config/joj/h6/build/ex5",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"h6/build/ex6": {
"src": "/home/tt/.config/joj/h6/build/ex6",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
},
"h6/build/ex7": {
"src": "/home/tt/.config/joj/h6/build/ex7",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
}
},
"copyInCached": {
"h6/build/ex2": "h6/build/ex2",
"h6/build/ex4": "h6/build/ex4",
"h6/build/ex5": "h6/build/ex5",
"h6/build/ex6": "h6/build/ex6",
"h6/build/ex7": "h6/build/ex7"
"h6/build/ex3": "h6/build/ex3",
"h6/build/asan": "h6/build/asan",
"h6/build/ubsan": "h6/build/ubsan",
"h6/build/msan": "h6/build/msan",
"h6/build/compile_commands.json": "h6/build/compile_commands.json"
},
"copyInDir": ".",
"copyOut": [],
@ -1010,7 +1077,7 @@
],
"stdin": {
"src": "/home/tt/.config/joj/tests/homework/h6/e3/case0.in",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
@ -1026,7 +1093,7 @@
],
"stdin": {
"src": "/home/tt/.config/joj/tests/homework/h6/e3/case1.in",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
@ -1042,7 +1109,7 @@
],
"stdin": {
"src": "/home/tt/.config/joj/tests/homework/h6/e3/case2.in",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
@ -1058,7 +1125,7 @@
],
"stdin": {
"src": "/home/tt/.config/joj/tests/homework/h6/e3/case3.in",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
@ -1074,7 +1141,7 @@
],
"stdin": {
"src": "/home/tt/.config/joj/tests/homework/h6/e3/case4.in",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
@ -1090,7 +1157,7 @@
],
"stdin": {
"src": "/home/tt/.config/joj/tests/homework/h6/e3/case5.in",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
@ -1106,7 +1173,7 @@
],
"stdin": {
"src": "/home/tt/.config/joj/tests/homework/h6/e3/case6.in",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
@ -1122,7 +1189,7 @@
],
"stdin": {
"src": "/home/tt/.config/joj/tests/homework/h6/e3/case7.in",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
@ -1138,7 +1205,7 @@
],
"stdin": {
"src": "/home/tt/.config/joj/tests/homework/h6/e3/case8.in",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false
@ -1154,7 +1221,7 @@
],
"stdin": {
"src": "/home/tt/.config/joj/tests/homework/h6/e3/case9.in",
"max": 41943040,
"max": 419430400,
"streamIn": false,
"streamOut": false,
"pipe": false

View File

@ -10,7 +10,7 @@ release.stages = [ "compile" ]
name = "Compilation"
command = "./tools/compile" # eg. script running cmake commands
files.import = [ "tools/compile" ]
files.export = [ "h6/build/ex3", "build/asan", "build/ubsan", "build/msan", "build/compile_commands.json" ]
files.export = [ "h6/build/ex3", "h6/build/asan", "h6/build/ubsan", "h6/build/msan", "h6/build/compile_commands.json" ]
# compile parsers
parsers = [ "result-detail", "dummy", "result-status" ]

View File

@ -1,5 +1,6 @@
name: Run JOJ3 on Push
on: [push]
jobs:
run:
container:
@ -15,4 +16,4 @@ jobs:
fetch-depth: 0
- name: run joj3
run: |
sudo -E -u tt joj3 -conf-root /home/tt/.config/joj
sudo -E -u tt joj3 -conf-root /home/tt/.config/joj/tests/homework

View File

@ -2,6 +2,7 @@ name: Run JOJ3 on Release
on:
release:
types: [published]
jobs:
run:
container:
@ -17,4 +18,4 @@ jobs:
fetch-depth: 0
- name: run joj3
run: |
sudo -E -u tt joj3 -conf-root /home/tt/.config/joj -msg "feat(h1-release): joj on ${{ github.ref }}"
sudo -E -u tt joj3 -conf-root "/home/tt/.config/joj/tests/homework" -conf-name "conf-release.json" -tag "${{ github.ref_name }}"