Skip to content

Commit e824962

Browse files
use arguments fill, fill_platforms, fill_factors
1 parent dfa841f commit e824962

File tree

3 files changed

+35
-16
lines changed

3 files changed

+35
-16
lines changed

.github/workflows/test_tox.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,11 @@ jobs:
8282
test_supported_pythons:
8383
uses: ./.github/workflows/tox.yml
8484
with:
85-
envs: ''
85+
envs: |
86+
- linux: py3
87+
fill: true
88+
fill_platforms: linux
89+
fill_factors: xdist
8690
pytest: false
8791

8892
test_libraries:

.github/workflows/tox.yml

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,21 @@ on:
77
description: Array of tox environments to test
88
required: true
99
type: string
10+
fill:
11+
description: Add an extra toxenv to the matrix for each current version of Python supported by the package
12+
required: false
13+
default: false
14+
type: boolean
15+
fill_platforms:
16+
description: Platforms to iterate with fill
17+
required: false
18+
default: ''
19+
type: string
20+
fill_factors:
21+
description: Tox factors to add to toxenvs added with `fill`
22+
required: false
23+
default: ''
24+
type: string
1025
libraries:
1126
description: Additional packages to install
1227
required: false
@@ -123,20 +138,17 @@ jobs:
123138
- uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
124139
with:
125140
python-version: '3.12'
126-
- if: inputs.envs == ''
141+
- if: inputs.fill
127142
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
128143
with:
129-
fetch-depth: 0
130-
lfs: true
131-
submodules: ${{ inputs.submodules }}
132144
ref: ${{ inputs.checkout_ref }}
133-
- if: inputs.envs == ''
145+
- if: inputs.fill
134146
run: echo $SUPPORTED_PYTHONS_SCRIPT | base64 --decode > supported_pythons.py
135147
env:
136-
SUPPORTED_PYTHONS_SCRIPT: IyAvLy8gc2NyaXB0CiMgcmVxdWlyZXMtcHl0aG9uID0gIj49My4xMiIKIyBkZXBlbmRlbmNpZXMgPSBbCiMgICAgICJjbGljaz09OC4yLjEiLAojICAgICAicGVwcHlwcm9qZWN0PT0xLjAuMiIsCiMgICAgICJyZXF1ZXN0cz09Mi4zMi41IiwKIyAgICAgInBhY2thZ2luZz09MjUuMCIsCiMgXQojIC8vLwppbXBvcnQgb3MKaW1wb3J0IHdhcm5pbmdzCmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aAoKaW1wb3J0IGNsaWNrCmltcG9ydCByZXF1ZXN0cwpmcm9tIHBhY2thZ2luZy5zcGVjaWZpZXJzIGltcG9ydCBTcGVjaWZpZXJTZXQKZnJvbSBwYWNrYWdpbmcudmVyc2lvbiBpbXBvcnQgVmVyc2lvbgpmcm9tIHBlcHB5cHJvamVjdCBpbXBvcnQgUHlQcm9qZWN0Q29uZmlndXJhdGlvbgoKCkBjbGljay5jb21tYW5kKCkKQGNsaWNrLm9wdGlvbigiLS1zb3VyY2UiLCBkZWZhdWx0PU5vbmUpCkBjbGljay5vcHRpb24oIi0tZmxhZ3MiLCBkZWZhdWx0PU5vbmUpCkBjbGljay5vcHRpb24oIi0tbm8tZW9hcyIsIGlzX2ZsYWc9VHJ1ZSwgZGVmYXVsdD1GYWxzZSkKQGNsaWNrLm9wdGlvbigiLS1wbGF0Zm9ybXMiLCBkZWZhdWx0PU5vbmUpCmRlZiBzdXBwb3J0ZWRfcHl0aG9uX2VudnNfYmxvY2soCiAgICBzb3VyY2U6IFBhdGggPSBOb25lLAogICAgZmxhZ3M6IGxpc3Rbc3RyXSA9IE5vbmUsCiAgICBub19lb2FzOiBib29sID0gRmFsc2UsCiAgICBwbGF0Zm9ybXM6IGxpc3Rbc3RyXSA9IE5vbmUsCik6CiAgICAiIiJlbnVtZXJhdGUgdG94ZW52cyBQeXRob24gZnJvbSBhIHBhY2thZ2Ugc291cmNlIiIiCgogICAgaWYgcGxhdGZvcm1zIGlzIE5vbmU6CiAgICAgICAgcGxhdGZvcm1zID0gWyJsaW51eCJdCiAgICBlbGlmIGlzaW5zdGFuY2UocGxhdGZvcm1zLCBzdHIpOgogICAgICAgIHBsYXRmb3JtcyA9IHBsYXRmb3Jtcy5zcGxpdCgiLCIpCgogICAgdG94ZW52cyA9IHN1cHBvcnRlZF9weXRob25fdG94ZW52cyhzb3VyY2UsIGZsYWdzLCBub19lb2FzKQogICAgZW52c19ibG9jayA9ICJcXG4iLmpvaW4oCiAgICAgICAgZiItIHtwbGF0Zm9ybX06IHt0b3hlbnZ9IiBmb3IgcGxhdGZvcm0gaW4gcGxhdGZvcm1zIGZvciB0b3hlbnYgaW4gdG94ZW52cwogICAgKQoKICAgIHByaW50KGVudnNfYmxvY2spCiAgICB3aXRoIG9wZW4ob3MuZW52aXJvblsiR0lUSFVCX09VVFBVVCJdLCAiYSIpIGFzIGY6CiAgICAgICAgZi53cml0ZShmImVudnM9e2VudnNfYmxvY2t9XG4iKQoKCmRlZiBzdXBwb3J0ZWRfcHl0aG9uX3RveGVudnMoCiAgICBzb3VyY2U6IFBhdGggPSBOb25lLAogICAgZmxhZ3M6IGxpc3Rbc3RyXSA9IE5vbmUsCiAgICBub19lb2FzOiBib29sID0gRmFsc2UsCikgLT4gbGlzdFtzdHJdOgogICAgY3VycmVudF9weXRob25zID0gY3VycmVudF9weXRob25fdmVyc2lvbnMobm9fZW9hcz1ub19lb2FzKQoKICAgIGlmIHNvdXJjZSBpcyBOb25lIG9yIHNvdXJjZSA9PSAiIjoKICAgICAgICBzdXBwb3J0ZWRfcHl0aG9ucyA9IGN1cnJlbnRfcHl0aG9ucwogICAgZWxzZToKICAgICAgICBjb25maWd1cmF0aW9uID0gUHlQcm9qZWN0Q29uZmlndXJhdGlvbi5mcm9tX2RpcmVjdG9yeShzb3VyY2UpCiAgICAgICAgdHJ5OgogICAgICAgICAgICBweXRob25fcmVxdWlyZW1lbnRzID0gU3BlY2lmaWVyU2V0KGNvbmZpZ3VyYXRpb25bInByb2plY3QiXVsicmVxdWlyZXMtcHl0aG9uIl0pCgogICAgICAgICAgICBzdXBwb3J0ZWRfcHl0aG9ucyA9IFsKICAgICAgICAgICAgICAgIHB5dGhvbiBmb3IgcHl0aG9uIGluIGN1cnJlbnRfcHl0aG9ucyBpZiBweXRob24gaW4gcHl0aG9uX3JlcXVpcmVtZW50cwogICAgICAgICAgICBdCiAgICAgICAgZXhjZXB0IChLZXlFcnJvciwgVHlwZUVycm9yKToKICAgICAgICAgICAgd2FybmluZ3Mud2FybigKICAgICAgICAgICAgICAgICJjb3VsZCBub3QgZmluZCBgcmVxdWlyZXMtcHl0aG9uYCBpbiBtZXRhZGF0YTsgZmFsbGluZyBiYWNrIHRvIGN1cnJlbnQgUHl0aG9uIHZlcnNpb25zLi4uIgogICAgICAgICAgICApCiAgICAgICAgICAgIHN1cHBvcnRlZF9weXRob25zID0gY3VycmVudF9weXRob25zCgogICAgcmV0dXJuIFsKICAgICAgICBmInB5e3N0cihweXRob24pLnJlcGxhY2UoJy4nLCAnJyl9eyctJyArICctJy5qb2luKGZsYWdzKSBpZiBmbGFncyBpcyBub3QgTm9uZSBhbmQgbGVuKGZsYWdzKSA+IDAgZWxzZSAnJ30iCiAgICAgICAgZm9yIHB5dGhvbiBpbiBzdXBwb3J0ZWRfcHl0aG9ucwogICAgXQoKCmRlZiBjdXJyZW50X3B5dGhvbl92ZXJzaW9ucyhub19lb2FzOiBib29sID0gRmFsc2UpIC0+IGxpc3RbVmVyc2lvbl06CiAgICB1cmwgPSAiaHR0cHM6Ly9lbmRvZmxpZmUuZGF0ZS9hcGkvdjEvcHJvZHVjdHMvcHl0aG9uIgogICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5nZXQoImh0dHBzOi8vZW5kb2ZsaWZlLmRhdGUvYXBpL3YxL3Byb2R1Y3RzL3B5dGhvbiIpCiAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSA9PSAyMDA6CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgVmVyc2lvbihweXRob25bIm5hbWUiXSkKICAgICAgICAgICAgZm9yIHB5dGhvbiBpbiByZXNwb25zZS5qc29uKClbInJlc3VsdCJdWyJyZWxlYXNlcyJdCiAgICAgICAgICAgIGlmIG5vdCBweXRob25bImlzRW9hcyIgaWYgbm9fZW9hcyBlbHNlICJpc0VvbCJdCiAgICAgICAgXQogICAgZWxzZToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGYicmVxdWVzdCByZXR1cm5lZCBzdGF0dXMgY29kZSB7cmVzcG9uc2Uuc3RhdHVzX2NvZGV9IFt7dXJsfV0iKQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBzdXBwb3J0ZWRfcHl0aG9uX2VudnNfYmxvY2soKQo=
137-
- if: inputs.envs == ''
138-
id: get-envs
139-
run: pipx run supported_pythons.py --platforms linux --source .
148+
SUPPORTED_PYTHONS_SCRIPT: IyAvLy8gc2NyaXB0CiMgcmVxdWlyZXMtcHl0aG9uID0gIj49My4xMiIKIyBkZXBlbmRlbmNpZXMgPSBbCiMgICAgICJjbGljaz09OC4yLjEiLAojICAgICAicGVwcHlwcm9qZWN0PT0xLjAuMiIsCiMgICAgICJyZXF1ZXN0cz09Mi4zMi41IiwKIyAgICAgInBhY2thZ2luZz09MjUuMCIsCiMgXQojIC8vLwppbXBvcnQgb3MKaW1wb3J0IHdhcm5pbmdzCmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aAoKaW1wb3J0IGNsaWNrCmltcG9ydCByZXF1ZXN0cwpmcm9tIHBhY2thZ2luZy5zcGVjaWZpZXJzIGltcG9ydCBTcGVjaWZpZXJTZXQKZnJvbSBwYWNrYWdpbmcudmVyc2lvbiBpbXBvcnQgVmVyc2lvbgpmcm9tIHBlcHB5cHJvamVjdCBpbXBvcnQgUHlQcm9qZWN0Q29uZmlndXJhdGlvbgoKCkBjbGljay5jb21tYW5kKCkKQGNsaWNrLm9wdGlvbigiLS1zb3VyY2UiLCBkZWZhdWx0PU5vbmUpCkBjbGljay5vcHRpb24oIi0tZmFjdG9ycyIsIGRlZmF1bHQ9Tm9uZSkKQGNsaWNrLm9wdGlvbigiLS1uby1lb2FzIiwgaXNfZmxhZz1UcnVlLCBkZWZhdWx0PUZhbHNlKQpAY2xpY2sub3B0aW9uKCItLXBsYXRmb3JtcyIsIGRlZmF1bHQ9Tm9uZSkKZGVmIHN1cHBvcnRlZF9weXRob25fZW52c19ibG9jaygKICAgIHNvdXJjZTogUGF0aCA9IE5vbmUsCiAgICBmYWN0b3JzOiBsaXN0W3N0cl0gPSBOb25lLAogICAgbm9fZW9hczogYm9vbCA9IEZhbHNlLAogICAgcGxhdGZvcm1zOiBsaXN0W3N0cl0gPSBOb25lLAopOgogICAgIiIiZW51bWVyYXRlIHRveGVudnMgUHl0aG9uIGZyb20gYSBwYWNrYWdlIHNvdXJjZSIiIgoKICAgIGlmIHBsYXRmb3JtcyBpcyBOb25lOgogICAgICAgIHBsYXRmb3JtcyA9IFsibGludXgiXQogICAgZWxpZiBpc2luc3RhbmNlKHBsYXRmb3Jtcywgc3RyKToKICAgICAgICBwbGF0Zm9ybXMgPSBwbGF0Zm9ybXMuc3BsaXQoIiwiKQoKICAgIHRveGVudnMgPSBzdXBwb3J0ZWRfcHl0aG9uX3RveGVudnMoc291cmNlLCBmYWN0b3JzLCBub19lb2FzKQogICAgZW52c19ibG9jayA9ICJcXG4iLmpvaW4oCiAgICAgICAgZiItIHtwbGF0Zm9ybX06IHt0b3hlbnZ9IiBmb3IgcGxhdGZvcm0gaW4gcGxhdGZvcm1zIGZvciB0b3hlbnYgaW4gdG94ZW52cwogICAgKQoKICAgIHByaW50KGVudnNfYmxvY2spCiAgICB3aXRoIG9wZW4ob3MuZW52aXJvblsiR0lUSFVCX09VVFBVVCJdLCAiYSIpIGFzIGY6CiAgICAgICAgZi53cml0ZShmImVudnM9e2VudnNfYmxvY2t9XG4iKQoKCmRlZiBzdXBwb3J0ZWRfcHl0aG9uX3RveGVudnMoCiAgICBzb3VyY2U6IFBhdGggPSBOb25lLAogICAgZmFjdG9yczogbGlzdFtzdHJdID0gTm9uZSwKICAgIG5vX2VvYXM6IGJvb2wgPSBGYWxzZSwKKSAtPiBsaXN0W3N0cl06CiAgICBpZiBpc2luc3RhbmNlKGZhY3RvcnMsIHN0cik6CiAgICAgICAgZmFjdG9ycyA9IGZhY3RvcnMuc3BsaXQoIiwiKQoKICAgIGN1cnJlbnRfcHl0aG9ucyA9IGN1cnJlbnRfcHl0aG9uX3ZlcnNpb25zKG5vX2VvYXM9bm9fZW9hcykKCiAgICBpZiBzb3VyY2UgaXMgTm9uZSBvciBzb3VyY2UgPT0gIiI6CiAgICAgICAgc3VwcG9ydGVkX3B5dGhvbnMgPSBjdXJyZW50X3B5dGhvbnMKICAgIGVsc2U6CiAgICAgICAgY29uZmlndXJhdGlvbiA9IFB5UHJvamVjdENvbmZpZ3VyYXRpb24uZnJvbV9kaXJlY3Rvcnkoc291cmNlKQogICAgICAgIHRyeToKICAgICAgICAgICAgcHl0aG9uX3JlcXVpcmVtZW50cyA9IFNwZWNpZmllclNldChjb25maWd1cmF0aW9uWyJwcm9qZWN0Il1bInJlcXVpcmVzLXB5dGhvbiJdKQoKICAgICAgICAgICAgc3VwcG9ydGVkX3B5dGhvbnMgPSBbCiAgICAgICAgICAgICAgICBweXRob24gZm9yIHB5dGhvbiBpbiBjdXJyZW50X3B5dGhvbnMgaWYgcHl0aG9uIGluIHB5dGhvbl9yZXF1aXJlbWVudHMKICAgICAgICAgICAgXQogICAgICAgIGV4Y2VwdCAoS2V5RXJyb3IsIFR5cGVFcnJvcik6CiAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCiAgICAgICAgICAgICAgICAiY291bGQgbm90IGZpbmQgYHJlcXVpcmVzLXB5dGhvbmAgaW4gbWV0YWRhdGE7IGZhbGxpbmcgYmFjayB0byBjdXJyZW50IFB5dGhvbiB2ZXJzaW9ucy4uLiIKICAgICAgICAgICAgKQogICAgICAgICAgICBzdXBwb3J0ZWRfcHl0aG9ucyA9IGN1cnJlbnRfcHl0aG9ucwoKICAgIHJldHVybiBbCiAgICAgICAgZiJweXtzdHIocHl0aG9uKS5yZXBsYWNlKCcuJywgJycpfXsnLScgKyAnLScuam9pbihmYWN0b3JzKSBpZiBmYWN0b3JzIGlzIG5vdCBOb25lIGFuZCBsZW4oZmFjdG9ycykgPiAwIGVsc2UgJyd9IgogICAgICAgIGZvciBweXRob24gaW4gc3VwcG9ydGVkX3B5dGhvbnMKICAgIF0KCgpkZWYgY3VycmVudF9weXRob25fdmVyc2lvbnMobm9fZW9hczogYm9vbCA9IEZhbHNlKSAtPiBsaXN0W1ZlcnNpb25dOgogICAgdXJsID0gImh0dHBzOi8vZW5kb2ZsaWZlLmRhdGUvYXBpL3YxL3Byb2R1Y3RzL3B5dGhvbiIKICAgIHJlc3BvbnNlID0gcmVxdWVzdHMuZ2V0KCJodHRwczovL2VuZG9mbGlmZS5kYXRlL2FwaS92MS9wcm9kdWN0cy9weXRob24iKQogICAgaWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgPT0gMjAwOgogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgIFZlcnNpb24ocHl0aG9uWyJuYW1lIl0pCiAgICAgICAgICAgIGZvciBweXRob24gaW4gcmVzcG9uc2UuanNvbigpWyJyZXN1bHQiXVsicmVsZWFzZXMiXQogICAgICAgICAgICBpZiBub3QgcHl0aG9uWyJpc0VvYXMiIGlmIG5vX2VvYXMgZWxzZSAiaXNFb2wiXQogICAgICAgIF0KICAgIGVsc2U6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihmInJlcXVlc3QgcmV0dXJuZWQgc3RhdHVzIGNvZGUge3Jlc3BvbnNlLnN0YXR1c19jb2RlfSBbe3VybH1dIikKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgc3VwcG9ydGVkX3B5dGhvbl9lbnZzX2Jsb2NrKCkK
149+
- if: inputs.fill
150+
id: supported-pythons
151+
run: pipx run supported_pythons.py --source . ${{ inputs.fill_platforms != '' && format('--platforms {}', inputs.fill_platforms) || '' }} ${{ inputs.fill_factors != '' && format('--factors {}', inputs.fill_factors) || '' }}
140152
shell: sh
141153
- run: echo $TOX_MATRIX_SCRIPT | base64 --decode > tox_matrix.py
142154
env:
@@ -145,7 +157,7 @@ jobs:
145157
- id: set-outputs
146158
run: |
147159
pipx run tox_matrix.py \
148-
--envs "${{ inputs.envs != '' && inputs.envs || steps.get-envs.outputs.envs }}" \
160+
--envs "${{ !inputs.fill && inputs.envs || format("{}\n{}", inputs.envs, steps.supported-pythons.outputs.envs) }}" \
149161
--libraries "${{ inputs.libraries }}" \
150162
--posargs "${{ inputs.posargs }}" --toxdeps "${{ inputs.toxdeps }}" \
151163
--toxargs "${{ inputs.toxargs }}" --pytest "${{ inputs.pytest }}" \

tools/supported_pythons.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@
2020

2121
@click.command()
2222
@click.option("--source", default=None)
23-
@click.option("--flags", default=None)
23+
@click.option("--factors", default=None)
2424
@click.option("--no-eoas", is_flag=True, default=False)
2525
@click.option("--platforms", default=None)
2626
def supported_python_envs_block(
2727
source: Path = None,
28-
flags: list[str] = None,
28+
factors: list[str] = None,
2929
no_eoas: bool = False,
3030
platforms: list[str] = None,
3131
):
@@ -36,7 +36,7 @@ def supported_python_envs_block(
3636
elif isinstance(platforms, str):
3737
platforms = platforms.split(",")
3838

39-
toxenvs = supported_python_toxenvs(source, flags, no_eoas)
39+
toxenvs = supported_python_toxenvs(source, factors, no_eoas)
4040
envs_block = "\\n".join(
4141
f"- {platform}: {toxenv}" for platform in platforms for toxenv in toxenvs
4242
)
@@ -48,9 +48,12 @@ def supported_python_envs_block(
4848

4949
def supported_python_toxenvs(
5050
source: Path = None,
51-
flags: list[str] = None,
51+
factors: list[str] = None,
5252
no_eoas: bool = False,
5353
) -> list[str]:
54+
if isinstance(factors, str):
55+
factors = factors.split(",")
56+
5457
current_pythons = current_python_versions(no_eoas=no_eoas)
5558

5659
if source is None or source == "":
@@ -70,7 +73,7 @@ def supported_python_toxenvs(
7073
supported_pythons = current_pythons
7174

7275
return [
73-
f"py{str(python).replace('.', '')}{'-' + '-'.join(flags) if flags is not None and len(flags) > 0 else ''}"
76+
f"py{str(python).replace('.', '')}{'-' + '-'.join(factors) if factors is not None and len(factors) > 0 else ''}"
7477
for python in supported_pythons
7578
]
7679

0 commit comments

Comments
 (0)