devpi-process 1.2.0__tar.gz → 1.3.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. devpi_process-1.3.1/.github/dependabot.yaml +17 -0
  2. devpi_process-1.3.1/.github/workflows/check.yaml +83 -0
  3. devpi_process-1.3.1/.github/workflows/prepare-release.yaml +106 -0
  4. devpi_process-1.3.1/.github/workflows/release.yaml +87 -0
  5. {devpi_process-1.2.0 → devpi_process-1.3.1}/.pre-commit-config.yaml +7 -6
  6. devpi_process-1.3.1/CHANGELOG.md +56 -0
  7. {devpi_process-1.2.0 → devpi_process-1.3.1}/PKG-INFO +8 -7
  8. {devpi_process-1.2.0 → devpi_process-1.3.1}/README.md +3 -0
  9. {devpi_process-1.2.0 → devpi_process-1.3.1}/pyproject.toml +37 -28
  10. {devpi_process-1.2.0 → devpi_process-1.3.1}/src/devpi_process/__init__.py +1 -5
  11. {devpi_process-1.2.0 → devpi_process-1.3.1}/src/devpi_process/_version.py +2 -2
  12. devpi_process-1.3.1/src/devpi_process/py.typed +0 -0
  13. {devpi_process-1.2.0 → devpi_process-1.3.1}/tox.toml +6 -2
  14. devpi_process-1.2.0/.github/dependabot.yaml +0 -8
  15. devpi_process-1.2.0/.github/workflows/check.yaml +0 -53
  16. devpi_process-1.2.0/.github/workflows/release.yaml +0 -48
  17. devpi_process-1.2.0/CHANGELOG.md +0 -14
  18. {devpi_process-1.2.0 → devpi_process-1.3.1}/.github/FUNDING.yaml +0 -0
  19. {devpi_process-1.2.0 → devpi_process-1.3.1}/.github/SECURITY.md +0 -0
  20. {devpi_process-1.2.0 → devpi_process-1.3.1}/.github/release.yaml +0 -0
  21. {devpi_process-1.2.0 → devpi_process-1.3.1}/.gitignore +0 -0
  22. {devpi_process-1.2.0 → devpi_process-1.3.1}/.markdownlint.yaml +0 -0
  23. {devpi_process-1.2.0 → devpi_process-1.3.1}/CODE_OF_CONDUCT.md +0 -0
  24. {devpi_process-1.2.0 → devpi_process-1.3.1}/LICENSE.txt +0 -0
  25. /devpi_process-1.2.0/src/devpi_process/py.typed → /devpi_process-1.3.1/changelog.d/.gitkeep +0 -0
  26. {devpi_process-1.2.0 → devpi_process-1.3.1}/tests/demo_pkg_inline/build.py +0 -0
  27. {devpi_process-1.2.0 → devpi_process-1.3.1}/tests/demo_pkg_inline/pyproject.toml +0 -0
  28. {devpi_process-1.2.0 → devpi_process-1.3.1}/tests/test_devpi_process.py +0 -0
@@ -0,0 +1,17 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "github-actions"
4
+ directory: "/"
5
+ labels:
6
+ - dependencies
7
+ - github_actions
8
+ - skip news
9
+ schedule:
10
+ interval: "weekly"
11
+ day: "tuesday"
12
+ groups:
13
+ github-actions:
14
+ patterns:
15
+ - "*"
16
+ cooldown:
17
+ default-days: 7
@@ -0,0 +1,83 @@
1
+ name: check
2
+ on:
3
+ workflow_dispatch:
4
+ push:
5
+ branches: ["main"]
6
+ tags-ignore: ["**"]
7
+ pull_request:
8
+ types: [opened, synchronize, reopened, labeled, unlabeled]
9
+ schedule:
10
+ - cron: "0 8 * * *"
11
+ concurrency:
12
+ group: check-${{ github.ref }}
13
+ cancel-in-progress: true
14
+ permissions:
15
+ contents: read
16
+ jobs:
17
+ test:
18
+ runs-on: ubuntu-26.04
19
+ strategy:
20
+ fail-fast: false
21
+ matrix:
22
+ env:
23
+ - "3.15"
24
+ - "3.15t"
25
+ - "3.14"
26
+ - "3.13"
27
+ - "3.12"
28
+ - "3.11"
29
+ - type
30
+ - dev
31
+ - pkg_meta
32
+ steps:
33
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
34
+ with:
35
+ fetch-depth: 0
36
+ persist-credentials: false
37
+ - name: Install the latest version of uv
38
+ uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
39
+ with:
40
+ python-version: "3.15"
41
+ enable-cache: false
42
+ cache-dependency-glob: "pyproject.toml"
43
+ github-token: ${{ secrets.GITHUB_TOKEN }}
44
+ - name: Install tox
45
+ run: uv tool install --python-preference only-managed --python 3.15 tox --with tox-uv
46
+ - name: Install Python
47
+ if: startsWith(matrix.env, '3.') && matrix.env != '3.15'
48
+ run: uv python install --python-preference only-managed ${{ matrix.env }}
49
+ - name: Setup test suite
50
+ run: tox run -vv --notest --skip-missing-interpreters false -e ${{ matrix.env }}
51
+ - name: Run test suite
52
+ run: tox run --skip-pkg-install -e ${{ matrix.env }}
53
+ env:
54
+ PYTEST_ADDOPTS: "-vv --durations=5"
55
+ changelog:
56
+ if: github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'skip news')
57
+ runs-on: ubuntu-24.04
58
+ steps:
59
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
60
+ with:
61
+ fetch-depth: 0
62
+ persist-credentials: false
63
+ - uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
64
+ with:
65
+ python-version: "3.15"
66
+ enable-cache: false
67
+ - run: uvx towncrier check --compare-with "origin/${GITHUB_BASE_REF}"
68
+ gate:
69
+ name: Required checks pass
70
+ if: always()
71
+ needs: [test, changelog]
72
+ runs-on: ubuntu-24.04
73
+ steps:
74
+ - env:
75
+ NEEDS_JSON: ${{ toJSON(needs) }}
76
+ run: |
77
+ jq -e '
78
+ all(
79
+ to_entries[];
80
+ .value.result == "success" or
81
+ (.key == "changelog" and .value.result == "skipped")
82
+ )
83
+ ' <<< "$NEEDS_JSON"
@@ -0,0 +1,106 @@
1
+ name: Prepare release
2
+ on:
3
+ workflow_dispatch:
4
+ inputs:
5
+ version:
6
+ description: Version to release, without a v prefix
7
+ required: true
8
+ permissions: {}
9
+ concurrency:
10
+ group: prepare-release
11
+ cancel-in-progress: false
12
+ jobs:
13
+ assemble:
14
+ if: github.ref == 'refs/heads/main'
15
+ runs-on: ubuntu-26.04
16
+ permissions:
17
+ contents: read
18
+ steps:
19
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
20
+ with:
21
+ fetch-depth: 0
22
+ persist-credentials: false
23
+ - uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
24
+ with:
25
+ python-version: "3.15"
26
+ enable-cache: false
27
+ - name: Build release patch
28
+ env:
29
+ VERSION: ${{ inputs.version }}
30
+ run: |
31
+ set -euo pipefail
32
+ if [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
33
+ echo "::error::expected a major.minor.patch version"
34
+ exit 1
35
+ fi
36
+ latest=$(git tag --list '[0-9]*' | sort -V | tail -n 1)
37
+ if [[ "$(printf '%s\n' "$latest" "$VERSION" | sort -V | tail -n 1)" != "$VERSION" || "$latest" == "$VERSION" ]]; then
38
+ echo "::error::$VERSION must be newer than $latest"
39
+ exit 1
40
+ fi
41
+ if ! compgen -G 'changelog.d/*.md' > /dev/null; then
42
+ echo "::error::no changelog fragments to release"
43
+ exit 1
44
+ fi
45
+ uvx towncrier build --yes --version "$VERSION"
46
+ git diff HEAD --binary > "$RUNNER_TEMP/release.patch"
47
+ test -s "$RUNNER_TEMP/release.patch"
48
+ - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
49
+ with:
50
+ name: release-patch
51
+ path: ${{ runner.temp }}/release.patch
52
+ if-no-files-found: error
53
+ push:
54
+ needs: assemble
55
+ runs-on: ubuntu-26.04
56
+ environment: release-auth
57
+ permissions:
58
+ contents: read
59
+ steps:
60
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
61
+ with:
62
+ fetch-depth: 0
63
+ persist-credentials: false
64
+ - uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
65
+ with:
66
+ name: release-patch
67
+ path: ${{ runner.temp }}/release-patch
68
+ - name: Validate release patch
69
+ env:
70
+ VERSION: ${{ inputs.version }}
71
+ run: |
72
+ set -euo pipefail
73
+ git fetch origin main
74
+ git reset --hard origin/main
75
+ git apply --check "$RUNNER_TEMP/release-patch/release.patch"
76
+ git apply --index "$RUNNER_TEMP/release-patch/release.patch"
77
+ while IFS= read -r path; do
78
+ case "$path" in
79
+ CHANGELOG.md|changelog.d/*.md) ;;
80
+ *) echo "::error::unexpected release path: $path"; exit 1 ;;
81
+ esac
82
+ done < <(git diff --cached --name-only)
83
+ grep -Fq "## $VERSION (" CHANGELOG.md
84
+ git diff --cached --check
85
+ - id: token
86
+ uses: actions/create-github-app-token@64ab729a6294000f5aa4a4bc0b73d1f32bc45510 # v3.3.0
87
+ with:
88
+ client-id: ${{ vars.RELEASE_APP_CLIENT_ID }}
89
+ private-key: ${{ secrets.RELEASE_APP_PRIVATE_KEY }}
90
+ owner: ${{ github.repository_owner }}
91
+ repositories: ${{ github.event.repository.name }}
92
+ permission-contents: write
93
+ - name: Commit and tag the release
94
+ env:
95
+ VERSION: ${{ inputs.version }}
96
+ GH_TOKEN: ${{ steps.token.outputs.token }}
97
+ APP_SLUG: ${{ steps.token.outputs.app-slug }}
98
+ run: |
99
+ set -euo pipefail
100
+ app_user_id=$(gh api "/users/${APP_SLUG}[bot]" --jq .id)
101
+ git config user.name "${APP_SLUG}[bot]"
102
+ git config user.email "${app_user_id}+${APP_SLUG}[bot]@users.noreply.github.com"
103
+ git commit -m "chore: prepare $VERSION"
104
+ git tag "$VERSION"
105
+ gh auth setup-git --hostname github.com --force
106
+ git push --atomic origin HEAD:main "refs/tags/$VERSION"
@@ -0,0 +1,87 @@
1
+ name: Release to PyPI
2
+ on:
3
+ push:
4
+ tags: ["*"]
5
+ permissions:
6
+ contents: read
7
+ env:
8
+ dists-artifact-name: python-package-distributions
9
+ jobs:
10
+ build:
11
+ runs-on: ubuntu-26.04
12
+ steps:
13
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
14
+ with:
15
+ fetch-depth: 0
16
+ persist-credentials: false
17
+ - name: Require a changelog section for the tag
18
+ env:
19
+ TAG: ${{ github.ref_name }}
20
+ run: |
21
+ if [[ ! "$TAG" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
22
+ echo "::error::unexpected release tag $TAG"
23
+ exit 1
24
+ fi
25
+ if ! grep -qF "## $TAG (" CHANGELOG.md; then
26
+ echo "::error::CHANGELOG.md has no section for $TAG"
27
+ exit 1
28
+ fi
29
+ - name: Install the latest version of uv
30
+ uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
31
+ with:
32
+ python-version: "3.15"
33
+ enable-cache: false
34
+ cache-dependency-glob: "pyproject.toml"
35
+ github-token: ${{ secrets.GITHUB_TOKEN }}
36
+ - name: Build package
37
+ run: uv build --python 3.15 --python-preference only-managed --sdist --wheel . --out-dir dist
38
+ - name: Store the distribution packages
39
+ uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
40
+ with:
41
+ name: ${{ env.dists-artifact-name }}
42
+ path: dist/*
43
+ release:
44
+ needs:
45
+ - build
46
+ runs-on: ubuntu-26.04
47
+ environment:
48
+ name: release
49
+ url: https://pypi.org/project/devpi-process/${{ github.ref_name }}
50
+ permissions:
51
+ id-token: write
52
+ steps:
53
+ - name: Download all the dists
54
+ uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
55
+ with:
56
+ name: ${{ env.dists-artifact-name }}
57
+ path: dist/
58
+ - name: Publish to PyPI
59
+ uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
60
+ with:
61
+ attestations: true
62
+ github-release:
63
+ needs: release
64
+ runs-on: ubuntu-26.04
65
+ permissions:
66
+ contents: write
67
+ steps:
68
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
69
+ with:
70
+ fetch-depth: 0
71
+ persist-credentials: false
72
+ - name: Publish GitHub Release
73
+ env:
74
+ GH_TOKEN: ${{ github.token }}
75
+ TAG: ${{ github.ref_name }}
76
+ run: |
77
+ set -euo pipefail
78
+ awk -v tag="$TAG" 'index($0, "## " tag " (") == 1 { found = 1; next } found && /^## / { exit } found { print }' CHANGELOG.md > "$RUNNER_TEMP/release-notes.md"
79
+ test -s "$RUNNER_TEMP/release-notes.md"
80
+ printf '\n[PyPI release](https://pypi.org/project/devpi-process/%s/)\n' "$TAG" >> "$RUNNER_TEMP/release-notes.md"
81
+ previous=$(git tag --list '[0-9]*' | grep -E '^[0-9]+(\.[0-9]+){1,2}$' | sort -V | awk -v tag="$TAG" '$0 == tag { print previous; exit } { previous = $0 }')
82
+ if [[ -n "$previous" ]]; then
83
+ printf '\n**Full Changelog**: https://github.com/%s/compare/%s...%s\n' "$GITHUB_REPOSITORY" "$previous" "$TAG" >> "$RUNNER_TEMP/release-notes.md"
84
+ else
85
+ printf '\n**Full Changelog**: https://github.com/%s/commits/%s\n' "$GITHUB_REPOSITORY" "$TAG" >> "$RUNNER_TEMP/release-notes.md"
86
+ fi
87
+ gh release create "$TAG" --verify-tag --title "$TAG" --notes-file "$RUNNER_TEMP/release-notes.md"
@@ -1,3 +1,5 @@
1
+ default_language_version:
2
+ python: python3.15
1
3
  repos:
2
4
  - repo: https://github.com/pre-commit/pre-commit-hooks
3
5
  rev: v6.0.0
@@ -5,7 +7,7 @@ repos:
5
7
  - id: end-of-file-fixer
6
8
  - id: trailing-whitespace
7
9
  - repo: https://github.com/python-jsonschema/check-jsonschema
8
- rev: 0.37.4
10
+ rev: 0.38.2
9
11
  hooks:
10
12
  - id: check-github-workflows
11
13
  args: ["--verbose"]
@@ -13,17 +15,16 @@ repos:
13
15
  rev: v2.4.3
14
16
  hooks:
15
17
  - id: codespell
16
- additional_dependencies: ["tomli>=2.2.1"]
17
18
  - repo: https://github.com/tox-dev/tox-toml-fmt
18
- rev: "v1.9.3"
19
+ rev: "v1.11.1"
19
20
  hooks:
20
21
  - id: tox-toml-fmt
21
22
  - repo: https://github.com/tox-dev/pyproject-fmt
22
- rev: "v2.25.3"
23
+ rev: "v2.30.3"
23
24
  hooks:
24
25
  - id: pyproject-fmt
25
26
  - repo: https://github.com/astral-sh/ruff-pre-commit
26
- rev: "v0.15.22"
27
+ rev: "v0.17.0"
27
28
  hooks:
28
29
  - id: ruff-format
29
30
  - id: ruff
@@ -43,7 +44,7 @@ repos:
43
44
  - mdformat-gfm>=1
44
45
  - mdformat-ruff>=0.1.3
45
46
  - repo: https://github.com/zizmorcore/zizmor-pre-commit
46
- rev: v1.27.0
47
+ rev: v1.30.1
47
48
  hooks:
48
49
  - id: zizmor
49
50
  - repo: meta
@@ -0,0 +1,56 @@
1
+ # Changelog
2
+
3
+ <!-- towncrier release notes start -->
4
+
5
+ ## 1.3.1 (2026-10-19)
6
+
7
+ ### Documentation
8
+
9
+ - Publish a GitHub Release with the tagged changelog after each PyPI upload. (#290)
10
+
11
+
12
+ ## 1.3.0 (2026-10-10)
13
+
14
+ - Require Python 3.11 and use Python 3.15 by default ([#284](https://github.com/tox-dev/devpi-process/pull/284)).
15
+
16
+ ## 1.2.0 (2026-07-21)
17
+
18
+ - Test on Python 3.15 and tighten GitHub Actions security checks.
19
+
20
+ ## 1.1.1 (2026-02-23)
21
+
22
+ - Move the development tooling to `tox.toml`, dependency groups, and ty.
23
+
24
+ ## 1.1.0 (2025-10-09)
25
+
26
+ - Add Python 3.14 support and end support for Python 3.8 and 3.9
27
+ ([#196](https://github.com/tox-dev/devpi-process/pull/196)).
28
+
29
+ ## 1.0.2 (2024-09-18)
30
+
31
+ - Improve CI ([#134](https://github.com/tox-dev/devpi-process/pull/134)).
32
+
33
+ ## 1.0.1 (2024-09-08)
34
+
35
+ - Declare Python 3.13 support ([#130](https://github.com/tox-dev/devpi-process/pull/130)).
36
+
37
+ ## 1.0.0 (2023-08-22)
38
+
39
+ - Exclude automated dependency and hook updates from generated release notes.
40
+
41
+ ## 0.3.1 (2023-06-15)
42
+
43
+ - Update dependencies and development tooling.
44
+
45
+ ## 0.3.0 (2022-12-03)
46
+
47
+ - Show stdout/stderr details if a command fails
48
+
49
+ ## 0.2 (2021-12-29)
50
+
51
+ - Drop 3.6 support and bump linters
52
+ - Index URL now ends with `/` to avoid redirect when sending a GET
53
+
54
+ ## 0.1 (2021-06-17)
55
+
56
+ - First release
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: devpi-process
3
- Version: 1.2.0
3
+ Version: 1.3.1
4
4
  Summary: devpi process provides a programmatic API to create and use a devpi server process
5
5
  Project-URL: Homepage, https://github.com/tox-dev/devpi-process#readme
6
6
  Project-URL: Source, https://github.com/tox-dev/devpi-process
@@ -18,7 +18,6 @@ Classifier: Operating System :: MacOS :: MacOS X
18
18
  Classifier: Operating System :: Microsoft :: Windows
19
19
  Classifier: Operating System :: POSIX
20
20
  Classifier: Programming Language :: Python :: 3 :: Only
21
- Classifier: Programming Language :: Python :: 3.10
22
21
  Classifier: Programming Language :: Python :: 3.11
23
22
  Classifier: Programming Language :: Python :: 3.12
24
23
  Classifier: Programming Language :: Python :: 3.13
@@ -27,14 +26,16 @@ Classifier: Programming Language :: Python :: 3.15
27
26
  Classifier: Topic :: Software Development :: Libraries
28
27
  Classifier: Topic :: Software Development :: Testing
29
28
  Classifier: Topic :: Utilities
30
- Requires-Python: >=3.10
31
- Requires-Dist: devpi-client>=7.2
32
- Requires-Dist: devpi-server>=6.17
33
- Requires-Dist: typing-extensions>=4.15; python_version < '3.11'
29
+ Requires-Python: >=3.11
30
+ Requires-Dist: devpi-client>=7.3
31
+ Requires-Dist: devpi-server>=6.20.3
34
32
  Description-Content-Type: text/markdown
35
33
 
36
34
  # devpi-process
37
35
 
36
+ See the [changelog](CHANGELOG.md) for released changes. Pull requests need a `changelog.d/<PR>.<type>.md` fragment; use
37
+ the `skip news` label for changes that do not need release notes.
38
+
38
39
  [![PyPI](https://img.shields.io/pypi/v/devpi-process?style=flat-square)](https://pypi.org/project/devpi-process)
39
40
  [![PyPI - Implementation](https://img.shields.io/pypi/implementation/devpi-process?style=flat-square)](https://pypi.org/project/devpi-process)
40
41
  [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/devpi-process?style=flat-square)](https://pypi.org/project/devpi-process)
@@ -1,5 +1,8 @@
1
1
  # devpi-process
2
2
 
3
+ See the [changelog](CHANGELOG.md) for released changes. Pull requests need a `changelog.d/<PR>.<type>.md` fragment; use
4
+ the `skip news` label for changes that do not need release notes.
5
+
3
6
  [![PyPI](https://img.shields.io/pypi/v/devpi-process?style=flat-square)](https://pypi.org/project/devpi-process)
4
7
  [![PyPI - Implementation](https://img.shields.io/pypi/implementation/devpi-process?style=flat-square)](https://pypi.org/project/devpi-process)
5
8
  [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/devpi-process?style=flat-square)](https://pypi.org/project/devpi-process)
@@ -2,7 +2,7 @@
2
2
  build-backend = "hatchling.build"
3
3
  requires = [
4
4
  "hatch-vcs>=0.5",
5
- "hatchling>=1.28",
5
+ "hatchling>=1.32.4",
6
6
  ]
7
7
 
8
8
  [project]
@@ -23,7 +23,7 @@ maintainers = [
23
23
  authors = [
24
24
  { name = "Bernát Gábor", email = "gaborjbernat@gmail.com" },
25
25
  ]
26
- requires-python = ">=3.10"
26
+ requires-python = ">=3.11"
27
27
  classifiers = [
28
28
  "Development Status :: 5 - Production/Stable",
29
29
  "Framework :: tox",
@@ -33,7 +33,6 @@ classifiers = [
33
33
  "Operating System :: Microsoft :: Windows",
34
34
  "Operating System :: POSIX",
35
35
  "Programming Language :: Python :: 3 :: Only",
36
- "Programming Language :: Python :: 3.10",
37
36
  "Programming Language :: Python :: 3.11",
38
37
  "Programming Language :: Python :: 3.12",
39
38
  "Programming Language :: Python :: 3.13",
@@ -47,9 +46,8 @@ dynamic = [
47
46
  "version",
48
47
  ]
49
48
  dependencies = [
50
- "devpi-client>=7.2",
51
- "devpi-server>=6.17",
52
- "typing-extensions>=4.15; python_version<'3.11'",
49
+ "devpi-client>=7.3",
50
+ "devpi-server>=6.20.3",
53
51
  ]
54
52
  urls.Homepage = "https://github.com/tox-dev/devpi-process#readme"
55
53
  urls.Source = "https://github.com/tox-dev/devpi-process"
@@ -65,20 +63,20 @@ dev = [
65
63
  test = [
66
64
  "covdefaults>=2.3",
67
65
  "httpx>=0.28.1",
68
- "pytest>=8.4.2",
69
- "pytest-cov>=7",
66
+ "pytest>=9.1.1",
67
+ "pytest-cov>=7.1",
70
68
  ]
71
69
  type = [
72
- "ty>=0.0.19",
70
+ "ty>=0.0.84",
73
71
  { include-group = "test" },
74
72
  ]
75
73
  lint = [
76
- "pre-commit-uv>=4.2",
74
+ "pre-commit-uv>=4.3",
77
75
  ]
78
76
  pkg-meta = [
79
77
  "check-wheel-contents>=0.6.3",
80
- "twine>=6.2",
81
- "uv>=0.10.2",
78
+ "twine>=7",
79
+ "uv>=0.12.22",
82
80
  ]
83
81
 
84
82
  [tool.hatch]
@@ -97,23 +95,23 @@ lint.select = [
97
95
  "ALL",
98
96
  ]
99
97
  lint.ignore = [
100
- "ANN401", # allow Any as type annotation
101
- "COM812", # Conflict with formatter
102
- "CPY", # No copyright statements
103
- "D203", # `one-blank-line-before-class` (D203) and `no-blank-line-before-class` (D211) are incompatible
104
- "D212", # `multi-line-summary-first-line` (D212) and `multi-line-summary-second-line` (D213) are incompatible
105
- "DOC", # not supported
106
- "ISC001", # Conflict with formatter
107
- "RUF067", # `__init__` module should only contain docstrings and re-exports
108
- "S104", # Possible binding to all interface
98
+ "any-type", # allow Any as type annotation
99
+ "CPY", # No copyright statements
100
+ "DOC", # not supported
101
+ "hardcoded-bind-all-interfaces", # Possible binding to all interface
102
+ "incorrect-blank-line-before-class", # `one-blank-line-before-class` (D203) and `no-blank-line-before-class` (D211) are incompatible
103
+ "missing-trailing-comma", # Conflict with formatter
104
+ "multi-line-summary-first-line", # `multi-line-summary-first-line` (D212) and `multi-line-summary-second-line` (D213) are incompatible
105
+ "non-empty-init-module", # `__init__` module should only contain docstrings and re-exports
106
+ "single-line-implicit-string-concatenation", # Conflict with formatter
109
107
  ]
110
108
  lint.per-file-ignores."tests/**/*.py" = [
111
- "D", # don't care about documentation in tests
112
- "FBT", # don't care about booleans as positional arguments in tests
113
- "INP001", # no implicit namespace
114
- "PLR2004", # Magic value used in comparison, consider replacing with a constant variable
115
- "S101", # asserts allowed in tests
116
- "S603", # `subprocess` call: check for execution of untrusted input
109
+ "assert", # asserts allowed in tests
110
+ "D", # don't care about documentation in tests
111
+ "FBT", # don't care about booleans as positional arguments in tests
112
+ "implicit-namespace-package", # no implicit namespace
113
+ "magic-value-comparison", # Magic value used in comparison, consider replacing with a constant variable
114
+ "subprocess-without-shell-equals-true", # `subprocess` call: check for execution of untrusted input
117
115
  ]
118
116
  lint.isort = { known-first-party = [
119
117
  "devpi_process",
@@ -131,7 +129,7 @@ count = true
131
129
  max_supported_python = "3.15"
132
130
 
133
131
  [tool.ty]
134
- environment.python-version = "3.14"
132
+ environment.python-version = "3.15"
135
133
 
136
134
  [tool.coverage]
137
135
  run.parallel = true
@@ -150,3 +148,14 @@ report.fail_under = 98
150
148
  report.omit = []
151
149
  html.show_contexts = true
152
150
  html.skip_covered = false
151
+
152
+ [tool.towncrier]
153
+ name = "devpi-process"
154
+ directory = "changelog.d"
155
+ filename = "CHANGELOG.md"
156
+ title_format = "## {version} ({project_date})"
157
+ type = [
158
+ { directory = "feature", name = "Features", showcontent = true },
159
+ { directory = "bugfix", name = "Bug fixes", showcontent = true },
160
+ { directory = "doc", name = "Documentation", showcontent = true },
161
+ ]
@@ -18,11 +18,7 @@ from ._version import __version__
18
18
  if TYPE_CHECKING:
19
19
  from collections.abc import Iterator, Sequence
20
20
  from types import TracebackType
21
-
22
- if sys.version_info >= (3, 11): # pragma: no cover (py311+)
23
- from typing import Self
24
- else: # pragma: no cover (<py311)
25
- from typing_extensions import Self
21
+ from typing import Self
26
22
 
27
23
 
28
24
  def _check_call(cmd: list[str]) -> None:
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.2.0'
22
- __version_tuple__ = version_tuple = (1, 2, 0)
21
+ __version__ = version = '1.3.1'
22
+ __version_tuple__ = version_tuple = (1, 3, 1)
23
23
 
24
24
  __commit_id__ = commit_id = None
File without changes
@@ -1,9 +1,10 @@
1
- requires = [ "tox>=4.34.1", "tox-uv>=1.29" ]
2
- env_list = [ "3.15", "3.14", "3.13", "3.12", "3.11", "3.10", "3.15t", "fix", "pkg_meta", "type" ]
1
+ requires = [ "tox>=4.64.7", "tox-uv>=1.36.1" ]
2
+ env_list = [ "3.15", "3.14", "3.13", "3.12", "3.11", "3.15t", "fix", "pkg_meta", "type" ]
3
3
  skip_missing_interpreters = true
4
4
 
5
5
  [env_run_base]
6
6
  description = "run the unit tests with pytest under {env_name}"
7
+ default_base_python = [ "3.15" ]
7
8
  package = "wheel"
8
9
  wheel_build_env = ".pkg"
9
10
  dependency_groups = [ "test" ]
@@ -35,6 +36,9 @@ commands = [
35
36
  ],
36
37
  ]
37
38
 
39
+ [env_pkg_base]
40
+ default_base_python = [ "3.15" ]
41
+
38
42
  [env.fix]
39
43
  description = "format the code base to adhere to our styles, and complain about what we cannot do automatically"
40
44
  skip_install = true
@@ -1,8 +0,0 @@
1
- version: 2
2
- updates:
3
- - package-ecosystem: "github-actions"
4
- directory: "/"
5
- schedule:
6
- interval: "daily"
7
- cooldown:
8
- default-days: 7
@@ -1,53 +0,0 @@
1
- name: check
2
- on:
3
- workflow_dispatch:
4
- push:
5
- branches: ["main"]
6
- tags-ignore: ["**"]
7
- pull_request:
8
- schedule:
9
- - cron: "0 8 * * *"
10
- concurrency:
11
- group: check-${{ github.ref }}
12
- cancel-in-progress: true
13
- permissions:
14
- contents: read
15
- jobs:
16
- test:
17
- runs-on: ubuntu-latest
18
- strategy:
19
- fail-fast: false
20
- matrix:
21
- env:
22
- - "3.15"
23
- - "3.15t"
24
- - "3.14"
25
- - "3.13"
26
- - "3.12"
27
- - "3.11"
28
- - "3.10"
29
- - type
30
- - dev
31
- - pkg_meta
32
- steps:
33
- - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
34
- with:
35
- fetch-depth: 0
36
- persist-credentials: false
37
- - name: Install the latest version of uv
38
- uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
39
- with:
40
- enable-cache: false
41
- cache-dependency-glob: "pyproject.toml"
42
- github-token: ${{ secrets.GITHUB_TOKEN }}
43
- - name: Install tox
44
- run: uv tool install --python-preference only-managed --python 3.14 tox --with tox-uv
45
- - name: Install Python
46
- if: startsWith(matrix.env, '3.') && matrix.env != '3.14'
47
- run: uv python install --python-preference only-managed ${{ matrix.env }}
48
- - name: Setup test suite
49
- run: tox run -vv --notest --skip-missing-interpreters false -e ${{ matrix.env }}
50
- - name: Run test suite
51
- run: tox run --skip-pkg-install -e ${{ matrix.env }}
52
- env:
53
- PYTEST_ADDOPTS: "-vv --durations=5"
@@ -1,48 +0,0 @@
1
- name: Release to PyPI
2
- on:
3
- push:
4
- tags: ["*"]
5
- permissions:
6
- contents: read
7
- env:
8
- dists-artifact-name: python-package-distributions
9
- jobs:
10
- build:
11
- runs-on: ubuntu-latest
12
- steps:
13
- - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
14
- with:
15
- fetch-depth: 0
16
- persist-credentials: false
17
- - name: Install the latest version of uv
18
- uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
19
- with:
20
- enable-cache: false
21
- cache-dependency-glob: "pyproject.toml"
22
- github-token: ${{ secrets.GITHUB_TOKEN }}
23
- - name: Build package
24
- run: uv build --python 3.14 --python-preference only-managed --sdist --wheel . --out-dir dist
25
- - name: Store the distribution packages
26
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
27
- with:
28
- name: ${{ env.dists-artifact-name }}
29
- path: dist/*
30
- release:
31
- needs:
32
- - build
33
- runs-on: ubuntu-latest
34
- environment:
35
- name: release
36
- url: https://pypi.org/project/devpi-process/${{ github.ref_name }}
37
- permissions:
38
- id-token: write
39
- steps:
40
- - name: Download all the dists
41
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
42
- with:
43
- name: ${{ env.dists-artifact-name }}
44
- path: dist/
45
- - name: Publish to PyPI
46
- uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0
47
- with:
48
- attestations: true
@@ -1,14 +0,0 @@
1
- # Changelog
2
-
3
- ## 0.3 (2021-12-03)
4
-
5
- - Show stdout/stderr details if a command fails
6
-
7
- ## 0.2 (2021-12-29)
8
-
9
- - Drop 3.6 support and bump linters
10
- - Index URL now ends with `/` to avoid redirect when sending a GET
11
-
12
- ## 0.1 (2021-06-17)
13
-
14
- - First release
File without changes
File without changes