From 0f30eb83c87587f1b1b1e79b0a6536e148533039 Mon Sep 17 00:00:00 2001 From: openhands Date: Sun, 29 Dec 2024 01:14:09 +0000 Subject: [PATCH] Fix issue #5890: Add an automatic check of version consistency in documentation --- .github/scripts/check_version_consistency.py | 61 ++++++++++++++++++++ .github/workflows/lint.yml | 13 +++++ 2 files changed, 74 insertions(+) create mode 100644 .github/scripts/check_version_consistency.py diff --git a/.github/scripts/check_version_consistency.py b/.github/scripts/check_version_consistency.py new file mode 100644 index 000000000000..5e859eb30df5 --- /dev/null +++ b/.github/scripts/check_version_consistency.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 +import os +import re +import sys +from typing import Set, Tuple + +def find_version_references(directory: str) -> Tuple[Set[str], Set[str]]: + openhands_versions = set() + runtime_versions = set() + + version_pattern_openhands = re.compile(r'openhands:0\.(\d{2})') + version_pattern_runtime = re.compile(r'runtime:0\.(\d{2})') + + for root, _, files in os.walk(directory): + # Skip .git directory + if '.git' in root: + continue + + for file in files: + if file.endswith(('.md', '.yml', '.yaml', '.txt', '.html', '.py', '.js', '.ts')): + file_path = os.path.join(root, file) + try: + with open(file_path, 'r', encoding='utf-8') as f: + content = f.read() + + # Find all openhands version references + matches = version_pattern_openhands.findall(content) + openhands_versions.update(matches) + + # Find all runtime version references + matches = version_pattern_runtime.findall(content) + runtime_versions.update(matches) + except Exception as e: + print(f"Error reading {file_path}: {e}", file=sys.stderr) + + return openhands_versions, runtime_versions + +def main(): + repo_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')) + openhands_versions, runtime_versions = find_version_references(repo_root) + + exit_code = 0 + + if len(openhands_versions) > 1: + print("Error: Multiple openhands versions found:", file=sys.stderr) + print("Found versions:", sorted(openhands_versions), file=sys.stderr) + exit_code = 1 + elif len(openhands_versions) == 0: + print("Warning: No openhands version references found", file=sys.stderr) + + if len(runtime_versions) > 1: + print("Error: Multiple runtime versions found:", file=sys.stderr) + print("Found versions:", sorted(runtime_versions), file=sys.stderr) + exit_code = 1 + elif len(runtime_versions) == 0: + print("Warning: No runtime version references found", file=sys.stderr) + + sys.exit(exit_code) + +if __name__ == '__main__': + main() diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 1bfc8c91c6a4..789a938e1d7e 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -53,3 +53,16 @@ jobs: run: pip install pre-commit==3.7.0 - name: Run pre-commit hooks run: pre-commit run --files openhands/**/* evaluation/**/* tests/**/* --show-diff-on-failure --config ./dev_config/python/.pre-commit-config.yaml + + # Check version consistency across documentation + check-version-consistency: + name: Check version consistency + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up python + uses: actions/setup-python@v5 + with: + python-version: 3.12 + - name: Run version consistency check + run: .github/scripts/check_version_consistency.py