""" 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)