diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/python/qmk/cli/ci/validate_aliases.py | 21 | 
1 files changed, 20 insertions, 1 deletions
| diff --git a/lib/python/qmk/cli/ci/validate_aliases.py b/lib/python/qmk/cli/ci/validate_aliases.py index 8b062dbe56..4f2fe6c941 100644 --- a/lib/python/qmk/cli/ci/validate_aliases.py +++ b/lib/python/qmk/cli/ci/validate_aliases.py @@ -25,6 +25,21 @@ def _target_keyboard_exists(target):      return True +def _alias_not_self(alias): +    """Check if alias points to itself, either directly or within a circular reference +    """ +    aliases = keyboard_alias_definitions() + +    found = set() +    while alias in aliases: +        found.add(alias) +        alias = aliases[alias].get('target', alias) +        if alias in found: +            return False + +    return True + +  @cli.subcommand('Validates the list of keyboard aliases.', hidden=True)  def ci_validate_aliases(cli):      aliases = keyboard_alias_definitions() @@ -32,7 +47,11 @@ def ci_validate_aliases(cli):      success = True      for alias in aliases.keys():          target = aliases[alias].get('target', None) -        if not _target_keyboard_exists(target): +        if not _alias_not_self(alias): +            cli.log.error(f'Keyboard alias {alias} should not point to itself') +            success = False + +        elif not _target_keyboard_exists(target):              cli.log.error(f'Keyboard alias {alias} has a target that doesn\'t exist: {target}')              success = False | 
