Skip to content

ci: initial sync with canonical/copilot-collections#2663

Merged
lengau merged 2 commits intomainfrom
copilot/reproduce-imagecraft-pr-327
Apr 23, 2026
Merged

ci: initial sync with canonical/copilot-collections#2663
lengau merged 2 commits intomainfrom
copilot/reproduce-imagecraft-pr-327

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 21, 2026

Adds GitHub Copilot instructions and skills to charmcraft, mirroring the setup from canonical/imagecraft#327 (itself based on canonical/snapcraft#6196).

Added

  • .github/.copilot-collections.yaml — pins starcraft-core and starcraft-docs collections at v0.12.0
  • .github/instructions/ — 7 Copilot instruction files covering core directives, Python commenting, documentation guidelines (general, RTD-specific, starcraft style/meta), and instructions authoring
  • .github/skills/ — 6 skill files for documentation review, style, structure, build, diataxis, and verification
  • .github/workflows/copilot-collections-update.yaml — weekly cron workflow to auto-sync collections from canonical/copilot-collections

Modified

  • .pre-commit-config.yaml — excludes ^\.github/(skills|instructions)/ since these files are auto-generated
  • Makefile — appends !.github/instructions/** and !.github/skills/** to PRETTIER_FILES to skip auto-generated content from formatting

@lengau lengau marked this pull request as ready for review April 21, 2026 22:18
@lengau lengau self-requested a review as a code owner April 21, 2026 22:18
@lengau lengau requested a review from mr-cal April 21, 2026 22:18
@github-actions
Copy link
Copy Markdown

Type checking with ty failed. This is a notification only and does not require action.

Command output
error[invalid-assignment]: Object of type `None` is not assignable to `<module 'pwd'>`
  --> charmcraft/application/commands/init.py:33:5
   |
33 |     pwd = None  # type: ignore[assignment]
   |     ---   ^^^^ Incompatible value of type `None`
   |     |
   |     Declared type `<module 'pwd'>`
   |

error[unresolved-attribute]: Attribute `bases` is not defined on `PlatformCharm` in union `PlatformCharm | BasesCharm`
   --> charmcraft/application/commands/lifecycle.py:119:36
    |
119 |         len_configured_bases = len(project.bases)
    |                                    ^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `get_credentials`
   --> charmcraft/application/commands/store.py:210:27
    |
210 |             credentials = self._services.store.get_credentials(
    |                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `login`
   --> charmcraft/application/commands/store.py:218:13
    |
218 |             self._services.store.login(packages=packages, **kwargs)
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `get_account_info`
   --> charmcraft/application/commands/store.py:219:24
    |
219 |             username = self._services.store.get_account_info()["username"]
    |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `logout`
   --> charmcraft/application/commands/store.py:244:13
    |
244 |             self._services.store.logout()
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[not-iterable]: Object of type `IO[str] | None` may not be iterable
   --> charmcraft/charm_builder.py:423:17
    |
423 |     for line in proc.stdout:  # pyright: ignore[reportOptionalIterable]
    |                 ^^^^^^^^^^^
    |
info: It may not have an `__iter__` method and it doesn't have a `__getitem__` method

error[unresolved-attribute]: Attribute `split` is not defined on `None` in union `str | None`
   --> charmcraft/linters.py:238:23
    |
238 |                 yield node.module.split(".")
    |                       ^^^^^^^^^^^^^^^^^
    |

error[unsupported-operator]: Unsupported `>=` operation
   --> charmcraft/linters.py:793:16
    |
793 |             if version >= cls.get_version_tuple(match.group(1)):
    |                -------^^^^-------------------------------------
    |                |
    |                Both operands have type `tuple[int | str, ...]`
    |
info: Operation fails because operator `>=` is not supported between objects of type `int` and `str`

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> charmcraft/parts/lifecycle.py:111:29
    |
111 | …                     step=act.step.name,  # type: ignore[arg-type]
    |                       ^^^^^^^^^^^^^^^^^^ Expected `dict[str, Any]`, found `Literal["PULL", "OVERLAY", "BUILD", "STAGE", "PRIME"]`
    |
info: element `Literal["PULL"]` of union `Literal["PULL", "OVERLAY", "BUILD", "STAGE", "PRIME"]` is not assignable to `dict[str, Any]`
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> charmcraft/parts/lifecycle.py:112:29
    |
112 | …                     part=act.part_name,  # type: ignore[arg-type]
    |                       ^^^^^^^^^^^^^^^^^^ Expected `dict[str, Any]`, found `str`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to bound method `_Measurements.merge_from` is incorrect
   --> charmcraft/parts/plugins/_charm.py:341:28
    |
341 |         instrum.merge_from(env.get_charm_builder_metrics_path())
    |                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `str`, found `Path`
    |
info: Method defined here
  --> charmcraft/instrum.py:77:9
   |
77 |     def merge_from(self, filename: str) -> None:
   |         ^^^^^^^^^^       ------------- Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
   --> charmcraft/services/provider.py:124:13
    |
124 |             **kwargs,  # type: ignore[arg-type]
    |             ^^^^^^^^ Expected `bool`, found `bool | str | None`
    |
info: element `str` of union `bool | str | None` is not assignable to `bool`

error[invalid-argument-type]: Method `__getitem__` of type `bound method StoreErrorList.__getitem__(error_code: str) -> dict[str, str]` cannot be called with key of type `None` on object of type `StoreErrorList`
   --> charmcraft/services/store.py:375:16
    |
375 |             if exc.error_list[None]["message"] == (  # type: ignore[index]
    |                ^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `login` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:227:27
    |
227 |             credentials = self._client.login(**kwargs)
    |                           ^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `logout` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:241:9
    |
241 |         self._client.logout()
    |         ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `whoami` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:246:20
    |
246 |         response = self._client.whoami()
    |                    ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `whoami` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:268:9
    |
268 |         self._client.whoami()
    |         ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `unregister_name` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:285:9
    |
285 |         self._client.unregister_name(name)
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `push_file` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:311:21
    |
311 |         upload_id = self._client.push_file(filepath)
    |                     ^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `list_resource_revisions` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:506:16
    |
506 |         return self._client.list_resource_revisions(charm_name, resource_name)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[invalid-argument-type]: Argument to function `add_representer` is incorrect
  --> charmcraft/utils/yaml.py:53:9
   |
53 |         _repr_str,  # type: ignore[arg-type]
   |         ^^^^^^^^^ Expected `(SafeDumper, AnyUrl | str, /) -> Node`, found `def _repr_str(dumper: SafeDumper, data: str) -> ScalarNode`
   |
info: the second parameter has an incompatible type: `AnyUrl | str` is not assignable to `str`
info: └── element `AnyUrl` of union `AnyUrl | str` is not assignable to `str`
info: Matching overload defined here
   --> .venv/lib/python3.12/site-packages/yaml-stubs/__init__.pyi:419:5
    |
419 | def add_representer(data_type: type[_T], representer: Callable[[_Representer, _T], Node], Dumper: type[_Representer]) -> None: ...
    |     ^^^^^^^^^^^^^^^                      ----------------------------------------------- Parameter declared here
    |
info: Non-matching overloads for function `add_representer`:
info:   [_T](data_type: type[_T], representer: (Dumper, _T, /) -> Node) -> None

error[invalid-argument-type]: Argument to constructor `Path.__new__` is incorrect
   --> docs/conf.py:336:30
    |
336 |     docs_path = pathlib.Path(docs_module.__file__).parent / library_name
    |                              ^^^^^^^^^^^^^^^^^^^^ Expected `str | PathLike[str]`, found `str | None`
    |
info: element `None` of union `str | None` is not assignable to `str | PathLike[str]`
info: └── type `None` is not assignable to any element of the union `str | PathLike[str]`
info:     ├── type `None` is not assignable to protocol `PathLike[str]`
info:     │   └── protocol member `__fspath__` is not defined on type `None`
info:     └── ... omitted 1 union element without additional context
info: Function defined here
   --> stdlib/pathlib/__init__.pyi:310:13
    |
310 |         def __new__(cls, *args: StrPath, **kwargs: Unused) -> Self: ...
    |             ^^^^^^^      -------------- Parameter declared here
    |

error[unresolved-import]: Cannot resolve imported module `ops`
  --> docs/howto/code/custom-action-clearsession/clearsession_action_charm.py:10:8
   |
10 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `paas_charm.django`
  --> docs/howto/code/custom-action-clearsession/clearsession_action_charm.py:12:8
   |
12 | import paas_charm.django
   |        ^^^^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `flask`
 --> docs/howto/code/custom-action-updatelogfile/app.py:3:8
  |
3 | import flask
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> docs/howto/code/custom-action-updatelogfile/updatelogfile_action_charm.py:10:8
   |
10 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `paas_charm.flask`
  --> docs/howto/code/custom-action-updatelogfile/updatelogfile_action_charm.py:12:8
   |
12 | import paas_charm.flask
   |        ^^^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `flask`
 --> docs/howto/code/flask-async/app.py:3:8
  |
3 | import flask
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.contrib`
  --> docs/tutorial/code/django/urls_django_hello_world.py:17:6
   |
17 | from django.contrib import admin
   |      ^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.urls`
  --> docs/tutorial/code/django/urls_django_hello_world.py:18:6
   |
18 | from django.urls import include, path
   |      ^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.urls`
 --> docs/tutorial/code/django/urls_greeting.py:1:6
  |
1 | from django.urls import path
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `docs.tutorial.code.django` has no member `views`
 --> docs/tutorial/code/django/urls_greeting.py:3:15
  |
3 | from . import views
  |               ^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `django.http`
 --> docs/tutorial/code/django/views_greeting.py:1:6
  |
1 | from django.http import HttpResponse
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.http`
 --> docs/tutorial/code/django/views_greeting_configuration.py:3:6
  |
3 | from django.http import HttpResponse
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/app.py:1:21
  |
1 | from fastapi import FastAPI
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/greeting_app.py:3:21
  |
3 | from fastapi import FastAPI
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/visitors_app.py:7:21
  |
7 | from fastapi import FastAPI, Header
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `Header`
 --> docs/tutorial/code/fastapi/visitors_app.py:7:30
  |
7 | from fastapi import FastAPI, Header
  |                              ^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/fastapi/visitors_app.py:8:8
  |
8 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/fastapi/visitors_migrate.py:5:8
  |
5 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/app.py:5:7
  |
5 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/greeting_app.py:5:7
  |
5 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/flask/visitors_app.py:7:8
  |
7 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/visitors_app.py:9:7
  |
9 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-attribute]: Module `flask` has no member `request`
  --> docs/tutorial/code/flask/visitors_app.py:18:22
   |
18 |         user_agent = flask.request.headers.get('User-Agent')
   |                      ^^^^^^^^^^^^^
   |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/flask/visitors_migrate.py:5:8
  |
5 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[invalid-argument-type]: Argument is incorrect
  --> tests/__init__.py:36:65
   |
36 |     return models.resource_revision_model.CharmResourceRevision(**data)
   |                                                                 ^^^^^^ Expected `datetime | None`, found `list[Unknown] | datetime | str | int`
   |
info: element `list[Unknown]` of union `list[Unknown] | datetime | str | int` is not assignable to `datetime | None`

error[invalid-argument-type]: Argument is incorrect
  --> tests/__init__.py:36:65
   |
36 |     return models.resource_revision_model.CharmResourceRevision(**data)
   |                                                                 ^^^^^^ Expected `str | None`, found `list[Unknown] | datetime | str | int`
   |
info: element `list[Unknown]` of union `list[Unknown] | datetime | str | int` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1628:13
     |
1628 |             api=test_api,
     |             ^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1634:13
     |
1634 |             patch=test_patch,
     |             ^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1718:13
     |
1718 |             api=test_api_1,
     |             ^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version-1"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1724:13
     |
1724 |             patch=test_patch_1,
     |             ^^^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version-1"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1727:13
     |
1727 |             api=test_api_2,
     |             ^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version-2"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1733:13
     |
1733 |             patch=test_patch_2,
     |             ^^^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version-2"]`
     |

error[invalid-method-override]: Invalid override of method `json`
   --> tests/commands/test_store_client.py:77:9
    |
 77 |       def json(self):
    |           ^^^^^^^^^^ Definition is incompatible with `Response.json`
    |
   ::: .venv/lib/python3.12/site-packages/requests-stubs/models.pyi:155:9
    |
155 |       def json(
    |  _________-
156 | |         self,
157 | |         *,
158 | |         cls: type[JSONDecoder] | None = ...,
159 | |         object_hook: Callable[[dict[Any, Any]], Any] | None = ...,
160 | |         parse_float: Callable[[str], Any] | None = ...,
161 | |         parse_int: Callable[[str], Any] | None = ...,
162 | |         parse_constant: Callable[[str], Any] | None = ...,
163 | |         object_pairs_hook: Callable[[list[tuple[Any, Any]]], Any] | None = ...,
164 | |         **kwds: Any,
165 | |     ) -> Any: ...
    | |____________- `Response.json` defined here
    |
info: This violates the Liskov Substitution Principle

error[invalid-argument-type]: Argument is incorrect
   --> tests/conftest.py:225:9
    |
225 |         build_on=arch,
    |         ^^^^^^^^^^^^^ Expected `DebianArchitecture`, found `str`
    |

error[invalid-argument-type]: Argument is incorrect
   --> tests/conftest.py:226:9
    |
226 |         build_for="arm64",
    |         ^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `Literal["arm64"]`
    |

error[invalid-method-override]: Invalid override of method `get_supported_bases`
  --> tests/extensions/test_extensions.py:33:9
   |
33 |     def get_supported_bases(cls) -> list[tuple[str, ...]]:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.get_supported_bases`
   |
  ::: charmcraft/extensions/extension.py:52:9
   |
52 |     def get_supported_bases() -> list[tuple[str, str]]:
   |         ---------------------------------------------- `Extension.get_supported_bases` defined here
   |
info: `FakeExtension.get_supported_bases` is a classmethod but `Extension.get_supported_bases` is a staticmethod
info: incompatible return types: `list[tuple[str, ...]]` is not assignable to `list[tuple[str, str]]`
info: This violates the Liskov Substitution Principle

error[invalid-return-type]: Return type does not match returned value
  --> tests/extensions/test_extensions.py:33:37
   |
33 |     def get_supported_bases(cls) -> list[tuple[str, ...]]:
   |                                     --------------------- Expected `list[tuple[str, ...]]` because of return type
34 |         """Return a list of tuple of supported bases."""
35 |         return cls.bases
   |                ^^^^^^^^^ expected `list[tuple[str, ...]]`, found `list[tuple[str, str]]`
   |

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_extensions.py:38:9
   |
38 |     def is_experimental(_base: tuple[str, ...] | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.is_experimental`
   |
  ::: charmcraft/extensions/extension.py:57:9
   |
57 |     def is_experimental(base: tuple[str, str] | None) -> bool:
   |         ----------------------------------------------------- `Extension.is_experimental` defined here
   |
info: the parameter named `_base` does not match `base` (and can be used as a keyword parameter)
info: This violates the Liskov Substitution Principle

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_extensions.py:62:9
   |
62 |     def is_experimental(_base: str | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `FakeExtension.is_experimental`
   |
  ::: tests/extensions/test_extensions.py:38:9
   |
38 |     def is_experimental(_base: tuple[str, ...] | None) -> bool:
   |         ------------------------------------------------------ `FakeExtension.is_experimental` defined here
   |
info: parameter `_base` has an incompatible type: `tuple[str, ...] | None` is not assignable to `str | None`
info: └── element `tuple[str, ...]` of union `tuple[str, ...] | None` is not assignable to `str | None`
info: This violates the Liskov Substitution Principle

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_registry.py:34:9
   |
34 |     def is_experimental(_base: tuple[str, str] | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.is_experimental`
   |
  ::: charmcraft/extensions/extension.py:57:9
   |
57 |     def is_experimental(base: tuple[str, str] | None) -> bool:
   |         ----------------------------------------------------- `Extension.is_experimental` defined here
   |
info: the parameter named `_base` does not match `base` (and can be used as a keyword parameter)
info: This violates the Liskov Substitution Principle

warning[possibly-missing-submodule]: Submodule `application` might not have been imported
  --> tests/integration/commands/test_init.py:75:17
   |
75 |         {"app": charmcraft.application.APP_METADATA, "services": None}
   |                 ^^^^^^^^^^^^^^^^^^^^^^
   |
help: Consider explicitly importing `charmcraft.application`

error[unresolved-attribute]: Object of type `RecordingEmitter` has no attribute `assert_json_output`
   --> tests/integration/commands/test_store_commands.py:225:9
    |
225 |         emitter.assert_json_output(  # pyright: ignore[reportAttributeAccessIssue]
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Unresolved attribute `client` on type `AppService`
  --> tests/integration/conftest.py:45:5
   |
45 |     factory.get("store").client = mock.Mock(spec_set=craft_store.StoreClient)  # pyright: ignore[reportAttributeAccessIssue]
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[invalid-argument-type]: Argument to `AppService.__init__` is incorrect
  --> tests/integration/services/test_image.py:28:9
   |
28 |         services=None,  # pyright: ignore[reportArgumentType]
   |         ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/base.py:44:9
   |
44 |     def __init__(self, app: AppMetadata, services: ServiceFactory) -> None:
   |         ^^^^^^^^                         ------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_lifecycle.py:40:17
   |
40 |                 build_for="invalid",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `Literal["invalid"]`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_lifecycle.py:88:17
   |
88 |                 build_for=f"{foreign_arch}-{host_arch}",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[unresolved-import]: Cannot resolve imported module `charm`
 --> tests/spread/commands/init-extensions/tests/unit/test_charm.py:9:8
  |
9 | import charm
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/commands/init-extensions/tests/unit/test_charm.py:10:6
   |
10 | from ops import testing
   |      ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/dependencies/setuptools-scm-python/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/extra-binary-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/extra-binary-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/extra-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/extra-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/missing-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/missing-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/no-requirements/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/no-requirements/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies/charm/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies/charm/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Module `charms.reactive` has no member `set_flag`
 --> tests/spread/smoketests/reactive/reactivecharm/reactive/reactivecharm.py:1:29
  |
1 | from charms.reactive import set_flag, when_not
  |                             ^^^^^^^^
  |

error[unresolved-import]: Module `charms.reactive` has no member `when_not`
 --> tests/spread/smoketests/reactive/reactivecharm/reactive/reactivecharm.py:1:39
  |
1 | from charms.reactive import set_flag, when_not
  |                                       ^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/ubuntu-20.04/charm/bases/src/charm.py:18:8
   |
18 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/ubuntu-20.04/charm/bases/src/charm.py:104:32
    |
104 |     ops.main(BasicBasesCharm)  # type: ignore
    |                                ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
101 |
102 |
103 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(BasicBasesCharm)  # type: ignore
104 +     ops.main(BasicBasesCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-20.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-20.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/ubuntu-22.04/charm/bases/src/charm.py:18:8
   |
18 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/ubuntu-22.04/charm/bases/src/charm.py:104:32
    |
104 |     ops.main(BasicBasesCharm)  # type: ignore
    |                                ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
101 |
102 |
103 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(BasicBasesCharm)  # type: ignore
104 +     ops.main(BasicBasesCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-22.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-22.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-24.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-25.10/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-26.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1419/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1419/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:256:32
    |
256 |     with Timer("test message", foo=42):
    |                                ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:274:28
    |
274 |     @Timer("test message", foo=42)
    |                            ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:298:32
    |
298 |     with Timer("test message", foo=42) as timer:
    |                                ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-assignment]: Object of type `Mock` is not assignable to attribute `write` of type `def write(self, library: Library) -> None`
  --> tests/unit/commands/test_lifecycle.py:91:5
   |
91 |     libs_service.write = mock.Mock(wraps=libs_service.write)
   |     ^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `write`. Add an annotation to make it explicit if this is intentional

error[unresolved-attribute]: Object of type `bound method CharmLibsService.write(library: Library) -> None` has no attribute `assert_called_once_with`
  --> tests/unit/commands/test_lifecycle.py:95:5
   |
95 |     libs_service.write.assert_called_once_with(store_lib)
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[not-subscriptable]: Cannot subscript object of type `None` with no `__getitem__` method
  --> tests/unit/models/test_config.py:75:23
   |
75 |     assert isinstance(config.options["my-opt"], type_)
   |                       ^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[invalid-assignment]: Object of type `() -> Literal["/python -m pip"]` is not assignable to attribute `_get_pip` of type `def _get_pip(self) -> str`
  --> tests/unit/parts/plugins/test_poetry.py:40:5
   |
40 |     poetry_plugin._get_pip = lambda: "/python -m pip"
   |     ^^^^^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `_get_pip`. Add an annotation to make it explicit if this is intentional

error[invalid-assignment]: Object of type `() -> Literal["/python -m pip"]` is not assignable to attribute `_get_pip` of type `def _get_pip(self) -> str`
  --> tests/unit/parts/plugins/test_python.py:62:5
   |
62 |     python_plugin._get_pip = lambda: "/python -m pip"
   |     ^^^^^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `_get_pip`. Add an annotation to make it explicit if this is intentional

error[invalid-argument-type]: Argument to `AnalysisService.__init__` is incorrect
   --> tests/unit/services/test_analysis.py:112:67
    |
112 |     return analysis.AnalysisService(app=application.APP_METADATA, services=None)
    |                                                                   ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
    |
info: Method defined here
  --> charmcraft/services/analysis.py:37:9
   |
37 |     def __init__(  # (too many arguments)
   |         ^^^^^^^^
38 |         self,
39 |         app: craft_application.AppMetadata,
40 |         services: craft_application.ServiceFactory,
   |         ------------------------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/unit/services/test_lifecycle.py:55:17
   |
55 |                 build_for=plan_build_for,  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/unit/services/test_lifecycle.py:94:17
   |
94 |                 build_for=f"{HOST_ARCH}-foreign",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument to `ProjectService.__init__` is incorrect
  --> tests/unit/services/test_project.py:34:45
   |
34 |     return ProjectService(app=APP_METADATA, services=None, project_dir=project_path)
   |                                             ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/project.py:57:9
   |
57 |     def __init__(
   |         ^^^^^^^^
58 |         self, app: AppMetadata, services: ServiceFactory, *, project_dir: pathlib.Path
   |                                 ------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument to `ProviderService.__init__` is incorrect
   --> tests/unit/services/test_provider.py:123:9
    |
123 |         services=None,  # pyright: ignore[reportArgumentType]
    |         ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
    |
info: Method defined here
  --> charmcraft/services/provider.py:43:9
   |
43 |     def __init__(
   |         ^^^^^^^^
44 |         self,
45 |         app: craft_application.AppMetadata,
46 |         services: craft_application.ServiceFactory,
   |         ------------------------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument to `AppService.__init__` is incorrect
  --> tests/unit/services/test_store.py:50:56
   |
50 |     store = StoreService(app=application.APP_METADATA, services=None)
   |                                                        ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/base.py:44:9
   |
44 |     def __init__(self, app: AppMetadata, services: ServiceFactory) -> None:
   |         ^^^^^^^^                         ------------------------ Parameter declared here
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:43:12
   |
43 |     assert linters.PYTHON_NAME_REGEX.match(name).group(0) == name
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:44:12
   |
44 |     assert linters.PYTHON_NAME_REGEX.match(f"{name}{next_char}").group(0) == name
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:46:9
   |
46 |         linters.PYTHON_NAME_REGEX.match(f"{name}{next_char}{further_garbage}").group(0)
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:62:12
   |
62 |     assert linters.MIN_VERSION_REGEX.search(string).group(1) == expected
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:76:24
   |
76 |     assert expected in linters.APPROX_VERSION_REGEX.search(string).group(1, 2)
   |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:84:12
   |
84 |     assert linters.EXACT_VERSION_REGEX.search(string).group(1) == expected
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[no-matching-overload]: No overload of function `format_content` matches arguments
   --> tests/unit/utils/test_cli.py:285:9
    |
285 |         format_content(None, fmt)
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^
    |
info: First overload defined here
   --> charmcraft/utils/cli.py:185:5
    |
185 |   def format_content(
    |  _____^
186 | |     content: dict[str, Any] | list[dict[str, Any]], fmt: OutputFormat | str | None
187 | | ) -> str: ...
    | |________^
    |
info: Possible overloads for function `format_content`:
info:   (content: dict[str, Any] | list[dict[str, Any]], fmt: OutputFormat | str | None) -> str
info:   (content: str | Real | list[Unknown] | dict[Unknown, Unknown], fmt: OutputFormat | str | None) -> str
info: Overload implementation defined here
   --> charmcraft/utils/cli.py:196:5
    |
196 | def format_content(content, fmt=None):
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

Found 146 diagnostics

Copy link
Copy Markdown
Contributor

@mr-cal mr-cal left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LTGM

@lengau lengau requested a review from a team April 22, 2026 17:20
@github-actions
Copy link
Copy Markdown

Type checking with ty failed. This is a notification only and does not require action.

Command output
error[invalid-assignment]: Object of type `None` is not assignable to `<module 'pwd'>`
  --> charmcraft/application/commands/init.py:33:5
   |
33 |     pwd = None  # type: ignore[assignment]
   |     ---   ^^^^ Incompatible value of type `None`
   |     |
   |     Declared type `<module 'pwd'>`
   |

error[unresolved-attribute]: Attribute `bases` is not defined on `PlatformCharm` in union `PlatformCharm | BasesCharm`
   --> charmcraft/application/commands/lifecycle.py:119:36
    |
119 |         len_configured_bases = len(project.bases)
    |                                    ^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `get_credentials`
   --> charmcraft/application/commands/store.py:210:27
    |
210 |             credentials = self._services.store.get_credentials(
    |                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `login`
   --> charmcraft/application/commands/store.py:218:13
    |
218 |             self._services.store.login(packages=packages, **kwargs)
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `get_account_info`
   --> charmcraft/application/commands/store.py:219:24
    |
219 |             username = self._services.store.get_account_info()["username"]
    |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Object of type `AppService | type[AppService]` has no attribute `logout`
   --> charmcraft/application/commands/store.py:244:13
    |
244 |             self._services.store.logout()
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[not-iterable]: Object of type `IO[str] | None` may not be iterable
   --> charmcraft/charm_builder.py:423:17
    |
423 |     for line in proc.stdout:  # pyright: ignore[reportOptionalIterable]
    |                 ^^^^^^^^^^^
    |
info: It may not have an `__iter__` method and it doesn't have a `__getitem__` method

error[unresolved-attribute]: Attribute `split` is not defined on `None` in union `str | None`
   --> charmcraft/linters.py:238:23
    |
238 |                 yield node.module.split(".")
    |                       ^^^^^^^^^^^^^^^^^
    |

error[unsupported-operator]: Unsupported `>=` operation
   --> charmcraft/linters.py:793:16
    |
793 |             if version >= cls.get_version_tuple(match.group(1)):
    |                -------^^^^-------------------------------------
    |                |
    |                Both operands have type `tuple[int | str, ...]`
    |
info: Operation fails because operator `>=` is not supported between objects of type `int` and `str`

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> charmcraft/parts/lifecycle.py:111:29
    |
111 | …                     step=act.step.name,  # type: ignore[arg-type]
    |                       ^^^^^^^^^^^^^^^^^^ Expected `dict[str, Any]`, found `Literal["PULL", "OVERLAY", "BUILD", "STAGE", "PRIME"]`
    |
info: element `Literal["PULL"]` of union `Literal["PULL", "OVERLAY", "BUILD", "STAGE", "PRIME"]` is not assignable to `dict[str, Any]`
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> charmcraft/parts/lifecycle.py:112:29
    |
112 | …                     part=act.part_name,  # type: ignore[arg-type]
    |                       ^^^^^^^^^^^^^^^^^^ Expected `dict[str, Any]`, found `str`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to bound method `_Measurements.merge_from` is incorrect
   --> charmcraft/parts/plugins/_charm.py:341:28
    |
341 |         instrum.merge_from(env.get_charm_builder_metrics_path())
    |                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `str`, found `Path`
    |
info: Method defined here
  --> charmcraft/instrum.py:77:9
   |
77 |     def merge_from(self, filename: str) -> None:
   |         ^^^^^^^^^^       ------------- Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
   --> charmcraft/services/provider.py:124:13
    |
124 |             **kwargs,  # type: ignore[arg-type]
    |             ^^^^^^^^ Expected `bool`, found `bool | str | None`
    |
info: element `str` of union `bool | str | None` is not assignable to `bool`

error[invalid-argument-type]: Method `__getitem__` of type `bound method StoreErrorList.__getitem__(error_code: str) -> dict[str, str]` cannot be called with key of type `None` on object of type `StoreErrorList`
   --> charmcraft/services/store.py:375:16
    |
375 |             if exc.error_list[None]["message"] == (  # type: ignore[index]
    |                ^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `login` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:227:27
    |
227 |             credentials = self._client.login(**kwargs)
    |                           ^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `logout` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:241:9
    |
241 |         self._client.logout()
    |         ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `whoami` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:246:20
    |
246 |         response = self._client.whoami()
    |                    ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `whoami` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:268:9
    |
268 |         self._client.whoami()
    |         ^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `unregister_name` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:285:9
    |
285 |         self._client.unregister_name(name)
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `push_file` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:311:21
    |
311 |         upload_id = self._client.push_file(filepath)
    |                     ^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Attribute `list_resource_revisions` is not defined on `AnonymousClient` in union `Client | AnonymousClient`
   --> charmcraft/store/store.py:506:16
    |
506 |         return self._client.list_resource_revisions(charm_name, resource_name)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[invalid-argument-type]: Argument to function `add_representer` is incorrect
  --> charmcraft/utils/yaml.py:53:9
   |
53 |         _repr_str,  # type: ignore[arg-type]
   |         ^^^^^^^^^ Expected `(SafeDumper, AnyUrl | str, /) -> Node`, found `def _repr_str(dumper: SafeDumper, data: str) -> ScalarNode`
   |
info: the second parameter has an incompatible type: `AnyUrl | str` is not assignable to `str`
info: └── element `AnyUrl` of union `AnyUrl | str` is not assignable to `str`
info: Matching overload defined here
   --> .venv/lib/python3.12/site-packages/yaml-stubs/__init__.pyi:419:5
    |
419 | def add_representer(data_type: type[_T], representer: Callable[[_Representer, _T], Node], Dumper: type[_Representer]) -> None: ...
    |     ^^^^^^^^^^^^^^^                      ----------------------------------------------- Parameter declared here
    |
info: Non-matching overloads for function `add_representer`:
info:   [_T](data_type: type[_T], representer: (Dumper, _T, /) -> Node) -> None

error[invalid-argument-type]: Argument to constructor `Path.__new__` is incorrect
   --> docs/conf.py:336:30
    |
336 |     docs_path = pathlib.Path(docs_module.__file__).parent / library_name
    |                              ^^^^^^^^^^^^^^^^^^^^ Expected `str | PathLike[str]`, found `str | None`
    |
info: element `None` of union `str | None` is not assignable to `str | PathLike[str]`
info: └── type `None` is not assignable to any element of the union `str | PathLike[str]`
info:     ├── type `None` is not assignable to protocol `PathLike[str]`
info:     │   └── protocol member `__fspath__` is not defined on type `None`
info:     └── ... omitted 1 union element without additional context
info: Function defined here
   --> stdlib/pathlib/__init__.pyi:310:13
    |
310 |         def __new__(cls, *args: StrPath, **kwargs: Unused) -> Self: ...
    |             ^^^^^^^      -------------- Parameter declared here
    |

error[unresolved-import]: Cannot resolve imported module `ops`
  --> docs/howto/code/custom-action-clearsession/clearsession_action_charm.py:10:8
   |
10 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `paas_charm.django`
  --> docs/howto/code/custom-action-clearsession/clearsession_action_charm.py:12:8
   |
12 | import paas_charm.django
   |        ^^^^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `flask`
 --> docs/howto/code/custom-action-updatelogfile/app.py:3:8
  |
3 | import flask
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> docs/howto/code/custom-action-updatelogfile/updatelogfile_action_charm.py:10:8
   |
10 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `paas_charm.flask`
  --> docs/howto/code/custom-action-updatelogfile/updatelogfile_action_charm.py:12:8
   |
12 | import paas_charm.flask
   |        ^^^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `flask`
 --> docs/howto/code/flask-async/app.py:3:8
  |
3 | import flask
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.contrib`
  --> docs/tutorial/code/django/urls_django_hello_world.py:17:6
   |
17 | from django.contrib import admin
   |      ^^^^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.urls`
  --> docs/tutorial/code/django/urls_django_hello_world.py:18:6
   |
18 | from django.urls import include, path
   |      ^^^^^^^^^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.urls`
 --> docs/tutorial/code/django/urls_greeting.py:1:6
  |
1 | from django.urls import path
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `docs.tutorial.code.django` has no member `views`
 --> docs/tutorial/code/django/urls_greeting.py:3:15
  |
3 | from . import views
  |               ^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `django.http`
 --> docs/tutorial/code/django/views_greeting.py:1:6
  |
1 | from django.http import HttpResponse
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `django.http`
 --> docs/tutorial/code/django/views_greeting_configuration.py:3:6
  |
3 | from django.http import HttpResponse
  |      ^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/app.py:1:21
  |
1 | from fastapi import FastAPI
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/greeting_app.py:3:21
  |
3 | from fastapi import FastAPI
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `FastAPI`
 --> docs/tutorial/code/fastapi/visitors_app.py:7:21
  |
7 | from fastapi import FastAPI, Header
  |                     ^^^^^^^
  |

error[unresolved-import]: Module `fastapi` has no member `Header`
 --> docs/tutorial/code/fastapi/visitors_app.py:7:30
  |
7 | from fastapi import FastAPI, Header
  |                              ^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/fastapi/visitors_app.py:8:8
  |
8 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/fastapi/visitors_migrate.py:5:8
  |
5 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/app.py:5:7
  |
5 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/greeting_app.py:5:7
  |
5 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/flask/visitors_app.py:7:8
  |
7 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-attribute]: Module `flask` has no member `Flask`
 --> docs/tutorial/code/flask/visitors_app.py:9:7
  |
9 | app = flask.Flask(__name__)
  |       ^^^^^^^^^^^
  |

error[unresolved-attribute]: Module `flask` has no member `request`
  --> docs/tutorial/code/flask/visitors_app.py:18:22
   |
18 |         user_agent = flask.request.headers.get('User-Agent')
   |                      ^^^^^^^^^^^^^
   |

error[unresolved-import]: Cannot resolve imported module `psycopg2`
 --> docs/tutorial/code/flask/visitors_migrate.py:5:8
  |
5 | import psycopg2
  |        ^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[invalid-argument-type]: Argument is incorrect
  --> tests/__init__.py:36:65
   |
36 |     return models.resource_revision_model.CharmResourceRevision(**data)
   |                                                                 ^^^^^^ Expected `datetime | None`, found `list[Unknown] | datetime | str | int`
   |
info: element `list[Unknown]` of union `list[Unknown] | datetime | str | int` is not assignable to `datetime | None`

error[invalid-argument-type]: Argument is incorrect
  --> tests/__init__.py:36:65
   |
36 |     return models.resource_revision_model.CharmResourceRevision(**data)
   |                                                                 ^^^^^^ Expected `str | None`, found `list[Unknown] | datetime | str | int`
   |
info: element `list[Unknown]` of union `list[Unknown] | datetime | str | int` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1628:13
     |
1628 |             api=test_api,
     |             ^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1634:13
     |
1634 |             patch=test_patch,
     |             ^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1718:13
     |
1718 |             api=test_api_1,
     |             ^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version-1"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1724:13
     |
1724 |             patch=test_patch_1,
     |             ^^^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version-1"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1727:13
     |
1727 |             api=test_api_2,
     |             ^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-api-version-2"]`
     |

error[invalid-argument-type]: Argument is incorrect
    --> tests/commands/test_store_api.py:1733:13
     |
1733 |             patch=test_patch_2,
     |             ^^^^^^^^^^^^^^^^^^ Expected `int`, found `Literal["test-patch-version-2"]`
     |

error[invalid-method-override]: Invalid override of method `json`
   --> tests/commands/test_store_client.py:77:9
    |
 77 |       def json(self):
    |           ^^^^^^^^^^ Definition is incompatible with `Response.json`
    |
   ::: .venv/lib/python3.12/site-packages/requests-stubs/models.pyi:155:9
    |
155 |       def json(
    |  _________-
156 | |         self,
157 | |         *,
158 | |         cls: type[JSONDecoder] | None = ...,
159 | |         object_hook: Callable[[dict[Any, Any]], Any] | None = ...,
160 | |         parse_float: Callable[[str], Any] | None = ...,
161 | |         parse_int: Callable[[str], Any] | None = ...,
162 | |         parse_constant: Callable[[str], Any] | None = ...,
163 | |         object_pairs_hook: Callable[[list[tuple[Any, Any]]], Any] | None = ...,
164 | |         **kwds: Any,
165 | |     ) -> Any: ...
    | |____________- `Response.json` defined here
    |
info: This violates the Liskov Substitution Principle

error[invalid-argument-type]: Argument is incorrect
   --> tests/conftest.py:225:9
    |
225 |         build_on=arch,
    |         ^^^^^^^^^^^^^ Expected `DebianArchitecture`, found `str`
    |

error[invalid-argument-type]: Argument is incorrect
   --> tests/conftest.py:226:9
    |
226 |         build_for="arm64",
    |         ^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `Literal["arm64"]`
    |

error[invalid-method-override]: Invalid override of method `get_supported_bases`
  --> tests/extensions/test_extensions.py:33:9
   |
33 |     def get_supported_bases(cls) -> list[tuple[str, ...]]:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.get_supported_bases`
   |
  ::: charmcraft/extensions/extension.py:52:9
   |
52 |     def get_supported_bases() -> list[tuple[str, str]]:
   |         ---------------------------------------------- `Extension.get_supported_bases` defined here
   |
info: `FakeExtension.get_supported_bases` is a classmethod but `Extension.get_supported_bases` is a staticmethod
info: incompatible return types: `list[tuple[str, ...]]` is not assignable to `list[tuple[str, str]]`
info: This violates the Liskov Substitution Principle

error[invalid-return-type]: Return type does not match returned value
  --> tests/extensions/test_extensions.py:33:37
   |
33 |     def get_supported_bases(cls) -> list[tuple[str, ...]]:
   |                                     --------------------- Expected `list[tuple[str, ...]]` because of return type
34 |         """Return a list of tuple of supported bases."""
35 |         return cls.bases
   |                ^^^^^^^^^ expected `list[tuple[str, ...]]`, found `list[tuple[str, str]]`
   |

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_extensions.py:38:9
   |
38 |     def is_experimental(_base: tuple[str, ...] | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.is_experimental`
   |
  ::: charmcraft/extensions/extension.py:57:9
   |
57 |     def is_experimental(base: tuple[str, str] | None) -> bool:
   |         ----------------------------------------------------- `Extension.is_experimental` defined here
   |
info: the parameter named `_base` does not match `base` (and can be used as a keyword parameter)
info: This violates the Liskov Substitution Principle

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_extensions.py:62:9
   |
62 |     def is_experimental(_base: str | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `FakeExtension.is_experimental`
   |
  ::: tests/extensions/test_extensions.py:38:9
   |
38 |     def is_experimental(_base: tuple[str, ...] | None) -> bool:
   |         ------------------------------------------------------ `FakeExtension.is_experimental` defined here
   |
info: parameter `_base` has an incompatible type: `tuple[str, ...] | None` is not assignable to `str | None`
info: └── element `tuple[str, ...]` of union `tuple[str, ...] | None` is not assignable to `str | None`
info: This violates the Liskov Substitution Principle

error[invalid-method-override]: Invalid override of method `is_experimental`
  --> tests/extensions/test_registry.py:34:9
   |
34 |     def is_experimental(_base: tuple[str, str] | None) -> bool:
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Definition is incompatible with `Extension.is_experimental`
   |
  ::: charmcraft/extensions/extension.py:57:9
   |
57 |     def is_experimental(base: tuple[str, str] | None) -> bool:
   |         ----------------------------------------------------- `Extension.is_experimental` defined here
   |
info: the parameter named `_base` does not match `base` (and can be used as a keyword parameter)
info: This violates the Liskov Substitution Principle

warning[possibly-missing-submodule]: Submodule `application` might not have been imported
  --> tests/integration/commands/test_init.py:75:17
   |
75 |         {"app": charmcraft.application.APP_METADATA, "services": None}
   |                 ^^^^^^^^^^^^^^^^^^^^^^
   |
help: Consider explicitly importing `charmcraft.application`

error[unresolved-attribute]: Object of type `RecordingEmitter` has no attribute `assert_json_output`
   --> tests/integration/commands/test_store_commands.py:225:9
    |
225 |         emitter.assert_json_output(  # pyright: ignore[reportAttributeAccessIssue]
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

error[unresolved-attribute]: Unresolved attribute `client` on type `AppService`
  --> tests/integration/conftest.py:45:5
   |
45 |     factory.get("store").client = mock.Mock(spec_set=craft_store.StoreClient)  # pyright: ignore[reportAttributeAccessIssue]
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[invalid-argument-type]: Argument to `AppService.__init__` is incorrect
  --> tests/integration/services/test_image.py:28:9
   |
28 |         services=None,  # pyright: ignore[reportArgumentType]
   |         ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/base.py:44:9
   |
44 |     def __init__(self, app: AppMetadata, services: ServiceFactory) -> None:
   |         ^^^^^^^^                         ------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_lifecycle.py:40:17
   |
40 |                 build_for="invalid",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `Literal["invalid"]`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_lifecycle.py:88:17
   |
88 |                 build_for=f"{foreign_arch}-{host_arch}",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
  --> tests/integration/services/test_provider.py:56:28
   |
56 |     with provider.instance(**provider_kwargs):
   |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
   |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:101:28
    |
101 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `bool`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `bool`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `str | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `str | None`

error[invalid-argument-type]: Argument is incorrect
   --> tests/integration/services/test_provider.py:134:28
    |
134 |     with provider.instance(**provider_kwargs) as instance:
    |                            ^^^^^^^^^^^^^^^^^ Expected `((Executor, /) -> None) | None`, found `BuildInfo | Path`
    |
info: element `BuildInfo` of union `BuildInfo | Path` is not assignable to `((Executor, /) -> None) | None`

error[unresolved-import]: Cannot resolve imported module `charm`
 --> tests/spread/commands/init-extensions/tests/unit/test_charm.py:9:8
  |
9 | import charm
  |        ^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/commands/init-extensions/tests/unit/test_charm.py:10:6
   |
10 | from ops import testing
   |      ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/dependencies/setuptools-scm-python/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/extra-binary-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/extra-binary-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/extra-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/extra-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/missing-packages/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/missing-packages/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies-errors/no-requirements/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies-errors/no-requirements/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/dependencies/strict-dependencies/charm/src/charm.py:17:8
   |
17 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/dependencies/strict-dependencies/charm/src/charm.py:103:27
    |
103 |     ops.main(CharmCharm)  # type: ignore
    |                           ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
100 |
101 |
102 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(CharmCharm)  # type: ignore
103 +     ops.main(CharmCharm)

error[unresolved-import]: Module `charms.reactive` has no member `set_flag`
 --> tests/spread/smoketests/reactive/reactivecharm/reactive/reactivecharm.py:1:29
  |
1 | from charms.reactive import set_flag, when_not
  |                             ^^^^^^^^
  |

error[unresolved-import]: Module `charms.reactive` has no member `when_not`
 --> tests/spread/smoketests/reactive/reactivecharm/reactive/reactivecharm.py:1:39
  |
1 | from charms.reactive import set_flag, when_not
  |                                       ^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/ubuntu-20.04/charm/bases/src/charm.py:18:8
   |
18 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/ubuntu-20.04/charm/bases/src/charm.py:104:32
    |
104 |     ops.main(BasicBasesCharm)  # type: ignore
    |                                ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
101 |
102 |
103 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(BasicBasesCharm)  # type: ignore
104 +     ops.main(BasicBasesCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-20.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-20.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
  --> tests/spread/ubuntu-22.04/charm/bases/src/charm.py:18:8
   |
18 | import ops
   |        ^^^
   |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
   --> tests/spread/ubuntu-22.04/charm/bases/src/charm.py:104:32
    |
104 |     ops.main(BasicBasesCharm)  # type: ignore
    |                                ^^^^^^^^^^^^^^
    |
help: Remove the unused suppression comment
101 |
102 |
103 | if __name__ == "__main__":  # pragma: nocover
    -     ops.main(BasicBasesCharm)  # type: ignore
104 +     ops.main(BasicBasesCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-22.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-22.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-24.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-24.04/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-25.10/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-25.10/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/charm/platforms/src/charm.py:9:8
  |
9 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

warning[unused-type-ignore-comment]: Unused blanket `type: ignore` directive
  --> tests/spread/ubuntu-26.04/charm/platforms/src/charm.py:27:31
   |
27 |     ops.main(PlatformsCharm)  # type: ignore
   |                               ^^^^^^^^^^^^^^
   |
help: Remove the unused suppression comment
24 |
25 |
26 | if __name__ == "__main__":  # pragma: nocover
   -     ops.main(PlatformsCharm)  # type: ignore
27 +     ops.main(PlatformsCharm)

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/test-cmd/src/charm.py:6:8
  |
6 | import ops
  |        ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `pytest_operator.plugin`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/integration/test_charm.py:7:6
  |
7 | from pytest_operator.plugin import OpsTest
  |      ^^^^^^^^^^^^^^^^^^^^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Cannot resolve imported module `ops`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/unit/test_charm.py:2:6
  |
2 | from ops import testing
  |      ^^^
  |
info: Searched in the following paths during module resolution:
info:   1. /home/runner/work/charmcraft/charmcraft (first-party code)
info:   2. vendored://stdlib (stdlib typeshed stubs vendored by ty)
info:   3. /snap/astral-ty/1423/lib/python3.12/site-packages (site-packages)
info:   4. /snap/astral-ty/1423/lib64/python3.12/site-packages (site-packages)
info:   5. /home/runner/work/charmcraft/charmcraft/.venv/lib/python3.12/site-packages (site-packages)
info:   6. /home/runner/work/charmcraft/charmcraft/.venv/lib64/python3.12/site-packages (site-packages)
info: make sure your Python environment is properly configured: https://docs.astral.sh/ty/modules/#python-environment

error[unresolved-import]: Module `charm` has no member `TestCmdCharm`
 --> tests/spread/ubuntu-26.04/test-cmd/tests/unit/test_charm.py:4:19
  |
4 | from charm import TestCmdCharm
  |                   ^^^^^^^^^^^^
  |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:256:32
    |
256 |     with Timer("test message", foo=42):
    |                                ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:274:28
    |
274 |     @Timer("test message", foo=42)
    |                            ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-argument-type]: Argument to `Timer.__init__` is incorrect
   --> tests/test_instrum.py:298:32
    |
298 |     with Timer("test message", foo=42) as timer:
    |                                ^^^^^^ Expected `dict[str, Any]`, found `Literal[42]`
    |
info: Method defined here
   --> charmcraft/instrum.py:129:9
    |
129 |     def __init__(self, msg: str, **extra_info: dict[str, Any]):
    |         ^^^^^^^^                 ---------------------------- Parameter declared here
    |

error[invalid-assignment]: Object of type `Mock` is not assignable to attribute `write` of type `def write(self, library: Library) -> None`
  --> tests/unit/commands/test_lifecycle.py:91:5
   |
91 |     libs_service.write = mock.Mock(wraps=libs_service.write)
   |     ^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `write`. Add an annotation to make it explicit if this is intentional

error[unresolved-attribute]: Object of type `bound method CharmLibsService.write(library: Library) -> None` has no attribute `assert_called_once_with`
  --> tests/unit/commands/test_lifecycle.py:95:5
   |
95 |     libs_service.write.assert_called_once_with(store_lib)
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[not-subscriptable]: Cannot subscript object of type `None` with no `__getitem__` method
  --> tests/unit/models/test_config.py:75:23
   |
75 |     assert isinstance(config.options["my-opt"], type_)
   |                       ^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[invalid-assignment]: Object of type `() -> Literal["/python -m pip"]` is not assignable to attribute `_get_pip` of type `def _get_pip(self) -> str`
  --> tests/unit/parts/plugins/test_poetry.py:40:5
   |
40 |     poetry_plugin._get_pip = lambda: "/python -m pip"
   |     ^^^^^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `_get_pip`. Add an annotation to make it explicit if this is intentional

error[invalid-assignment]: Object of type `() -> Literal["/python -m pip"]` is not assignable to attribute `_get_pip` of type `def _get_pip(self) -> str`
  --> tests/unit/parts/plugins/test_python.py:62:5
   |
62 |     python_plugin._get_pip = lambda: "/python -m pip"
   |     ^^^^^^^^^^^^^^^^^^^^^^
   |
info: Implicit shadowing of function `_get_pip`. Add an annotation to make it explicit if this is intentional

error[invalid-argument-type]: Argument to `AnalysisService.__init__` is incorrect
   --> tests/unit/services/test_analysis.py:112:67
    |
112 |     return analysis.AnalysisService(app=application.APP_METADATA, services=None)
    |                                                                   ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
    |
info: Method defined here
  --> charmcraft/services/analysis.py:37:9
   |
37 |     def __init__(  # (too many arguments)
   |         ^^^^^^^^
38 |         self,
39 |         app: craft_application.AppMetadata,
40 |         services: craft_application.ServiceFactory,
   |         ------------------------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/unit/services/test_lifecycle.py:55:17
   |
55 |                 build_for=plan_build_for,  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument is incorrect
  --> tests/unit/services/test_lifecycle.py:94:17
   |
94 |                 build_for=f"{HOST_ARCH}-foreign",  # pyright: ignore[reportArgumentType]
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Expected `DebianArchitecture | Literal["all"]`, found `str`
   |

error[invalid-argument-type]: Argument to `ProjectService.__init__` is incorrect
  --> tests/unit/services/test_project.py:34:45
   |
34 |     return ProjectService(app=APP_METADATA, services=None, project_dir=project_path)
   |                                             ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/project.py:57:9
   |
57 |     def __init__(
   |         ^^^^^^^^
58 |         self, app: AppMetadata, services: ServiceFactory, *, project_dir: pathlib.Path
   |                                 ------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument to `ProviderService.__init__` is incorrect
   --> tests/unit/services/test_provider.py:123:9
    |
123 |         services=None,  # pyright: ignore[reportArgumentType]
    |         ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
    |
info: Method defined here
  --> charmcraft/services/provider.py:43:9
   |
43 |     def __init__(
   |         ^^^^^^^^
44 |         self,
45 |         app: craft_application.AppMetadata,
46 |         services: craft_application.ServiceFactory,
   |         ------------------------------------------ Parameter declared here
   |

error[invalid-argument-type]: Argument to `AppService.__init__` is incorrect
  --> tests/unit/services/test_store.py:50:56
   |
50 |     store = StoreService(app=application.APP_METADATA, services=None)
   |                                                        ^^^^^^^^^^^^^ Expected `ServiceFactory`, found `None`
   |
info: Method defined here
  --> .venv/lib/python3.12/site-packages/craft_application/services/base.py:44:9
   |
44 |     def __init__(self, app: AppMetadata, services: ServiceFactory) -> None:
   |         ^^^^^^^^                         ------------------------ Parameter declared here
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:43:12
   |
43 |     assert linters.PYTHON_NAME_REGEX.match(name).group(0) == name
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:44:12
   |
44 |     assert linters.PYTHON_NAME_REGEX.match(f"{name}{next_char}").group(0) == name
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:46:9
   |
46 |         linters.PYTHON_NAME_REGEX.match(f"{name}{next_char}{further_garbage}").group(0)
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:62:12
   |
62 |     assert linters.MIN_VERSION_REGEX.search(string).group(1) == expected
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:76:24
   |
76 |     assert expected in linters.APPROX_VERSION_REGEX.search(string).group(1, 2)
   |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[unresolved-attribute]: Attribute `group` is not defined on `None` in union `Match[str] | None`
  --> tests/unit/test_linters.py:84:12
   |
84 |     assert linters.EXACT_VERSION_REGEX.search(string).group(1) == expected
   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |

error[no-matching-overload]: No overload of function `format_content` matches arguments
   --> tests/unit/utils/test_cli.py:285:9
    |
285 |         format_content(None, fmt)
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^
    |
info: First overload defined here
   --> charmcraft/utils/cli.py:185:5
    |
185 |   def format_content(
    |  _____^
186 | |     content: dict[str, Any] | list[dict[str, Any]], fmt: OutputFormat | str | None
187 | | ) -> str: ...
    | |________^
    |
info: Possible overloads for function `format_content`:
info:   (content: dict[str, Any] | list[dict[str, Any]], fmt: OutputFormat | str | None) -> str
info:   (content: str | Real | list[Unknown] | dict[Unknown, Unknown], fmt: OutputFormat | str | None) -> str
info: Overload implementation defined here
   --> charmcraft/utils/cli.py:196:5
    |
196 | def format_content(content, fmt=None):
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |

Found 146 diagnostics

@lengau lengau merged commit b7f3752 into main Apr 23, 2026
20 of 26 checks passed
@lengau lengau deleted the copilot/reproduce-imagecraft-pr-327 branch April 23, 2026 17:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants