--- /dev/null
+"""
+Check that the rev value in the example pre-commit configuration matches
+the latest version of Black. This saves us from forgetting to update that
+during the release process.
+
+Why can't we just use `rev: stable` and call it a day? Well pre-commit
+won't auto update the hook as you may expect (and for good reasons, some
+technical and some pragmatic). Encouraging bad practice is also just
+not ideal. xref: https://github.com/psf/black/issues/420
+"""
+
+import os
+import sys
+
+import commonmark
+import yaml
+from bs4 import BeautifulSoup
+
+
+def main(changes: str, source_version_control: str) -> None:
+ changes_html = commonmark.commonmark(changes)
+ changes_soup = BeautifulSoup(changes_html, "html.parser")
+ headers = changes_soup.find_all("h2")
+ latest_tag, *_ = [
+ header.string for header in headers if header.string != "Unreleased"
+ ]
+
+ source_version_control_html = commonmark.commonmark(source_version_control)
+ source_version_control_soup = BeautifulSoup(
+ source_version_control_html, "html.parser"
+ )
+ pre_commit_repos = yaml.safe_load(
+ source_version_control_soup.find(class_="language-yaml").string
+ )["repos"]
+
+ for repo in pre_commit_repos:
+ pre_commit_rev = repo["rev"]
+ if not pre_commit_rev == latest_tag:
+ print(
+ "Please set the rev in ``source_version_control.md`` to be the latest "
+ f"one.\nExpected {latest_tag}, got {pre_commit_rev}.\n"
+ )
+ sys.exit(1)
+
+
+if __name__ == "__main__":
+ with open("CHANGES.md", encoding="utf-8") as fd:
+ changes = fd.read()
+ with open(
+ os.path.join("docs", "integrations", "source_version_control.md"),
+ encoding="utf-8",
+ ) as fd:
+ source_version_control = fd.read()
+ main(changes, source_version_control)