github2gerrit 2.4.0__tar.gz → 2.4.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. github2gerrit-2.4.1/.pre-commit-config.yaml +241 -0
  2. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/PKG-INFO +1 -1
  3. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/uv.lock +25 -25
  4. github2gerrit-2.4.0/.pre-commit-config.yaml +0 -251
  5. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/.aislop/config.yml +0 -0
  6. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/.editorconfig +0 -0
  7. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/.gitignore +0 -0
  8. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/.gitlint +0 -0
  9. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/.markdownlint.yaml +0 -0
  10. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/.yamllint +0 -0
  11. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/LICENSE +0 -0
  12. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/LICENSES/Apache-2.0.txt +0 -0
  13. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/README.md +0 -0
  14. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/REUSE.toml +0 -0
  15. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/SECURITY.md +0 -0
  16. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/action.yaml +0 -0
  17. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/docs/COMMIT_RULES.md +0 -0
  18. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/docs/cli.md +0 -0
  19. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/docs/development.md +0 -0
  20. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/docs/features.md +0 -0
  21. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/docs/github2gerrit_token_permissions_classic.png +0 -0
  22. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/pyproject.toml +0 -0
  23. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/sitecustomize.py +0 -0
  24. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/__init__.py +0 -0
  25. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/approvers.py +0 -0
  26. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/cli.py +0 -0
  27. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/commit_normalization.py +0 -0
  28. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/commit_rules.py +0 -0
  29. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/config.py +0 -0
  30. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/config_ini.py +0 -0
  31. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/constants.py +0 -0
  32. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/core.py +0 -0
  33. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/duplicate_detection.py +0 -0
  34. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/error_codes.py +0 -0
  35. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/external_api.py +0 -0
  36. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/gerrit_pr_closer.py +0 -0
  37. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/gerrit_query.py +0 -0
  38. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/gerrit_rest.py +0 -0
  39. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/gerrit_ssh.py +0 -0
  40. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/gerrit_urls.py +0 -0
  41. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/github_api.py +0 -0
  42. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/gitreview.py +0 -0
  43. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/gitutils.py +0 -0
  44. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/mapping_comment.py +0 -0
  45. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/models.py +0 -0
  46. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/netrc.py +0 -0
  47. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/orchestrator/__init__.py +0 -0
  48. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/orchestrator/reconciliation.py +0 -0
  49. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/pr_approval.py +0 -0
  50. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/pr_commands.py +0 -0
  51. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/pr_content_filter.py +0 -0
  52. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/pr_directives.py +0 -0
  53. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/project_names.py +0 -0
  54. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/reconcile_matcher.py +0 -0
  55. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/rich_display.py +0 -0
  56. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/rich_logging.py +0 -0
  57. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/similarity.py +0 -0
  58. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/ssh_agent_setup.py +0 -0
  59. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/ssh_common.py +0 -0
  60. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/ssh_config_parser.py +0 -0
  61. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/ssh_discovery.py +0 -0
  62. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/trailers.py +0 -0
  63. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/trust.py +0 -0
  64. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/src/github2gerrit/utils.py +0 -0
  65. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/conftest.py +0 -0
  66. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/fixtures/__init__.py +0 -0
  67. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/fixtures/make_repo.py +0 -0
  68. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/fixtures/ssh_config_samples.py +0 -0
  69. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_action_environment_mapping.py +0 -0
  70. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_action_outputs.py +0 -0
  71. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_action_pr_number_handling.py +0 -0
  72. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_action_step_validation.py +0 -0
  73. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_approver_sources.py +0 -0
  74. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_automation_only.py +0 -0
  75. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_bulk_fan_out.py +0 -0
  76. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_cache_isolation.py +0 -0
  77. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_change_id_deduplication.py +0 -0
  78. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_clean_squash_title.py +0 -0
  79. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_cli.py +0 -0
  80. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_cli_helpers.py +0 -0
  81. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_cli_netrc_options.py +0 -0
  82. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_cli_outputs_file.py +0 -0
  83. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_cli_url_and_dryrun.py +0 -0
  84. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_commit_normalization.py +0 -0
  85. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_commit_rules.py +0 -0
  86. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_composite_action_coverage.py +0 -0
  87. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_config_and_reviewers.py +0 -0
  88. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_config_helpers.py +0 -0
  89. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_core_close_pr_policy.py +0 -0
  90. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_core_config_and_errors.py +0 -0
  91. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_core_gerrit_backref_comment.py +0 -0
  92. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_core_gerrit_push_errors.py +0 -0
  93. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_core_gerrit_rest_results.py +0 -0
  94. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_core_integration_fixture_repo.py +0 -0
  95. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_core_prepare_commits.py +0 -0
  96. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_core_shallow_clone.py +0 -0
  97. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_core_ssh_setup.py +0 -0
  98. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_core_ssrf_protection.py +0 -0
  99. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_dependency_supersession.py +0 -0
  100. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_dns_validation_and_no_gerrit.py +0 -0
  101. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_duplicate_detection.py +0 -0
  102. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_email_case_normalization.py +0 -0
  103. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_error_codes.py +0 -0
  104. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_external_api_framework.py +0 -0
  105. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_final_state_reconciliation.py +0 -0
  106. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_force_flag_cli.py +0 -0
  107. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_fork_approval_gate.py +0 -0
  108. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_fork_pr_hardening.py +0 -0
  109. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_fork_transfer_record.py +0 -0
  110. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_gerrit_change_id_footer.py +0 -0
  111. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_gerrit_change_status_checks.py +0 -0
  112. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_gerrit_pr_closer.py +0 -0
  113. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_gerrit_rest_client.py +0 -0
  114. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_gerrit_ssh_abandon.py +0 -0
  115. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_gerrit_urls.py +0 -0
  116. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_gerrit_urls_more.py +0 -0
  117. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_ghe_and_gitreview_args.py +0 -0
  118. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_github_api_error_handling.py +0 -0
  119. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_github_api_helpers.py +0 -0
  120. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_github_api_retry_and_helpers.py +0 -0
  121. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_gitreview.py +0 -0
  122. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_gitutils_helpers.py +0 -0
  123. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_issue_157_regressions.py +0 -0
  124. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_mapping_comment_additional.py +0 -0
  125. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_mapping_comment_digest_and_backref.py +0 -0
  126. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_metadata_and_reconciliation.py +0 -0
  127. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_metadata_trailer_separation_bug.py +0 -0
  128. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_misc_small_coverage.py +0 -0
  129. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_netrc.py +0 -0
  130. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_orphan_rest_side_effects.py +0 -0
  131. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_pr_closed_handling.py +0 -0
  132. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_pr_command_authorisation.py +0 -0
  133. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_pr_commands.py +0 -0
  134. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_pr_content_filter.py +0 -0
  135. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_pr_content_filter_integration.py +0 -0
  136. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_pr_update_detection.py +0 -0
  137. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_precommit_mypy_pins.py +0 -0
  138. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_project_names.py +0 -0
  139. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_reconciliation_extracted_module.py +0 -0
  140. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_reconciliation_plan_and_orphans.py +0 -0
  141. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_reconciliation_scenarios.py +0 -0
  142. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_scheduled_sweep.py +0 -0
  143. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_ssh_agent.py +0 -0
  144. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_ssh_agent_ownership.py +0 -0
  145. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_ssh_artifact_prevention.py +0 -0
  146. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_ssh_common.py +0 -0
  147. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_ssh_discovery.py +0 -0
  148. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_ssh_discovery_dry_run.py +0 -0
  149. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_sync_mypy_pins.py +0 -0
  150. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_trailers_additional.py +0 -0
  151. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_url_parser.py +0 -0
  152. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/test_utils.py +0 -0
  153. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/unit/test_config_integration.py +0 -0
  154. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/unit/test_ssh_config_parser.py +0 -0
  155. {github2gerrit-2.4.0 → github2gerrit-2.4.1}/tests/workflow_harness.py +0 -0
@@ -0,0 +1,241 @@
1
+ ---
2
+ # SPDX-License-Identifier: Apache-2.0
3
+ # SPDX-FileCopyrightText: 2025 The Linux Foundation
4
+
5
+ ci:
6
+ autofix_prs: false
7
+ skip:
8
+ - pytest
9
+ - gha-workflow-linter
10
+ - aislop
11
+ - eslint
12
+ - go-fmt
13
+ - go-vet
14
+ - go-mod-tidy
15
+ - golangci-lint
16
+ autofix_commit_msg: |
17
+ Chore: Pre-commit autofixes
18
+
19
+ Signed-off-by: pre-commit-ci[bot] <pre-commit-ci@users.noreply.github.com>
20
+ autoupdate_commit_msg: |
21
+ Chore: Pre-commit autoupdate
22
+
23
+ Signed-off-by: pre-commit-ci[bot] <pre-commit-ci@users.noreply.github.com>
24
+
25
+ default_install_hook_types: [pre-commit, commit-msg]
26
+ default_stages: [pre-commit]
27
+
28
+ exclude: |
29
+ (?x)^(docs/conf.py|
30
+ \.mypy_cache/|
31
+ \.pytest_cache/|
32
+ \.ruff_cache/|
33
+ dist/|
34
+ build/|
35
+ coverage_html_report/|
36
+ \.venv/)
37
+
38
+ repos:
39
+ - repo: local
40
+ hooks:
41
+ - id: frozen-rev-is-a-release
42
+ name: frozen revs name a release
43
+ language: pygrep
44
+ # yamllint disable-line rule:line-length
45
+ entry: '^[ \t]*rev:[ \t]*\S+[ \t]+#[ \t]*frozen:(?![ \t]+v?[0-9]+(\.[0-9]+)*(-[0-9]+)?[ \t]*$)'
46
+ files: '^\.pre-commit-config\.yaml$'
47
+
48
+ - repo: https://github.com/pre-commit/pre-commit-hooks
49
+ rev: 3e8a8703264a2f4a69428a0aa4dcb512790b2c8c # frozen: v6.0.0
50
+ hooks:
51
+ - id: trailing-whitespace
52
+ - id: check-added-large-files
53
+ - id: check-ast
54
+ - id: check-json
55
+ - id: check-merge-conflict
56
+ - id: check-xml
57
+ - id: check-yaml
58
+ - id: debug-statements
59
+ - id: end-of-file-fixer
60
+ - id: requirements-txt-fixer
61
+ - id: mixed-line-ending
62
+ args: ["--fix=lf"]
63
+ - id: no-commit-to-branch
64
+ args:
65
+ - --branch=dev
66
+ - --branch=master
67
+ - --branch=main
68
+ - --branch=rc
69
+ - --branch=production
70
+
71
+ - repo: https://github.com/gitleaks/gitleaks
72
+ rev: 2ca41cc1372d1e939a6a879f18cdc19fc1cac1ce # frozen: v8.30.0
73
+ hooks:
74
+ - id: gitleaks
75
+ always_run: true
76
+
77
+ - repo: https://github.com/jorisroovers/gitlint
78
+ rev: acc9d9de6369b76d22cb4167029d2035e8730b98 # frozen: v0.19.1
79
+ hooks:
80
+ - id: gitlint
81
+
82
+ - repo: https://github.com/adrienverge/yamllint.git
83
+ rev: cba56bcde1fdd01c1deb3f945e69764c291a6530 # frozen: v1.38.0
84
+ hooks:
85
+ - id: yamllint
86
+ types: [yaml]
87
+
88
+ - repo: https://github.com/astral-sh/ruff-pre-commit
89
+ rev: a56c0b927e6465d37cae3e97d35d4d18ab2b96cd # frozen: v0.16.9
90
+ hooks:
91
+ - id: ruff
92
+ files: ^(src|scripts|tests)/.+\.py$|^sitecustomize\.py$
93
+ args: [--fix, --exit-non-zero-on-fix]
94
+ - id: ruff-format
95
+ files: ^(src|scripts|tests)/.+\.py$|^sitecustomize\.py$
96
+
97
+ - repo: local
98
+ hooks:
99
+ - id: sync-mypy-pins
100
+ name: sync mypy hook pins with uv.lock
101
+ entry: python3 scripts/sync_mypy_pins.py
102
+ language: system
103
+ files: ^(\.pre-commit-config\.yaml|uv\.lock)$
104
+ pass_filenames: false
105
+
106
+ - repo: https://github.com/pre-commit/mirrors-mypy
107
+ rev: 7ff8d35ae36a7d2b968f2f90b4c723e292e594ee # frozen: v2.3.1
108
+ hooks:
109
+ - id: mypy
110
+ files: ^(src|scripts|tests)/.+\.py$|^sitecustomize\.py$
111
+ additional_dependencies:
112
+ - mypy==2.3.1
113
+ - click==8.5.0
114
+ - pytest==9.1.1
115
+ - responses==0.26.3
116
+ - rich==15.0.0
117
+ - typer==0.27.2
118
+ - types-PyYAML==6.0.12.20260906
119
+ - types-requests==2.33.0.20260906
120
+
121
+ - repo: https://github.com/btford/write-good
122
+ rev: ab66ce10136dfad5146e69e70f82a3efac8842c1 # frozen: v1.0.8
123
+ hooks:
124
+ - id: write-good
125
+ files: "\\.(rst|md|markdown|mdown|mkdn)$"
126
+ args: ["--no-adverb"]
127
+
128
+ - repo: https://github.com/shellcheck-py/shellcheck-py
129
+ rev: a6564f5d57444e123433a5c9af733e3975c77229 # frozen: v0.11.0.1-1
130
+ hooks:
131
+ - id: shellcheck
132
+
133
+ - repo: https://github.com/igorshubovych/markdownlint-cli
134
+ rev: 5b5dddc4fb0f83c3ea1fc5616fa63e115dce83e0 # frozen: v0.49.1
135
+ hooks:
136
+ - id: markdownlint
137
+ args: ["--fix", "--config", ".markdownlint.yaml"]
138
+ exclude: "GERRIT_URL_CENTRALIZATION.md"
139
+
140
+ - repo: https://github.com/fsfe/reuse-tool
141
+ rev: 9fabf9eb815a57aac116b435e8346c200cdb8604 # frozen: v6.2.0
142
+ hooks:
143
+ - id: reuse
144
+
145
+ - repo: https://github.com/kjanat/actionlint
146
+ rev: 2da2ceb4af2c7ecc48f5b9311d85080c3971b5f0 # frozen: v1.17.0
147
+ hooks:
148
+ - id: actionlint-shellcheck
149
+
150
+ - repo: https://github.com/codespell-project/codespell
151
+ rev: 57b21406f092110c18776e39b0bda50d37c945c8 # frozen: v2.4.3
152
+ hooks:
153
+ - id: codespell
154
+
155
+ - repo: https://github.com/DetachHead/basedpyright-prek-mirror
156
+ rev: 706e6acebe9e88c2c28d1527d3085a14b11794c4 # frozen: 1.40.1
157
+ hooks:
158
+ - id: basedpyright
159
+ files: ^(src|scripts|tests)/.+\.py$|^sitecustomize\.py$
160
+
161
+ - repo: https://github.com/lfreleng-actions/gha-workflow-linter
162
+ rev: 0c582e431022f1c7004196fb4ea32744d1fe4843 # frozen: v1.7.0
163
+ hooks:
164
+ - id: gha-workflow-linter
165
+
166
+ - repo: local
167
+ hooks:
168
+ - id: aislop
169
+ name: aislop
170
+ entry: aislop ci --human
171
+ language: node
172
+ additional_dependencies: ["aislop@0.14.1"]
173
+ pass_filenames: false
174
+ always_run: true
175
+
176
+ - repo: local
177
+ hooks:
178
+ - id: eslint
179
+ name: eslint
180
+ # yamllint disable-line rule:line-length
181
+ entry: bash -c 'export GUARD_EXCLUDE="(^|/)(dist|build|coverage|node_modules)/|(^|/)eslint[.]config[.](m|c)?js$"; sh .github/hooks/manifest-guard.sh package.json "*.js" "*.jsx" "*.mjs" "*.cjs" "*.ts" "*.tsx" "*.mts" "*.cts"; rc=$?; case "$rc" in 3|4) ;; *) exit "$rc";; esac; v=$(npx --no-install eslint --version 2>/dev/null | sed "s/^v//; s/[.].*$//"); if [ -z "$v" ]; then echo "eslint not installed - add eslint >=9 to devDependencies" >&2; exit 1; fi; if [ "$v" -lt 9 ]; then echo "eslint $v cannot load a flat config reliably - upgrade to >=9" >&2; exit 1; fi; if ! git ls-files -- eslint.config.mjs | grep -q .; then echo "eslint.config.mjs is not tracked - copy it from actions-template, or ESLint would lint against a config outside this repository" >&2; exit 1; fi; { sh .github/hooks/manifest-guard.sh --list package.json "*.js" "*.jsx" "*.mjs" "*.cjs" "*.ts" "*.tsx" "*.mts" "*.cts"; printf "eslint.config.mjs\0"; } | xargs -0 env ESLINT_USE_FLAT_CONFIG=true npx --no-install eslint --no-config-lookup --config eslint.config.mjs --fix'
182
+ language: system
183
+ always_run: true
184
+ pass_filenames: false
185
+
186
+ - repo: local
187
+ hooks:
188
+ - id: go-fmt
189
+ name: go format (gofmt + goimports)
190
+ # yamllint disable-line rule:line-length
191
+ entry: bash -c 'sh .github/hooks/manifest-guard.sh go.mod "*.go"; rc=$?; case "$rc" in 3) ;; 4) exit 0;; *) exit "$rc";; esac; command -v golangci-lint >/dev/null 2>&1 || { echo "golangci-lint not installed - see https://golangci-lint.run/welcome/install/" >&2; exit 1; }; sh .github/hooks/manifest-guard.sh --list go.mod "*.go" | xargs -0 golangci-lint fmt'
192
+ language: system
193
+ always_run: true
194
+ pass_filenames: false
195
+ - id: go-mod-tidy
196
+ name: go mod tidy
197
+ # yamllint disable-line rule:line-length
198
+ entry: bash -c 'sh .github/hooks/manifest-guard.sh go.mod "*.go"; rc=$?; case "$rc" in 3|4) ;; *) exit "$rc";; esac; go mod tidy'
199
+ language: system
200
+ always_run: true
201
+ pass_filenames: false
202
+ - id: go-vet
203
+ name: go vet
204
+ # yamllint disable-line rule:line-length
205
+ entry: bash -c 'sh .github/hooks/manifest-guard.sh go.mod "*.go"; rc=$?; case "$rc" in 3) ;; 4) exit 0;; *) exit "$rc";; esac; go vet ./...'
206
+ language: system
207
+ always_run: true
208
+ pass_filenames: false
209
+ - id: golangci-lint
210
+ name: golangci-lint
211
+ # yamllint disable-line rule:line-length
212
+ entry: bash -c 'sh .github/hooks/manifest-guard.sh go.mod "*.go"; rc=$?; case "$rc" in 3) ;; 4) exit 0;; *) exit "$rc";; esac; command -v golangci-lint >/dev/null 2>&1 || { echo "golangci-lint not installed - see https://golangci-lint.run/welcome/install/" >&2; exit 1; }; golangci-lint run --timeout=5m'
213
+ language: system
214
+ always_run: true
215
+ pass_filenames: false
216
+
217
+ - repo: https://github.com/python-jsonschema/check-jsonschema
218
+ rev: 4f85d46a92dc17713078e5de73f8a13190edf6fc # frozen: 0.38.2
219
+ hooks:
220
+ - id: check-github-actions
221
+ - id: check-github-workflows
222
+ - id: check-jsonschema
223
+ name: Check GitHub Workflows set timeout-minutes
224
+ args:
225
+ - --builtin-schema
226
+ - github-workflows-require-timeout
227
+ files: ^\.github/workflows/[^/]+$
228
+ types:
229
+ - yaml
230
+ - id: check-readthedocs
231
+
232
+ - repo: local
233
+ hooks:
234
+ - id: pytest
235
+ name: pytest
236
+ entry: uv
237
+ args: [run, pytest, --tb=short, -q, -v, --strict-markers, --maxfail=5]
238
+ language: system
239
+ pass_filenames: false
240
+ always_run: true
241
+ require_serial: true
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: github2gerrit
3
- Version: 2.4.0
3
+ Version: 2.4.1
4
4
  Summary: Submit a GitHub pull request to a Gerrit repository.
5
5
  Project-URL: Homepage, https://github.com/lfreleng-actions/github2gerrit-action
6
6
  Project-URL: Repository, https://github.com/lfreleng-actions/github2gerrit-action
@@ -458,7 +458,7 @@ wheels = [
458
458
 
459
459
  [[package]]
460
460
  name = "hatchling"
461
- version = "1.32.0"
461
+ version = "1.32.3"
462
462
  source = { registry = "https://pypi.org/simple" }
463
463
  dependencies = [
464
464
  { name = "packaging" },
@@ -467,9 +467,9 @@ dependencies = [
467
467
  { name = "tomlkit" },
468
468
  { name = "trove-classifiers" },
469
469
  ]
470
- sdist = { url = "https://files.pythonhosted.org/packages/69/08/33331757185504aae48b8d9bd78cec03a76e3aecfb52e549d05a2347c0dd/hatchling-1.32.0.tar.gz", hash = "sha256:0bdbde4a52b06c37e3eca395f85a762bf0ef06fe374fd8ae429dc6be10230f5f", size = 57783, upload-time = "2026-08-11T05:03:44.114Z" }
470
+ sdist = { url = "https://files.pythonhosted.org/packages/62/7f/b20bd29978bec1f2ddd3bbc1cdc5829bb2dd5c1476facd8a84bfe9934c5e/hatchling-1.32.3.tar.gz", hash = "sha256:acdd4436d84d829c6e7ae6df723241d8f0bca9c5bad5a6148bd41f2ea6b8a792", size = 58154, upload-time = "2026-09-17T20:05:11.675Z" }
471
471
  wheels = [
472
- { url = "https://files.pythonhosted.org/packages/a9/84/1798b6d85ecde0e31546004efd25c5de1b1f49250644a60cce460e12593a/hatchling-1.32.0-py3-none-any.whl", hash = "sha256:0e17c9c3b9aa7c625acc8d0f5b622f107d5049af9ecf5ada4de1aada5be7cdbc", size = 78435, upload-time = "2026-08-11T05:03:42.644Z" },
472
+ { url = "https://files.pythonhosted.org/packages/f6/89/268c7e4b2bcf2071047366c4c3b4b0e89f640e13ea7bfdaf1df6c40e5140/hatchling-1.32.3-py3-none-any.whl", hash = "sha256:d05b350af5d9aa5bf7b34b434a45a742b99e67d0b48ea67d240cfeab98e13945", size = 78895, upload-time = "2026-09-17T20:05:10.38Z" },
473
473
  ]
474
474
 
475
475
  [[package]]
@@ -928,27 +928,27 @@ wheels = [
928
928
 
929
929
  [[package]]
930
930
  name = "ruff"
931
- version = "0.16.7"
931
+ version = "0.16.8"
932
932
  source = { registry = "https://pypi.org/simple" }
933
- sdist = { url = "https://files.pythonhosted.org/packages/82/bb/5a449b9162e49b139d72f61672bd3ac1d790221f796d3304e2241fff4c58/ruff-0.16.7.tar.gz", hash = "sha256:5f71d004ac1263b22fa39462ac5ae618a4b77d58981af2cc79bf79a29c12b1a6", size = 4924184, upload-time = "2026-09-10T18:04:06.336Z" }
933
+ sdist = { url = "https://files.pythonhosted.org/packages/ba/78/449cb84790bd5cc3823b2652ee405a4558856e5c4195aee3a16bf7b3eb5d/ruff-0.16.8.tar.gz", hash = "sha256:9247bf92b5f04d825c8639a4fe423ec2e4222acd9222e58412b0dab7e442798b", size = 4938814, upload-time = "2026-09-16T15:54:46.688Z" }
934
934
  wheels = [
935
- { url = "https://files.pythonhosted.org/packages/e3/b2/c80aeeb7f9e469c0d63a85d2f1ab6e1ebfbe10ea7a8d2438b7e09e3ff09e/ruff-0.16.7-py3-none-linux_armv6l.whl", hash = "sha256:727307773e7c7f9181d3ed3a2484186e56c1fa1874255911c74585eb2c7c19f9", size = 10048917, upload-time = "2026-09-10T18:03:30.28Z" },
936
- { url = "https://files.pythonhosted.org/packages/7b/96/20bb7bcae008004df52afcb7ac83432d4a467f2c17b672fe46d26be231c5/ruff-0.16.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:9d61c258deabf58f34c67bd4bb4d939c7f2e6b5f0e59c1cdd1cf771b11cde929", size = 10242929, upload-time = "2026-09-10T18:03:32.706Z" },
937
- { url = "https://files.pythonhosted.org/packages/90/b2/f184b0d5abec02db69cfd7e49b688ae0237554528ca777136c613bf36bee/ruff-0.16.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7ab81118df8945e0193d0240712aa4496573595b75185c3636ed825592a0f728", size = 9847245, upload-time = "2026-09-10T18:03:34.509Z" },
938
- { url = "https://files.pythonhosted.org/packages/eb/2d/db1633a641866ed801e34cc6b60ef236c5e16f9b2124ab1d49cc24a5fe4f/ruff-0.16.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c196c968874fc8019da8e7163de7a1a370f111e2309b4b7dfea0fce950198d0", size = 9961780, upload-time = "2026-09-10T18:03:36.618Z" },
939
- { url = "https://files.pythonhosted.org/packages/4d/98/edea21e1a3e38dbbc3bf6bb068b863b3b06184cf8533a4c7dbbe208a89d5/ruff-0.16.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac8c3bd0a7e10ad31e6ce51e7a99f3cb772e69aecdd6b9ea7e99b362f62a62c0", size = 9866337, upload-time = "2026-09-10T18:03:38.805Z" },
940
- { url = "https://files.pythonhosted.org/packages/0b/11/a15e60d4c87b214646f116ca9d204475bf993ee1047459bc9a360fd4d6d1/ruff-0.16.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:398d3988edde000b5c75dc1b3f584708da9bc990de069c18909142580fec1af9", size = 10562512, upload-time = "2026-09-10T18:03:40.71Z" },
941
- { url = "https://files.pythonhosted.org/packages/29/42/eaff4c9b6d0c7cdf56df313a17e89ae854f5bbc0b0c8f9cce19be0ab7a8f/ruff-0.16.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce05b62b770a8217c4646a9c4139fca00efe8fe5d71f87df2b243ff20d4584d1", size = 11302938, upload-time = "2026-09-10T18:03:42.607Z" },
942
- { url = "https://files.pythonhosted.org/packages/5d/43/c75aa59a4ec181fe2ec06cab30e198c1c6d107229a9f008ae3a7c16cabd8/ruff-0.16.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af1b576fddb9d9ef2ececfb5fadcd6a624b25070ed85e3cfcfe449fc3ff6a7b9", size = 10840857, upload-time = "2026-09-10T18:03:44.604Z" },
943
- { url = "https://files.pythonhosted.org/packages/21/33/81f3da371942ea031105ba679d8d6e28ec1660ccd690a45f42d381161356/ruff-0.16.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ce7f8f22df67c93ed96c717f9128eadb797144ac2bad475cf536f31d6100c55", size = 10370001, upload-time = "2026-09-10T18:03:46.706Z" },
944
- { url = "https://files.pythonhosted.org/packages/fa/0b/6345fb4dbf6dd0ed1cfe5d18391dc9c3f59cc81622a7b0a65b84b3e730ba/ruff-0.16.7-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:06d0e93d04f392996435ebd600c153f65b47d73fbec2415aa99c5ee5756b3a5f", size = 10548735, upload-time = "2026-09-10T18:03:48.658Z" },
945
- { url = "https://files.pythonhosted.org/packages/3f/4d/c5576adf511f92a328e5569dda190ecdd430da51f1a649f3a4a2fd73e21e/ruff-0.16.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:142151a5e7b93c1b11111337142f89dd2fbfee92161225c99a97222f22e32656", size = 10108496, upload-time = "2026-09-10T18:03:50.563Z" },
946
- { url = "https://files.pythonhosted.org/packages/ff/8c/667d83c16199a17a56adc6b0bd4c3beb5b767a2babcd16a56f76f9be7fd6/ruff-0.16.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:e6651f97a342d8b35d54d8991544ca22169b86dc54111cb604666940c431b750", size = 9860136, upload-time = "2026-09-10T18:03:52.621Z" },
947
- { url = "https://files.pythonhosted.org/packages/99/75/78d401106731999a1dd20cc5a6961e37e1eb9397a3b589f73f3a5ce146a3/ruff-0.16.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:ef140c6eb935fa9a84c9c607dfb2cb1b85843c192e79265b0c54f35f557ea8e5", size = 10286290, upload-time = "2026-09-10T18:03:55.207Z" },
948
- { url = "https://files.pythonhosted.org/packages/68/49/56f9c3a8b755df93a0ad318b2147bf4ef5dae9a7e5ec61c460109c67957f/ruff-0.16.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:53e39506a730fadeee0d998ed5946f30671f0db240c6c7c73bdabbe33604bb6f", size = 10745048, upload-time = "2026-09-10T18:03:57.299Z" },
949
- { url = "https://files.pythonhosted.org/packages/5f/ea/7f9b938a63ece4bec677ad7f9f7fa02df3383db1949ed93a382441c09a87/ruff-0.16.7-py3-none-win32.whl", hash = "sha256:2ea3470fcebcbc5df2fb0c6f3b90333fa9084c534e0111c038fa4a6ab9f1c4b7", size = 10059082, upload-time = "2026-09-10T18:03:59.632Z" },
950
- { url = "https://files.pythonhosted.org/packages/39/11/480a6973a927aa653e1cead6a6416008640e03a99d05b34c0434b8c6c366/ruff-0.16.7-py3-none-win_amd64.whl", hash = "sha256:7ac26aca826e9e21d0f1cb25b54ac660760a9fdd094d3e4df9848232be98cfc6", size = 10593368, upload-time = "2026-09-10T18:04:01.999Z" },
951
- { url = "https://files.pythonhosted.org/packages/8b/4b/51327018d056f0dad2c2238f26d1fb0f53707a9d91b75dea6d1b3039f136/ruff-0.16.7-py3-none-win_arm64.whl", hash = "sha256:aab7f39e2c9df6c596216070f98eef1207b94f8516cca20c808826974971855b", size = 10412401, upload-time = "2026-09-10T18:04:04.098Z" },
935
+ { url = "https://files.pythonhosted.org/packages/ac/25/6071aabc530e9be7e2c195e8fe3f7aea2735405b6cf447212832d7811831/ruff-0.16.8-py3-none-linux_armv6l.whl", hash = "sha256:6ffbd6d87383c1edf5f6fa890f10200950240d7c1a16052a19a09d3a2307dd38", size = 10048966, upload-time = "2026-09-16T15:53:57.605Z" },
936
+ { url = "https://files.pythonhosted.org/packages/54/98/07f90ecbc74dd5fb5764f11f2bc774d6a7cffef92d2ff5f5b4e9e23c754e/ruff-0.16.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:42ed6b878ed61e3acca92f2730a17acff39286944ea82398544696366a6f925e", size = 10165498, upload-time = "2026-09-16T15:54:01.14Z" },
937
+ { url = "https://files.pythonhosted.org/packages/fe/1f/e6a712e3b47cad4a40600134105ed193cb773f618a42eb7ba323cb812cc0/ruff-0.16.8-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7ea781c7f2afba8c6a505ea0fb3f994020249e0c450635f5381286fea6b46170", size = 9830004, upload-time = "2026-09-16T15:54:03.998Z" },
938
+ { url = "https://files.pythonhosted.org/packages/23/f2/311a08776d75d81c7676e20b6b020ae63cbe881fcdc7a8dd64e6e18bdd93/ruff-0.16.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8efeae3bbe414a5efefda11a792dfb51ef90ac48d50c4830de2f644caf3e8659", size = 9986558, upload-time = "2026-09-16T15:54:06.804Z" },
939
+ { url = "https://files.pythonhosted.org/packages/f3/ed/37b6cb3d3ba8c73e68ae3eb1d502383beb5aa05a582bb7bb3a922f929f54/ruff-0.16.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a79b795469fef7fc6e908b218eed2eb17332afd85031db6480dc864560e69b2", size = 9877332, upload-time = "2026-09-16T15:54:09.552Z" },
940
+ { url = "https://files.pythonhosted.org/packages/22/cc/40873a8f36ad084cc540d55fcca7077264d5b13b24659e9180c176fb2b08/ruff-0.16.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fdc5563cdc50555e6fba39322850860e9267c1b3d12c26a74729d8604c3c812", size = 10507125, upload-time = "2026-09-16T15:54:12.152Z" },
941
+ { url = "https://files.pythonhosted.org/packages/c3/e4/fc91a642b78ccbab6b9477720f3644ae7a10a9bcce69a934679cd64f62bc/ruff-0.16.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:34508983c70665578dab88f5223d8e6228307e1135398ca8bfc8b7e9501e282b", size = 11336694, upload-time = "2026-09-16T15:54:15.489Z" },
942
+ { url = "https://files.pythonhosted.org/packages/c2/3d/bbd2a9a600a4e73dc3e7548a249c8d1671273464b55822c6fae50f602dff/ruff-0.16.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:644bb578569e0ffc575741232bd385dacdd6fbe123f1a729e7a225f54aa3957f", size = 10774448, upload-time = "2026-09-16T15:54:18.16Z" },
943
+ { url = "https://files.pythonhosted.org/packages/1a/41/d83af9879a7b6e8bf5fe16b1da0b134049d2f5d3afac12defb0897cb84bd/ruff-0.16.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15e7d226246961db9235098333caa13063906d3851136b84c2900b82f5daa1df", size = 10323796, upload-time = "2026-09-16T15:54:20.743Z" },
944
+ { url = "https://files.pythonhosted.org/packages/f5/2c/cefd07bfe914b84943ea769ade8d607bd22750b965d3228eefd7cebd15d0/ruff-0.16.8-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:a2bf6bc3e9ebdd4449abc6f06cf64b98051a2c61cf94d2fe9596518c881f1a1e", size = 10514115, upload-time = "2026-09-16T15:54:23.497Z" },
945
+ { url = "https://files.pythonhosted.org/packages/f3/9d/76a2e26c79a23be6e6e3664c57bec9e9fc8de155cfb9e4b67ea91b64f9d7/ruff-0.16.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6ca111ba0849539165e9e59d2b442542f3c1e8060ebbdea82494f1ffbccb1e1f", size = 10072582, upload-time = "2026-09-16T15:54:26.185Z" },
946
+ { url = "https://files.pythonhosted.org/packages/2e/d4/f42edddb39668af1a559ceafa3823aedd65633a48dc9768e775485faa2c1/ruff-0.16.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:359a1e5b495448ee1e91018064382ebc86f90e8aac2fed222c7d0e4e8df85fd2", size = 9879644, upload-time = "2026-09-16T15:54:29.278Z" },
947
+ { url = "https://files.pythonhosted.org/packages/f8/d4/913e3195d95e0378786c6656945c865f534a3560e29139da4882aff630d1/ruff-0.16.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:59e8f5681349474110b24d62e93cfda6593f5fa3473446ca3705200cac1a08b9", size = 10231569, upload-time = "2026-09-16T15:54:32.036Z" },
948
+ { url = "https://files.pythonhosted.org/packages/2b/c4/8aa6ea0bdcedbd1bf87397e2fc4ed8406448ea5842f8660bc6e5f163039d/ruff-0.16.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:efa3e7a16d1baaa79957888dfdf8be9ef2e44db81cb032af06d76632ab59e773", size = 10663666, upload-time = "2026-09-16T15:54:34.838Z" },
949
+ { url = "https://files.pythonhosted.org/packages/3d/02/7f10ef4700bc223c30a3fdd10631a29830c45524b810a3c7ed947af64591/ruff-0.16.8-py3-none-win32.whl", hash = "sha256:55793ba85c69921e89be061426d91a78652d6e50317c962240922747a4eb713f", size = 10093472, upload-time = "2026-09-16T15:54:37.47Z" },
950
+ { url = "https://files.pythonhosted.org/packages/1e/5d/a509c07d714b6da88f2c518b4637cf6f1d46b074be8f0f1e5fb9ff5126fe/ruff-0.16.8-py3-none-win_amd64.whl", hash = "sha256:a6b85621fd3c81e31fc5f5add09c9c078b430db3595ca632efafdec9e64ebfaa", size = 10586899, upload-time = "2026-09-16T15:54:40.488Z" },
951
+ { url = "https://files.pythonhosted.org/packages/fe/a0/50787329e4f20bf9dc9f6230015d46ec69c51a97ace5bc202dae4755365d/ruff-0.16.8-py3-none-win_arm64.whl", hash = "sha256:d075e820af612102ce217f07cc93e69f9490b10ec13ea85fa87bd03d996cef8a", size = 10386316, upload-time = "2026-09-16T15:54:43.332Z" },
952
952
  ]
953
953
 
954
954
  [[package]]
@@ -1105,9 +1105,9 @@ wheels = [
1105
1105
 
1106
1106
  [[package]]
1107
1107
  name = "urllib3"
1108
- version = "2.7.0"
1108
+ version = "2.8.0"
1109
1109
  source = { registry = "https://pypi.org/simple" }
1110
- sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" }
1110
+ sdist = { url = "https://files.pythonhosted.org/packages/e3/05/b17359e1cefb4f909b5e40b1b90a496d987258916dbbf88e842c729f510e/urllib3-2.8.0.tar.gz", hash = "sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63", size = 458972, upload-time = "2026-09-15T19:29:36.253Z" }
1111
1111
  wheels = [
1112
- { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" },
1112
+ { url = "https://files.pythonhosted.org/packages/92/9d/c4e665119135114480843e7ab388fa94d8480650450e6f8e26b70d323a4c/urllib3-2.8.0-py3-none-any.whl", hash = "sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3", size = 135717, upload-time = "2026-09-15T19:29:34.577Z" },
1113
1113
  ]
@@ -1,251 +0,0 @@
1
- ---
2
- # SPDX-License-Identifier: Apache-2.0
3
- # SPDX-FileCopyrightText: 2025 The Linux Foundation
4
-
5
- ci:
6
- autofix_prs: false
7
- # pre-commit.ci sandbox prevents network calls; aislop runs engines
8
- # that can call the network at scan time, so it cannot run there
9
- # either. gha-workflow-linter validates action calls over the
10
- # network; pytest runs the full suite.
11
- skip: [pytest, gha-workflow-linter, aislop]
12
- autofix_commit_msg: |
13
- Chore: pre-commit autofixes
14
-
15
- Signed-off-by: pre-commit-ci[bot] <pre-commit-ci@users.noreply.github.com>
16
- autoupdate_commit_msg: |
17
- Chore: pre-commit autoupdate
18
-
19
- Signed-off-by: pre-commit-ci[bot] <pre-commit-ci@users.noreply.github.com>
20
-
21
- exclude: |
22
- (?x)^(docs/conf.py|
23
- \.mypy_cache/|
24
- \.pytest_cache/|
25
- \.ruff_cache/|
26
- dist/|
27
- build/|
28
- coverage_html_report/|
29
- \.venv/)
30
-
31
- repos:
32
- - repo: https://github.com/pre-commit/pre-commit-hooks
33
- rev: 3e8a8703264a2f4a69428a0aa4dcb512790b2c8c # frozen: v6.0.0
34
- hooks:
35
- - id: trailing-whitespace
36
- - id: check-added-large-files
37
- - id: check-ast
38
- - id: check-json
39
- - id: check-merge-conflict
40
- - id: check-xml
41
- - id: check-yaml
42
- - id: debug-statements
43
- - id: end-of-file-fixer
44
- - id: requirements-txt-fixer
45
- - id: mixed-line-ending
46
- args: ["--fix=lf"]
47
- - id: no-commit-to-branch
48
- args:
49
- - --branch=dev
50
- - --branch=master
51
- - --branch=main
52
- - --branch=rc
53
- - --branch=production
54
-
55
- - repo: https://github.com/jorisroovers/gitlint
56
- rev: acc9d9de6369b76d22cb4167029d2035e8730b98 # frozen: v0.19.1
57
- hooks:
58
- - id: gitlint
59
-
60
- - repo: https://github.com/adrienverge/yamllint.git
61
- rev: cba56bcde1fdd01c1deb3f945e69764c291a6530 # frozen: v1.38.0
62
- hooks:
63
- - id: yamllint
64
- types: [yaml]
65
-
66
- - repo: https://github.com/astral-sh/ruff-pre-commit
67
- rev: 2eeb5678de71a00c0902cbda7105d328432f72cb # frozen: v0.16.8
68
- hooks:
69
- - id: ruff
70
- files: ^(src|scripts|tests)/.+\.py$|^sitecustomize\.py$
71
- args: [--fix, --exit-non-zero-on-fix]
72
- - id: ruff-format
73
- files: ^(src|scripts|tests)/.+\.py$|^sitecustomize\.py$
74
-
75
- - repo: local
76
- hooks:
77
- - id: sync-mypy-pins
78
- # Rewrites the mypy hook's exact pins below to the versions
79
- # uv.lock records, so the two cannot drift. Ordered ahead of the
80
- # mypy hook so the pins are corrected before mypy is reached,
81
- # though pre-commit reads this file and builds hook environments
82
- # before any hook runs: a rewrite fails this run, as any
83
- # modifying hook does, and the corrected pins take effect on the
84
- # rerun. Both files come from the same checkout, so the verdict
85
- # is the same locally and in CI, and a Dependabot lockfile bump
86
- # fails here on its own pull request rather than on main.
87
- name: sync mypy hook pins with uv.lock
88
- entry: python3 scripts/sync_mypy_pins.py
89
- language: system
90
- files: ^(\.pre-commit-config\.yaml|uv\.lock)$
91
- pass_filenames: false
92
-
93
- - repo: https://github.com/pre-commit/mirrors-mypy
94
- rev: 7ff8d35ae36a7d2b968f2f90b4c723e292e594ee # frozen: v2.3.1
95
- hooks:
96
- - id: mypy
97
- # Every Python path in the repository, matching the ruff and
98
- # basedpyright hooks above and below so the three cannot drift.
99
- files: ^(src|scripts|tests)/.+\.py$|^sitecustomize\.py$
100
- # mypy runs in an isolated virtualenv that holds only what is
101
- # listed here, so anything the checked files import has to be
102
- # present or mypy draws conclusions the project never would. With
103
- # pytest absent, for instance, @pytest.fixture reads as an untyped
104
- # decorator and pytest.raises stops telling mypy the block can
105
- # swallow the exception, which turns every statement after a
106
- # `with pytest.raises(...)` into dead code. Installing the real
107
- # packages removes that whole class of environment-only findings;
108
- # keep this list in step with the imports under src/ and tests/.
109
- # pygerrit2 is deliberately absent: it is an optional runtime
110
- # dependency and pyproject.toml already gives it
111
- # ignore_missing_imports.
112
- #
113
- # The pins below are exact (==) rather than floors. This
114
- # environment is resolved from PyPI at install time, not from
115
- # uv.lock, so a >= constraint would still pick up whatever is
116
- # newest whenever pre-commit.ci happens to rebuild the
117
- # environment, and the hook would then report on a dependency set
118
- # nobody runs locally. That drift is not theoretical: CI once
119
- # resolved typer 0.27.2 against a lockfile holding 0.27.1, and the
120
- # two disagreed about which module typer.Exit lives in.
121
- # The versions are not maintained by hand: the sync-mypy-pins hook
122
- # above rewrites them from uv.lock, so after `uv lock --upgrade` a
123
- # `prek run sync-mypy-pins --all-files` brings them into step
124
- # (--all-files, because neither file is staged at that point and
125
- # the hook would otherwise not be selected). The tests in
126
- # tests/test_precommit_mypy_pins.py check the list is exact and
127
- # complete against the imports; they deliberately do not compare
128
- # versions to the lockfile, since a pull request is tested as
129
- # merged into main and would otherwise fail for a dependency that
130
- # moved there, not for anything on the branch.
131
- #
132
- # These pins do not freeze the whole resolved closure: pip still
133
- # picks transitive versions at build time, and listing every
134
- # package uv.lock records would duplicate the lockfile here. They
135
- # do not need to. mypy's verdict can only turn on a package whose
136
- # types it reads, which means one the checked files import, so the
137
- # list covers exactly that set -- rich is here because src/ imports
138
- # it, not because typer happens to pull it in. The same test asserts
139
- # the list stays complete against those imports.
140
- #
141
- # mypy itself is pinned here as well as coming from the mirror's
142
- # rev above. That is not redundant: the rev decides which mypy
143
- # runs, and nothing otherwise ties it to the locked one, so an
144
- # autoupdate of the mirror or a lockfile-only mypy upgrade would
145
- # leave the hook running a different checker in silence. With the
146
- # pin present, the sync hook keeps it at the locked version, and a
147
- # mirror whose rev disagrees fails to install rather than quietly
148
- # winning.
149
- additional_dependencies:
150
- - mypy==2.3.1
151
- - click==8.5.0
152
- - pytest==9.1.1
153
- - responses==0.26.3
154
- - rich==15.0.0
155
- - typer==0.27.2
156
- - types-PyYAML==6.0.12.20260906
157
- - types-requests==2.33.0.20260906
158
-
159
- - repo: https://github.com/btford/write-good
160
- rev: ab66ce10136dfad5146e69e70f82a3efac8842c1 # frozen: v1.0.8
161
- hooks:
162
- - id: write-good
163
- files: "\\.(rst|md|markdown|mdown|mkdn)$"
164
- args: ["--no-adverb"]
165
-
166
- - repo: https://github.com/shellcheck-py/shellcheck-py
167
- rev: a6564f5d57444e123433a5c9af733e3975c77229 # frozen: v0.11.0.1-1
168
- hooks:
169
- - id: shellcheck
170
-
171
- - repo: https://github.com/igorshubovych/markdownlint-cli
172
- rev: 5b5dddc4fb0f83c3ea1fc5616fa63e115dce83e0 # frozen: v0.49.1
173
- hooks:
174
- - id: markdownlint
175
- args: ["--fix", "--config", ".markdownlint.yaml"]
176
- exclude: "GERRIT_URL_CENTRALIZATION.md"
177
-
178
- - repo: https://github.com/fsfe/reuse-tool
179
- rev: 9fabf9eb815a57aac116b435e8346c200cdb8604 # frozen: v6.2.0
180
- hooks:
181
- - id: reuse
182
-
183
- # Replaces: https://github.com/rhysd/actionlint
184
- # Permits actionlint to run both locally and with precommit.ci/GitHub
185
- - repo: https://github.com/Mateusz-Grzelinski/actionlint-py
186
- rev: c04ed26e40637cab1aa9879c693832a9c120fb20 # frozen: v1.7.12.24
187
- hooks:
188
- - id: actionlint
189
-
190
- # Check for misspellings in documentation files
191
- - repo: https://github.com/codespell-project/codespell
192
- rev: 57b21406f092110c18776e39b0bda50d37c945c8 # frozen: v2.4.3
193
- hooks:
194
- - id: codespell
195
-
196
- # Requires a mirror, primary repo lacks .pre-commit-hooks.yaml
197
- - repo: https://github.com/DetachHead/basedpyright-prek-mirror
198
- rev: 706e6acebe9e88c2c28d1527d3085a14b11794c4 # frozen: 1.40.1
199
- hooks:
200
- - id: basedpyright
201
- # Every Python path in the repository. Keep in sync with the
202
- # `include` list under [tool.pyright] in pyproject.toml.
203
- files: ^(src|scripts|tests)/.+\.py$|^sitecustomize\.py$
204
-
205
- - repo: https://github.com/lfreleng-actions/gha-workflow-linter
206
- rev: 445a55d2a15b12217828eecf8d4bf7741e0e1360 # frozen: v1.5.6
207
- hooks:
208
- - id: gha-workflow-linter
209
-
210
- # Catch AI slop developer-side before it reaches a pull request.
211
- # Runs the full-repository quality gate, scored against
212
- # .aislop/config.yml. A local hook installing the published npm
213
- # package: the scanaislop/aislop git repository does not ship the
214
- # built dist/, so its bundled pre-commit hook cannot install. Bump
215
- # the pinned version here manually when new aislop releases ship.
216
- - repo: local
217
- hooks:
218
- - id: aislop
219
- name: aislop
220
- entry: aislop ci --human
221
- language: node
222
- additional_dependencies: ["aislop@0.14.1"]
223
- pass_filenames: false
224
- always_run: true
225
-
226
- - repo: https://github.com/python-jsonschema/check-jsonschema
227
- rev: c4654a7e007c9619a5eb63c39a456572a0fa1851 # frozen: 0.38.0
228
- hooks:
229
- - id: check-github-actions
230
- - id: check-github-workflows
231
- - id: check-jsonschema
232
- name: Check GitHub Workflows set timeout-minutes
233
- args:
234
- - --builtin-schema
235
- - github-workflows-require-timeout
236
- files: ^\.github/workflows/[^/]+$
237
- types:
238
- - yaml
239
- - id: check-readthedocs
240
-
241
- # Run tests last to ensure all code changes from other hooks are tested
242
- - repo: local
243
- hooks:
244
- - id: pytest
245
- name: pytest
246
- entry: uv
247
- args: [run, pytest, --tb=short, -q, -v, --strict-markers, --maxfail=5]
248
- language: system
249
- pass_filenames: false
250
- always_run: true
251
- require_serial: true
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes