Skip to content

Commit

Permalink
Use tox.toml over tox.ini (#143)
Browse files Browse the repository at this point in the history
  • Loading branch information
gaborbernat authored Oct 10, 2024
1 parent eb718c7 commit 415c400
Show file tree
Hide file tree
Showing 7 changed files with 130 additions and 110 deletions.
1 change: 0 additions & 1 deletion .github/workflows/check.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ jobs:
- "3.11"
- "3.10"
- "3.9"
- "3.8"
os:
- ubuntu-latest
- macos-latest
Expand Down
5 changes: 0 additions & 5 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,6 @@ repos:
hooks:
- id: codespell
additional_dependencies: ["tomli>=2.0.1"]
- repo: https://github.com/tox-dev/tox-ini-fmt
rev: "1.4.1"
hooks:
- id: tox-ini-fmt
args: ["-p", "fix"]
- repo: https://github.com/tox-dev/pyproject-fmt
rev: "2.2.4"
hooks:
Expand Down
50 changes: 31 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@
[![check](https://github.com/tox-dev/tox-gh/actions/workflows/check.yaml/badge.svg)](https://github.com/tox-dev/tox-gh/actions/workflows/check.yaml)
[![Downloads](https://static.pepy.tech/badge/tox-gh/month)](https://pepy.tech/project/tox-gh)

**tox-gh** is a tox plugin which helps running tox on GitHub Actions with multiple different Python versions on multiple
**tox-gh** is a tox plugin, which helps run tox on GitHub Actions with multiple different Python versions on multiple
workers in parallel.

## Features

When running tox on GitHub Actions, tox-gh
When running tox on GitHub Actions, tox-gh:

- detects which environment to run based on configurations (or bypass detection and set it explicitly via the
`TOX_GH_MAJOR_MINOR` environment variable) and
- detects, which environment to run based on configurations (or bypass detection and set it explicitly via the
`TOX_GH_MAJOR_MINOR` environment variable),
- provides utilities such as
[grouping log lines](https://github.com/actions/toolkit/blob/main/docs/commands.md#group-and-ungroup-log-lines).

Expand All @@ -26,26 +26,41 @@ When running tox on GitHub Actions, tox-gh

### Basic Example

Add `[gh]` section to the same file as tox configuration. If you're using `tox.ini`:
Add `[gh]` section to the same file as tox configuration.

If you're using `tox.ini`:

```ini
[gh]
python =
3.8 = 3.8
3.9 = 3.9
3.10 = 3.10
3.11 = 3.11
3.12 = 3.12
3.13 = 3.13, type, dev, pkg_meta
3.12 = 3.12
3.11 = 3.11
```

For `tox.toml`:

```toml
[gh]
python."3.13" = ["3.13", "type", "pkg_meta"]
python."3.12" = ["3.12"]
python."3.11" = ["3.11"]
```

For `pyproject.toml`:

```toml
[tool.tox.gh]
python."3.13" = ["3.13", "type", "pkg_meta"]
python."3.12" = ["3.12"]
python."3.11" = ["3.11"]
```

This will run different set of tox environments on different python versions set up via GitHub `setup-python` action:
This will run a different set of tox environments on different python versions set up via GitHub `setup-python` action:

- on Python 3.8 job, tox runs `py38` environment,
- on Python 3.9 job, tox runs `py39` environment,
- on Python 3.10 job, tox runs `py310` environment,
- in Python 3.11 job, tox runs `py311` and `type` environments,
- on Python 3.12 job, tox runs `py312` environment.
- on Python 3.13 job, tox runs `3.13`, `type` and `pkg_meta` environment,
- on Python 3.12 job, tox runs `3.12` environment,
- on Python 3.11 job, tox runs `3.11` environment.

#### Workflow Configuration

Expand Down Expand Up @@ -77,9 +92,6 @@ jobs:
- "3.13"
- "3.12"
- "3.11"
- "3.10"
- "3.9"
- "3.8"
os:
- ubuntu-latest
- macos-latest
Expand Down
4 changes: 1 addition & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,14 @@ license = "MIT"
maintainers = [
{ name = "Bernát Gábor", email = "[email protected]" },
]
requires-python = ">=3.8"
requires-python = ">=3.9"
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
Expand Down Expand Up @@ -69,7 +68,6 @@ version.source = "vcs"
line-length = 120

[tool.ruff]
target-version = "py38"
line-length = 120
format.preview = true
format.docstring-code-line-length = 100
Expand Down
9 changes: 7 additions & 2 deletions src/tox_gh/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import shutil
import sys
import threading
from typing import TYPE_CHECKING, Any, Dict
from typing import TYPE_CHECKING, Any, Dict # noqa: UP035

from tox.config.loader.memory import MemoryLoader
from tox.config.loader.section import Section
Expand Down Expand Up @@ -53,7 +53,12 @@ class GhActionsConfigSet(ConfigSet):

def register_config(self) -> None:
"""Register the configurations."""
self.add_config("python", of_type=Dict[str, EnvList], default={}, desc="python version to mapping")
self.add_config(
"python",
of_type=Dict[str, EnvList], # noqa: UP006
default={},
desc="python version to mapping",
)


@impl
Expand Down
80 changes: 0 additions & 80 deletions tox.ini

This file was deleted.

91 changes: 91 additions & 0 deletions tox.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
requires = ["tox>=4.21.1", "tox-uv>=1.13"]
env_list = ["fix", "3.13", "3.12", "3.11", "3.10", "3.9", "type", "pkg_meta"]
skip_missing_interpreters = true

[env_run_base]
description = "run the tests with pytest under {env_name}"
package = "wheel"
wheel_build_env = ".pkg"
extras = ["testing"]
pass_env = ["DIFF_AGAINST", "PYTEST_*", "TOX_GH_MAJOR_MINOR"]
set_env.COVERAGE_FILE = { replace = "env", name = "COVERAGE_FILE", default = "{work_dir}{/}.coverage.{env_name}" }
set_env.COVERAGE_FILECOVERAGE_PROCESS_START = "{tox_root}{/}pyproject.toml"
commands = [
[
"pytest",
{ replace = "posargs", extend = true, default = [
"--durations",
"5",
"--junitxml",
"{work_dir}{/}junit.{env_name}.xml",
"--no-cov-on-fail",
"--cov",
"{env_site_packages_dir}{/}tox_gh",
"--cov",
"{tox_root}{/}tests",
"--cov-config",
"{tox_root}{/}pyproject.toml",
"--cov-context",
"test",
"--cov-report",
"term-missing:skip-covered",
"--cov-report",
"html:{env_tmp_dir}{/}htmlcov",
"--cov-report",
"xml:{work_dir}{/}coverage.{env_name}.xml",
"tests",
"--run-integration",
] },
],
[
"diff-cover",
"--compare-branch",
{ replace = "env", name = "DIFF_AGAINST", default = "origin/main" },
"{work_dir}{/}coverage.{env_name}.xml",
],
]

[env.fix]
description = "format the code base to adhere to our styles, and complain about what we cannot do automatically"
skip_install = true
deps = ["pre-commit-uv>=4.1.3"]
pass_env = [{ replace = "ref", of = ["env_run_base", "pass_env"], extend = true }, "PROGRAMDATA"]
commands = [["pre-commit", "run", "--all-files", "--show-diff-on-failure", { replace = "posargs" }]]

[env.type]
description = "run type check on code base"
deps = ["mypy==1.11.2"]
commands = [["mypy", "src{/}tox_gh"], ["mypy", "tests"]]

[env.pkg_meta]
description = "check that the long description is valid"
skip_install = true
deps = ["check-wheel-contents>=0.6", "twine>=5.1.1", "uv>=0.4.17"]
commands = [
[ "uv", "build", "--sdist", "--wheel", "--out-dir", "{env_tmp_dir}", "."],
[ "twine", "check", "{env_tmp_dir}{/}*" ],
[ "check-wheel-contents", "--no-config", "{env_tmp_dir}" ],
]

[env.release]
description = "do a release, required posargs of the version number"
skip_install = true
deps = ["gitpython>=3.1.43", "packaging>=24.1", "towncrier>=24.8"]
commands = [["python", "{tox_root}/tasks/release.py", "--version", "{posargs}"]]

[env.dev]
description = "dev environment with all deps at {envdir}"
package = "editable"
deps = [
{ replace = "ref", of = [ "env", "release", "deps"], extend = true },
{ replace = "ref", of = [ "requires"], extend = true },
]
extras = ["docs", "testing"]
commands = [["uv", "pip", "tree"], ["python", "-c", 'print(r"{env_python}")']]

[gh]
python."3.13" = ["3.13", "type", "pkg_meta"]
python."3.12" = ["3.12"]
python."3.11" = ["3.11"]
python."3.10" = ["3.10"]
python."3.9" = ["3.9"]

0 comments on commit 415c400

Please sign in to comment.