diff --git a/.pre-commit-hooks.yaml b/.pre-commit-hooks.yaml index c0d811c..abd0789 100644 --- a/.pre-commit-hooks.yaml +++ b/.pre-commit-hooks.yaml @@ -53,6 +53,13 @@ language: python types: [text] stages: [commit, push, manual] +- id: check_projen_files + name: check projen files + description: checks if projen files were not updated manually. + entry: check_projen_files + language: python + types: [text] + stages: [push, manual] - id: pretty-format-json name: pretty format json description: sets a standard for formatting json files. diff --git a/README.md b/README.md index 9ae7ec5..b6030b8 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,9 @@ Checks that scripts with shebangs are executable. #### `check-symlinks` Checks for symlinks which do not point to anything. +#### `check-projen-files` +Checks for projen files that were updated manually. + #### `check-toml` Attempts to load all TOML files to verify syntax. diff --git a/pre_commit_hooks/check_projen_files.py b/pre_commit_hooks/check_projen_files.py new file mode 100644 index 0000000..3aa2d8a --- /dev/null +++ b/pre_commit_hooks/check_projen_files.py @@ -0,0 +1,21 @@ +from __future__ import annotations + +import subprocess +import sys + +def main(): + projen_process = subprocess.run('yarn projen', shell=True) + + if projen_process.returncode != 0: + print(f'Error: "yarn projen" failed with exit status {projen_process.returncode}') + sys.exit(projen_process.returncode) + + git_status = subprocess.run('git diff', capture_output=True, shell=True, text=True) + if git_status.stdout.strip(): + print("Uncommitted changes found:") + print(git_status.stdout) + print('Have you forgotten to run "yarn projen" and commit changes?') + sys.exit(1) + +if __name__ == '__main__': + raise SystemExit(main()) \ No newline at end of file