From f038a6d90a8f4e162bb638e9a03ad649be93ddc2 Mon Sep 17 00:00:00 2001 From: scttbnsn <80784472+scttbnsn@users.noreply.github.com> Date: Sun, 30 Aug 2026 00:28:07 -0400 Subject: [PATCH 1/3] chore(renovate): scope Portwing lock maintenance exception --- .github/tests/renovate_config_contract_test.py | 13 +++++++++++++ renovate-config.json | 10 ++++++++++ 2 files changed, 23 insertions(+) diff --git a/.github/tests/renovate_config_contract_test.py b/.github/tests/renovate_config_contract_test.py index 66dc2f8..40e0cbd 100644 --- a/.github/tests/renovate_config_contract_test.py +++ b/.github/tests/renovate_config_contract_test.py @@ -28,6 +28,19 @@ def test_gomod_updates_are_tidied(self): self.assertIn("gomodTidy", config.get("postUpdateOptions", [])) + def test_portwing_lock_maintenance_is_disabled_exactly(self): + config = self.read_config() + + matches = [ + rule + for rule in config.get("packageRules", []) + if rule.get("matchRepositories") == ["^CodesWhat/portwing$"] + ] + + self.assertEqual(1, len(matches)) + self.assertEqual(["lockFileMaintenance"], matches[0].get("matchUpdateTypes")) + self.assertIs(matches[0].get("enabled"), False) + if __name__ == "__main__": unittest.main() diff --git a/renovate-config.json b/renovate-config.json index 541b88b..9be8461 100644 --- a/renovate-config.json +++ b/renovate-config.json @@ -47,6 +47,16 @@ ], "groupName": "vite ecosystem", "groupSlug": "vite-ecosystem" + }, + { + "description": "Disable npm lock maintenance for Portwing because native packages are platform-specific", + "matchRepositories": [ + "^CodesWhat/portwing$" + ], + "matchUpdateTypes": [ + "lockFileMaintenance" + ], + "enabled": false } ] } From e4626ca9478c0308a1a6022be5e3a222d73ee93c Mon Sep 17 00:00:00 2001 From: scttbnsn <80784472+scttbnsn@users.noreply.github.com> Date: Sun, 30 Aug 2026 00:29:09 -0400 Subject: [PATCH 2/3] fix(renovate): use exact Portwing repository match --- .github/tests/renovate_config_contract_test.py | 2 +- renovate-config.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/tests/renovate_config_contract_test.py b/.github/tests/renovate_config_contract_test.py index 40e0cbd..074b980 100644 --- a/.github/tests/renovate_config_contract_test.py +++ b/.github/tests/renovate_config_contract_test.py @@ -34,7 +34,7 @@ def test_portwing_lock_maintenance_is_disabled_exactly(self): matches = [ rule for rule in config.get("packageRules", []) - if rule.get("matchRepositories") == ["^CodesWhat/portwing$"] + if rule.get("matchRepositories") == ["CodesWhat/portwing"] ] self.assertEqual(1, len(matches)) diff --git a/renovate-config.json b/renovate-config.json index 9be8461..f0a7940 100644 --- a/renovate-config.json +++ b/renovate-config.json @@ -51,7 +51,7 @@ { "description": "Disable npm lock maintenance for Portwing because native packages are platform-specific", "matchRepositories": [ - "^CodesWhat/portwing$" + "CodesWhat/portwing" ], "matchUpdateTypes": [ "lockFileMaintenance" From 674fdfa6678e0859bbff9815b923a69fd183f58e Mon Sep 17 00:00:00 2001 From: scttbnsn <80784472+scttbnsn@users.noreply.github.com> Date: Sun, 30 Aug 2026 00:34:34 -0400 Subject: [PATCH 3/3] test(renovate): run config contract in validation --- .github/tests/renovate_config_contract_test.py | 8 ++++++++ .github/workflows/standards-validation.yml | 1 + scripts/validate.sh | 1 + 3 files changed, 10 insertions(+) diff --git a/.github/tests/renovate_config_contract_test.py b/.github/tests/renovate_config_contract_test.py index 074b980..ac1e6f4 100644 --- a/.github/tests/renovate_config_contract_test.py +++ b/.github/tests/renovate_config_contract_test.py @@ -41,6 +41,14 @@ def test_portwing_lock_maintenance_is_disabled_exactly(self): self.assertEqual(["lockFileMaintenance"], matches[0].get("matchUpdateTypes")) self.assertIs(matches[0].get("enabled"), False) + def test_validation_runs_this_contract(self): + command = "python3 .github/tests/renovate_config_contract_test.py" + validation = (ROOT / "scripts/validate.sh").read_text() + workflow = (ROOT / ".github/workflows/standards-validation.yml").read_text() + + self.assertEqual(1, validation.count(command)) + self.assertEqual(1, workflow.count(command)) + if __name__ == "__main__": unittest.main() diff --git a/.github/workflows/standards-validation.yml b/.github/workflows/standards-validation.yml index 425ef4e..703d696 100644 --- a/.github/workflows/standards-validation.yml +++ b/.github/workflows/standards-validation.yml @@ -53,6 +53,7 @@ jobs: python3 .github/tests/greptile_config_contract_test.py python3 .github/tests/quality_report_contract_test.py python3 .github/tests/reusable_ci_contract_test.py + python3 .github/tests/renovate_config_contract_test.py python3 .github/tests/starchart_refresh_contract_test.py python3 .github/tests/main_is_released_contract_test.py diff --git a/scripts/validate.sh b/scripts/validate.sh index 5d02c10..e6d9504 100755 --- a/scripts/validate.sh +++ b/scripts/validate.sh @@ -16,6 +16,7 @@ python3 .github/tests/greptile_summon_contract_test.py python3 .github/tests/greptile_config_contract_test.py python3 .github/tests/quality_report_contract_test.py python3 .github/tests/reusable_ci_contract_test.py +python3 .github/tests/renovate_config_contract_test.py echo "==> compile python" python3 -m compileall -q .