diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d25c88e273b..b9c3f4090e0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -52,8 +52,7 @@ jobs: python tools/ci/check_map_sizes.py python tools/ci/verify_sql_version.py python tools/ci/no_duplicate_definitions.py - python -m tools.ci.check_icon_conflicts - python -m tools.ci.check_icon_dupenames + python tools/ci/check_icons.py python -m tools.ci.check_legacy_attack_chain python -m tools.maplint.source --github diff --git a/tools/ci/check_icon_conflicts.py b/tools/ci/check_icon_conflicts.py deleted file mode 100644 index bc256e8b68f..00000000000 --- a/tools/ci/check_icon_conflicts.py +++ /dev/null @@ -1,37 +0,0 @@ -from collections import defaultdict -import glob -import sys -import time - -from ..dmi import Dmi - - -if __name__ == "__main__": - print("check_icon_conflicts started") - - count = 0 - exit_code = 0 - start = time.time() - - findings = defaultdict(list) - - for dmi_path in glob.glob("**/*.dmi", recursive=True): - dmi = Dmi.from_file(dmi_path) - for state in dmi.states: - if '!CONFLICT!' in state.name: - findings[dmi_path].append(state.name) - count += 1 - - if findings: - exit_code = 1 - - for filename in sorted(findings.keys()): - states = findings[filename] - for state in sorted(states): - print(f"{filename}: conflicted state {state}") - - - end = time.time() - print(f"\ncheck_icon_conflicts checked {count} files in {end - start:.2f}s\n") - - sys.exit(exit_code) diff --git a/tools/ci/check_icon_dupenames.py b/tools/ci/check_icon_dupenames.py deleted file mode 100644 index da4f988810c..00000000000 --- a/tools/ci/check_icon_dupenames.py +++ /dev/null @@ -1,40 +0,0 @@ -from collections import defaultdict -import glob -import sys -import time - -from ..dmi import Dmi - - -if __name__ == "__main__": - print("check_icon_dupenames started") - - count = 0 - exit_code = 0 - start = time.time() - - findings = defaultdict(list) - - for dmi_path in glob.glob("**/*.dmi", recursive=True): - dmi = Dmi.from_file(dmi_path) - states = set() - for state in dmi.states: - # Movement states have the same name as their non-movement counterparts - if (state.name, state.movement) in states: - findings[dmi_path].append(state.name) - states.add((state.name, state.movement)) - count += 1 - - if findings: - exit_code = 1 - - for filename in sorted(findings.keys()): - states = findings[filename] - for state in sorted(states): - print(f"{filename}: duplicate state name `{state}`") - - - end = time.time() - print(f"\ncheck_icon_dupenames checked {count} files in {end - start:.2f}s\n") - - sys.exit(exit_code) diff --git a/tools/ci/check_icons.py b/tools/ci/check_icons.py new file mode 100644 index 00000000000..e55dc0fdf86 --- /dev/null +++ b/tools/ci/check_icons.py @@ -0,0 +1,56 @@ +from glob import glob +from time import time +from collections import defaultdict + +from avulto import DMI + +def check_duplicate_names(dmi: DMI) -> list[str]: + states = set() + failures = [] + for state in dmi.states(): + # Movement states have the same name as their non-movement counterparts + if (state.name, state.movement) in states: + duplicates.append(f"duplicate state name `{state.name}`") + states.add((state.name, state.movement)) + return failures + +def check_conflicted(dmi: DMI) -> list[str]: + failures = [] + for state in dmi.state_names(): + if '!CONFLICT!' in state: + failures.append(f"conflicted state {state}") + return failures + +ICON_CHECKS = [ + check_duplicate_names, + check_conflicted, +] + +if __name__ == "__main__": + print("check_icons started") + + count = 0 + exit_code = 0 + start = time() + + findings = defaultdict(list) + + for dmi_path in glob("**/*.dmi", recursive=True): + dmi = DMI.from_file(dmi_path) + for check in ICON_CHECKS: + if failures := check(dmi): + findings[dmi_path].extend(failures) + count += 1 + + if findings: + exit_code = 1 + + for filename in sorted(findings.keys()): + failures = findings[filename] + for failure in sorted(failures): + print(f"{filename}: {failure}") + + end = time() + print(f"\ncheck_icons checked {count} files in {end - start:.2f}s") + + exit(exit_code)