Files
rivencraft/scripts/changed_targets.py
T
2026-11-14 12:17:49 -05:00

33 lines
1.3 KiB
Python

#!/usr/bin/env python3
"""Select affected game targets; docs and release tooling do not trigger game tests."""
import argparse
import json
import subprocess
def affected(paths):
targets = set()
for path in paths:
if path.startswith("src/main/java/") or path in {"build.gradle", "settings.gradle", "gradle.properties"}:
targets.add("mc1211")
if path.startswith("ports/mc263/") and not path.endswith(".md"):
targets.add("mc263")
if path.startswith(("src/main/resources/", "src/generated/", "buildSrc/", "gradle/")) or path in {"gradlew", "gradlew.bat"}:
targets.update(("mc1211", "mc263"))
return sorted(targets)
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--base", required=True)
args = parser.parse_args()
paths = subprocess.check_output(["git", "diff", "--name-only", args.base, "HEAD"], text=True).splitlines()
values = {"mc1211": ("21", "build"), "mc263": ("25", "-p ports/mc263 build")}
matrix = {"include": [{"target": target, "java": values[target][0], "gradle_args": values[target][1]}
for target in affected(paths)]}
print(json.dumps(matrix, separators=(",", ":")))
if __name__ == "__main__":
main()