From 4ca39793e7b581a8b85acf468a3eb801846ef59a Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Wed, 11 Mar 2026 21:00:03 +0100 Subject: [PATCH 1/2] ENH: add pre-commit to Dependabot --- .github/dependabot.yml | 5 ++++ .../check_dev_files/dependabot.py | 23 +++++++++++-------- .../check_dev_files/upgrade_lock.py | 2 +- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index c658ead2..f7979c65 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -12,3 +12,8 @@ updates: labels: [⬆️ Lock] multi-ecosystem-group: lock patterns: ["*"] + - package-ecosystem: pre-commit + directory: "/" + labels: [⬆️ Lock] + multi-ecosystem-group: lock + patterns: ["*"] diff --git a/src/compwa_policy/check_dev_files/dependabot.py b/src/compwa_policy/check_dev_files/dependabot.py index 98f4327e..cc37d320 100644 --- a/src/compwa_policy/check_dev_files/dependabot.py +++ b/src/compwa_policy/check_dev_files/dependabot.py @@ -17,17 +17,17 @@ from compwa_policy.check_dev_files.upgrade_lock import Frequency -def main(frequency: Frequency) -> None: +def main(frequency: Frequency) -> None: # noqa: C901 def dump_dependabot_config() -> None: dependabot_path.parent.mkdir(exist_ok=True) rt_yaml.dump(expected, dependabot_path) msg = f"Updated {dependabot_path}" raise PrecommitError(msg) - def append_ecosystem(ecosystem_name: str) -> None: - new_ecosystem = deepcopy(github_actions_ecosystem) # avoid YAML anchors + def get_ecosystem(ecosystem_name: str, /) -> dict[str, Any]: + new_ecosystem = deepcopy(template_ecosystem) # avoid YAML anchors new_ecosystem["package-ecosystem"] = ecosystem_name - package_ecosystems.append(new_ecosystem) + return new_ecosystem dependabot_path = CONFIG_PATH.github_workflow_dir.parent / "dependabot.yml" template_path = COMPWA_POLICY_DIR / dependabot_path @@ -36,20 +36,23 @@ def append_ecosystem(ecosystem_name: str) -> None: expected = rt_yaml.load(template_path) if frequency is not None: expected["multi-ecosystem-groups"]["lock"]["schedule"]["interval"] = frequency - package_ecosystems = cast("list[dict[str, Any]]", expected["updates"]) - github_actions_ecosystem = package_ecosystems[0] - if not is_committed(f"{CONFIG_PATH.github_workflow_dir / '*.yml'}"): - package_ecosystems.pop(0) + template_ecosystem = cast("dict[str, Any]", expected["updates"][0]) + package_ecosystems: list[dict[str, Any]] = [] + if is_committed(f"{CONFIG_PATH.github_workflow_dir / '*.yml'}"): + package_ecosystems.append(get_ecosystem("github-actions")) if is_committed("**/Manifest.toml"): - append_ecosystem("julia") + package_ecosystems.append(get_ecosystem("julia")) + if is_committed(".pre-commit-config.yaml"): + package_ecosystems.append(get_ecosystem("pre-commit")) if is_committed("uv.lock"): - append_ecosystem("uv") + package_ecosystems.append(get_ecosystem("uv")) if not package_ecosystems: dependabot_path.unlink(missing_ok=True) msg = f"Removed {dependabot_path}" raise PrecommitError(msg) return + expected["updates"] = package_ecosystems if not dependabot_path.exists(): dump_dependabot_config() existing = rt_yaml.load(dependabot_path) diff --git a/src/compwa_policy/check_dev_files/upgrade_lock.py b/src/compwa_policy/check_dev_files/upgrade_lock.py index 2dde61e9..95d92e24 100644 --- a/src/compwa_policy/check_dev_files/upgrade_lock.py +++ b/src/compwa_policy/check_dev_files/upgrade_lock.py @@ -34,7 +34,7 @@ "quarterly": "0 3 7 */3 *", "semiannually": "0 3 7 */6 *", } -__TRIGGER_ECOSYSTEMS = {"julia", "uv"} +__TRIGGER_ECOSYSTEMS = {"julia", "pre-commit", "uv"} def main( From 5ba185b27ea086f68e3166d1e753f6ff19a6fc34 Mon Sep 17 00:00:00 2001 From: Remco de Boer <29308176+redeboer@users.noreply.github.com> Date: Wed, 11 Mar 2026 21:23:12 +0100 Subject: [PATCH 2/2] MAINT: address `ty` issues --- src/compwa_policy/check_dev_files/poe.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/compwa_policy/check_dev_files/poe.py b/src/compwa_policy/check_dev_files/poe.py index 541af39c..de3f5205 100644 --- a/src/compwa_policy/check_dev_files/poe.py +++ b/src/compwa_policy/check_dev_files/poe.py @@ -146,7 +146,7 @@ def _set_jupyter_lab_task(pyproject: ModifiablePyproject) -> None: if isinstance(executor := existing.get("executor"), Mapping): expected["executor"] = executor elif "jupyter" in set(pyproject.get_table("dependency-groups", fallback=set())): - expected["executor"] = to_inline_table({"group": "jupyter"}) + expected["executor"] = to_inline_table({"group": "jupyter"}) # ty:ignore[invalid-assignment] if existing != expected: tasks["lab"] = expected msg = f"Set Poe the Poet jupyter task in {CONFIG_PATH.pyproject}" @@ -183,7 +183,7 @@ def _set_nb_task(pyproject: ModifiablePyproject) -> None: executor["with"] = existing_executor_with else: executor["with"] = "nbmake" - expected["executor"] = to_inline_table(executor) + expected["executor"] = to_inline_table(executor) # ty:ignore[invalid-assignment] if existing != expected: tasks["nb"] = expected msg = f"Set Poe the Poet nb task in {CONFIG_PATH.pyproject}"