From 7551b98460555fc8e37265ff5ef567e4167cdf14 Mon Sep 17 00:00:00 2001 From: Thomas Harrison Date: Wed, 28 Jan 2026 22:16:14 -0500 Subject: [PATCH 01/10] uv setup --- .python-version | 1 + .vscode/settings.json | 6 ----- pyproject.toml | 19 ++++++++++++++ __init__.py => src/quickbake/__init__.py | 0 bake.py => src/quickbake/bake.py | 0 material.py => src/quickbake/material.py | 0 op.py => src/quickbake/op.py | 0 panel.py => src/quickbake/panel.py | 0 properties.py => src/quickbake/properties.py | 0 src/quickbake/py.typed | 0 tmp.py => src/quickbake/tmp.py | 0 uv.lock | 27 ++++++++++++++++++++ 12 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 .python-version create mode 100644 pyproject.toml rename __init__.py => src/quickbake/__init__.py (100%) rename bake.py => src/quickbake/bake.py (100%) rename material.py => src/quickbake/material.py (100%) rename op.py => src/quickbake/op.py (100%) rename panel.py => src/quickbake/panel.py (100%) rename properties.py => src/quickbake/properties.py (100%) create mode 100644 src/quickbake/py.typed rename tmp.py => src/quickbake/tmp.py (100%) create mode 100644 uv.lock diff --git a/.python-version b/.python-version new file mode 100644 index 0000000..e4fba21 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.12 diff --git a/.vscode/settings.json b/.vscode/settings.json index 6974f22..7a73a41 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,8 +1,2 @@ { - "python.autoComplete.extraPaths": [ - "/usr/share/blender/3.6/scripts/modules" - ], - "python.analysis.extraPaths": [ - "/usr/share/blender/3.6/scripts/modules" - ] } \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..1d08900 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,19 @@ +[project] +name = "quickbake" +version = "0.1.0" +description = "Add your description here" +readme = "README.md" +authors = [ + { name = "Thomas Harrison", email = "theharrisoncrafter@gmail.com" } +] +requires-python = ">=3.12" +dependencies = [] + +[build-system] +requires = ["uv_build>=0.9.27,<0.10.0"] +build-backend = "uv_build" + +[dependency-groups] +dev = [ + "fake-bpy-module>=20260128", +] diff --git a/__init__.py b/src/quickbake/__init__.py similarity index 100% rename from __init__.py rename to src/quickbake/__init__.py diff --git a/bake.py b/src/quickbake/bake.py similarity index 100% rename from bake.py rename to src/quickbake/bake.py diff --git a/material.py b/src/quickbake/material.py similarity index 100% rename from material.py rename to src/quickbake/material.py diff --git a/op.py b/src/quickbake/op.py similarity index 100% rename from op.py rename to src/quickbake/op.py diff --git a/panel.py b/src/quickbake/panel.py similarity index 100% rename from panel.py rename to src/quickbake/panel.py diff --git a/properties.py b/src/quickbake/properties.py similarity index 100% rename from properties.py rename to src/quickbake/properties.py diff --git a/src/quickbake/py.typed b/src/quickbake/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/tmp.py b/src/quickbake/tmp.py similarity index 100% rename from tmp.py rename to src/quickbake/tmp.py diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000..03fcc92 --- /dev/null +++ b/uv.lock @@ -0,0 +1,27 @@ +version = 1 +revision = 3 +requires-python = ">=3.12" + +[[package]] +name = "fake-bpy-module" +version = "20260128" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1f/75/4b888290501a90adf25d8d9b33ce208a5bd8f170d6795ac12cea4215b189/fake_bpy_module-20260128.tar.gz", hash = "sha256:15cec0640eb7876db332b785e41d82cd460e0d9b88d1f470e52a71c97e3fb796", size = 906262, upload-time = "2026-01-28T06:23:12.056Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/6a/0e7d282b4b3f1dc4a45662b7202b59a7e570be934572959da85887607bbb/fake_bpy_module-20260128-py3-none-any.whl", hash = "sha256:6ddcaa2b2e04af6008398335b79fab7a280ba1a0fb76d950290676da366e2d33", size = 1037509, upload-time = "2026-01-28T06:23:10.654Z" }, +] + +[[package]] +name = "quickbake" +version = "0.1.0" +source = { editable = "." } + +[package.dev-dependencies] +dev = [ + { name = "fake-bpy-module" }, +] + +[package.metadata] + +[package.metadata.requires-dev] +dev = [{ name = "fake-bpy-module", specifier = ">=20260128" }] From ec9bc1c45eb2518054040dd313bb499d46844467 Mon Sep 17 00:00:00 2001 From: Thomas Harrison Date: Thu, 29 Jan 2026 01:36:58 -0500 Subject: [PATCH 02/10] Setup ci, more repo cleanup --- .github/workflows/ci.yaml | 85 +++++++++++++ .vscode/extensions.json | 8 ++ .vscode/settings.json | 10 ++ Makefile | 16 +++ pyproject.toml | 32 ++++- src/quickbake/__init__.py | 54 ++++---- src/quickbake/bake.py | 4 +- src/quickbake/blender_manifest.toml | 69 ++++++++++ src/quickbake/material.py | 4 +- src/quickbake/op.py | 79 ++++++------ tests/test_hello_world.py | 18 +++ uv.lock | 187 +++++++++++++++++++++++++++- 12 files changed, 495 insertions(+), 71 deletions(-) create mode 100644 .github/workflows/ci.yaml create mode 100644 .vscode/extensions.json create mode 100644 Makefile create mode 100644 src/quickbake/blender_manifest.toml create mode 100644 tests/test_hello_world.py diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..ad1936b --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,85 @@ +name: ci + +on: + push: + branches: + - main + + pull_request: + types: + - opened + - reopened + - synchronize + +jobs: + lint_test: + name: Lint & Test + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Install Python + uses: actions/setup-python@v5 + with: + python-version-file: .python-version + + - name: Install the latest version of uv + uses: astral-sh/setup-uv@v7 + + - name: Install Dependencies + run: uv sync --frozen + + - name: Lint + run: uv run --frozen ruff check . + + # - name: Test + # TODO everything after pytest might not be needed + # run: uv run --frozen pytest tests --cov=src --cov-branch --cov-fail-under=100 + + build_release: + name: Build Release + runs-on: ubuntu-latest + if: github.ref == 'refs/heads/main' && !contains(github.event.head_commit.message, 'NO RELEASE') + + needs: lint_test + + permissions: + contents: write + + steps: + - uses: actions/checkout@v4 + + - name: Increment Version + uses: automas-dev/reusable-workflows/increment_version@main + id: version + + - name: Install Python + uses: actions/setup-python@v5 + with: + python-version-file: .python-version + + - name: Install UV + uses: astral-sh/setup-uv@v7 + + - name: Set Version + env: + VERSION: ${{ steps.version.outputs.version }} + run: | + uv version $VERSION + sed -i "s/DEV_BUILD/${VERSION}/g" src/quickbake/blender_manifest.toml + + - name: Create Archive + env: + VERSION: ${{ steps.version.outputs.version }} + working-directory: ./src/quickbake + run: | + zip quickbake-${VERSION}.zip * + + - name: Create Release + uses: ncipollo/release-action@v1.14.0 + with: + artifacts: src/quickbake/quickbake-${VERSION}.zip + makeLatest: true + generateReleaseNotes: true + tag: ${{ steps.version.outputs.version }} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..d460a6b --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + "recommendations": [ + "ms-python.python", + "charliermarsh.ruff", + "tamasfe.even-better-toml", + "streetsidesoftware.code-spell-checker", + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 7a73a41..f59f91a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,2 +1,12 @@ { + "python.testing.pytestArgs": [ + "tests", + "--cov=src", + "--cov=branch" + ], + "python.testing.unittestEnabled": false, + "python.testing.pytestEnabled": true, + "[python]": { + "editor.defaultFormatter": "charliermarsh.ruff" + } } \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..7aaeec1 --- /dev/null +++ b/Makefile @@ -0,0 +1,16 @@ + +setup: + uv sync + +checks: lint test + +lint: + uv run ruff check . + +format: + uv run ruff check --fix . + +test: + uv run pytest + +.PHONY: setup install checks lint format test diff --git a/pyproject.toml b/pyproject.toml index 1d08900..f13c3e9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,11 +1,9 @@ [project] name = "quickbake" version = "0.1.0" -description = "Add your description here" +description = "Fast baking for blender" readme = "README.md" -authors = [ - { name = "Thomas Harrison", email = "theharrisoncrafter@gmail.com" } -] +authors = [{ name = "Thomas Harrison", email = "theharrisoncrafter@gmail.com" }] requires-python = ">=3.12" dependencies = [] @@ -15,5 +13,31 @@ build-backend = "uv_build" [dependency-groups] dev = [ + "coverage>=7.13.2", "fake-bpy-module>=20260128", + "pytest>=9.0.2", + "pytest-cov>=7.0.0", + "ruff>=0.14.14", ] + +[tool.ruff.lint] +extend-select = ["I"] +ignore = ["F401"] + +[tool.ruff.format] +quote-style = "single" + +[tool.pytest.ini_options] +pythonpath = ["src"] +addopts = "--cov=src --cov-branch --cov-fail-under=100" + +[tool.coverage.run] +branch = false +source = ["src"] + +[tool.coverage.paths] +source = ["src"] + +[tool.coverage.report] +show_missing = true +fail_under = 100 diff --git a/src/quickbake/__init__.py b/src/quickbake/__init__.py index c373e8d..6163850 100644 --- a/src/quickbake/__init__.py +++ b/src/quickbake/__init__.py @@ -1,35 +1,41 @@ +import importlib.metadata + import bpy -from .properties import QuickBakeToolPropertyGroup -from .op import QuickBake_OT_bake -from .panel import QuickBake_PT_main +# from .op import QuickBake_OT_bake +# from .panel import QuickBake_PT_main +# from .properties import QuickBakeToolPropertyGroup + +version_str = importlib.metadata.version('quickbake').strip('v') +version_tuple = tuple(map(int, version_str.split('.'))) bl_info = { - "name": "Quick Bake", - "author": "Thomas Harrison", - "description": "", - "blender": (2, 80, 0), - "version": (0, 0, 1), - "location": "", - "warning": "", - "category": "Render" + 'name': 'Quick Bake', + 'author': 'Thomas Harrison', + 'description': '', + 'blender': (2, 80, 0), + 'version': version_tuple, + 'location': '', + 'warning': '', + 'category': 'Render', } -def register(): - bpy.utils.register_class(QuickBake_OT_bake) - bpy.utils.register_class(QuickBake_PT_main) - bpy.utils.register_class(QuickBakeToolPropertyGroup) - bpy.types.Scene.QuickBakeToolPropertyGroup = bpy.props.PointerProperty( - type=QuickBakeToolPropertyGroup) +# def register(): +# bpy.utils.register_class(QuickBake_OT_bake) +# bpy.utils.register_class(QuickBake_PT_main) +# bpy.utils.register_class(QuickBakeToolPropertyGroup) +# bpy.types.Scene.QuickBakeToolPropertyGroup = bpy.props.PointerProperty( +# type=QuickBakeToolPropertyGroup +# ) -def unregister(): - bpy.utils.unregister_class(QuickBake_OT_bake) - bpy.utils.unregister_class(QuickBake_PT_main) - bpy.utils.unregister_class(QuickBakeToolPropertyGroup) - del bpy.types.Scene.QuickBakeToolPropertyGroup +# def unregister(): +# bpy.utils.unregister_class(QuickBake_OT_bake) +# bpy.utils.unregister_class(QuickBake_PT_main) +# bpy.utils.unregister_class(QuickBakeToolPropertyGroup) +# del bpy.types.Scene.QuickBakeToolPropertyGroup -if __name__ == "__main__": - register() +# if __name__ == '__main__': +# register() diff --git a/src/quickbake/bake.py b/src/quickbake/bake.py index 00a5d94..26d0a2c 100644 --- a/src/quickbake/bake.py +++ b/src/quickbake/bake.py @@ -1,9 +1,9 @@ """Baking helper functions.""" -import bpy - import logging +import bpy + _l = logging.getLogger(__name__) diff --git a/src/quickbake/blender_manifest.toml b/src/quickbake/blender_manifest.toml new file mode 100644 index 0000000..18844be --- /dev/null +++ b/src/quickbake/blender_manifest.toml @@ -0,0 +1,69 @@ +schema_version = "1.0.0" + +# Example of manifest file for a Blender extension +# Change the values according to your extension +id = "quickbake" +# the value DEV_BUILD is replaced with the version string by ci +version = "DEV_BUILD" +name = "Fast baking for blender" +tagline = "This is another extension" +maintainer = "Thomas Harrison " +type = "add-on" + +# TODO replace with gh pages link +# Optional: link to documentation, support, source files, etc +website = "https://github.com/automas-dev/quickbake/" + +# Optional: tag list defined by Blender and server, see: +# https://docs.blender.org/manual/en/dev/advanced/extensions/tags.html +tags = ["3D View", "Bake"] + +blender_version_min = "2.28.0" +# # Optional: Blender version that the extension does not support, earlier versions are supported. +# # This can be omitted and defined later on the extensions platform if an issue is found. +# blender_version_max = "5.1.0" + +# License conforming to https://spdx.org/licenses/ (use "SPDX: prefix) +# https://docs.blender.org/manual/en/dev/advanced/extensions/licenses.html +license = ["SPDX:GPL-3.0-or-later"] +# # Optional: required by some licenses. +# copyright = [ +# "2002-2024 Developer Name", +# "1998 Company Name", +# ] + +# # Optional: list of supported platforms. If omitted, the extension will be available in all operating systems. +# platforms = ["windows-x64", "macos-arm64", "linux-x64"] +# # Other supported platforms: "windows-arm64", "macos-x64" + +# # Optional: bundle 3rd party Python modules. +# # https://docs.blender.org/manual/en/dev/advanced/extensions/python_wheels.html +# wheels = [ +# "./wheels/hexdump-3.3-py3-none-any.whl", +# "./wheels/jsmin-3.0.1-py3-none-any.whl", +# ] + +# Optional: add-ons can list which resources they will require: +# * files (for access of any filesystem operations) +# * network (for internet access) +# * clipboard (to read and/or write the system clipboard) +# * camera (to capture photos and videos) +# * microphone (to capture audio) +# +# If using network, remember to also check `bpy.app.online_access` +# https://docs.blender.org/manual/en/dev/advanced/extensions/addons.html#internet-access +# +# For each permission it is important to also specify the reason why it is required. +# Keep this a single short sentence without a period (.) at the end. +# For longer explanations use the documentation or detail page. + +[permissions] +files = "Export baked texture images to disk" +clipboard = "Copy and paste bone transforms" + +# Optional: advanced build settings. +# https://docs.blender.org/manual/en/dev/advanced/extensions/command_line_arguments.html#command-line-args-extension-build +[build] +# These are the default build excluded patterns. +# You only need to edit them if you want different options. +paths_exclude_pattern = ["__pycache__/", "/.git/", "/*.zip"] diff --git a/src/quickbake/material.py b/src/quickbake/material.py index 8d5b18e..46887ab 100644 --- a/src/quickbake/material.py +++ b/src/quickbake/material.py @@ -1,10 +1,10 @@ """Material helper functions.""" +import logging + import bpy from bpy_extras.node_shader_utils import PrincipledBSDFWrapper -import logging - _l = logging.getLogger(__name__) diff --git a/src/quickbake/op.py b/src/quickbake/op.py index 6ef9531..b89dbda 100644 --- a/src/quickbake/op.py +++ b/src/quickbake/op.py @@ -1,15 +1,17 @@ # import os +import logging + import bpy -from .bake import setup_bake_image, setup_bake_nodes, setup_bake_uv, cleanup_bake_nodes -from .material import setup_bake_material -import logging +from .bake import cleanup_bake_nodes, setup_bake_image, setup_bake_nodes, setup_bake_uv +from .material import setup_bake_material _l = logging.getLogger(__name__) class QuickBake_OT_bake(bpy.types.Operator): - '''Do the bake.''' + """Do the bake.""" + bl_idname = 'render.quickbake_bake' bl_label = 'Bake' bl_options = {'REGISTER', 'UNDO'} @@ -19,15 +21,11 @@ class QuickBake_OT_bake(bpy.types.Operator): @classmethod def poll(cls, context): obj: bpy.types.Object = context.active_object # type: ignore - return (obj is not None and obj.type == 'MESH') - - def create_material(self, - obj, - name, - uv_name, - diffuse=None, - roughness=None, - normal=None): + return obj is not None and obj.type == 'MESH' + + def create_material( + self, obj, name, uv_name, diffuse=None, roughness=None, normal=None + ): _l.info('Creating bake material %s for object %s', name, obj.name) mat = bpy.data.materials.get(name) @@ -36,8 +34,7 @@ def create_material(self, self.report({'INFO'}, 'Material already exists, skipping') return mat - mat = setup_bake_material( - obj, name, uv_name, diffuse, roughness, normal) + mat = setup_bake_material(obj, name, uv_name, diffuse, roughness, normal) return mat def execute(self, context): @@ -54,7 +51,8 @@ def execute(self, context): props = context.scene.QuickBakeToolPropertyGroup bake_nodes = setup_bake_nodes(obj) - bake_uv = setup_bake_uv(obj, props.bake_uv) + # bake_uv = setup_bake_uv(obj, props.bake_uv) + setup_bake_uv(obj, props.bake_uv) passes = [] if props.diffuse_enabled: @@ -87,13 +85,15 @@ def execute(self, context): for pass_type in passes: _l.info('Baking pass %s', pass_type) - img = setup_bake_image(obj, - bake_nodes, - props.bake_name, - props.bake_size, - pass_type.lower(), - props.reuse_tex, - pass_type == 'NORMAL') + img = setup_bake_image( + obj, + bake_nodes, + props.bake_name, + props.bake_size, + pass_type.lower(), + props.reuse_tex, + pass_type == 'NORMAL', + ) img_cache[pass_type] = img @@ -103,7 +103,7 @@ def execute(self, context): bpy.context.view_layer.objects.active = obj save_mode = 'INTERNAL' - filepath = '' + # filepath = '' # if props.save_img: # _l.debug('Saving image externally') @@ -116,14 +116,15 @@ def execute(self, context): self.report({'INFO'}, 'Save mode %s' % save_mode) - bpy.ops.object.bake(type=pass_type, - pass_filter={'COLOR'}, - uv_layer='bake_uv', - use_clear=True, - # save_mode='INTERNAL', - # save_mode=save_mode, - # filepath=filepath, - ) + bpy.ops.object.bake( + type=pass_type, + pass_filter={'COLOR'}, + uv_layer='bake_uv', + use_clear=True, + # save_mode='INTERNAL', + # save_mode=save_mode, + # filepath=filepath, + ) # if props.save_img: # _l.debug('Saving image externally %s', img.name) @@ -140,11 +141,13 @@ def execute(self, context): cleanup_bake_nodes(obj) if props.create_mat: - self.create_material(obj, - props.mat_name, - props.bake_uv, - img_cache.get('DIFFUSE'), - img_cache.get('ROUGHNESS'), - img_cache.get('NORMAL')) + self.create_material( + obj, + props.mat_name, + props.bake_uv, + img_cache.get('DIFFUSE'), + img_cache.get('ROUGHNESS'), + img_cache.get('NORMAL'), + ) return {'FINISHED'} diff --git a/tests/test_hello_world.py b/tests/test_hello_world.py new file mode 100644 index 0000000..9145cee --- /dev/null +++ b/tests/test_hello_world.py @@ -0,0 +1,18 @@ +import tomllib +from unittest.mock import patch + + +def test_import(): + import quickbake + + +# @patch('quickbake.bpy') +def test_version(): + import quickbake + + with open('pyproject.toml', 'rb') as f: + t = tomllib.load(f) + + expect_version = tuple(map(int, t['project']['version'].split('.'))) + + assert quickbake.version_tuple == expect_version diff --git a/uv.lock b/uv.lock index 03fcc92..1c2eba4 100644 --- a/uv.lock +++ b/uv.lock @@ -2,6 +2,89 @@ version = 1 revision = 3 requires-python = ">=3.12" +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "coverage" +version = "7.13.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ad/49/349848445b0e53660e258acbcc9b0d014895b6739237920886672240f84b/coverage-7.13.2.tar.gz", hash = "sha256:044c6951ec37146b72a50cc81ef02217d27d4c3640efd2640311393cbbf143d3", size = 826523, upload-time = "2026-01-25T13:00:04.889Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/39/e92a35f7800222d3f7b2cbb7bbc3b65672ae8d501cb31801b2d2bd7acdf1/coverage-7.13.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f106b2af193f965d0d3234f3f83fc35278c7fb935dfbde56ae2da3dd2c03b84d", size = 219142, upload-time = "2026-01-25T12:58:00.448Z" }, + { url = "https://files.pythonhosted.org/packages/45/7a/8bf9e9309c4c996e65c52a7c5a112707ecdd9fbaf49e10b5a705a402bbb4/coverage-7.13.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:78f45d21dc4d5d6bd29323f0320089ef7eae16e4bef712dff79d184fa7330af3", size = 219503, upload-time = "2026-01-25T12:58:02.451Z" }, + { url = "https://files.pythonhosted.org/packages/87/93/17661e06b7b37580923f3f12406ac91d78aeed293fb6da0b69cc7957582f/coverage-7.13.2-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:fae91dfecd816444c74531a9c3d6ded17a504767e97aa674d44f638107265b99", size = 251006, upload-time = "2026-01-25T12:58:04.059Z" }, + { url = "https://files.pythonhosted.org/packages/12/f0/f9e59fb8c310171497f379e25db060abef9fa605e09d63157eebec102676/coverage-7.13.2-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:264657171406c114787b441484de620e03d8f7202f113d62fcd3d9688baa3e6f", size = 253750, upload-time = "2026-01-25T12:58:05.574Z" }, + { url = "https://files.pythonhosted.org/packages/e5/b1/1935e31add2232663cf7edd8269548b122a7d100047ff93475dbaaae673e/coverage-7.13.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ae47d8dcd3ded0155afbb59c62bd8ab07ea0fd4902e1c40567439e6db9dcaf2f", size = 254862, upload-time = "2026-01-25T12:58:07.647Z" }, + { url = "https://files.pythonhosted.org/packages/af/59/b5e97071ec13df5f45da2b3391b6cdbec78ba20757bc92580a5b3d5fa53c/coverage-7.13.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8a0b33e9fd838220b007ce8f299114d406c1e8edb21336af4c97a26ecfd185aa", size = 251420, upload-time = "2026-01-25T12:58:09.309Z" }, + { url = "https://files.pythonhosted.org/packages/3f/75/9495932f87469d013dc515fb0ce1aac5fa97766f38f6b1a1deb1ee7b7f3a/coverage-7.13.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b3becbea7f3ce9a2d4d430f223ec15888e4deb31395840a79e916368d6004cce", size = 252786, upload-time = "2026-01-25T12:58:10.909Z" }, + { url = "https://files.pythonhosted.org/packages/6a/59/af550721f0eb62f46f7b8cb7e6f1860592189267b1c411a4e3a057caacee/coverage-7.13.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f819c727a6e6eeb8711e4ce63d78c620f69630a2e9d53bc95ca5379f57b6ba94", size = 250928, upload-time = "2026-01-25T12:58:12.449Z" }, + { url = "https://files.pythonhosted.org/packages/9b/b1/21b4445709aae500be4ab43bbcfb4e53dc0811c3396dcb11bf9f23fd0226/coverage-7.13.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:4f7b71757a3ab19f7ba286e04c181004c1d61be921795ee8ba6970fd0ec91da5", size = 250496, upload-time = "2026-01-25T12:58:14.047Z" }, + { url = "https://files.pythonhosted.org/packages/ba/b1/0f5d89dfe0392990e4f3980adbde3eb34885bc1effb2dc369e0bf385e389/coverage-7.13.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b7fc50d2afd2e6b4f6f2f403b70103d280a8e0cb35320cbbe6debcda02a1030b", size = 252373, upload-time = "2026-01-25T12:58:15.976Z" }, + { url = "https://files.pythonhosted.org/packages/01/c9/0cf1a6a57a9968cc049a6b896693faa523c638a5314b1fc374eb2b2ac904/coverage-7.13.2-cp312-cp312-win32.whl", hash = "sha256:292250282cf9bcf206b543d7608bda17ca6fc151f4cbae949fc7e115112fbd41", size = 221696, upload-time = "2026-01-25T12:58:17.517Z" }, + { url = "https://files.pythonhosted.org/packages/4d/05/d7540bf983f09d32803911afed135524570f8c47bb394bf6206c1dc3a786/coverage-7.13.2-cp312-cp312-win_amd64.whl", hash = "sha256:eeea10169fac01549a7921d27a3e517194ae254b542102267bef7a93ed38c40e", size = 222504, upload-time = "2026-01-25T12:58:19.115Z" }, + { url = "https://files.pythonhosted.org/packages/15/8b/1a9f037a736ced0a12aacf6330cdaad5008081142a7070bc58b0f7930cbc/coverage-7.13.2-cp312-cp312-win_arm64.whl", hash = "sha256:2a5b567f0b635b592c917f96b9a9cb3dbd4c320d03f4bf94e9084e494f2e8894", size = 221120, upload-time = "2026-01-25T12:58:21.334Z" }, + { url = "https://files.pythonhosted.org/packages/a7/f0/3d3eac7568ab6096ff23791a526b0048a1ff3f49d0e236b2af6fb6558e88/coverage-7.13.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ed75de7d1217cf3b99365d110975f83af0528c849ef5180a12fd91b5064df9d6", size = 219168, upload-time = "2026-01-25T12:58:23.376Z" }, + { url = "https://files.pythonhosted.org/packages/a3/a6/f8b5cfeddbab95fdef4dcd682d82e5dcff7a112ced57a959f89537ee9995/coverage-7.13.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:97e596de8fa9bada4d88fde64a3f4d37f1b6131e4faa32bad7808abc79887ddc", size = 219537, upload-time = "2026-01-25T12:58:24.932Z" }, + { url = "https://files.pythonhosted.org/packages/7b/e6/8d8e6e0c516c838229d1e41cadcec91745f4b1031d4db17ce0043a0423b4/coverage-7.13.2-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:68c86173562ed4413345410c9480a8d64864ac5e54a5cda236748031e094229f", size = 250528, upload-time = "2026-01-25T12:58:26.567Z" }, + { url = "https://files.pythonhosted.org/packages/8e/78/befa6640f74092b86961f957f26504c8fba3d7da57cc2ab7407391870495/coverage-7.13.2-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7be4d613638d678b2b3773b8f687537b284d7074695a43fe2fbbfc0e31ceaed1", size = 253132, upload-time = "2026-01-25T12:58:28.251Z" }, + { url = "https://files.pythonhosted.org/packages/9d/10/1630db1edd8ce675124a2ee0f7becc603d2bb7b345c2387b4b95c6907094/coverage-7.13.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d7f63ce526a96acd0e16c4af8b50b64334239550402fb1607ce6a584a6d62ce9", size = 254374, upload-time = "2026-01-25T12:58:30.294Z" }, + { url = "https://files.pythonhosted.org/packages/ed/1d/0d9381647b1e8e6d310ac4140be9c428a0277330991e0c35bdd751e338a4/coverage-7.13.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:406821f37f864f968e29ac14c3fccae0fec9fdeba48327f0341decf4daf92d7c", size = 250762, upload-time = "2026-01-25T12:58:32.036Z" }, + { url = "https://files.pythonhosted.org/packages/43/e4/5636dfc9a7c871ee8776af83ee33b4c26bc508ad6cee1e89b6419a366582/coverage-7.13.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ee68e5a4e3e5443623406b905db447dceddffee0dceb39f4e0cd9ec2a35004b5", size = 252502, upload-time = "2026-01-25T12:58:33.961Z" }, + { url = "https://files.pythonhosted.org/packages/02/2a/7ff2884d79d420cbb2d12fed6fff727b6d0ef27253140d3cdbbd03187ee0/coverage-7.13.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2ee0e58cca0c17dd9c6c1cdde02bb705c7b3fbfa5f3b0b5afeda20d4ebff8ef4", size = 250463, upload-time = "2026-01-25T12:58:35.529Z" }, + { url = "https://files.pythonhosted.org/packages/91/c0/ba51087db645b6c7261570400fc62c89a16278763f36ba618dc8657a187b/coverage-7.13.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:6e5bbb5018bf76a56aabdb64246b5288d5ae1b7d0dd4d0534fe86df2c2992d1c", size = 250288, upload-time = "2026-01-25T12:58:37.226Z" }, + { url = "https://files.pythonhosted.org/packages/03/07/44e6f428551c4d9faf63ebcefe49b30e5c89d1be96f6a3abd86a52da9d15/coverage-7.13.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a55516c68ef3e08e134e818d5e308ffa6b1337cc8b092b69b24287bf07d38e31", size = 252063, upload-time = "2026-01-25T12:58:38.821Z" }, + { url = "https://files.pythonhosted.org/packages/c2/67/35b730ad7e1859dd57e834d1bc06080d22d2f87457d53f692fce3f24a5a9/coverage-7.13.2-cp313-cp313-win32.whl", hash = "sha256:5b20211c47a8abf4abc3319d8ce2464864fa9f30c5fcaf958a3eed92f4f1fef8", size = 221716, upload-time = "2026-01-25T12:58:40.484Z" }, + { url = "https://files.pythonhosted.org/packages/0d/82/e5fcf5a97c72f45fc14829237a6550bf49d0ab882ac90e04b12a69db76b4/coverage-7.13.2-cp313-cp313-win_amd64.whl", hash = "sha256:14f500232e521201cf031549fb1ebdfc0a40f401cf519157f76c397e586c3beb", size = 222522, upload-time = "2026-01-25T12:58:43.247Z" }, + { url = "https://files.pythonhosted.org/packages/b1/f1/25d7b2f946d239dd2d6644ca2cc060d24f97551e2af13b6c24c722ae5f97/coverage-7.13.2-cp313-cp313-win_arm64.whl", hash = "sha256:9779310cb5a9778a60c899f075a8514c89fa6d10131445c2207fc893e0b14557", size = 221145, upload-time = "2026-01-25T12:58:45Z" }, + { url = "https://files.pythonhosted.org/packages/9e/f7/080376c029c8f76fadfe43911d0daffa0cbdc9f9418a0eead70c56fb7f4b/coverage-7.13.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:e64fa5a1e41ce5df6b547cbc3d3699381c9e2c2c369c67837e716ed0f549d48e", size = 219861, upload-time = "2026-01-25T12:58:46.586Z" }, + { url = "https://files.pythonhosted.org/packages/42/11/0b5e315af5ab35f4c4a70e64d3314e4eec25eefc6dec13be3a7d5ffe8ac5/coverage-7.13.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b01899e82a04085b6561eb233fd688474f57455e8ad35cd82286463ba06332b7", size = 220207, upload-time = "2026-01-25T12:58:48.277Z" }, + { url = "https://files.pythonhosted.org/packages/b2/0c/0874d0318fb1062117acbef06a09cf8b63f3060c22265adaad24b36306b7/coverage-7.13.2-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:838943bea48be0e2768b0cf7819544cdedc1bbb2f28427eabb6eb8c9eb2285d3", size = 261504, upload-time = "2026-01-25T12:58:49.904Z" }, + { url = "https://files.pythonhosted.org/packages/83/5e/1cd72c22ecb30751e43a72f40ba50fcef1b7e93e3ea823bd9feda8e51f9a/coverage-7.13.2-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:93d1d25ec2b27e90bcfef7012992d1f5121b51161b8bffcda756a816cf13c2c3", size = 263582, upload-time = "2026-01-25T12:58:51.582Z" }, + { url = "https://files.pythonhosted.org/packages/9b/da/8acf356707c7a42df4d0657020308e23e5a07397e81492640c186268497c/coverage-7.13.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:93b57142f9621b0d12349c43fc7741fe578e4bc914c1e5a54142856cfc0bf421", size = 266008, upload-time = "2026-01-25T12:58:53.234Z" }, + { url = "https://files.pythonhosted.org/packages/41/41/ea1730af99960309423c6ea8d6a4f1fa5564b2d97bd1d29dda4b42611f04/coverage-7.13.2-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f06799ae1bdfff7ccb8665d75f8291c69110ba9585253de254688aa8a1ccc6c5", size = 260762, upload-time = "2026-01-25T12:58:55.372Z" }, + { url = "https://files.pythonhosted.org/packages/22/fa/02884d2080ba71db64fdc127b311db60e01fe6ba797d9c8363725e39f4d5/coverage-7.13.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:7f9405ab4f81d490811b1d91c7a20361135a2df4c170e7f0b747a794da5b7f23", size = 263571, upload-time = "2026-01-25T12:58:57.52Z" }, + { url = "https://files.pythonhosted.org/packages/d2/6b/4083aaaeba9b3112f55ac57c2ce7001dc4d8fa3fcc228a39f09cc84ede27/coverage-7.13.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:f9ab1d5b86f8fbc97a5b3cd6280a3fd85fef3b028689d8a2c00918f0d82c728c", size = 261200, upload-time = "2026-01-25T12:58:59.255Z" }, + { url = "https://files.pythonhosted.org/packages/e9/d2/aea92fa36d61955e8c416ede9cf9bf142aa196f3aea214bb67f85235a050/coverage-7.13.2-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:f674f59712d67e841525b99e5e2b595250e39b529c3bda14764e4f625a3fa01f", size = 260095, upload-time = "2026-01-25T12:59:01.066Z" }, + { url = "https://files.pythonhosted.org/packages/0d/ae/04ffe96a80f107ea21b22b2367175c621da920063260a1c22f9452fd7866/coverage-7.13.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c6cadac7b8ace1ba9144feb1ae3cb787a6065ba6d23ffc59a934b16406c26573", size = 262284, upload-time = "2026-01-25T12:59:02.802Z" }, + { url = "https://files.pythonhosted.org/packages/1c/7a/6f354dcd7dfc41297791d6fb4e0d618acb55810bde2c1fd14b3939e05c2b/coverage-7.13.2-cp313-cp313t-win32.whl", hash = "sha256:14ae4146465f8e6e6253eba0cccd57423e598a4cb925958b240c805300918343", size = 222389, upload-time = "2026-01-25T12:59:04.563Z" }, + { url = "https://files.pythonhosted.org/packages/8d/d5/080ad292a4a3d3daf411574be0a1f56d6dee2c4fdf6b005342be9fac807f/coverage-7.13.2-cp313-cp313t-win_amd64.whl", hash = "sha256:9074896edd705a05769e3de0eac0a8388484b503b68863dd06d5e473f874fd47", size = 223450, upload-time = "2026-01-25T12:59:06.677Z" }, + { url = "https://files.pythonhosted.org/packages/88/96/df576fbacc522e9fb8d1c4b7a7fc62eb734be56e2cba1d88d2eabe08ea3f/coverage-7.13.2-cp313-cp313t-win_arm64.whl", hash = "sha256:69e526e14f3f854eda573d3cf40cffd29a1a91c684743d904c33dbdcd0e0f3e7", size = 221707, upload-time = "2026-01-25T12:59:08.363Z" }, + { url = "https://files.pythonhosted.org/packages/55/53/1da9e51a0775634b04fcc11eb25c002fc58ee4f92ce2e8512f94ac5fc5bf/coverage-7.13.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:387a825f43d680e7310e6f325b2167dd093bc8ffd933b83e9aa0983cf6e0a2ef", size = 219213, upload-time = "2026-01-25T12:59:11.909Z" }, + { url = "https://files.pythonhosted.org/packages/46/35/b3caac3ebbd10230fea5a33012b27d19e999a17c9285c4228b4b2e35b7da/coverage-7.13.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:f0d7fea9d8e5d778cd5a9e8fc38308ad688f02040e883cdc13311ef2748cb40f", size = 219549, upload-time = "2026-01-25T12:59:13.638Z" }, + { url = "https://files.pythonhosted.org/packages/76/9c/e1cf7def1bdc72c1907e60703983a588f9558434a2ff94615747bd73c192/coverage-7.13.2-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:e080afb413be106c95c4ee96b4fffdc9e2fa56a8bbf90b5c0918e5c4449412f5", size = 250586, upload-time = "2026-01-25T12:59:15.808Z" }, + { url = "https://files.pythonhosted.org/packages/ba/49/f54ec02ed12be66c8d8897270505759e057b0c68564a65c429ccdd1f139e/coverage-7.13.2-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a7fc042ba3c7ce25b8a9f097eb0f32a5ce1ccdb639d9eec114e26def98e1f8a4", size = 253093, upload-time = "2026-01-25T12:59:17.491Z" }, + { url = "https://files.pythonhosted.org/packages/fb/5e/aaf86be3e181d907e23c0f61fccaeb38de8e6f6b47aed92bf57d8fc9c034/coverage-7.13.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d0ba505e021557f7f8173ee8cd6b926373d8653e5ff7581ae2efce1b11ef4c27", size = 254446, upload-time = "2026-01-25T12:59:19.752Z" }, + { url = "https://files.pythonhosted.org/packages/28/c8/a5fa01460e2d75b0c853b392080d6829d3ca8b5ab31e158fa0501bc7c708/coverage-7.13.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7de326f80e3451bd5cc7239ab46c73ddb658fe0b7649476bc7413572d36cd548", size = 250615, upload-time = "2026-01-25T12:59:21.928Z" }, + { url = "https://files.pythonhosted.org/packages/86/0b/6d56315a55f7062bb66410732c24879ccb2ec527ab6630246de5fe45a1df/coverage-7.13.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:abaea04f1e7e34841d4a7b343904a3f59481f62f9df39e2cd399d69a187a9660", size = 252452, upload-time = "2026-01-25T12:59:23.592Z" }, + { url = "https://files.pythonhosted.org/packages/30/19/9bc550363ebc6b0ea121977ee44d05ecd1e8bf79018b8444f1028701c563/coverage-7.13.2-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:9f93959ee0c604bccd8e0697be21de0887b1f73efcc3aa73a3ec0fd13feace92", size = 250418, upload-time = "2026-01-25T12:59:25.392Z" }, + { url = "https://files.pythonhosted.org/packages/1f/53/580530a31ca2f0cc6f07a8f2ab5460785b02bb11bdf815d4c4d37a4c5169/coverage-7.13.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:13fe81ead04e34e105bf1b3c9f9cdf32ce31736ee5d90a8d2de02b9d3e1bcb82", size = 250231, upload-time = "2026-01-25T12:59:27.888Z" }, + { url = "https://files.pythonhosted.org/packages/e2/42/dd9093f919dc3088cb472893651884bd675e3df3d38a43f9053656dca9a2/coverage-7.13.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d6d16b0f71120e365741bca2cb473ca6fe38930bc5431c5e850ba949f708f892", size = 251888, upload-time = "2026-01-25T12:59:29.636Z" }, + { url = "https://files.pythonhosted.org/packages/fa/a6/0af4053e6e819774626e133c3d6f70fae4d44884bfc4b126cb647baee8d3/coverage-7.13.2-cp314-cp314-win32.whl", hash = "sha256:9b2f4714bb7d99ba3790ee095b3b4ac94767e1347fe424278a0b10acb3ff04fe", size = 221968, upload-time = "2026-01-25T12:59:31.424Z" }, + { url = "https://files.pythonhosted.org/packages/c4/cc/5aff1e1f80d55862442855517bb8ad8ad3a68639441ff6287dde6a58558b/coverage-7.13.2-cp314-cp314-win_amd64.whl", hash = "sha256:e4121a90823a063d717a96e0a0529c727fb31ea889369a0ee3ec00ed99bf6859", size = 222783, upload-time = "2026-01-25T12:59:33.118Z" }, + { url = "https://files.pythonhosted.org/packages/de/20/09abafb24f84b3292cc658728803416c15b79f9ee5e68d25238a895b07d9/coverage-7.13.2-cp314-cp314-win_arm64.whl", hash = "sha256:6873f0271b4a15a33e7590f338d823f6f66f91ed147a03938d7ce26efd04eee6", size = 221348, upload-time = "2026-01-25T12:59:34.939Z" }, + { url = "https://files.pythonhosted.org/packages/b6/60/a3820c7232db63be060e4019017cd3426751c2699dab3c62819cdbcea387/coverage-7.13.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:f61d349f5b7cd95c34017f1927ee379bfbe9884300d74e07cf630ccf7a610c1b", size = 219950, upload-time = "2026-01-25T12:59:36.624Z" }, + { url = "https://files.pythonhosted.org/packages/fd/37/e4ef5975fdeb86b1e56db9a82f41b032e3d93a840ebaf4064f39e770d5c5/coverage-7.13.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a43d34ce714f4ca674c0d90beb760eb05aad906f2c47580ccee9da8fe8bfb417", size = 220209, upload-time = "2026-01-25T12:59:38.339Z" }, + { url = "https://files.pythonhosted.org/packages/54/df/d40e091d00c51adca1e251d3b60a8b464112efa3004949e96a74d7c19a64/coverage-7.13.2-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:bff1b04cb9d4900ce5c56c4942f047dc7efe57e2608cb7c3c8936e9970ccdbee", size = 261576, upload-time = "2026-01-25T12:59:40.446Z" }, + { url = "https://files.pythonhosted.org/packages/c5/44/5259c4bed54e3392e5c176121af9f71919d96dde853386e7730e705f3520/coverage-7.13.2-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6ae99e4560963ad8e163e819e5d77d413d331fd00566c1e0856aa252303552c1", size = 263704, upload-time = "2026-01-25T12:59:42.346Z" }, + { url = "https://files.pythonhosted.org/packages/16/bd/ae9f005827abcbe2c70157459ae86053971c9fa14617b63903abbdce26d9/coverage-7.13.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e79a8c7d461820257d9aa43716c4efc55366d7b292e46b5b37165be1d377405d", size = 266109, upload-time = "2026-01-25T12:59:44.073Z" }, + { url = "https://files.pythonhosted.org/packages/a2/c0/8e279c1c0f5b1eaa3ad9b0fb7a5637fc0379ea7d85a781c0fe0bb3cfc2ab/coverage-7.13.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:060ee84f6a769d40c492711911a76811b4befb6fba50abb450371abb720f5bd6", size = 260686, upload-time = "2026-01-25T12:59:45.804Z" }, + { url = "https://files.pythonhosted.org/packages/b2/47/3a8112627e9d863e7cddd72894171c929e94491a597811725befdcd76bce/coverage-7.13.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:3bca209d001fd03ea2d978f8a4985093240a355c93078aee3f799852c23f561a", size = 263568, upload-time = "2026-01-25T12:59:47.929Z" }, + { url = "https://files.pythonhosted.org/packages/92/bc/7ea367d84afa3120afc3ce6de294fd2dcd33b51e2e7fbe4bbfd200f2cb8c/coverage-7.13.2-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:6b8092aa38d72f091db61ef83cb66076f18f02da3e1a75039a4f218629600e04", size = 261174, upload-time = "2026-01-25T12:59:49.717Z" }, + { url = "https://files.pythonhosted.org/packages/33/b7/f1092dcecb6637e31cc2db099581ee5c61a17647849bae6b8261a2b78430/coverage-7.13.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:4a3158dc2dcce5200d91ec28cd315c999eebff355437d2765840555d765a6e5f", size = 260017, upload-time = "2026-01-25T12:59:51.463Z" }, + { url = "https://files.pythonhosted.org/packages/2b/cd/f3d07d4b95fbe1a2ef0958c15da614f7e4f557720132de34d2dc3aa7e911/coverage-7.13.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3973f353b2d70bd9796cc12f532a05945232ccae966456c8ed7034cb96bbfd6f", size = 262337, upload-time = "2026-01-25T12:59:53.407Z" }, + { url = "https://files.pythonhosted.org/packages/e0/db/b0d5b2873a07cb1e06a55d998697c0a5a540dcefbf353774c99eb3874513/coverage-7.13.2-cp314-cp314t-win32.whl", hash = "sha256:79f6506a678a59d4ded048dc72f1859ebede8ec2b9a2d509ebe161f01c2879d3", size = 222749, upload-time = "2026-01-25T12:59:56.316Z" }, + { url = "https://files.pythonhosted.org/packages/e5/2f/838a5394c082ac57d85f57f6aba53093b30d9089781df72412126505716f/coverage-7.13.2-cp314-cp314t-win_amd64.whl", hash = "sha256:196bfeabdccc5a020a57d5a368c681e3a6ceb0447d153aeccc1ab4d70a5032ba", size = 223857, upload-time = "2026-01-25T12:59:58.201Z" }, + { url = "https://files.pythonhosted.org/packages/44/d4/b608243e76ead3a4298824b50922b89ef793e50069ce30316a65c1b4d7ef/coverage-7.13.2-cp314-cp314t-win_arm64.whl", hash = "sha256:69269ab58783e090bfbf5b916ab3d188126e22d6070bbfc93098fdd474ef937c", size = 221881, upload-time = "2026-01-25T13:00:00.449Z" }, + { url = "https://files.pythonhosted.org/packages/d2/db/d291e30fdf7ea617a335531e72294e0c723356d7fdde8fba00610a76bda9/coverage-7.13.2-py3-none-any.whl", hash = "sha256:40ce1ea1e25125556d8e76bd0b61500839a07944cc287ac21d5626f3e620cad5", size = 210943, upload-time = "2026-01-25T13:00:02.388Z" }, +] + [[package]] name = "fake-bpy-module" version = "20260128" @@ -11,6 +94,72 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/90/6a/0e7d282b4b3f1dc4a45662b7202b59a7e570be934572959da85887607bbb/fake_bpy_module-20260128-py3-none-any.whl", hash = "sha256:6ddcaa2b2e04af6008398335b79fab7a280ba1a0fb76d950290676da366e2d33", size = 1037509, upload-time = "2026-01-28T06:23:10.654Z" }, ] +[[package]] +name = "iniconfig" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, +] + +[[package]] +name = "packaging" +version = "26.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/65/ee/299d360cdc32edc7d2cf530f3accf79c4fca01e96ffc950d8a52213bd8e4/packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4", size = 143416, upload-time = "2026-01-21T20:50:39.064Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366, upload-time = "2026-01-21T20:50:37.788Z" }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + +[[package]] +name = "pygments" +version = "2.19.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, +] + +[[package]] +name = "pytest" +version = "9.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size = 1568901, upload-time = "2025-12-06T21:30:51.014Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl", hash = "sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b", size = 374801, upload-time = "2025-12-06T21:30:49.154Z" }, +] + +[[package]] +name = "pytest-cov" +version = "7.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "coverage" }, + { name = "pluggy" }, + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5e/f7/c933acc76f5208b3b00089573cf6a2bc26dc80a8aece8f52bb7d6b1855ca/pytest_cov-7.0.0.tar.gz", hash = "sha256:33c97eda2e049a0c5298e91f519302a1334c26ac65c1a483d6206fd458361af1", size = 54328, upload-time = "2025-09-09T10:57:02.113Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl", hash = "sha256:3b8e9558b16cc1479da72058bdecf8073661c7f57f7d3c5f22a1c23507f2d861", size = 22424, upload-time = "2025-09-09T10:57:00.695Z" }, +] + [[package]] name = "quickbake" version = "0.1.0" @@ -18,10 +167,46 @@ source = { editable = "." } [package.dev-dependencies] dev = [ + { name = "coverage" }, { name = "fake-bpy-module" }, + { name = "pytest" }, + { name = "pytest-cov" }, + { name = "ruff" }, ] [package.metadata] [package.metadata.requires-dev] -dev = [{ name = "fake-bpy-module", specifier = ">=20260128" }] +dev = [ + { name = "coverage", specifier = ">=7.13.2" }, + { name = "fake-bpy-module", specifier = ">=20260128" }, + { name = "pytest", specifier = ">=9.0.2" }, + { name = "pytest-cov", specifier = ">=7.0.0" }, + { name = "ruff", specifier = ">=0.14.14" }, +] + +[[package]] +name = "ruff" +version = "0.14.14" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2e/06/f71e3a86b2df0dfa2d2f72195941cd09b44f87711cb7fa5193732cb9a5fc/ruff-0.14.14.tar.gz", hash = "sha256:2d0f819c9a90205f3a867dbbd0be083bee9912e170fd7d9704cc8ae45824896b", size = 4515732, upload-time = "2026-01-22T22:30:17.527Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/89/20a12e97bc6b9f9f68343952da08a8099c57237aef953a56b82711d55edd/ruff-0.14.14-py3-none-linux_armv6l.whl", hash = "sha256:7cfe36b56e8489dee8fbc777c61959f60ec0f1f11817e8f2415f429552846aed", size = 10467650, upload-time = "2026-01-22T22:30:08.578Z" }, + { url = "https://files.pythonhosted.org/packages/a3/b1/c5de3fd2d5a831fcae21beda5e3589c0ba67eec8202e992388e4b17a6040/ruff-0.14.14-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6006a0082336e7920b9573ef8a7f52eec837add1265cc74e04ea8a4368cd704c", size = 10883245, upload-time = "2026-01-22T22:30:04.155Z" }, + { url = "https://files.pythonhosted.org/packages/b8/7c/3c1db59a10e7490f8f6f8559d1db8636cbb13dccebf18686f4e3c9d7c772/ruff-0.14.14-py3-none-macosx_11_0_arm64.whl", hash = "sha256:026c1d25996818f0bf498636686199d9bd0d9d6341c9c2c3b62e2a0198b758de", size = 10231273, upload-time = "2026-01-22T22:30:34.642Z" }, + { url = "https://files.pythonhosted.org/packages/a1/6e/5e0e0d9674be0f8581d1f5e0f0a04761203affce3232c1a1189d0e3b4dad/ruff-0.14.14-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f666445819d31210b71e0a6d1c01e24447a20b85458eea25a25fe8142210ae0e", size = 10585753, upload-time = "2026-01-22T22:30:31.781Z" }, + { url = "https://files.pythonhosted.org/packages/23/09/754ab09f46ff1884d422dc26d59ba18b4e5d355be147721bb2518aa2a014/ruff-0.14.14-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3c0f18b922c6d2ff9a5e6c3ee16259adc513ca775bcf82c67ebab7cbd9da5bc8", size = 10286052, upload-time = "2026-01-22T22:30:24.827Z" }, + { url = "https://files.pythonhosted.org/packages/c8/cc/e71f88dd2a12afb5f50733851729d6b571a7c3a35bfdb16c3035132675a0/ruff-0.14.14-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1629e67489c2dea43e8658c3dba659edbfd87361624b4040d1df04c9740ae906", size = 11043637, upload-time = "2026-01-22T22:30:13.239Z" }, + { url = "https://files.pythonhosted.org/packages/67/b2/397245026352494497dac935d7f00f1468c03a23a0c5db6ad8fc49ca3fb2/ruff-0.14.14-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:27493a2131ea0f899057d49d303e4292b2cae2bb57253c1ed1f256fbcd1da480", size = 12194761, upload-time = "2026-01-22T22:30:22.542Z" }, + { url = "https://files.pythonhosted.org/packages/5b/06/06ef271459f778323112c51b7587ce85230785cd64e91772034ddb88f200/ruff-0.14.14-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:01ff589aab3f5b539e35db38425da31a57521efd1e4ad1ae08fc34dbe30bd7df", size = 12005701, upload-time = "2026-01-22T22:30:20.499Z" }, + { url = "https://files.pythonhosted.org/packages/41/d6/99364514541cf811ccc5ac44362f88df66373e9fec1b9d1c4cc830593fe7/ruff-0.14.14-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1cc12d74eef0f29f51775f5b755913eb523546b88e2d733e1d701fe65144e89b", size = 11282455, upload-time = "2026-01-22T22:29:59.679Z" }, + { url = "https://files.pythonhosted.org/packages/ca/71/37daa46f89475f8582b7762ecd2722492df26421714a33e72ccc9a84d7a5/ruff-0.14.14-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb8481604b7a9e75eff53772496201690ce2687067e038b3cc31aaf16aa0b974", size = 11215882, upload-time = "2026-01-22T22:29:57.032Z" }, + { url = "https://files.pythonhosted.org/packages/2c/10/a31f86169ec91c0705e618443ee74ede0bdd94da0a57b28e72db68b2dbac/ruff-0.14.14-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:14649acb1cf7b5d2d283ebd2f58d56b75836ed8c6f329664fa91cdea19e76e66", size = 11180549, upload-time = "2026-01-22T22:30:27.175Z" }, + { url = "https://files.pythonhosted.org/packages/fd/1e/c723f20536b5163adf79bdd10c5f093414293cdf567eed9bdb7b83940f3f/ruff-0.14.14-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e8058d2145566510790eab4e2fad186002e288dec5e0d343a92fe7b0bc1b3e13", size = 10543416, upload-time = "2026-01-22T22:30:01.964Z" }, + { url = "https://files.pythonhosted.org/packages/3e/34/8a84cea7e42c2d94ba5bde1d7a4fae164d6318f13f933d92da6d7c2041ff/ruff-0.14.14-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:e651e977a79e4c758eb807f0481d673a67ffe53cfa92209781dfa3a996cf8412", size = 10285491, upload-time = "2026-01-22T22:30:29.51Z" }, + { url = "https://files.pythonhosted.org/packages/55/ef/b7c5ea0be82518906c978e365e56a77f8de7678c8bb6651ccfbdc178c29f/ruff-0.14.14-py3-none-musllinux_1_2_i686.whl", hash = "sha256:cc8b22da8d9d6fdd844a68ae937e2a0adf9b16514e9a97cc60355e2d4b219fc3", size = 10733525, upload-time = "2026-01-22T22:30:06.499Z" }, + { url = "https://files.pythonhosted.org/packages/6a/5b/aaf1dfbcc53a2811f6cc0a1759de24e4b03e02ba8762daabd9b6bd8c59e3/ruff-0.14.14-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:16bc890fb4cc9781bb05beb5ab4cd51be9e7cb376bf1dd3580512b24eb3fda2b", size = 11315626, upload-time = "2026-01-22T22:30:36.848Z" }, + { url = "https://files.pythonhosted.org/packages/2c/aa/9f89c719c467dfaf8ad799b9bae0df494513fb21d31a6059cb5870e57e74/ruff-0.14.14-py3-none-win32.whl", hash = "sha256:b530c191970b143375b6a68e6f743800b2b786bbcf03a7965b06c4bf04568167", size = 10502442, upload-time = "2026-01-22T22:30:38.93Z" }, + { url = "https://files.pythonhosted.org/packages/87/44/90fa543014c45560cae1fffc63ea059fb3575ee6e1cb654562197e5d16fb/ruff-0.14.14-py3-none-win_amd64.whl", hash = "sha256:3dde1435e6b6fe5b66506c1dff67a421d0b7f6488d466f651c07f4cab3bf20fd", size = 11630486, upload-time = "2026-01-22T22:30:10.852Z" }, + { url = "https://files.pythonhosted.org/packages/9e/6a/40fee331a52339926a92e17ae748827270b288a35ef4a15c9c8f2ec54715/ruff-0.14.14-py3-none-win_arm64.whl", hash = "sha256:56e6981a98b13a32236a72a8da421d7839221fa308b223b9283312312e5ac76c", size = 10920448, upload-time = "2026-01-22T22:30:15.417Z" }, +] From 174b7241bd3b38ea6c4d52930a1d4ceea56635d8 Mon Sep 17 00:00:00 2001 From: Thomas Harrison Date: Thu, 29 Jan 2026 01:38:16 -0500 Subject: [PATCH 03/10] tmp create release on dev for testing --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ad1936b..80b5046 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -40,7 +40,7 @@ jobs: build_release: name: Build Release runs-on: ubuntu-latest - if: github.ref == 'refs/heads/main' && !contains(github.event.head_commit.message, 'NO RELEASE') + # if: github.ref == 'refs/heads/main' && !contains(github.event.head_commit.message, 'NO RELEASE') needs: lint_test From 9a04c120bb562a1a3a616868780ffba408ba33fe Mon Sep 17 00:00:00 2001 From: Thomas Harrison Date: Thu, 29 Jan 2026 01:42:18 -0500 Subject: [PATCH 04/10] Use hard coded version for testing --- .github/workflows/ci.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 80b5046..5234d8a 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -64,14 +64,16 @@ jobs: - name: Set Version env: - VERSION: ${{ steps.version.outputs.version }} + # VERSION: ${{ steps.version.outputs.version }} + VERSION: "0.0.0" run: | uv version $VERSION sed -i "s/DEV_BUILD/${VERSION}/g" src/quickbake/blender_manifest.toml - name: Create Archive env: - VERSION: ${{ steps.version.outputs.version }} + # VERSION: ${{ steps.version.outputs.version }} + VERSION: "0.0.0" working-directory: ./src/quickbake run: | zip quickbake-${VERSION}.zip * From 10ba4815b52d49a2a99c51c38d49ee10b3495ad8 Mon Sep 17 00:00:00 2001 From: Thomas Harrison Date: Thu, 29 Jan 2026 01:44:34 -0500 Subject: [PATCH 05/10] Add version to env --- .github/workflows/ci.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 5234d8a..811f0a0 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -80,8 +80,11 @@ jobs: - name: Create Release uses: ncipollo/release-action@v1.14.0 + env: + # VERSION: ${{ steps.version.outputs.version }} + VERSION: "0.0.0" with: artifacts: src/quickbake/quickbake-${VERSION}.zip makeLatest: true generateReleaseNotes: true - tag: ${{ steps.version.outputs.version }} + tag: $VERSION From 05a10cdc0e39b3fb37e88ab371edd7380b4a4d6e Mon Sep 17 00:00:00 2001 From: Thomas Harrison Date: Thu, 29 Jan 2026 01:45:34 -0500 Subject: [PATCH 06/10] Double brace --- .github/workflows/ci.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 811f0a0..ba5ff52 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -84,7 +84,7 @@ jobs: # VERSION: ${{ steps.version.outputs.version }} VERSION: "0.0.0" with: - artifacts: src/quickbake/quickbake-${VERSION}.zip + artifacts: src/quickbake/quickbake-${{ VERSION }}.zip makeLatest: true generateReleaseNotes: true - tag: $VERSION + tag: ${{ VERSION }} From 73121927d2cb0608ebecd151a793bd53a8a18852 Mon Sep 17 00:00:00 2001 From: Thomas Harrison Date: Thu, 29 Jan 2026 01:47:02 -0500 Subject: [PATCH 07/10] No var --- .github/workflows/ci.yaml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ba5ff52..1a4ba6f 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -42,7 +42,7 @@ jobs: runs-on: ubuntu-latest # if: github.ref == 'refs/heads/main' && !contains(github.event.head_commit.message, 'NO RELEASE') - needs: lint_test + # needs: lint_test permissions: contents: write @@ -73,18 +73,17 @@ jobs: - name: Create Archive env: # VERSION: ${{ steps.version.outputs.version }} - VERSION: "0.0.0" + VERSION: "0.0.0" working-directory: ./src/quickbake run: | zip quickbake-${VERSION}.zip * - name: Create Release uses: ncipollo/release-action@v1.14.0 - env: - # VERSION: ${{ steps.version.outputs.version }} - VERSION: "0.0.0" with: - artifacts: src/quickbake/quickbake-${{ VERSION }}.zip + # artifacts: src/quickbake/quickbake-${{ steps.version.outputs.version }}.zip + artifacts: src/quickbake/quickbake-0.0.0.zip makeLatest: true generateReleaseNotes: true - tag: ${{ VERSION }} + # tag: ${{ steps.version.outputs.version }} + tag: "0.0.0" From 0673e757707df2f44b98b799a7f218ff3c36b714 Mon Sep 17 00:00:00 2001 From: Thomas Harrison Date: Thu, 29 Jan 2026 01:55:55 -0500 Subject: [PATCH 08/10] Put ci back to production state --- .github/workflows/ci.yaml | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 1a4ba6f..5b08dc1 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -40,9 +40,9 @@ jobs: build_release: name: Build Release runs-on: ubuntu-latest - # if: github.ref == 'refs/heads/main' && !contains(github.event.head_commit.message, 'NO RELEASE') + if: github.ref == 'refs/heads/main' && !contains(github.event.head_commit.message, 'NO RELEASE') - # needs: lint_test + needs: lint_test permissions: contents: write @@ -64,16 +64,14 @@ jobs: - name: Set Version env: - # VERSION: ${{ steps.version.outputs.version }} - VERSION: "0.0.0" + VERSION: ${{ steps.version.outputs.version }} run: | uv version $VERSION sed -i "s/DEV_BUILD/${VERSION}/g" src/quickbake/blender_manifest.toml - name: Create Archive env: - # VERSION: ${{ steps.version.outputs.version }} - VERSION: "0.0.0" + VERSION: ${{ steps.version.outputs.version }} working-directory: ./src/quickbake run: | zip quickbake-${VERSION}.zip * @@ -81,9 +79,7 @@ jobs: - name: Create Release uses: ncipollo/release-action@v1.14.0 with: - # artifacts: src/quickbake/quickbake-${{ steps.version.outputs.version }}.zip - artifacts: src/quickbake/quickbake-0.0.0.zip + artifacts: src/quickbake/quickbake-${{ steps.version.outputs.version }}.zip makeLatest: true generateReleaseNotes: true - # tag: ${{ steps.version.outputs.version }} - tag: "0.0.0" + tag: ${{ steps.version.outputs.version }} From 830b73773fc05c6f160acfc612a2812a879367d1 Mon Sep 17 00:00:00 2001 From: Thomas Harrison Date: Thu, 29 Jan 2026 02:01:35 -0500 Subject: [PATCH 09/10] Is it manifest or bl_info? --- .github/workflows/ci.yaml | 17 +++++++----- src/quickbake/__init__.py | 41 ++++++++++++++--------------- src/quickbake/blender_manifest.toml | 4 +-- 3 files changed, 33 insertions(+), 29 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 5b08dc1..7317cdf 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -40,9 +40,9 @@ jobs: build_release: name: Build Release runs-on: ubuntu-latest - if: github.ref == 'refs/heads/main' && !contains(github.event.head_commit.message, 'NO RELEASE') + # if: github.ref == 'refs/heads/main' && !contains(github.event.head_commit.message, 'NO RELEASE') - needs: lint_test + # needs: lint_test permissions: contents: write @@ -64,14 +64,17 @@ jobs: - name: Set Version env: - VERSION: ${{ steps.version.outputs.version }} + # VERSION: ${{ steps.version.outputs.version }} + VERSION: "0.0.0" run: | uv version $VERSION sed -i "s/DEV_BUILD/${VERSION}/g" src/quickbake/blender_manifest.toml + sed -i "s/DEV_BUILD/${VERSION}/g" src/quickbake/__init__.py - name: Create Archive env: - VERSION: ${{ steps.version.outputs.version }} + # VERSION: ${{ steps.version.outputs.version }} + VERSION: "0.0.0" working-directory: ./src/quickbake run: | zip quickbake-${VERSION}.zip * @@ -79,7 +82,9 @@ jobs: - name: Create Release uses: ncipollo/release-action@v1.14.0 with: - artifacts: src/quickbake/quickbake-${{ steps.version.outputs.version }}.zip + # artifacts: src/quickbake/quickbake-${{ steps.version.outputs.version }}.zip + artifacts: src/quickbake/quickbake-0.0.0.zip makeLatest: true generateReleaseNotes: true - tag: ${{ steps.version.outputs.version }} + # tag: ${{ steps.version.outputs.version }} + tag: "0.0.0" diff --git a/src/quickbake/__init__.py b/src/quickbake/__init__.py index 6163850..7f38c8e 100644 --- a/src/quickbake/__init__.py +++ b/src/quickbake/__init__.py @@ -1,18 +1,17 @@ -import importlib.metadata - import bpy -# from .op import QuickBake_OT_bake -# from .panel import QuickBake_PT_main -# from .properties import QuickBakeToolPropertyGroup +from .op import QuickBake_OT_bake +from .panel import QuickBake_PT_main +from .properties import QuickBakeToolPropertyGroup -version_str = importlib.metadata.version('quickbake').strip('v') +# the value DEV_BUILD is replaced with the version string by ci +version_str = '0.0.1'.strip('v').split('-', 1)[0] version_tuple = tuple(map(int, version_str.split('.'))) bl_info = { 'name': 'Quick Bake', 'author': 'Thomas Harrison', - 'description': '', + 'description': 'Fast baking for blender', 'blender': (2, 80, 0), 'version': version_tuple, 'location': '', @@ -21,21 +20,21 @@ } -# def register(): -# bpy.utils.register_class(QuickBake_OT_bake) -# bpy.utils.register_class(QuickBake_PT_main) -# bpy.utils.register_class(QuickBakeToolPropertyGroup) -# bpy.types.Scene.QuickBakeToolPropertyGroup = bpy.props.PointerProperty( -# type=QuickBakeToolPropertyGroup -# ) +def register(): + bpy.utils.register_class(QuickBake_OT_bake) + bpy.utils.register_class(QuickBake_PT_main) + bpy.utils.register_class(QuickBakeToolPropertyGroup) + bpy.types.Scene.QuickBakeToolPropertyGroup = bpy.props.PointerProperty( + type=QuickBakeToolPropertyGroup + ) -# def unregister(): -# bpy.utils.unregister_class(QuickBake_OT_bake) -# bpy.utils.unregister_class(QuickBake_PT_main) -# bpy.utils.unregister_class(QuickBakeToolPropertyGroup) -# del bpy.types.Scene.QuickBakeToolPropertyGroup +def unregister(): + bpy.utils.unregister_class(QuickBake_OT_bake) + bpy.utils.unregister_class(QuickBake_PT_main) + bpy.utils.unregister_class(QuickBakeToolPropertyGroup) + del bpy.types.Scene.QuickBakeToolPropertyGroup -# if __name__ == '__main__': -# register() +if __name__ == '__main__': + register() diff --git a/src/quickbake/blender_manifest.toml b/src/quickbake/blender_manifest.toml index 18844be..2330f7c 100644 --- a/src/quickbake/blender_manifest.toml +++ b/src/quickbake/blender_manifest.toml @@ -5,8 +5,8 @@ schema_version = "1.0.0" id = "quickbake" # the value DEV_BUILD is replaced with the version string by ci version = "DEV_BUILD" -name = "Fast baking for blender" -tagline = "This is another extension" +name = "Quick Bake" +tagline = "Fast baking for blender" maintainer = "Thomas Harrison " type = "add-on" From 87d9356a4b52e8c8f00537ab7e4257dba9fe0059 Mon Sep 17 00:00:00 2001 From: Thomas Harrison Date: Thu, 29 Jan 2026 02:09:59 -0500 Subject: [PATCH 10/10] Back to prod state again --- .github/workflows/ci.yaml | 17 ++++++----------- src/quickbake/__init__.py | 15 --------------- 2 files changed, 6 insertions(+), 26 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 7317cdf..5b08dc1 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -40,9 +40,9 @@ jobs: build_release: name: Build Release runs-on: ubuntu-latest - # if: github.ref == 'refs/heads/main' && !contains(github.event.head_commit.message, 'NO RELEASE') + if: github.ref == 'refs/heads/main' && !contains(github.event.head_commit.message, 'NO RELEASE') - # needs: lint_test + needs: lint_test permissions: contents: write @@ -64,17 +64,14 @@ jobs: - name: Set Version env: - # VERSION: ${{ steps.version.outputs.version }} - VERSION: "0.0.0" + VERSION: ${{ steps.version.outputs.version }} run: | uv version $VERSION sed -i "s/DEV_BUILD/${VERSION}/g" src/quickbake/blender_manifest.toml - sed -i "s/DEV_BUILD/${VERSION}/g" src/quickbake/__init__.py - name: Create Archive env: - # VERSION: ${{ steps.version.outputs.version }} - VERSION: "0.0.0" + VERSION: ${{ steps.version.outputs.version }} working-directory: ./src/quickbake run: | zip quickbake-${VERSION}.zip * @@ -82,9 +79,7 @@ jobs: - name: Create Release uses: ncipollo/release-action@v1.14.0 with: - # artifacts: src/quickbake/quickbake-${{ steps.version.outputs.version }}.zip - artifacts: src/quickbake/quickbake-0.0.0.zip + artifacts: src/quickbake/quickbake-${{ steps.version.outputs.version }}.zip makeLatest: true generateReleaseNotes: true - # tag: ${{ steps.version.outputs.version }} - tag: "0.0.0" + tag: ${{ steps.version.outputs.version }} diff --git a/src/quickbake/__init__.py b/src/quickbake/__init__.py index 7f38c8e..a30dcbe 100644 --- a/src/quickbake/__init__.py +++ b/src/quickbake/__init__.py @@ -4,21 +4,6 @@ from .panel import QuickBake_PT_main from .properties import QuickBakeToolPropertyGroup -# the value DEV_BUILD is replaced with the version string by ci -version_str = '0.0.1'.strip('v').split('-', 1)[0] -version_tuple = tuple(map(int, version_str.split('.'))) - -bl_info = { - 'name': 'Quick Bake', - 'author': 'Thomas Harrison', - 'description': 'Fast baking for blender', - 'blender': (2, 80, 0), - 'version': version_tuple, - 'location': '', - 'warning': '', - 'category': 'Render', -} - def register(): bpy.utils.register_class(QuickBake_OT_bake)