Skip to content

Commit 48cb84a

Browse files
committed
Generate with separate files
1 parent aeb26d4 commit 48cb84a

File tree

5 files changed

+76
-84
lines changed

5 files changed

+76
-84
lines changed

.github/workflows/generate_workflows_lib/src/generate_workflows_lib/__init__.py

+57-65
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def get_tox_envs(tox_ini_path: Path) -> list:
3737
return core_config_set.load("env_list")
3838

3939

40-
def get_test_jobs_data(tox_envs: list, operating_systems: list) -> list:
40+
def get_test_job_datas(tox_envs: list, operating_systems: list) -> list:
4141

4242
os_alias = {
4343
"ubuntu-latest": "Ubuntu",
@@ -53,7 +53,7 @@ def get_test_jobs_data(tox_envs: list, operating_systems: list) -> list:
5353
"py312": "3.12",
5454
}
5555

56-
test_jobs_data = []
56+
test_job_datas = []
5757

5858
tox_test_env_regex = re_compile(
5959
r"(?P<python_version>py\w+)-test-"
@@ -83,7 +83,7 @@ def get_test_jobs_data(tox_envs: list, operating_systems: list) -> list:
8383
else:
8484
test_requirements = f"-{test_requirements} "
8585

86-
test_jobs_data.append(
86+
test_job_datas.append(
8787
{
8888
"name": f"{tox_env}_{operating_system}",
8989
"ui_name": (
@@ -99,12 +99,12 @@ def get_test_jobs_data(tox_envs: list, operating_systems: list) -> list:
9999

100100
)
101101

102-
return test_jobs_data
102+
return test_job_datas
103103

104104

105-
def get_lint_jobs_data(tox_envs: list) -> list:
105+
def get_lint_job_datas(tox_envs: list) -> list:
106106

107-
lint_jobs_data = []
107+
lint_job_datas = []
108108

109109
tox_lint_env_regex = re_compile(r"lint-(?P<name>[-\w]+)")
110110

@@ -117,7 +117,7 @@ def get_lint_jobs_data(tox_envs: list) -> list:
117117

118118
tox_env = tox_lint_env_match.string
119119

120-
lint_jobs_data.append(
120+
lint_job_datas.append(
121121
{
122122
"name": f"{tox_env}",
123123
"ui_name": f"{tox_lint_env_match.groupdict()['name']}",
@@ -126,12 +126,12 @@ def get_lint_jobs_data(tox_envs: list) -> list:
126126

127127
)
128128

129-
return lint_jobs_data
129+
return lint_job_datas
130130

131131

132-
def get_contrib_jobs_data(tox_envs: list) -> list:
132+
def get_contrib_job_datas(tox_envs: list) -> list:
133133

134-
contrib_jobs_data = []
134+
contrib_job_datas = []
135135

136136
tox_contrib_env_regex = re_compile(
137137
r"py38-test-(?P<name>[-\w]+\w)-?(?P<contrib_requirements>\d+)?"
@@ -156,7 +156,7 @@ def get_contrib_jobs_data(tox_envs: list) -> list:
156156
else:
157157
contrib_requirements = f"-{contrib_requirements} "
158158

159-
contrib_jobs_data.append(
159+
contrib_job_datas.append(
160160
{
161161
"ui_name": (
162162
f"{groups['name']}"
@@ -167,7 +167,35 @@ def get_contrib_jobs_data(tox_envs: list) -> list:
167167

168168
)
169169

170-
return contrib_jobs_data
170+
return contrib_job_datas
171+
172+
173+
def _generate_workflow(
174+
job_datas: list, name: str, workflow_directory_path: Path
175+
):
176+
177+
# Github seems to limit the amount of jobs in a workflow file, that is why
178+
# they are split in groups of 250 per workflow file.
179+
for file_number, job_datas in enumerate(
180+
[
181+
job_datas[index:index + 250]
182+
for index in range(0, len(job_datas), 250)
183+
]
184+
):
185+
186+
with open(
187+
workflow_directory_path.joinpath(f"{name}_{file_number}.yml"),
188+
"w"
189+
) as test_yml_file:
190+
191+
test_yml_file.write(
192+
Environment(
193+
loader=FileSystemLoader(Path(__file__).parent)
194+
).get_template(f"{name}.yml.j2").render(
195+
job_datas=job_datas, file_number=file_number
196+
)
197+
)
198+
test_yml_file.write("\n")
171199

172200

173201
def generate_test_workflow(
@@ -176,69 +204,33 @@ def generate_test_workflow(
176204
*operating_systems
177205
) -> None:
178206

179-
jobs = get_test_jobs_data(get_tox_envs(tox_ini_path), operating_systems)
180-
181-
with (
182-
open(workflow_directory_path.joinpath("test_0.yml"), "w") as
183-
test_yml_file
184-
):
185-
test_yml_file.write(
186-
Environment(
187-
loader=FileSystemLoader(Path(__file__).parent)
188-
).get_template("test.yml.j2").render(
189-
jobs=jobs[:250], file_number=0
190-
)
191-
)
192-
test_yml_file.write("\n")
193-
194-
with (
195-
open(workflow_directory_path.joinpath("test_1.yml"), "w") as
196-
test_yml_file
197-
):
198-
test_yml_file.write(
199-
Environment(
200-
loader=FileSystemLoader(Path(__file__).parent)
201-
).get_template("test.yml.j2").render(
202-
jobs=jobs[250:], file_number=1
203-
)
204-
)
205-
test_yml_file.write("\n")
207+
_generate_workflow(
208+
get_test_job_datas(get_tox_envs(tox_ini_path), operating_systems),
209+
"test",
210+
workflow_directory_path
211+
)
206212

207213

208214
def generate_lint_workflow(
209215
tox_ini_path: Path,
210216
workflow_directory_path: Path,
211217
) -> None:
212218

213-
with (
214-
open(workflow_directory_path.joinpath("lint.yml"), "w") as
215-
lint_yml_file
216-
):
217-
lint_yml_file.write(
218-
Environment(
219-
loader=FileSystemLoader(Path(__file__).parent)
220-
).get_template("lint.yml.j2").render(
221-
jobs=get_lint_jobs_data(get_tox_envs(tox_ini_path))
222-
)
223-
)
224-
lint_yml_file.write("\n")
219+
_generate_workflow(
220+
get_lint_job_datas(get_tox_envs(tox_ini_path)),
221+
"lint",
222+
workflow_directory_path
223+
)
225224

226225

227226
def generate_contrib_workflow(
228227
workflow_directory_path: Path,
229228
) -> None:
230229

231-
with (
232-
open(workflow_directory_path.joinpath("contrib.yml"), "w") as
233-
contrib_yml_file
234-
):
235-
contrib_yml_file.write(
236-
Environment(
237-
loader=FileSystemLoader(Path(__file__).parent)
238-
).get_template("contrib.yml.j2").render(
239-
jobs=get_contrib_jobs_data(
240-
get_tox_envs(Path(__file__).parent.joinpath("tox.ini"))
241-
)
242-
)
243-
)
244-
contrib_yml_file.write("\n")
230+
_generate_workflow(
231+
get_contrib_job_datas(
232+
get_tox_envs(Path(__file__).parent.joinpath("tox.ini"))
233+
),
234+
"contrib",
235+
workflow_directory_path
236+
)

.github/workflows/generate_workflows_lib/src/generate_workflows_lib/contrib.yml.j2

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Do not edit this file.
22
# This file is generated automatically by executing tox -e generate_workflows
33

4-
name: Contrib
4+
name: Contrib {{ file_number }}
55

66
on:
77
push:
@@ -14,10 +14,10 @@ env:
1414
PIP_EXISTS_ACTION: w
1515

1616
jobs:
17-
{%- for job in jobs %}
17+
{%- for job_data in job_datas %}
1818

19-
{{ job.tox_env }}:
20-
name: {{ job.ui_name }}
19+
{{ job_data.tox_env }}:
20+
name: {{ job_data.ui_name }}
2121
runs-on: ubuntu-latest
2222
steps:
2323
- name: Checkout contrib repo @ SHA - ${% raw %}{{ env.CONTRIB_REPO_SHA }}{% endraw %}
@@ -42,5 +42,5 @@ jobs:
4242
run: pip install tox
4343

4444
- name: Run tests
45-
run: tox -e {{ job.tox_env }} -- -ra
45+
run: tox -e {{ job_data.tox_env }} -- -ra
4646
{%- endfor %}

.github/workflows/generate_workflows_lib/src/generate_workflows_lib/lint.yml.j2

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Do not edit this file.
22
# This file is generated automatically by executing tox -e generate_workflows
33

4-
name: Lint
4+
name: Lint {{ file_number }}
55

66
on:
77
push:
@@ -12,10 +12,10 @@ env:
1212
PIP_EXISTS_ACTION: w
1313

1414
jobs:
15-
{%- for job in jobs %}
15+
{%- for job_data in job_datas %}
1616

17-
{{ job.name }}:
18-
name: {{ job.ui_name }}
17+
{{ job_data.name }}:
18+
name: {{ job_data.ui_name }}
1919
runs-on: ubuntu-latest
2020
steps:
2121
- name: Checkout repo @ SHA - ${% raw %}{{ github.sha }}{% endraw %}
@@ -30,5 +30,5 @@ jobs:
3030
run: pip install tox
3131

3232
- name: Run tests
33-
run: tox -e {{ job.tox_env }}
33+
run: tox -e {{ job_data.tox_env }}
3434
{%- endfor %}

.github/workflows/generate_workflows_lib/src/generate_workflows_lib/test.yml.j2

+8-8
Original file line numberDiff line numberDiff line change
@@ -12,28 +12,28 @@ env:
1212
PIP_EXISTS_ACTION: w
1313

1414
jobs:
15-
{%- for job in jobs %}
15+
{%- for job_data in job_datas %}
1616

17-
{{ job.name }}:
18-
name: {{ job.ui_name }}
19-
runs-on: {{ job.os }}
17+
{{ job_data.name }}:
18+
name: {{ job_data.ui_name }}
19+
runs-on: {{ job_data.os }}
2020
steps:
2121
- name: Checkout repo @ SHA - ${% raw %}{{ github.sha }}{% endraw %}
2222
uses: actions/checkout@v4
2323

24-
- name: Set up Python {{ job.python_version }}
24+
- name: Set up Python {{ job_data.python_version }}
2525
uses: actions/setup-python@v5
2626
with:
27-
python-version: "{{ job.python_version }}"
27+
python-version: "{{ job_data.python_version }}"
2828

2929
- name: Install tox
3030
run: pip install tox
31-
{%- if job.os == "windows-latest" %}
31+
{%- if job_data.os == "windows-latest" %}
3232

3333
- name: Configure git to support long filenames
3434
run: git config --system core.longpaths true
3535
{%- endif %}
3636

3737
- name: Run tests
38-
run: tox -e {{ job.tox_env }} -- -ra
38+
run: tox -e {{ job_data.tox_env }} -- -ra
3939
{%- endfor %}

.github/workflows/lint.yml .github/workflows/lint_0.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Do not edit this file.
22
# This file is generated automatically by executing tox -e generate_workflows
33

4-
name: Lint
4+
name: Lint 0
55

66
on:
77
push:

0 commit comments

Comments
 (0)