Skip to content

Commit 8bc6f0f

Browse files
committed
[skel] create_gitlab_jobs: Make sure contest/problem paths are relative to Git repo root
1 parent 3a6e84e commit 8bc6f0f

File tree

3 files changed

+39
-27
lines changed

3 files changed

+39
-27
lines changed

bin/skel.py

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
# Local imports
66
import config
77
from export import force_single_language
8+
from problem import Problem
89
from util import *
910
import contest
1011

@@ -323,22 +324,33 @@ def copy_skel_dir(problems):
323324

324325

325326
# NOTE: This is one of few places that prints to stdout instead of stderr.
326-
def create_gitlab_jobs(contest, problems):
327-
def problem_source_dir(problem):
328-
return problem.path.resolve().relative_to(Path("..").resolve())
327+
def create_gitlab_jobs(contest: str, problems: list[Problem]):
328+
git_root_path = Path(os.popen("git rev-parse --show-toplevel").read().strip()).resolve()
329+
330+
def problem_source_dir(problem: Problem):
331+
return problem.path.resolve().relative_to(git_root_path)
329332

330333
header_yml = (config.TOOLS_ROOT / "skel/gitlab_ci/header.yaml").read_text()
331-
print(substitute(header_yml, locals()))
334+
print(header_yml)
332335

333336
contest_yml = (config.TOOLS_ROOT / "skel/gitlab_ci/contest.yaml").read_text()
334-
changes = ""
335-
for problem in problems:
336-
changes += " - " + str(problem_source_dir(problem)) + "/problem_statement/**/*\n"
337-
print(substitute(contest_yml, locals()))
337+
contest_path = Path(".").resolve().relative_to(git_root_path)
338+
changes = "".join(
339+
" - " + str(problem_source_dir(problem)) + "/problem_statement/**/*\n"
340+
for problem in problems
341+
)
342+
print(
343+
substitute(
344+
contest_yml, {"contest": contest, "contest_path": str(contest_path), "changes": changes}
345+
)
346+
)
338347

339348
problem_yml = (config.TOOLS_ROOT / "skel/gitlab_ci/problem.yaml").read_text()
340349
for problem_obj in problems:
341-
changesdir = problem_source_dir(problem_obj)
350+
problem_path = problem_source_dir(problem_obj)
342351
problem = problem_obj.name
343352
print("\n")
344-
print(substitute(problem_yml, locals()), end="")
353+
print(
354+
substitute(problem_yml, {"problem": problem, "problem_path": str(problem_path)}),
355+
end="",
356+
)

skel/gitlab_ci/contest.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
contest_pdf_{%contest%}:
22
script:
3-
- ./bt pdf --cp --error --no-bar --contest {%contest%}
4-
- ./bt solutions --cp --error --no-bar --contest {%contest%}
3+
- ./bt pdf --cp --error --no-bar --contest {%contest_path%}
4+
- ./bt solutions --cp --error --no-bar --contest {%contest_path%}
55
only:
66
refs:
77
- master
@@ -11,5 +11,5 @@ contest_pdf_{%contest%}:
1111
artifacts:
1212
expire_in: 1 week
1313
paths:
14-
- {%contest%}/contest*.pdf
15-
- {%contest%}/solution*.pdf
14+
- {%contest_path%}/contest*.pdf
15+
- {%contest_path%}/solution*.pdf

skel/gitlab_ci/problem.yaml

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
verify_{%problem%}:
22
script:
3-
- ./bt all --cp --error --no-bar --force --jobs 0 --problem {%contest%}/{%problem%}
3+
- ./bt all --cp --error --no-bar --force --jobs 0 --problem {%problem_path%}
44
only:
55
refs:
66
- master
77
- merge_requests
88
changes:
9-
#- {%changesdir%}/problem_statement/**/*
10-
- {%changesdir%}/problem.yaml
11-
- {%changesdir%}/.timelimit
12-
- {%changesdir%}/data/**/*
13-
- {%changesdir%}/generators/**/*
14-
- {%changesdir%}/input_validators/**/*
15-
- {%changesdir%}/answer_validators/**/*
16-
- {%changesdir%}/output_validators/**/*
17-
- {%changesdir%}/submissions/**/*
18-
- {%changesdir%}/visualizers/**/*
19-
#- {%changesdir%}/attachments/**/*
9+
#- {%problem_path%}/problem_statement/**/*
10+
- {%problem_path%}/problem.yaml
11+
- {%problem_path%}/.timelimit
12+
- {%problem_path%}/data/**/*
13+
- {%problem_path%}/generators/**/*
14+
- {%problem_path%}/input_validators/**/*
15+
- {%problem_path%}/answer_validators/**/*
16+
- {%problem_path%}/output_validators/**/*
17+
- {%problem_path%}/submissions/**/*
18+
- {%problem_path%}/visualizers/**/*
19+
#- {%problem_path%}/attachments/**/*
2020
artifacts:
2121
expire_in: 1 week
2222
paths:
23-
- {%contest%}/{%problem%}/problem*.pdf
23+
- {%problem_path%}/problem*.pdf

0 commit comments

Comments
 (0)