From 7d3e08326b26e3c62020150da129bb1d881e875c Mon Sep 17 00:00:00 2001 From: Aleksei Furmenkov Date: Wed, 29 Apr 2026 16:58:51 +0200 Subject: [PATCH 01/12] basic workflow to publish rules (#1) * basic workflow to publish rules * remove debug step * fixed regex pattern * csv ledger book support implemented * publish rules to Rules/Published// * updated publish.py to match new logic and project structure * removed comments in publish.py. changed newdirs extraction in publish.yml * Align GitHub Action with publish flow; generate mappings via script * fixes in action * switched to ruamel.yaml * moved files and modified workflow * changed yaml safe load to ruamel load. no yaml required by publish.yml --- .github/scripts/generate_mappings.py | 21 +++--- .github/scripts/publish.py | 85 +++++++++++++++++++++++ .github/workflows/publish.yml | 100 +++++++++++++++++++++++++++ 3 files changed, 198 insertions(+), 8 deletions(-) create mode 100644 .github/scripts/publish.py create mode 100644 .github/workflows/publish.yml diff --git a/.github/scripts/generate_mappings.py b/.github/scripts/generate_mappings.py index 880d47dc8..0a1fea5d8 100644 --- a/.github/scripts/generate_mappings.py +++ b/.github/scripts/generate_mappings.py @@ -24,11 +24,14 @@ from collections import defaultdict from pathlib import Path -try: - import yaml -except ImportError: - print("PyYAML is required. Install with: pip install pyyaml") - sys.exit(1) + +def get_yaml(): + try: + from ruamel.yaml import YAML + return YAML + except ImportError: + print("ruamel.yaml is required. Install with: pip install ruamel.yaml") + sys.exit(1) # --------------------------------------------------------------------------- @@ -129,11 +132,13 @@ def build_standard_rows(rule_files: list[Path]) -> dict[str, list[dict]]: """ accumulator: dict[str, dict[str, dict]] = defaultdict(dict) - + yaml = get_yaml()() + yaml.preserve_quotes = True + yaml.default_flow_style = False for rule_file in rule_files: raw = rule_file.read_text(encoding="utf-8") try: - data = yaml.safe_load(raw) + data = yaml.load(raw) except Exception as exc: print(f" [WARN] Could not parse {rule_file}: {exc}") continue @@ -240,4 +245,4 @@ def main() -> None: if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/.github/scripts/publish.py b/.github/scripts/publish.py new file mode 100644 index 000000000..a4e53a0fa --- /dev/null +++ b/.github/scripts/publish.py @@ -0,0 +1,85 @@ +import csv +import re +import sys +from pathlib import Path +import argparse + +CORE_PATTERN = re.compile(r"^CORE-(\d{6})$") +PUBLISHED_DIR = Path("Published") + + +def get_yaml(): + try: + from ruamel.yaml import YAML + return YAML + except ImportError: + print("ruamel.yaml is required. Install with: pip install ruamel.yaml") + sys.exit(1) + + +def get_next_core_id(mappings_dir: Path, algorithm="max"): + existing_ids = [] + + for file in mappings_dir.glob("*_mapping.csv"): + with open(file, newline="", encoding="utf-8") as f: + reader = csv.DictReader(f) + for row in reader: + core = row.get("CORE-ID", "").strip() + match = CORE_PATTERN.match(core) + if match: + existing_ids.append(int(match.group(1))) + + existing_ids.sort() + + if algorithm == "min": + next_id = 1 + for eid in existing_ids: + if eid != next_id: + break + next_id += 1 + else: + next_id = max(existing_ids, default=0) + 1 + + return f"CORE-{next_id:06d}" + + +def update_rule_yaml(core_id: str, rule_path: Path): + yaml = get_yaml()() + with open(rule_path, encoding="utf-8") as f: + doc = yaml.load(f) + if "Core" not in doc: + doc["Core"] = {} + doc["Core"]["Id"] = core_id + doc["Core"]["Status"] = "Published" + with open(rule_path, "w", encoding="utf-8") as f: + yaml.dump(doc, f) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("--new-dirs", required=True, help="Space-separated rule directories to publish") + parser.add_argument( + "--algorithm", choices=["min", "max"], default="max", help="CORE-ID assignment algorithm" + ) + args = parser.parse_args() + + mappings_dir = Path("mappings") + PUBLISHED_DIR.mkdir(exist_ok=True) + + for rule_dir in args.new_dirs.split(): + rule_path = Path(rule_dir) / "rule.yaml" + if not rule_path.exists(): + print(f"[SKIP] No rule.yaml found in {rule_dir}") + continue + + core_id = get_next_core_id(mappings_dir, args.algorithm) + + update_rule_yaml(core_id, rule_path) + + new_path = PUBLISHED_DIR / core_id + Path(rule_dir).rename(new_path) + print(f"[OK] {rule_dir} -> {new_path} ({core_id})") + + +if __name__ == "__main__": + main() diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 000000000..7cd64b078 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,100 @@ +name: Publish Rules + +on: + workflow_call: + push: + branches: + - main + +concurrency: + group: publish + cancel-in-progress: false + +permissions: + contents: write + +jobs: + publish: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Get changed files + id: changed-files + uses: tj-actions/changed-files@v46 + with: + files_ignore: | + .github/** + README.md + .gitignore + Published/** + + - name: Extract new rule directories + id: newdirs + run: | + NEW_DIRS="" + + for file in ${{ steps.changed-files.outputs.added_files }}; do + dir=$(dirname "$file") + + if [ -f "$dir/rule.yaml" ]; then + NEW_DIRS="$NEW_DIRS $dir" + fi + done + + NEW_DIRS=$(echo $NEW_DIRS | xargs -n1 | sort -u | xargs) + + echo "NEW_DIRS=$NEW_DIRS" + echo "NEW_DIRS=$NEW_DIRS" >> $GITHUB_OUTPUT + + if [ -z "$NEW_DIRS" ]; then + echo "HAS_NEW_DIRS=false" >> $GITHUB_OUTPUT + else + echo "HAS_NEW_DIRS=true" >> $GITHUB_OUTPUT + fi + + - name: Stop if nothing to publish + if: steps.newdirs.outputs.HAS_NEW_DIRS == 'false' + run: echo "No new rules found, skipping publish." + + - name: Setup Python + if: steps.newdirs.outputs.HAS_NEW_DIRS == 'true' + uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Install dependencies + if: steps.newdirs.outputs.HAS_NEW_DIRS == 'true' + run: | + pip install ruamel.yaml + + - name: Run publish script + if: steps.newdirs.outputs.HAS_NEW_DIRS == 'true' + run: | + python .github/scripts/publish.py \ + --new-dirs "${{ steps.newdirs.outputs.NEW_DIRS }}" \ + --algorithm min + + - name: Regenerate mappings + if: steps.newdirs.outputs.HAS_NEW_DIRS == 'true' + run: | + python .github/scripts/generate_mappings.py . + + - name: Commit changes + if: steps.newdirs.outputs.HAS_NEW_DIRS == 'true' + run: | + git config user.name "github-actions" + git config user.email "github-actions@github.com" + git add . + if git diff --cached --quiet; then + echo "Nothing to commit" + else + git commit -m "Auto-publish new rules" + fi + + - name: Push + if: steps.newdirs.outputs.HAS_NEW_DIRS == 'true' + run: | + git push \ No newline at end of file From e6c2e54e3191b752511c0a6970f5ef2be98c9b66 Mon Sep 17 00:00:00 2001 From: Aleksei Furmenkov Date: Tue, 5 May 2026 17:14:04 +0200 Subject: [PATCH 02/12] WIP: validate rule against schema (#23) --- .github/scripts/validate_yaml_schema.py | 127 ++++++++++++++ .github/workflows/validate-yaml-schema.yml | 194 +++++++++++++++++++++ 2 files changed, 321 insertions(+) create mode 100644 .github/scripts/validate_yaml_schema.py create mode 100644 .github/workflows/validate-yaml-schema.yml diff --git a/.github/scripts/validate_yaml_schema.py b/.github/scripts/validate_yaml_schema.py new file mode 100644 index 000000000..550363b56 --- /dev/null +++ b/.github/scripts/validate_yaml_schema.py @@ -0,0 +1,127 @@ +#!/usr/bin/env python3 +""" +validate_yaml_schema.py — Validates one or more rule YAML files against the +CDISC CORE JSON Schema (draft/2020-12). + +Usage: + python validate_yaml_schema.py [ ...] + +Exit codes: + 0 — all files are valid + 1 — one or more files failed validation or an unexpected error occurred +""" + +import json +import sys +import urllib.request +from pathlib import Path + +import yaml + +try: + import jsonschema + from jsonschema import Draft202012Validator, ValidationError +except ImportError: + print("ERROR: 'jsonschema' package is not installed. Run: pip install 'jsonschema[format-nongpl]'") + sys.exit(1) + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + +def load_schema(source: str) -> dict: + """Load JSON schema from a URL or local file path.""" + if source.startswith("http://") or source.startswith("https://"): + with urllib.request.urlopen(source, timeout=30) as resp: # noqa: S310 + return json.loads(resp.read()) + return json.loads(Path(source).read_text(encoding="utf-8")) + + +def validate_file(path: Path, validator: Draft202012Validator) -> list[str]: + """ + Validate a YAML file against the schema. + Returns a list of human-readable error strings (empty == valid). + """ + try: + doc = yaml.safe_load(path.read_text(encoding="utf-8")) + except yaml.YAMLError as exc: + return [f"YAML parse error: {exc}"] + + if doc is None: + return ["File is empty or contains only comments."] + + errors = sorted(validator.iter_errors(doc), key=lambda e: list(e.path)) + return [f" [{' > '.join(str(p) for p in err.path) or '/'}] {err.message}" for err in errors] + + +def github_annotation(level: str, file: str, msg: str) -> str: + """Produce a GitHub Actions workflow command annotation.""" + # Escape special characters per GHA spec + msg = msg.replace("%", "%25").replace("\r", "%0D").replace("\n", "%0A") + return f"::{level} file={file}::{msg}" + + +# --------------------------------------------------------------------------- +# Main +# --------------------------------------------------------------------------- + +def main() -> int: + if len(sys.argv) < 3: + print(f"Usage: {sys.argv[0]} [ ...]") + return 1 + + schema_source = sys.argv[1] + rule_files = [Path(p) for p in sys.argv[2:]] + + # Load schema + print(f"Loading schema from: {schema_source}") + try: + schema = load_schema(schema_source) + except Exception as exc: + print(f"ERROR: Failed to load schema — {exc}") + return 1 + + validator = Draft202012Validator(schema) + + total = 0 + failed = 0 + + report_lines: list[str] = [] + + for rule_path in rule_files: + if not rule_path.exists(): + print(f"WARNING: File not found — {rule_path}") + continue + + total += 1 + errors = validate_file(rule_path, validator) + + if errors: + failed += 1 + print(github_annotation("error", str(rule_path), f"Schema validation failed ({len(errors)} error(s))")) + print(f"❌ {rule_path}") + for err in errors: + print(err) + report_lines.append(f"### ❌ `{rule_path}`\n") + report_lines.append("```\n" + "\n".join(errors) + "\n```\n") + else: + print(f"✅ {rule_path}") + report_lines.append(f"### ✅ `{rule_path}`\n") + + # Write markdown report (consumed by the workflow) + report_path = Path("schema_validation_report.md") + with report_path.open("w", encoding="utf-8") as fh: + fh.write("# Schema Validation Report\n\n") + fh.write(f"**Schema:** `{schema_source}`\n\n") + fh.write(f"**Files checked:** {total} | **Failed:** {failed}\n\n") + fh.writelines(report_lines) + + print(f"\nSummary: {total - failed}/{total} file(s) passed schema validation.") + + return 1 if failed else 0 + + +if __name__ == "__main__": + sys.exit(main()) + diff --git a/.github/workflows/validate-yaml-schema.yml b/.github/workflows/validate-yaml-schema.yml new file mode 100644 index 000000000..a168c2fa5 --- /dev/null +++ b/.github/workflows/validate-yaml-schema.yml @@ -0,0 +1,194 @@ +name: Validate YAML against Schema + +on: + pull_request: + paths: +# - 'Published/**/rule.yml' + - 'Unpublished/**/rule.yml' + types: [opened, synchronize, reopened] + workflow_dispatch: + inputs: + paths_override: + description: > + Space-separated list of rule YAML files to validate + (e.g. "Published/CORE-000001/rule.yml"). Leave blank to validate + all changed rule files detected from the last commit. + required: false + default: '' + +# Only one run per PR branch at a time; cancel superseded runs. +concurrency: + group: schema-validate-${{ github.ref }} + cancel-in-progress: true + +jobs: + validate-schema: + name: Validate rule YAML against JSON Schema + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write + + env: + # draft/2020-12 schema — switch to rule-merged if you need $defs inlined + SCHEMA_URL: >- + https://raw.githubusercontent.com/cdisc-org/cdisc-rules-engine/refs/heads/main/resources/schema/rule/CORE-base.json + + steps: + # ----------------------------------------------------------------------- + # 1. Checkout + # ----------------------------------------------------------------------- + - name: Checkout repository + uses: actions/checkout@v6 + with: + fetch-depth: 0 + + # ----------------------------------------------------------------------- + # 2. Set up Python + # ----------------------------------------------------------------------- + - name: Set up Python 3.12 + uses: actions/setup-python@v6 + with: + python-version: '3.12' + + # ----------------------------------------------------------------------- + # 3. Install validation dependencies + # jsonschema 4.x ships full draft/2020-12 support out of the box. + # ----------------------------------------------------------------------- + - name: Install Python dependencies + run: | + python -m pip install --upgrade pip + pip install "jsonschema[format-nongpl]>=4.18" "PyYAML>=6.0" + + # ----------------------------------------------------------------------- + # 4. Detect changed rule YAML files + # ----------------------------------------------------------------------- + - name: Detect changed rule files + id: changed + run: | + if [ -n "${{ github.event.inputs.paths_override }}" ]; then + # Manual override + FILES="${{ github.event.inputs.paths_override }}" + elif [ "${{ github.event_name }}" = "pull_request" ]; then + FILES=$(git diff --name-only \ + "origin/${{ github.base_ref }}...HEAD" \ + -- 'Published/**/rule.yml' 'Unpublished/**/rule.yml' \ + | tr '\n' ' ') + else + # workflow_dispatch without override — validate all rule files + FILES=$(find Published Unpublished -name "rule.yml" | tr '\n' ' ') + fi + + echo "files=$FILES" >> "$GITHUB_OUTPUT" + echo "Detected rule files: $FILES" + + if [ -z "$FILES" ]; then + echo "no_files=true" >> "$GITHUB_OUTPUT" + else + echo "no_files=false" >> "$GITHUB_OUTPUT" + fi + + # ----------------------------------------------------------------------- + # 5. Run schema validation + # ----------------------------------------------------------------------- + - name: Validate YAML against schema + id: validate + if: steps.changed.outputs.no_files == 'false' + continue-on-error: true + run: | + python .github/scripts/validate_yaml_schema.py \ + "${{ env.SCHEMA_URL }}" \ + ${{ steps.changed.outputs.files }} + + - name: No rule files changed + if: steps.changed.outputs.no_files == 'true' + run: | + echo "No rule YAML files were changed — nothing to validate." + echo "## Schema Validation" >> "$GITHUB_STEP_SUMMARY" + echo "No \`rule.yml\` files were changed in this PR." >> "$GITHUB_STEP_SUMMARY" + + # ----------------------------------------------------------------------- + # 6. Upload report artifact + # ----------------------------------------------------------------------- + - name: Upload schema validation report + if: always() && steps.changed.outputs.no_files == 'false' + uses: actions/upload-artifact@v7 + with: + name: schema-validation-report + path: schema_validation_report.md + if-no-files-found: warn + + # ----------------------------------------------------------------------- + # 7. Post report as PR comment + # ----------------------------------------------------------------------- + - name: Post report to PR + if: > + always() && + github.event_name == 'pull_request' && + steps.changed.outputs.no_files == 'false' + uses: actions/github-script@v9 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const fs = require('fs'); + const reportPath = 'schema_validation_report.md'; + const runUrl = `${context.payload.repository.html_url}/actions/runs/${context.runId}`; + + let body = '## Schema Validation Results\n\n'; + + if (fs.existsSync(reportPath)) { + const content = fs.readFileSync(reportPath, 'utf8'); + body += '
\nClick to expand\n\n'; + body += content; + body += '\n
\n'; + } else { + body += '_No schema validation report was generated._\n'; + } + + body += `\n[View workflow run](${runUrl})`; + + const marker = 'Schema Validation Results'; + const { data: comments } = await github.rest.issues.listComments({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + }); + + const existing = comments.find( + c => c.user.type === 'Bot' && c.body.includes(marker) + ); + + if (existing) { + await github.rest.issues.updateComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: existing.id, + body, + }); + } else { + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + body, + }); + } + + # ----------------------------------------------------------------------- + # 8. Write report to workflow summary + # ----------------------------------------------------------------------- + - name: Write report to workflow summary + if: always() && steps.changed.outputs.no_files == 'false' + run: | + [ -f schema_validation_report.md ] \ + && cat schema_validation_report.md >> "$GITHUB_STEP_SUMMARY" \ + || true + + # ----------------------------------------------------------------------- + # 9. Fail the job if validation found errors + # ----------------------------------------------------------------------- + - name: Check validation outcome + if: steps.validate.outcome == 'failure' + run: | + echo "::error::Schema validation failed — see the report above." + exit 1 From 809d0f52b6b10390229a91291f68f236e66557e7 Mon Sep 17 00:00:00 2001 From: Samuel Johnson <96841389+SFJohnson24@users.noreply.github.com> Date: Tue, 5 May 2026 11:18:23 -0400 Subject: [PATCH 03/12] update engine submodule to latest main (#21) --- engine | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine b/engine index b086dca0a..64b7622ab 160000 --- a/engine +++ b/engine @@ -1 +1 @@ -Subproject commit b086dca0a6a8a5f628d65d2fa03486beb6ad68a1 +Subproject commit 64b7622ab12156fec2b4f99989157862eeab4541 From ac6fdb23a26c91bb38780db9a590078257b9ea87 Mon Sep 17 00:00:00 2001 From: Samuel Johnson <96841389+SFJohnson24@users.noreply.github.com> Date: Tue, 5 May 2026 14:17:11 -0400 Subject: [PATCH 04/12] Action (#25) * update * update * schema --- .github/workflows/validate-yaml-schema.yml | 4 ++-- docs/check_operator.md | 2 +- docs/check_parameter.md | 2 +- docs/customrules.md | 2 +- docs/exdictionary.md | 2 +- docs/executability.md | 2 +- docs/jsonata_functions.md | 2 +- docs/metadata_variables.md | 2 +- docs/operations.md | 2 +- docs/rule_type.md | 2 +- docs/sensitivity.md | 2 +- engine | 2 +- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/validate-yaml-schema.yml b/.github/workflows/validate-yaml-schema.yml index a168c2fa5..253766b26 100644 --- a/.github/workflows/validate-yaml-schema.yml +++ b/.github/workflows/validate-yaml-schema.yml @@ -3,7 +3,7 @@ name: Validate YAML against Schema on: pull_request: paths: -# - 'Published/**/rule.yml' + - 'Published/**/rule.yml' - 'Unpublished/**/rule.yml' types: [opened, synchronize, reopened] workflow_dispatch: @@ -32,7 +32,7 @@ jobs: env: # draft/2020-12 schema — switch to rule-merged if you need $defs inlined SCHEMA_URL: >- - https://raw.githubusercontent.com/cdisc-org/cdisc-rules-engine/refs/heads/main/resources/schema/rule/CORE-base.json + https://raw.githubusercontent.com/cdisc-org/cdisc-rules-engine/refs/heads/main/resources/schema/rule-merged/CORE-base.json steps: # ----------------------------------------------------------------------- diff --git a/docs/check_operator.md b/docs/check_operator.md index a67342192..073e97382 100644 --- a/docs/check_operator.md +++ b/docs/check_operator.md @@ -1,3 +1,3 @@ # Check Operator -[](https://raw.githubusercontent.com/cdisc-org/cdisc-rules-engine/main/resources/schema/rule/Operator.md ":include") +[](https://raw.githubusercontent.com/cdisc-org/cdisc-rules-engine/refs/heads/main/resources/schema/rule/Operator.md ":include") diff --git a/docs/check_parameter.md b/docs/check_parameter.md index d152f6e80..94cb65bdd 100644 --- a/docs/check_parameter.md +++ b/docs/check_parameter.md @@ -1,3 +1,3 @@ # Check Parameters -[](https://raw.githubusercontent.com/cdisc-org/cdisc-rules-engine/main/resources/schema/rule/check_parameter.md ":include") +[](https://raw.githubusercontent.com/cdisc-org/cdisc-rules-engine/refs/heads/main/resources/schema/rule/check_parameter.md ":include") diff --git a/docs/customrules.md b/docs/customrules.md index afd801458..31ab6058a 100644 --- a/docs/customrules.md +++ b/docs/customrules.md @@ -1 +1 @@ -[](https://raw.githubusercontent.com/cdisc-org/cdisc-rules-engine/main/resources/schema/rule/customrules.md ":include") +[](https://raw.githubusercontent.com/cdisc-org/cdisc-rules-engine/refs/heads/main/resources/schema/rule/customrules.md ":include") diff --git a/docs/exdictionary.md b/docs/exdictionary.md index 0dac4ca08..fd4e4d6f3 100644 --- a/docs/exdictionary.md +++ b/docs/exdictionary.md @@ -1 +1 @@ -[](https://raw.githubusercontent.com/cdisc-org/cdisc-rules-engine/main/resources/schema/rule/ExDictionary.md ":include") +[](https://raw.githubusercontent.com/cdisc-org/cdisc-rules-engine/refs/heads/main/resources/schema/rule/ExDictionary.md ":include") diff --git a/docs/executability.md b/docs/executability.md index afe860353..4f908dac8 100644 --- a/docs/executability.md +++ b/docs/executability.md @@ -1 +1 @@ -[](https://raw.githubusercontent.com/cdisc-org/cdisc-rules-engine/main/resources/schema/rule/Executability.md ":include") +[](https://raw.githubusercontent.com/cdisc-org/cdisc-rules-engine/refs/heads/main/resources/schema/rule/Executability.md ":include") diff --git a/docs/jsonata_functions.md b/docs/jsonata_functions.md index 2b142d50b..899abb783 100644 --- a/docs/jsonata_functions.md +++ b/docs/jsonata_functions.md @@ -1 +1 @@ -[](https://raw.githubusercontent.com/cdisc-org/cdisc-rules-engine/main/resources/schema/rule/JSONata_Functions.md ":include") +[](https://raw.githubusercontent.com/cdisc-org/cdisc-rules-engine/refs/heads/main/resources/schema/rule/JSONata_Functions.md ":include") diff --git a/docs/metadata_variables.md b/docs/metadata_variables.md index 8e23b8a35..c5d82b99f 100644 --- a/docs/metadata_variables.md +++ b/docs/metadata_variables.md @@ -1 +1 @@ -[](https://raw.githubusercontent.com/cdisc-org/cdisc-rules-engine/main/resources/schema/rule/MetaVariables.md ":include") +[](https://raw.githubusercontent.com/cdisc-org/cdisc-rules-engine/refs/heads/main/resources/schema/rule/MetaVariables.md ":include") diff --git a/docs/operations.md b/docs/operations.md index 6e6116e7e..063bea63d 100644 --- a/docs/operations.md +++ b/docs/operations.md @@ -1 +1 @@ -[](https://raw.githubusercontent.com/cdisc-org/cdisc-rules-engine/main/resources/schema/rule/Operations.md ":include") +[](https://raw.githubusercontent.com/cdisc-org/cdisc-rules-engine/refs/heads/main/resources/schema/rule/Operations.md ":include") diff --git a/docs/rule_type.md b/docs/rule_type.md index 5d7cb6f93..c88d6477c 100644 --- a/docs/rule_type.md +++ b/docs/rule_type.md @@ -1 +1 @@ -[](https://raw.githubusercontent.com/cdisc-org/cdisc-rules-engine/main/resources/schema/rule/Rule_Type.md ":include") +[](https://raw.githubusercontent.com/cdisc-org/cdisc-rules-engine/refs/heads/main/resources/schema/rule/Rule_Type.md ":include") diff --git a/docs/sensitivity.md b/docs/sensitivity.md index ca993db30..aeb7cb7d1 100644 --- a/docs/sensitivity.md +++ b/docs/sensitivity.md @@ -1 +1 @@ -[](https://raw.githubusercontent.com/cdisc-org/cdisc-rules-engine/main/resources/schema/rule/Sensitivity.md ":include") +[](https://raw.githubusercontent.com/cdisc-org/cdisc-rules-engine/refs/heads/main/resources/schema/rule/Sensitivity.md ":include") diff --git a/engine b/engine index 64b7622ab..631e708fc 160000 --- a/engine +++ b/engine @@ -1 +1 @@ -Subproject commit 64b7622ab12156fec2b4f99989157862eeab4541 +Subproject commit 631e708fc815932d8e9adbad334a8eb506e17f8d From 21fb5fcb5099e2fe8d27d6b67d2d3565cc1b6324 Mon Sep 17 00:00:00 2001 From: Samuel Johnson <96841389+SFJohnson24@users.noreply.github.com> Date: Tue, 5 May 2026 14:22:48 -0400 Subject: [PATCH 05/12] update engine submodule to latest main (#26) --- engine | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine b/engine index 631e708fc..9c4584033 160000 --- a/engine +++ b/engine @@ -1 +1 @@ -Subproject commit 631e708fc815932d8e9adbad334a8eb506e17f8d +Subproject commit 9c4584033f8c83e40fe39ba7145f3340aaaefa9d From 8e95be036dc29240782fb38973204199dc788c52 Mon Sep 17 00:00:00 2001 From: Samuel Johnson <96841389+SFJohnson24@users.noreply.github.com> Date: Tue, 5 May 2026 15:05:32 -0400 Subject: [PATCH 06/12] readme (#28) --- README.md | 12 +++++++++++- docs/files/schema.png | Bin 0 -> 73596 bytes docs/files/validation.png | Bin 0 -> 89713 bytes engine | 2 +- 4 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 docs/files/schema.png create mode 100644 docs/files/validation.png diff --git a/README.md b/README.md index 3e1131c96..b82af8dc6 100644 --- a/README.md +++ b/README.md @@ -258,7 +258,17 @@ Unpublished/ - Keep an eye on the PR to make sure the automated checks pass, as well as to respond to any comments from reviewers. - If you need to make further changes, simply checkout your branch (`git checkout `), make your changes, and commit and push them — the PR will automatically update and re-run validation. -16) GitHub will automatically validate your changes when a PR is opened. If you did not include a results.csv, the check will fail — run the rule locally and push the generated results.csv to resolve it. If a difference between your results.csv and the engine output is detected, the check will also fail — re-run the rule locally, verify the results look correct, and push the updated results.csv. If the check continues to fail after updating, flag it for the Engineers Team in the PR comments. +16) GitHub will automatically validate your changes when a PR is opened. If you did not include a results.csv, the check will fail — run the rule locally and push the generated results.csv to resolve it. If a difference between your results.csv and the engine output is detected, the check will also fail — re-run the rule locally, verify the results look correct, and push the updated results.csv. If the check continues to fail after updating, flag it for the Engineers Team in the PR comments. + + **Rule Schema Validation** will run and post a comment on the PR showing whether your `rule.yaml` is valid. If the schema check fails, the comment will show the specific validation error — for example, the image below shows a failure caused by an empty `check all:` condition in the rule. The comment will automatically update when you push new code and the action re-runs. + + ![Schema validation failure example](docs/files/schema.png) + + **Test Data Validation** will also run and post a comment showing the results of running the rule against your test data. If the check fails, the comment will indicate why — for example, the image below shows a failure caused by a missing `.env` file in the test data. + + ![Test data validation failure example](docs/files/validation.png) + +Once your rule and test data pass these checks, the PR can be merged. **Approval - Merge PR** diff --git a/docs/files/schema.png b/docs/files/schema.png new file mode 100644 index 0000000000000000000000000000000000000000..fcdddc30b79f4b1cd5c8038634f7b49a36315a1b GIT binary patch literal 73596 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 literal 0 HcmV?d00001 diff --git a/docs/files/validation.png b/docs/files/validation.png new file mode 100644 index 0000000000000000000000000000000000000000..41163223ad1ee5da445d8b9aebaf7bd34aa8d2b5 GIT binary patch literal 89713 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 *!Ixukbf+BGnP2})qb3gaJjhGY!HWgP`g zJ8Hf2j5yoPgEr!oPSx&f)=aJIvMIYUbJf>Xz&=BR!M5MJtB^}RT05`~NQ39L-1CyU zLncFPEn*!TwHM8v%}h1y*5>_M6*KLbBC`{C?bv8ei+#KQiTR|bY7G%jF`%ejk_DOHFzIsWK+e}%ext=m_?9Qi5y7cd>?R|Z0pbEX8Xm=bo z%9{gPXɊYSJYeAb%2raqQRoHy`GIWqhVdEhIg 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 literal 0 HcmV?d00001 diff --git a/engine b/engine index 9c4584033..631e708fc 160000 --- a/engine +++ b/engine @@ -1 +1 @@ -Subproject commit 9c4584033f8c83e40fe39ba7145f3340aaaefa9d +Subproject commit 631e708fc815932d8e9adbad334a8eb506e17f8d From d20894ba2aa4193f63efdf1ce0f2264a7f553e29 Mon Sep 17 00:00:00 2001 From: Samuel Johnson <96841389+SFJohnson24@users.noreply.github.com> Date: Wed, 6 May 2026 10:15:11 -0400 Subject: [PATCH 07/12] issue templates (#29) --- .github/ISSUE_TEMPLATE/1-rule-issue.yml | 48 ++++++++++++++++++++++ .github/ISSUE_TEMPLATE/2-other-feature.yml | 9 ++++ 2 files changed, 57 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/1-rule-issue.yml create mode 100644 .github/ISSUE_TEMPLATE/2-other-feature.yml diff --git a/.github/ISSUE_TEMPLATE/1-rule-issue.yml b/.github/ISSUE_TEMPLATE/1-rule-issue.yml new file mode 100644 index 000000000..eb81a42ad --- /dev/null +++ b/.github/ISSUE_TEMPLATE/1-rule-issue.yml @@ -0,0 +1,48 @@ +name: Rule-related Feature Request +description: A request for a new feature or enhancement related to a specific rule +projects: + - cdisc-org/19 +body: + - type: dropdown + id: request_type + attributes: + label: Request Type + options: + - Bug with Existing Rule + - New Rule Issue + validations: + required: true + - type: dropdown + id: standard + attributes: + label: Standard + options: + - SDTMIG + - SENDIG + - ADaM + - TIG + - USDM + - FDA Business Rules + validations: + required: true + - type: input + id: rule_id + attributes: + label: Rule ID + description: "For bugs: provide the CORE ID (e.g. CORE-000123). For new rules: provide the standard rule ID (e.g. CG0001)." + placeholder: CORE-000123 or CG0001 + validations: + required: true + - type: textarea + id: description + attributes: + label: Description + description: Describe the bug or new rule request in detail. + validations: + required: true + - type: textarea + id: test_data + attributes: + label: Test Data + description: "If reporting a bug, attach your test data files here (CSV, Excel, etc.). You can drag and drop multiple files directly into this field." + placeholder: Drag and drop files here, or describe the test data inline. \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/2-other-feature.yml b/.github/ISSUE_TEMPLATE/2-other-feature.yml new file mode 100644 index 000000000..3a966e1bb --- /dev/null +++ b/.github/ISSUE_TEMPLATE/2-other-feature.yml @@ -0,0 +1,9 @@ +name: Non-rule-related Feature Request +description: A request for a new feature or enhancement not related to a specific rule +projects: + - cdisc-org/19 +type: Feature +body: + - type: textarea + attributes: + label: Feature Description From 7fde406c1093b9f59f93cb36bf138aeedb33126b Mon Sep 17 00:00:00 2001 From: Samuel Johnson <96841389+SFJohnson24@users.noreply.github.com> Date: Wed, 6 May 2026 10:19:31 -0400 Subject: [PATCH 08/12] Issues (#30) * issue templates * more config --- .github/ISSUE_TEMPLATE/1-rule-issue.yml | 2 +- .github/ISSUE_TEMPLATE/2-other-feature.yml | 2 +- .github/ISSUE_TEMPLATE/config.yml | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/config.yml diff --git a/.github/ISSUE_TEMPLATE/1-rule-issue.yml b/.github/ISSUE_TEMPLATE/1-rule-issue.yml index eb81a42ad..a5307fc8f 100644 --- a/.github/ISSUE_TEMPLATE/1-rule-issue.yml +++ b/.github/ISSUE_TEMPLATE/1-rule-issue.yml @@ -1,4 +1,4 @@ -name: Rule-related Feature Request +name: New Rule or Existing Rule Bug description: A request for a new feature or enhancement related to a specific rule projects: - cdisc-org/19 diff --git a/.github/ISSUE_TEMPLATE/2-other-feature.yml b/.github/ISSUE_TEMPLATE/2-other-feature.yml index 3a966e1bb..e828b0e22 100644 --- a/.github/ISSUE_TEMPLATE/2-other-feature.yml +++ b/.github/ISSUE_TEMPLATE/2-other-feature.yml @@ -1,4 +1,4 @@ -name: Non-rule-related Feature Request +name: Non-rule-related Request description: A request for a new feature or enhancement not related to a specific rule projects: - cdisc-org/19 diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..ec4bb386b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false \ No newline at end of file From c7b21a46ea1b561ce6327ea96d6b07f2aa9ee7bc Mon Sep 17 00:00:00 2001 From: Samuel Johnson <96841389+SFJohnson24@users.noreply.github.com> Date: Thu, 7 May 2026 10:40:40 -0400 Subject: [PATCH 09/12] update engine submodule to latest main (#31) --- engine | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine b/engine index 631e708fc..27edc1303 160000 --- a/engine +++ b/engine @@ -1 +1 @@ -Subproject commit 631e708fc815932d8e9adbad334a8eb506e17f8d +Subproject commit 27edc1303d15ac688955c5ab8bb1d85ac9fb0f27 From e24f42d991a517bbbb976940f50cf8a79e2c3075 Mon Sep 17 00:00:00 2001 From: Samuel Johnson <96841389+SFJohnson24@users.noreply.github.com> Date: Thu, 14 May 2026 13:36:30 -0400 Subject: [PATCH 10/12] update engine submodule to latest main (#32) --- engine | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine b/engine index 27edc1303..bc6ec1d0d 160000 --- a/engine +++ b/engine @@ -1 +1 @@ -Subproject commit 27edc1303d15ac688955c5ab8bb1d85ac9fb0f27 +Subproject commit bc6ec1d0d3b2ab9ee4adb062d68a763b1c5154c3 From fae9e900a17d5127d6492f26af429ed0c2ec0561 Mon Sep 17 00:00:00 2001 From: Aleksei Furmenkov Date: Fri, 15 May 2026 01:36:18 +0200 Subject: [PATCH 11/12] add YAML validation workflow and sorting script; update setup for pre-commit hooks (#34) Co-authored-by: Samuel Johnson <96841389+SFJohnson24@users.noreply.github.com> --- .github/workflows/validate-yaml-format.yml | 86 ++++++++++ .pre-commit-config.yaml | 11 ++ .vscode/extensions.json | 3 +- .vscode/settings.json | 9 ++ .vscode/tasks.json | 28 ++++ scripts/sort_yaml.py | 176 +++++++++++++++++++++ setup/bash_setup.sh | 11 ++ setup/windows_setup.bat | 12 ++ 8 files changed, 335 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/validate-yaml-format.yml create mode 100644 .pre-commit-config.yaml create mode 100644 .vscode/tasks.json create mode 100644 scripts/sort_yaml.py diff --git a/.github/workflows/validate-yaml-format.yml b/.github/workflows/validate-yaml-format.yml new file mode 100644 index 000000000..7a7693d17 --- /dev/null +++ b/.github/workflows/validate-yaml-format.yml @@ -0,0 +1,86 @@ +name: Validate YAML Formatting +on: + pull_request: + paths: + - 'Unpublished/**/rule.yml' + - 'Published/**/rule.yml' + types: [opened, synchronize, reopened] + workflow_dispatch: {} +jobs: + check-yaml-format: + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Set up Python 3.12 + uses: actions/setup-python@v5 + with: + python-version: '3.12' + - name: Install pyyaml + run: pip install pyyaml + - name: Detect changed rule.yml files + id: changed-files + run: | + if [ "${{ github.event_name }}" = "pull_request" ]; then + FILES=$(git diff --name-only origin/${{ github.base_ref }}...HEAD \ + | grep -E '^(Published|Unpublished)/.*/rule\.yml$' || true) + else + FILES=$(git diff --name-only HEAD~1 HEAD \ + | grep -E '^(Published|Unpublished)/.*/rule\.yml$' || true) + fi + if [ -z "$FILES" ]; then + echo "No rule.yml files changed." + echo "has_files=false" >> $GITHUB_OUTPUT + else + echo "has_files=true" >> $GITHUB_OUTPUT + echo "$FILES" > /tmp/changed_rule_files.txt + fi + - name: Check YAML sorting and formatting + id: format-check + if: steps.changed-files.outputs.has_files == 'true' + run: | + FILES=$(cat /tmp/changed_rule_files.txt | tr '\n' ' ') + python scripts/sort_yaml.py --check $FILES + continue-on-error: true + - name: Post format check result to PR + if: always() && github.event_name == 'pull_request' && steps.changed-files.outputs.has_files == 'true' + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const outcome = '${{ steps.format-check.outcome }}'; + const marker = ''; + let body = marker + '\n'; + if (outcome === 'success') { + body += '## \u2705 YAML Format Check Passed\n\nAll changed `rule.yml` files are correctly sorted and formatted.'; + } else { + body += '## \u274c YAML Format Check Failed\n\n'; + body += 'One or more `rule.yml` files are not correctly sorted/formatted alphabetically by key.\n\n'; + body += 'Run the following command locally to fix them:\n\n```bash\npython scripts/sort_yaml.py\n```\n\nThen commit and push.'; + } + const { data: comments } = await github.rest.issues.listComments({ + owner: context.repo.owner, repo: context.repo.repo, + issue_number: context.issue.number, + }); + const existing = comments.find(c => c.user.type === 'Bot' && c.body.includes(marker)); + if (existing) { + await github.rest.issues.updateComment({ + owner: context.repo.owner, repo: context.repo.repo, + comment_id: existing.id, body, + }); + } else { + await github.rest.issues.createComment({ + owner: context.repo.owner, repo: context.repo.repo, + issue_number: context.issue.number, body, + }); + } + - name: Fail if format check failed + if: steps.format-check.outcome == 'failure' + run: | + echo "YAML format check failed. Run 'python scripts/sort_yaml.py' to fix." + exit 1 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 000000000..ef3757b1d --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,11 @@ +repos: + - repo: local + hooks: + - id: sort-yaml-rules + name: Sort and format rule YAML files + language: python + entry: python scripts/sort_yaml.py --check + types: [yaml] + files: ".*/rule\\.yml$" + additional_dependencies: [pyyaml] + pass_filenames: true diff --git a/.vscode/extensions.json b/.vscode/extensions.json index c27790ce9..fe086e4f5 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -2,6 +2,7 @@ "recommendations": [ "redhat.vscode-yaml", "GrapeCity.gc-excelviewer", - "mechatroner.rainbow-csv" + "mechatroner.rainbow-csv", + "emeraldwalk.runonsave" ] } \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 7a234b51f..cc469d2b4 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,14 @@ { "yaml.schemas": { "https://raw.githubusercontent.com/cdisc-org/cdisc-rules-engine/refs/heads/main/resources/schema/rule-merged/CORE-base.json": "rule.yml" + }, + "emeraldwalk.runonsave": { + "commands": [ + { + "match": "rule\\.yml$", + "isAsync": false, + "cmd": "${workspaceFolder}/venv/bin/python ${workspaceFolder}/scripts/sort_yaml.py ${file}" + } + ] } } \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 000000000..092145b12 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,28 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "Sort & Format rule.yml", + "type": "shell", + "command": "${workspaceFolder}/venv/bin/python", + "args": ["${workspaceFolder}/scripts/sort_yaml.py", "${file}"], + "presentation": { + "reveal": "silent", + "panel": "shared" + }, + "problemMatcher": [] + }, + { + "label": "Sort & Format ALL rule.yml files", + "type": "shell", + "command": "${workspaceFolder}/venv/bin/python", + "args": ["${workspaceFolder}/scripts/sort_yaml.py"], + "presentation": { + "reveal": "always", + "panel": "shared" + }, + "problemMatcher": [] + } + ] +} + diff --git a/scripts/sort_yaml.py b/scripts/sort_yaml.py new file mode 100644 index 000000000..b174e0aa4 --- /dev/null +++ b/scripts/sort_yaml.py @@ -0,0 +1,176 @@ +#!/usr/bin/env python3 +""" +Sort and format rule YAML files alphabetically and recursively by key name. + +This matches the auto-format/auto-sort behavior of the CDISC conformance rules editor. + +Usage: + # Format files in-place (default: all rule.yml under Published/ and Unpublished/) + python scripts/sort_yaml.py + + # Format specific files + python scripts/sort_yaml.py path/to/rule.yml another/rule.yml + + # Check mode: exit with code 1 if any file is not formatted correctly + python scripts/sort_yaml.py --check [files...] +""" + +import sys +import argparse +from pathlib import Path + +try: + import yaml +except ImportError: + print("ERROR: pyyaml is not installed. Run: pip install pyyaml", file=sys.stderr) + sys.exit(1) + + +# --------------------------------------------------------------------------- +# Custom YAML Dumper +# --------------------------------------------------------------------------- + +class _SortedDumper(yaml.Dumper): + """YAML Dumper that produces consistent, human-readable output.""" + pass + + +def _str_representer(dumper: yaml.Dumper, data: str): + """Represent strings: use literal block style for multi-line, plain otherwise. + Strings that look like YAML scalars (booleans, numbers) are quoted. + """ + if "\n" in data: + return dumper.represent_scalar("tag:yaml.org,2002:str", data, style="|") + return dumper.represent_scalar("tag:yaml.org,2002:str", data) + + +_SortedDumper.add_representer(str, _str_representer) + + +# --------------------------------------------------------------------------- +# Core logic +# --------------------------------------------------------------------------- + +def sort_recursive(obj): + """Recursively sort dict keys alphabetically. Lists are preserved as-is.""" + if isinstance(obj, dict): + return {k: sort_recursive(obj[k]) for k in sorted(obj.keys(), key=str)} + if isinstance(obj, list): + return [sort_recursive(item) for item in obj] + return obj + + +def canonical(content: str) -> str: + """Return the canonical (sorted + formatted) representation of a YAML string.""" + data = yaml.safe_load(content) + if data is None: + return content + sorted_data = sort_recursive(data) + return yaml.dump( + sorted_data, + Dumper=_SortedDumper, + default_flow_style=False, + allow_unicode=True, + indent=2, + sort_keys=False, # we already sorted manually + width=100, + ) + + +def find_rule_files(root: Path) -> list[Path]: + """Find all rule.yml files under Published/ and Unpublished/.""" + files = [] + for folder in ("Published", "Unpublished"): + folder_path = root / folder + if folder_path.exists(): + files.extend(folder_path.rglob("rule.yml")) + return sorted(files) + + +def process_files(files: list[Path], check_mode: bool) -> int: + """Format (or check) the given files. Returns exit code.""" + changed = [] + errors = [] + + for path in files: + try: + original = path.read_text(encoding="utf-8") + formatted = canonical(original) + except Exception as exc: + errors.append(f" {path}: {exc}") + continue + + if original != formatted: + changed.append(path) + if not check_mode: + path.write_text(formatted, encoding="utf-8") + print(f" Formatted: {path}") + + if errors: + print("\nERROR: Failed to process the following files:", file=sys.stderr) + for e in errors: + print(e, file=sys.stderr) + return 1 + + if check_mode: + if changed: + print( + "\nThe following rule.yml files are not correctly sorted/formatted:\n", + file=sys.stderr, + ) + for p in changed: + print(f" {p}", file=sys.stderr) + print( + "\nRun `python scripts/sort_yaml.py` to fix them automatically.", + file=sys.stderr, + ) + return 1 + else: + print("All rule.yml files are correctly sorted and formatted.") + else: + if not changed: + print("All rule.yml files are already correctly sorted and formatted.") + + return 0 + + +# --------------------------------------------------------------------------- +# Entry point +# --------------------------------------------------------------------------- + +def main(): + parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + parser.add_argument( + "--check", + action="store_true", + help="Check mode: exit 1 if any file needs formatting, without modifying files.", + ) + parser.add_argument( + "files", + nargs="*", + type=Path, + help="rule.yml files to process. Defaults to all rule.yml files under Published/ and Unpublished/.", + ) + args = parser.parse_args() + + repo_root = Path(__file__).resolve().parent.parent + + if args.files: + files = [p.resolve() for p in args.files] + else: + files = find_rule_files(repo_root) + + if not files: + print("No rule.yml files found.") + return 0 + + mode = "Checking" if args.check else "Formatting" + print(f"{mode} {len(files)} rule.yml file(s)...") + + sys.exit(process_files(files, check_mode=args.check)) + + +if __name__ == "__main__": + main() + + diff --git a/setup/bash_setup.sh b/setup/bash_setup.sh index 2ab01bb2f..c69282c30 100644 --- a/setup/bash_setup.sh +++ b/setup/bash_setup.sh @@ -145,4 +145,15 @@ fi VENV_PYTHON=$(which python) +echo "Installing pre-commit..." +pip install pre-commit --index-url https://pypi.org/simple/ --quiet 2>/dev/null || \ + pip install pre-commit --quiet 2>/dev/null || true +if command -v pre-commit >/dev/null 2>&1; then + pre-commit install + echo "Pre-commit hook installed." +else + echo "Warning: pre-commit not found on PATH after install; skipping hook setup." + echo "You can install it manually with: pip install pre-commit && pre-commit install" +fi + echo "Setup completed successfully!" diff --git a/setup/windows_setup.bat b/setup/windows_setup.bat index e87cdef15..77d0ce5be 100644 --- a/setup/windows_setup.bat +++ b/setup/windows_setup.bat @@ -177,6 +177,18 @@ if !errorlevel! neq 0 ( exit /b 1 ) +echo. +echo Installing pre-commit... +python -m pip install pre-commit --index-url https://pypi.org/simple/ --quiet 2>nul || python -m pip install pre-commit --quiet 2>nul +where pre-commit >nul 2>&1 +if !errorlevel! equ 0 ( + pre-commit install + echo Pre-commit hook installed. +) else ( + echo Warning: pre-commit not found on PATH; skipping hook setup. + echo You can install it manually with: pip install pre-commit ^&^& pre-commit install +) + echo. echo Setup completed successfully! pause \ No newline at end of file From 7e1dc7d69881838806d8d185fcf9a61245624a76 Mon Sep 17 00:00:00 2001 From: Samuel Johnson <96841389+SFJohnson24@users.noreply.github.com> Date: Wed, 20 May 2026 15:38:58 -0400 Subject: [PATCH 12/12] update engine submodule to latest main (#36) --- engine | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine b/engine index bc6ec1d0d..d6686aa2f 160000 --- a/engine +++ b/engine @@ -1 +1 @@ -Subproject commit bc6ec1d0d3b2ab9ee4adb062d68a763b1c5154c3 +Subproject commit d6686aa2f2b8302d031d7114b45d618aa67043b1