devpi-process 1.3.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 (26) hide show
  1. {devpi_process-1.3.0 → devpi_process-1.3.1}/.github/dependabot.yaml +4 -0
  2. {devpi_process-1.3.0 → devpi_process-1.3.1}/.github/workflows/check.yaml +31 -1
  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.3.0 → devpi_process-1.3.1}/.pre-commit-config.yaml +3 -3
  6. devpi_process-1.3.1/CHANGELOG.md +56 -0
  7. {devpi_process-1.3.0 → devpi_process-1.3.1}/PKG-INFO +4 -1
  8. {devpi_process-1.3.0 → devpi_process-1.3.1}/README.md +3 -0
  9. {devpi_process-1.3.0 → devpi_process-1.3.1}/pyproject.toml +11 -0
  10. {devpi_process-1.3.0 → devpi_process-1.3.1}/src/devpi_process/_version.py +2 -2
  11. devpi_process-1.3.1/src/devpi_process/py.typed +0 -0
  12. devpi_process-1.3.0/.github/workflows/release.yaml +0 -49
  13. devpi_process-1.3.0/CHANGELOG.md +0 -14
  14. {devpi_process-1.3.0 → devpi_process-1.3.1}/.github/FUNDING.yaml +0 -0
  15. {devpi_process-1.3.0 → devpi_process-1.3.1}/.github/SECURITY.md +0 -0
  16. {devpi_process-1.3.0 → devpi_process-1.3.1}/.github/release.yaml +0 -0
  17. {devpi_process-1.3.0 → devpi_process-1.3.1}/.gitignore +0 -0
  18. {devpi_process-1.3.0 → devpi_process-1.3.1}/.markdownlint.yaml +0 -0
  19. {devpi_process-1.3.0 → devpi_process-1.3.1}/CODE_OF_CONDUCT.md +0 -0
  20. {devpi_process-1.3.0 → devpi_process-1.3.1}/LICENSE.txt +0 -0
  21. /devpi_process-1.3.0/src/devpi_process/py.typed → /devpi_process-1.3.1/changelog.d/.gitkeep +0 -0
  22. {devpi_process-1.3.0 → devpi_process-1.3.1}/src/devpi_process/__init__.py +0 -0
  23. {devpi_process-1.3.0 → devpi_process-1.3.1}/tests/demo_pkg_inline/build.py +0 -0
  24. {devpi_process-1.3.0 → devpi_process-1.3.1}/tests/demo_pkg_inline/pyproject.toml +0 -0
  25. {devpi_process-1.3.0 → devpi_process-1.3.1}/tests/test_devpi_process.py +0 -0
  26. {devpi_process-1.3.0 → devpi_process-1.3.1}/tox.toml +0 -0
@@ -2,6 +2,10 @@ version: 2
2
2
  updates:
3
3
  - package-ecosystem: "github-actions"
4
4
  directory: "/"
5
+ labels:
6
+ - dependencies
7
+ - github_actions
8
+ - skip news
5
9
  schedule:
6
10
  interval: "weekly"
7
11
  day: "tuesday"
@@ -5,6 +5,7 @@ on:
5
5
  branches: ["main"]
6
6
  tags-ignore: ["**"]
7
7
  pull_request:
8
+ types: [opened, synchronize, reopened, labeled, unlabeled]
8
9
  schedule:
9
10
  - cron: "0 8 * * *"
10
11
  concurrency:
@@ -34,7 +35,7 @@ jobs:
34
35
  fetch-depth: 0
35
36
  persist-credentials: false
36
37
  - name: Install the latest version of uv
37
- uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
38
+ uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
38
39
  with:
39
40
  python-version: "3.15"
40
41
  enable-cache: false
@@ -51,3 +52,32 @@ jobs:
51
52
  run: tox run --skip-pkg-install -e ${{ matrix.env }}
52
53
  env:
53
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"
@@ -16,15 +16,15 @@ repos:
16
16
  hooks:
17
17
  - id: codespell
18
18
  - repo: https://github.com/tox-dev/tox-toml-fmt
19
- rev: "v1.11.0"
19
+ rev: "v1.11.1"
20
20
  hooks:
21
21
  - id: tox-toml-fmt
22
22
  - repo: https://github.com/tox-dev/pyproject-fmt
23
- rev: "v2.30.1"
23
+ rev: "v2.30.3"
24
24
  hooks:
25
25
  - id: pyproject-fmt
26
26
  - repo: https://github.com/astral-sh/ruff-pre-commit
27
- rev: "v0.16.10"
27
+ rev: "v0.17.0"
28
28
  hooks:
29
29
  - id: ruff-format
30
30
  - id: ruff
@@ -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
1
  Metadata-Version: 2.5
2
2
  Name: devpi-process
3
- Version: 1.3.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
@@ -33,6 +33,9 @@ Description-Content-Type: text/markdown
33
33
 
34
34
  # devpi-process
35
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
+
36
39
  [![PyPI](https://img.shields.io/pypi/v/devpi-process?style=flat-square)](https://pypi.org/project/devpi-process)
37
40
  [![PyPI - Implementation](https://img.shields.io/pypi/implementation/devpi-process?style=flat-square)](https://pypi.org/project/devpi-process)
38
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)
@@ -148,3 +148,14 @@ report.fail_under = 98
148
148
  report.omit = []
149
149
  html.show_contexts = true
150
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,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.3.0'
22
- __version_tuple__ = version_tuple = (1, 3, 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,49 +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-26.04
12
- steps:
13
- - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
14
- with:
15
- fetch-depth: 0
16
- persist-credentials: false
17
- - name: Install the latest version of uv
18
- uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
19
- with:
20
- python-version: "3.15"
21
- enable-cache: false
22
- cache-dependency-glob: "pyproject.toml"
23
- github-token: ${{ secrets.GITHUB_TOKEN }}
24
- - name: Build package
25
- run: uv build --python 3.15 --python-preference only-managed --sdist --wheel . --out-dir dist
26
- - name: Store the distribution packages
27
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
28
- with:
29
- name: ${{ env.dists-artifact-name }}
30
- path: dist/*
31
- release:
32
- needs:
33
- - build
34
- runs-on: ubuntu-26.04
35
- environment:
36
- name: release
37
- url: https://pypi.org/project/devpi-process/${{ github.ref_name }}
38
- permissions:
39
- id-token: write
40
- steps:
41
- - name: Download all the dists
42
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
43
- with:
44
- name: ${{ env.dists-artifact-name }}
45
- path: dist/
46
- - name: Publish to PyPI
47
- uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
48
- with:
49
- 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
File without changes