Files
conan-center-index/linter/config_yaml_linter.py
Chris Mc 70d9c6b69e (#13274) linters: Add annotations for YAML lint + add schema verification for config.yml and conandata.yml
* first attempt at a yaml linter wit github actions output

* This is less strict but has more information

* fixup message

* run config linter in Action

* better ux feedback

* try to use newlines

https://github.com/actions/toolkit/issues/193#issuecomment-605394935

* clean up

* fixup file name

* trying custom class for quoted str

* underlying yaml parser does not keep quotes

* trying to catch ints as problems

* remove test code

* and to "linter testing"

* install deps

* run new linter unconditionally

* revert testing changes

* new script for conandata (this one is much harder to spec)

* debugging

* lets see all the errors

* yamale -s ../linter/config_yaml_schema.yml aaf/config.yml

from linters folder as a test

* adjust script to match meeting discussion

* make sure the docs and linters match

* fix link

* Update conandata.yml

* exit 1 is not needed with annotations

* add annotation matchers for yaml since those do do much

* fix search for type

* fix whitespace

* tryout a yamllint file with a better looking matcher

* copy syntax from readme

* test if it's running in the wrong dir 🤔

* try with debug output

* bump since i dont have permissions

* bump - dont glob star

* bump

* less star globs

* also add action to conandata way

* bump

* drop action for cli + matcher

* more docs around linters

* fix file and name

* cleanup
2022-10-25 14:25:05 +02:00

38 lines
938 B
Python

import argparse
from strictyaml import load, Map, Str, YAMLValidationError, MapPattern
from yaml_linting import file_path
def main():
parser = argparse.ArgumentParser(
description="Validate ConanCenterIndex's 'config.yaml' file."
)
parser.add_argument(
"path",
nargs="?",
type=file_path,
help="file to validate.",
)
args = parser.parse_args()
schema = Map(
{"versions": MapPattern(Str(), Map({"folder": Str()}), minimum_keys=1)}
)
with open(args.path) as f:
content = f.read()
try:
load(content, schema)
except YAMLValidationError as error:
e = error.__str__().replace("\n", "%0A")
print(
f"::error file={args.path},line={error.context_mark.line},endline={error.problem_mark.line},"
f"title=config.yml schema error"
f"::{e}\n"
)
if __name__ == "__main__":
main()