From 4f79ecd8247e1e8bd16d001cd5f36f37199bfbcc Mon Sep 17 00:00:00 2001 From: Marko Kreen Date: Fri, 12 Jun 2026 21:17:56 +0300 Subject: [PATCH 1/4] Fix some new linter warnings. --- skytools/apipkg.py | 6 +++--- skytools/scripting.py | 2 +- skytools/tnetstrings.py | 1 + 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/skytools/apipkg.py b/skytools/apipkg.py index 978bde2..9acda72 100644 --- a/skytools/apipkg.py +++ b/skytools/apipkg.py @@ -31,7 +31,7 @@ def _py_abspath(path): def distribution_version(name): """try to get the version of the named distribution, returs None on failure""" - from pkg_resources import DistributionNotFound, get_distribution + from pkg_resources import DistributionNotFound, get_distribution # type: ignore try: dist = get_distribution(name) except DistributionNotFound: @@ -96,7 +96,7 @@ def __docget(self): def __docset(self, value): self.__doc = value - __doc__ = property(__docget, __docset) # type: ignore + __doc__ = property(__docget, __docset) def __init__(self, name, importspec, implprefix=None, attr=None): super().__init__(name) @@ -165,7 +165,7 @@ def __makeattr(self, name): __getattr__ = __makeattr @property - def __dict__(self): + def __dict__(self): # type: ignore # force all the content of the module # to be loaded when __dict__ is read dictdescr = ModuleType.__dict__['__dict__'] # type: ignore diff --git a/skytools/scripting.py b/skytools/scripting.py index 54fe5bc..27b8a50 100644 --- a/skytools/scripting.py +++ b/skytools/scripting.py @@ -323,7 +323,7 @@ def parse_args(self, args: Sequence[str]) -> Tuple[Any, Sequence[str]]: args = getattr(options, "args", []) return options, args opt_parser = self.init_optparse() - options2, args2 = opt_parser.parse_args(args) + options2, args2 = opt_parser.parse_args(list(args)) return options2, args2 def print_version(self) -> None: diff --git a/skytools/tnetstrings.py b/skytools/tnetstrings.py index 126346e..a652fc1 100644 --- a/skytools/tnetstrings.py +++ b/skytools/tnetstrings.py @@ -1,5 +1,6 @@ """TNetStrings. """ +# mypy: disable-error-code="comparison-overlap" import codecs from typing import Any, List From f0e5dc64ebcd1c5acdf7d246838bd5cb2ffbde06 Mon Sep 17 00:00:00 2001 From: Marko Kreen Date: Fri, 12 Jun 2026 21:19:00 +0300 Subject: [PATCH 2/4] Upgrade build system - setuptools 77+ - build on py314 with free-threading --- MANIFEST.in | 2 +- Makefile | 14 +++++++++++-- etc/requirements.build.txt | 7 +++---- pyproject.toml | 20 +++++++++++++++---- setup.py | 24 +++++++++++++++------- tox.ini | 41 +++++++++++++++++++++++--------------- 6 files changed, 74 insertions(+), 34 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index c0ad776..71c5d09 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,6 +1,6 @@ include skytools/py.typed include modules/*.[ch] include tests/*.py tests/*.ini -include tox.ini .coveragerc .pylintrc +include tox.ini .coveragerc include MANIFEST.in include README.rst NEWS.rst diff --git a/Makefile b/Makefile index 0ca5469..500fa9e 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,7 @@ -VERSION = $(shell python3 setup.py --version) -RXVERSION = $(shell python3 setup.py --version | sed 's/\./[.]/g') +#VERSION = $(shell python3 setup.py --version) +VERSION = $(shell sed -n -e '/^package_version/s/.* = "\(.*\)"/\1/p' skytools/installer_config.py) +RXVERSION = $(shell echo "$(VERSION)" | sed 's/\./[.]/g') TAG = v$(VERSION) NEWS = NEWS.rst @@ -46,3 +47,12 @@ shownote: showuses: grep uses: .github/workflows/*.yml +test-setup: + @set -e; \ + for py in py310 py312 py314; do \ + for st in 77 78 79 80 81 82; do \ + env="$${py}-setuptools$${st}"; \ + echo "##### $${env} #####"; \ + tox -e $${py}-setuptools$${st}; \ + done; \ + done diff --git a/etc/requirements.build.txt b/etc/requirements.build.txt index ff9e40b..d39078e 100644 --- a/etc/requirements.build.txt +++ b/etc/requirements.build.txt @@ -1,4 +1,3 @@ -setuptools>=67 -wheel>=0.41 -twine==4.0.2 -tox==4.8.0 +setuptools>=77 +twine==6.0.1 +tox==4.55.0 diff --git a/pyproject.toml b/pyproject.toml index 8f90a01..01bbe19 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,13 +4,14 @@ description = "Utilities for database scripts" readme = "README.rst" keywords = ["database"] dynamic = ["version"] -requires-python = ">= 3.7" +requires-python = ">= 3.10" maintainers = [{name = "Marko Kreen", email = "markokr@gmail.com"}] +license = "ISC" +license-files = ["COPYRIGHT"] classifiers = [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Developers", - "License :: OSI Approved :: ISC License (ISCL)", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", @@ -31,7 +32,9 @@ repository = "https://github.com/pgq/python-skytools" changelog = "https://github.com/pgq/python-skytools/blob/master/NEWS.rst" [build-system] -requires = ["setuptools", "wheel"] +# v71 - bdist_wheel is now builtin +# v77 - 'license' format change +requires = ["setuptools>=77"] build-backend = "setuptools.build_meta" [tool.setuptools] @@ -42,6 +45,9 @@ zip-safe = false [tool.setuptools.dynamic.version] attr = "skytools.installer_config.package_version" +[tool.cibuildwheel] +#skip = "pp*" # disable PyPy + # # testing # @@ -130,6 +136,10 @@ ignore_missing_imports = true module = ["skytools.basetypes"] warn_unused_ignores = false +[[tool.mypy.overrides]] +module = ["pkg_resources"] +warn_unused_ignores = false + [tool.ruff] line-length = 120 select = ["E", "F", "Q", "W", "UP", "YTT", "ANN"] @@ -249,7 +259,7 @@ py-version = "3.10" # When enabled, pylint would attempt to guess common misconfiguration and emit # user-friendly hints instead of false-positive error messages. -suggestion-mode = true +#suggestion-mode = true # Allow loading of arbitrary C extensions. Extensions are imported into the # active Python interpreter and may run arbitrary code. @@ -540,6 +550,8 @@ disable = [ "try-except-raise", "deprecated-module", "no-else-break", "no-else-continue", # junk "trailing-newlines", "consider-using-f-string", + "too-many-positional-arguments", + "catching-non-exception", # expected "cyclic-import", # issues diff --git a/setup.py b/setup.py index 4cb4ffc..67c85d2 100644 --- a/setup.py +++ b/setup.py @@ -2,30 +2,40 @@ """ from typing import Tuple -from setuptools import Extension, setup +from setuptools import Extension, setup, __version__ as st_version + +import sysconfig try: - from wheel.bdist_wheel import bdist_wheel + from setuptools.command.bdist_wheel import bdist_wheel + class bdist_wheel_abi3(bdist_wheel): def get_tag(self) -> Tuple[str, str, str]: python, abi, plat = super().get_tag() - if python.startswith("cp"): + if python.startswith("cp") and LIMITED_API: return CP_VER, "abi3", plat return python, abi, plat + cmdclass = {"bdist_wheel": bdist_wheel_abi3} except ImportError: cmdclass = {} -CP_VER = "cp37" -API_VER = ('Py_LIMITED_API', '0x03070000') +if sysconfig.get_config_var("Py_GIL_DISABLED"): + CP_VER = 'unused' + MACROS = [] + LIMITED_API = False +else: + CP_VER = "cp310" + MACROS = [('Py_LIMITED_API', '0x030a0000')] + LIMITED_API = True setup( cmdclass = cmdclass, ext_modules = [ Extension("skytools._cquoting", ["modules/cquoting.c"], - define_macros=[API_VER], py_limited_api=True), + define_macros=MACROS, py_limited_api=LIMITED_API), Extension("skytools._chashtext", ["modules/hashtext.c"], - define_macros=[API_VER], py_limited_api=True), + define_macros=MACROS, py_limited_api=LIMITED_API), ] ) diff --git a/tox.ini b/tox.ini index e31e99d..8a36ce2 100644 --- a/tox.ini +++ b/tox.ini @@ -5,24 +5,28 @@ envlist = lint,xlint,py3 [package] name = skytools deps = - psycopg2-binary==2.9.7; platform_python_implementation != 'PyPy' + psycopg2-binary==2.9.12; platform_python_implementation != 'PyPy' + setuptools77: setuptools==77.0.3 + setuptools78: setuptools==78.1.1 + setuptools79: setuptools==79.0.1 + setuptools80: setuptools==80.10.2 + setuptools81: setuptools==81.0.0 + setuptools82: setuptools==82.0.1 test_deps = - #coverage==7.3.0 - coverage==7.2.7 - pytest==7.4.0 - pytest-cov==4.1.0 + coverage==7.14.1 + pytest==9.0.3 + pytest-cov==7.1.0 lint_deps = - mypy==1.5.1 - pyflakes==3.1.0 - typing-extensions==4.7.1 - types-setuptools==68.1.0.0 - types-psycopg2==2.9.21.11; platform_python_implementation != 'PyPy' + mypy==2.1.0 + pyflakes==3.4.0 + typing-extensions==4.15.0 + types-setuptools==82.0.0.20260518 + types-psycopg2==2.9.21.20260518; platform_python_implementation != 'PyPy' xlint_deps = - pylint==2.17.5 - pytype==2023.8.22 + pylint==4.0.5 doc_deps = - sphinx==7.2.2 - docutils==0.20.1 + sphinx==9.1.0 + docutils==0.23 [testenv] changedir = {toxinidir} @@ -43,6 +47,12 @@ commands = --rootdir={toxinidir} \ {posargs} +[testenv:py3{10,11,12,13,14}-setuptools{77,78,79,80,81,82}] +commands = + python -c 'import setuptools; print("setuptools: " + setuptools.__version__)' + python3 setup.py sdist + python3 setup.py build + python3 setup.py bdist_wheel [testenv:lint] #changedir = {toxinidir} @@ -56,7 +66,7 @@ commands = [testenv:xlint] #changedir = {envsitepackagesdir} -basepython = python3.10 +basepython = python3 deps = {[package]deps} {[package]test_deps} @@ -64,7 +74,6 @@ deps = {[package]xlint_deps} commands = pylint skytools - #pytype skytools [testenv:docs] basepython = python3 From f97fb4880cf3abd06c4e0699b9d00eae2ef66a12 Mon Sep 17 00:00:00 2001 From: Marko Kreen Date: Fri, 12 Jun 2026 21:19:35 +0300 Subject: [PATCH 3/4] ci: upgrade actions --- .github/workflows/ci.yml | 86 +++++++++----------------- .github/workflows/release.yml | 111 ++++++++++++++++++++-------------- 2 files changed, 93 insertions(+), 104 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1d38756..59401aa 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,17 +3,11 @@ # https://github.com/actions # https://cibuildwheel.readthedocs.io/en/stable/options/ # -# uses: https://github.com/actions/checkout @v4 -# uses: https://github.com/actions/setup-python @v4 -# uses: https://github.com/actions/download-artifact @v3 -# uses: https://github.com/actions/upload-artifact @v3 -# uses: https://github.com/pypa/cibuildwheel @v2.16 name: CI on: pull_request: {} - push: {} jobs: @@ -23,17 +17,16 @@ jobs: strategy: matrix: test: - - {PY: "3.10", TOXENV: "lint"} + - {PY: "3.14", TOXENV: "lint"} steps: - name: "Checkout" - uses: actions/checkout@v4 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: "Setup Python ${{matrix.test.PY}}" - uses: actions/setup-python@v4 + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: python-version: ${{matrix.test.PY}} - - - run: python3 -m pip install -r etc/requirements.build.txt --disable-pip-version-check + pip-install: -r etc/requirements.build.txt - name: "Test" env: @@ -46,35 +39,24 @@ jobs: strategy: matrix: test: - - {os: "ubuntu-latest", osname: "Linux", PY: "3.7", TOXENV: "py37", arch: "x64"} - - {os: "ubuntu-latest", osname: "Linux", PY: "3.8", TOXENV: "py38", arch: "x64"} - - {os: "ubuntu-latest", osname: "Linux", PY: "3.9", TOXENV: "py39", arch: "x64"} - {os: "ubuntu-latest", osname: "Linux", PY: "3.10", TOXENV: "py310", arch: "x64"} - - {os: "ubuntu-latest", osname: "Linux", PY: "3.11", TOXENV: "py311", arch: "x64"} - - {os: "ubuntu-latest", osname: "Linux", PY: "3.12", TOXENV: "py312", arch: "x64"} - - {os: "macos-latest", osname: "MacOS", PY: "3.10", TOXENV: "py310", arch: "x64"} - - {os: "macos-latest", osname: "MacOS", PY: "3.11", TOXENV: "py311", arch: "x64"} - #- {os: "macos-latest", osname: "MacOS", PY: "3.12", TOXENV: "py312", arch: "x64"} - - {os: "windows-latest", osname: "Windows", PY: "3.7", TOXENV: "py37", arch: "x86"} - - {os: "windows-latest", osname: "Windows", PY: "3.8", TOXENV: "py38", arch: "x64"} - - {os: "windows-latest", osname: "Windows", PY: "3.10", TOXENV: "py310", arch: "x86"} - - {os: "windows-latest", osname: "Windows", PY: "3.11", TOXENV: "py311", arch: "x64"} - #- {os: "windows-latest", osname: "Windows", PY: "3.12", TOXENV: "py312", arch: "x64"} - - {os: "ubuntu-latest", osname: "Linux", PY: "pypy3.8", TOXENV: "pypy38", arch: "x64"} - - {os: "ubuntu-latest", osname: "Linux", PY: "pypy3.9", TOXENV: "pypy39", arch: "x64"} - - {os: "ubuntu-latest", osname: "Linux", PY: "pypy3.10", TOXENV: "pypy310", arch: "x64"} + - {os: "ubuntu-latest", osname: "Linux", PY: "3.13", TOXENV: "py313", arch: "x64"} + - {os: "ubuntu-latest", osname: "Linux", PY: "3.14", TOXENV: "py314", arch: "x64"} + - {os: "macos-latest", osname: "MacOS", PY: "3.12", TOXENV: "py312", arch: "x64"} + - {os: "macos-latest", osname: "MacOS", PY: "3.14", TOXENV: "py314", arch: "arm64"} + - {os: "windows-latest", osname: "Windows", PY: "3.13", TOXENV: "py313", arch: "x64"} + - {os: "windows-latest", osname: "Windows", PY: "3.14", TOXENV: "py314", arch: "x64"} + #- {os: "ubuntu-latest", osname: "Linux", PY: "pypy3.11", TOXENV: "pypy311", arch: "x64"} steps: - - name: "Checkout" - uses: actions/checkout@v4 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: "Setup Python ${{matrix.test.PY}}" - uses: actions/setup-python@v4 + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: python-version: ${{matrix.test.PY}} architecture: ${{matrix.test.arch}} allow-prereleases: true - - - run: python3 -m pip install -r etc/requirements.build.txt --disable-pip-version-check + pip-install: -r etc/requirements.build.txt - name: "Build" run: python setup.py build @@ -90,23 +72,18 @@ jobs: strategy: matrix: test: - - {PY: "3.7", PG: "11", TOXENV: "py37"} - - {PY: "3.8", PG: "12", TOXENV: "py38"} - - {PY: "3.9", PG: "13", TOXENV: "py39"} - - {PY: "3.10", PG: "14", TOXENV: "py310"} - - {PY: "3.11", PG: "15", TOXENV: "py311"} + - {PY: "3.10", PG: "16", TOXENV: "py310"} + - {PY: "3.14", PG: "18", TOXENV: "py314"} #- {PY: "pypy3.9", PG: "15", TOXENV: "pypy39"} #- {PY: "pypy3.10", PG: "15", TOXENV: "pypy310"} steps: - - name: "Checkout" - uses: actions/checkout@v4 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: "Setup Python ${{matrix.test.PY}}" - uses: actions/setup-python@v4 + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: python-version: ${{matrix.test.PY}} - - - run: python3 -m pip install -r etc/requirements.build.txt --disable-pip-version-check + pip-install: -r etc/requirements.build.txt - name: "InstallDB" run: | @@ -162,27 +139,20 @@ jobs: strategy: matrix: sys: - - {os: "ubuntu-latest", name: "Linux", archs: "auto", qemu: false} - - {os: "ubuntu-latest", name: "Linux", archs: "aarch64", qemu: true} - - {os: "macos-latest", name: "MacOS", archs: "x86_64 arm64 universal2", qemu: false} - - {os: "windows-latest", name: "Windows", archs: "auto", qemu: false} + - {os: "ubuntu-latest", name: "Linux", archs: "auto"} + - {os: "ubuntu-24.04-arm", name: "Linux", archs: "aarch64"} + - {os: "macos-15-intel", name: "MacOS", archs: "x86_64 universal2"} + - {os: "macos-latest", name: "MacOS", archs: "auto"} + - {os: "windows-latest", name: "Windows", archs: "auto"} steps: - - uses: actions/checkout@v4 - - name: "Set up QEMU" - if: ${{matrix.sys.qemu}} - uses: docker/setup-qemu-action@v2 - with: - platforms: all - - uses: pypa/cibuildwheel@v2.16 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + - uses: pypa/cibuildwheel@8d2b08b68458a16aeb24b64e68a09ab1c8e82084 # v3.4.1 env: CIBW_ARCHS: "${{matrix.sys.archs}}" - # cp38: cp37-macos does not support universal2/arm64 - CIBW_BUILD: "cp38-* pp*-manylinux_x86_64" - CIBW_SKIP: "pp37-*" - name: "Check" shell: bash run: | ls -l wheelhouse - - uses: actions/upload-artifact@v3 - with: {name: "dist", path: "wheelhouse"} + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: {name: "wheel-${{matrix.sys.os}}", path: "wheelhouse"} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3de1bea..acc7eca 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,13 +13,14 @@ jobs: name: "Build source package" runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v4 - with: {python-version: "3.11"} - - run: python3 -m pip install -r etc/requirements.build.txt --disable-pip-version-check + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + with: + python-version: "3.14" + pip-install: -r etc/requirements.build.txt - run: python3 setup.py sdist - - uses: actions/upload-artifact@v3 - with: {name: "dist", path: "dist"} + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: {name: "sdist", path: "dist"} cibuildwheel: name: "Wheels: ${{matrix.sys.name}} [${{matrix.sys.archs}}]" @@ -27,43 +28,47 @@ jobs: strategy: matrix: sys: - - {os: "ubuntu-latest", name: "Linux", archs: "auto", qemu: false} - - {os: "ubuntu-latest", name: "Linux", archs: "aarch64", qemu: true} - - {os: "macos-latest", name: "MacOS", archs: "x86_64 arm64 universal2", qemu: false} - - {os: "windows-latest", name: "Windows", archs: "auto", qemu: false} + - {os: "ubuntu-latest", name: "Linux", archs: "auto"} + - {os: "ubuntu-24.04-arm", name: "Linux", archs: "aarch64"} + - {os: "macos-15-intel", name: "MacOS", archs: "x86_64 universal2"} + - {os: "macos-latest", name: "MacOS", archs: "auto"} + - {os: "windows-latest", name: "Windows", archs: "auto"} steps: - - uses: actions/checkout@v4 - - name: "Set up QEMU" - if: ${{matrix.sys.qemu}} - uses: docker/setup-qemu-action@v2 - with: - platforms: all - - uses: pypa/cibuildwheel@v2.16 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + - uses: pypa/cibuildwheel@8d2b08b68458a16aeb24b64e68a09ab1c8e82084 # v3.4.1 env: CIBW_ARCHS: "${{matrix.sys.archs}}" - # cp38: cp37-macos does not support universal2/arm64 - CIBW_BUILD: "cp38-* pp*-manylinux_x86_64" - CIBW_SKIP: "pp37-*" - name: "Check" shell: bash run: | ls -l wheelhouse - - uses: actions/upload-artifact@v3 - with: {name: "dist", path: "wheelhouse"} + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: {name: "wheel-${{matrix.sys.os}}", path: "wheelhouse"} - publish: - name: "Publish" + dist: + name: "Collect files" runs-on: ubuntu-latest needs: [sdist, cibuildwheel] steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v4 - with: {python-version: "3.11"} + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: { path: "dist", merge-multiple: true } + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: {name: "dist", path: "dist"} - - run: python3 -m pip install -r etc/requirements.build.txt --disable-pip-version-check + publish-github: + name: "Publish to Github" + runs-on: ubuntu-latest + needs: [dist] + permissions: + contents: write + steps: + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + with: + python-version: "3.14" + pip-install: -r etc/requirements.build.txt - - name: "Get files" - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: {name: "dist", path: "dist"} - name: "Install pandoc" @@ -73,6 +78,7 @@ jobs: - name: "Prepare" run: | + ls -l dist PACKAGE=$(python3 setup.py --name) VERSION=$(python3 setup.py --version) TGZ="${PACKAGE}-${VERSION}.tar.gz" @@ -87,7 +93,7 @@ jobs: esac test "${{github.ref}}" = "refs/tags/v${VERSION}" || { echo "ERR: tag mismatch"; exit 1; } - test -f "dist/${TGZ}" || { echo "ERR: sdist failed"; exit 1; } + test -f "dist/${TGZ}" || { echo "ERR: sdist failed [dist/${TGZ}]"; ls -l dist; exit 1; } echo "PACKAGE=${PACKAGE}" >> $GITHUB_ENV echo "VERSION=${VERSION}" >> $GITHUB_ENV echo "TGZ=${TGZ}" >> $GITHUB_ENV @@ -106,20 +112,33 @@ jobs: ghf="--notes-file=./tmp/note.md" if test "${DRAFT}" = "true"; then ghf="${ghf} --draft"; fi if test "${PRERELEASE}" = "true"; then ghf="${ghf} --prerelease"; fi - gh release create "v${VERSION}" "dist/${TGZ}" --title="${title}" ${ghf} + #gh release create "v${VERSION}" --title="${title}" ${ghf} dist/* + gh release create "v${VERSION}" --title="${title}" ${ghf} dist/${TGZ} - - name: "Upload to PYPI" - id: pypi_upload - env: - PYPI_TOKEN: ${{secrets.PYPI_TOKEN}} - PYPI_TEST_TOKEN: ${{secrets.PYPI_TEST_TOKEN}} - run: | - ls -l dist - if test "${DRAFT}" = "false"; then - python -m twine upload -u __token__ -p ${PYPI_TOKEN} \ - --repository pypi --disable-progress-bar dist/* - else - python -m twine upload -u __token__ -p ${PYPI_TEST_TOKEN} \ - --repository testpypi --disable-progress-bar dist/* - fi + publish-pypi: + if: ${{ !contains(github.ref_name, '.dev') }} + name: "Publish to PyPi" + runs-on: ubuntu-latest + needs: [dist] + permissions: + id-token: write + environment: pypi + steps: + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: { name: "dist", path: "dist" } + - uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0 + + publish-testpypi: + if: ${{ contains(github.ref_name, '.dev') }} + name: "Publish to TestPyPi" + runs-on: ubuntu-latest + needs: [dist] + permissions: + id-token: write + environment: testpypi + steps: + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: { name: "dist", path: "dist" } + - uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0 + with: { repository-url: "https://test.pypi.org/legacy/" } From 0574f0aeb9ac66a0ac1fbd6bf7b78b41e4bb7ac8 Mon Sep 17 00:00:00 2001 From: Marko Kreen Date: Sat, 13 Jun 2026 22:35:18 +0300 Subject: [PATCH 4/4] ci: add dependabot to update actions --- .github/dependabot.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..db5d039 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,15 @@ +# +# https://docs.github.com/en/code-security/reference/supply-chain-security/dependabot-options-reference +# + +version: 2 + +updates: + + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "monthly" + cooldown: + default-days: 7 +