From 81f780c669b7b20a6d08cab904257f737f4512fc Mon Sep 17 00:00:00 2001 From: Tom Scholten Date: Sun, 5 Jul 2026 09:15:09 +0000 Subject: [PATCH 1/7] Add PEP 740 --- .github/workflows/merge.yml | 5 +++++ .github/workflows/verify.yml | 7 ++++++- CHANGELOG.md | 6 ++++++ pyproject.toml | 5 ++--- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/.github/workflows/merge.yml b/.github/workflows/merge.yml index 6a77fa7..6e132c7 100644 --- a/.github/workflows/merge.yml +++ b/.github/workflows/merge.yml @@ -70,6 +70,11 @@ jobs: run: | . venv/bin/activate uv build + - name: Generate PEP 740 Attestations + if: steps.check_package.outputs.should_publish == 'true' + uses: astral-sh/attest-action@v1 + with: + dist: dist/ - name: Publish distribution 📦 to PyPI run: | . venv/bin/activate diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index bbfa56f..b1a69ad 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -90,7 +90,7 @@ jobs: - commitcheck strategy: matrix: - python-version: ["3.13", "3.14"] + python-version: ["3.14"] steps: - name: Check out committed code uses: actions/checkout@v6 @@ -223,6 +223,11 @@ jobs: run: | . venv/bin/activate uv build + - name: Generate PEP 740 Attestations + if: steps.check_package.outputs.should_publish == 'true' + uses: astral-sh/attest-action@v1 + with: + dist: dist/ - name: Publish distribution 📦 to TestPyPI if: steps.check_package.outputs.should_publish == 'true' run: | diff --git a/CHANGELOG.md b/CHANGELOG.md index 44ec832..0eea2e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ All notable changes to this project will be documented in this file. +## [0.6.10] - 2026-07-05 + +### Added + +- PEP 740 digital attestations (astral workaround until uv publish handles this) + ## [0.6.9] - 2026-06-23 ### Added diff --git a/pyproject.toml b/pyproject.toml index 42cdaa1..74f7a5e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "airos" -version = "0.6.9" +version = "0.6.10a0" license = "MIT" description = "Ubiquiti airOS module(s) for Python 3." readme = "README.md" @@ -14,13 +14,12 @@ classifiers = [ "Intended Audience :: Developers", "Operating System :: OS Independent", "Programming Language :: Python :: 3.14", - "Programming Language :: Python :: 3.13", "Topic :: Home Automation", ] maintainers = [ { name = "CoMPaTech" } ] -requires-python = ">=3.13" +requires-python = ">=3.14" dependencies = [ "aiohttp>=3.8.0", "mashumaro>=3.14.0", From 8d7ddf47276fa0c96faa02f7ab3d0988a27f11fd Mon Sep 17 00:00:00 2001 From: Tom Scholten Date: Sun, 5 Jul 2026 09:22:20 +0000 Subject: [PATCH 2/7] Bump --- airos/helpers.py | 2 +- mypy.ini | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/airos/helpers.py b/airos/helpers.py index cb13604..0ca8f09 100644 --- a/airos/helpers.py +++ b/airos/helpers.py @@ -48,7 +48,7 @@ async def async_get_firmware_data( ): _LOGGER.exception("Error connecting to device at %s", host) raise - except (AirOSConnectionAuthenticationError, AirOSDataMissingError): + except AirOSConnectionAuthenticationError, AirOSDataMissingError: _LOGGER.exception("Authentication error connecting to device at %s", host) raise except AirOSKeyDataMissingError: diff --git a/mypy.ini b/mypy.ini index 67755f1..bfae963 100644 --- a/mypy.ini +++ b/mypy.ini @@ -1,5 +1,5 @@ [mypy] -python_version = 3.13 +python_version = 3.14 platform = linux plugins = pydantic.mypy, pydantic.v1.mypy show_error_codes = true @@ -41,4 +41,4 @@ disallow_untyped_calls = false disallow_untyped_decorators = false disallow_untyped_defs = false warn_return_any = false -warn_unreachable = false \ No newline at end of file +warn_unreachable = false From cab5192cf8358be6b8223785d2794024b5d3b231 Mon Sep 17 00:00:00 2001 From: Tom Scholten Date: Sun, 5 Jul 2026 09:26:14 +0000 Subject: [PATCH 3/7] Bump --- .github/workflows/merge.yml | 2 +- .github/workflows/verify.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/merge.yml b/.github/workflows/merge.yml index 6e132c7..2202c98 100644 --- a/.github/workflows/merge.yml +++ b/.github/workflows/merge.yml @@ -72,7 +72,7 @@ jobs: uv build - name: Generate PEP 740 Attestations if: steps.check_package.outputs.should_publish == 'true' - uses: astral-sh/attest-action@v1 + uses: astral-sh/attest-action@f589a42a7efb6fe400b4f400de60b4bc90390027 # v0.0.6 with: dist: dist/ - name: Publish distribution 📦 to PyPI diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index b1a69ad..751db12 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -225,7 +225,7 @@ jobs: uv build - name: Generate PEP 740 Attestations if: steps.check_package.outputs.should_publish == 'true' - uses: astral-sh/attest-action@v1 + uses: astral-sh/attest-action@f589a42a7efb6fe400b4f400de60b4bc90390027 # v0.0.6 with: dist: dist/ - name: Publish distribution 📦 to TestPyPI From 350b3871bcc4b51f7b28cfd457b15feece64ea70 Mon Sep 17 00:00:00 2001 From: Tom Scholten Date: Sun, 5 Jul 2026 09:38:18 +0000 Subject: [PATCH 4/7] Pin actions --- .github/workflows/merge.yml | 10 +++++----- .github/workflows/verify.yml | 38 ++++++++++++++++++------------------ pyproject.toml | 2 +- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/.github/workflows/merge.yml b/.github/workflows/merge.yml index 2202c98..77525f9 100644 --- a/.github/workflows/merge.yml +++ b/.github/workflows/merge.yml @@ -20,7 +20,7 @@ jobs: contents: read steps: - name: Check out committed code - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 - name: Get Package Version from pyproject.toml id: get_version run: | @@ -60,7 +60,7 @@ jobs: id-token: write steps: - name: Check out committed code - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 - name: Prepare uv run: | pip install uv @@ -74,7 +74,7 @@ jobs: if: steps.check_package.outputs.should_publish == 'true' uses: astral-sh/attest-action@f589a42a7efb6fe400b4f400de60b4bc90390027 # v0.0.6 with: - dist: dist/ + paths: dist/ - name: Publish distribution 📦 to PyPI run: | . venv/bin/activate @@ -89,10 +89,10 @@ jobs: contents: write steps: - name: Check out committed code - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 - name: Create release tag id: tag_release - uses: actions/github-script@v9 + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 with: script: | const version = process.env.PACKAGE_VERSION; diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index 751db12..d8e7ecd 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -20,7 +20,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out committed code - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 - name: Run ShellCheck uses: ludeeus/action-shellcheck@master @@ -29,11 +29,11 @@ jobs: name: Ruff check and force steps: - name: Check out committed code - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 with: persist-credentials: false - name: Use python - uses: actions/setup-python@v6 + uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 with: python-version: ${{ env.DEFAULT_PYTHON }} - name: Prepare python @@ -65,9 +65,9 @@ jobs: - ruff steps: - name: Check out committed code - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 - name: Use python - uses: actions/setup-python@v6 + uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 with: python-version: ${{ env.DEFAULT_PYTHON }} - name: Prepare python @@ -93,9 +93,9 @@ jobs: python-version: ["3.14"] steps: - name: Check out committed code - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 - name: Use python ${{matrix.python-version}} - uses: actions/setup-python@v6 + uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 with: python-version: ${{matrix.python-version}} - name: Prepare python @@ -109,7 +109,7 @@ jobs: . venv/bin/activate pytest --log-level info tests/ --cov='airos/' - name: Upload coverage artifact - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a with: name: coverage-${{ matrix.python-version }} path: .coverage @@ -124,11 +124,11 @@ jobs: - pytest steps: - name: Check out committed code - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 with: persist-credentials: false - name: Use python - uses: actions/setup-python@v6 + uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 with: python-version: ${{ env.DEFAULT_PYTHON }} - name: Prepare python @@ -152,9 +152,9 @@ jobs: - mypy steps: - name: Check out committed code - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 - name: Use python - uses: actions/setup-python@v6 + uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 with: python-version: ${{ env.DEFAULT_PYTHON }} - name: Prepare python @@ -164,7 +164,7 @@ jobs: . venv/bin/activate uv pip install -r requirements.txt -r requirements-test.txt - name: Download all coverage artifacts - uses: actions/download-artifact@v8 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c with: pattern: coverage-* merge-multiple: true @@ -176,7 +176,7 @@ jobs: coverage report --fail-under=80 coverage xml - name: Upload coverage to Codecov - uses: codecov/codecov-action@v6 + uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} slug: CoMPaTech/python-airos @@ -192,9 +192,9 @@ jobs: # - mypy steps: - name: Check out committed code - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 - name: Use python - uses: actions/setup-python@v6 + uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 with: python-version: ${{ env.DEFAULT_PYTHON }} - name: Prepare python @@ -227,7 +227,7 @@ jobs: if: steps.check_package.outputs.should_publish == 'true' uses: astral-sh/attest-action@f589a42a7efb6fe400b4f400de60b4bc90390027 # v0.0.6 with: - dist: dist/ + paths: dist/ - name: Publish distribution 📦 to TestPyPI if: steps.check_package.outputs.should_publish == 'true' run: | @@ -242,9 +242,9 @@ jobs: - coverage steps: - name: Check out committed code - uses: actions/checkout@v6 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 - name: Use python - uses: actions/setup-python@v6 + uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 with: python-version: ${{ env.DEFAULT_PYTHON }} - name: Prepare python diff --git a/pyproject.toml b/pyproject.toml index 74f7a5e..80f3026 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "airos" -version = "0.6.10a0" +version = "0.6.10a1" license = "MIT" description = "Ubiquiti airOS module(s) for Python 3." readme = "README.md" From 4ddf5afa96adc9a82ed70a8fe7cd403efbeac546 Mon Sep 17 00:00:00 2001 From: Tom Scholten Date: Sun, 5 Jul 2026 09:46:41 +0000 Subject: [PATCH 5/7] Bump --- .github/workflows/verify.yml | 1 + pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index d8e7ecd..1eddcea 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -186,6 +186,7 @@ jobs: runs-on: ubuntu-latest environment: testpypi permissions: + contents: read id-token: write needs: - coverage diff --git a/pyproject.toml b/pyproject.toml index 80f3026..8f0aca7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "airos" -version = "0.6.10a1" +version = "0.6.10a2" license = "MIT" description = "Ubiquiti airOS module(s) for Python 3." readme = "README.md" From cd237bf587491454723cb0257c612f13f06aa200 Mon Sep 17 00:00:00 2001 From: Tom Scholten Date: Sun, 5 Jul 2026 09:56:23 +0000 Subject: [PATCH 6/7] Bump --- .github/workflows/merge.yml | 2 -- .github/workflows/verify.yml | 2 -- pyproject.toml | 2 +- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/merge.yml b/.github/workflows/merge.yml index 77525f9..f3b862a 100644 --- a/.github/workflows/merge.yml +++ b/.github/workflows/merge.yml @@ -73,8 +73,6 @@ jobs: - name: Generate PEP 740 Attestations if: steps.check_package.outputs.should_publish == 'true' uses: astral-sh/attest-action@f589a42a7efb6fe400b4f400de60b4bc90390027 # v0.0.6 - with: - paths: dist/ - name: Publish distribution 📦 to PyPI run: | . venv/bin/activate diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index 1eddcea..e8a7190 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -227,8 +227,6 @@ jobs: - name: Generate PEP 740 Attestations if: steps.check_package.outputs.should_publish == 'true' uses: astral-sh/attest-action@f589a42a7efb6fe400b4f400de60b4bc90390027 # v0.0.6 - with: - paths: dist/ - name: Publish distribution 📦 to TestPyPI if: steps.check_package.outputs.should_publish == 'true' run: | diff --git a/pyproject.toml b/pyproject.toml index 8f0aca7..56515e3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "airos" -version = "0.6.10a2" +version = "0.6.10a3" license = "MIT" description = "Ubiquiti airOS module(s) for Python 3." readme = "README.md" From 54a587db1082513ebc1a81e53ca429136013e383 Mon Sep 17 00:00:00 2001 From: Tom Scholten Date: Sun, 5 Jul 2026 10:02:01 +0000 Subject: [PATCH 7/7] Version bump --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 56515e3..6d83b87 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "airos" -version = "0.6.10a3" +version = "0.6.10" license = "MIT" description = "Ubiquiti airOS module(s) for Python 3." readme = "README.md"