From 952bc590ba8270cd758a6a109134eeb409b3a633 Mon Sep 17 00:00:00 2001 From: Clint Adams Date: Mon, 28 Sep 2015 17:05:37 -0400 Subject: [PATCH] Test formatting of gerritbot/channels.yaml Ensure that the output of tools/normalize_channels_yaml.py matches gerritbot/channels.yaml modulo any comments. Change-Id: I3147cb094a795aeeffcceda182d065ed5145c2dd Depends-On: Ia710997f37e8fba4a18b26577ecac42dd3137e2a --- tools/check-channels-yaml.sh | 12 ++++++++ tools/normalize_channels_yaml.py | 48 ++++++++++++++++++++++++++++++++ tox.ini | 1 + zuul/layout.yaml | 4 +++ 4 files changed, 65 insertions(+) create mode 100755 tools/check-channels-yaml.sh create mode 100755 tools/normalize_channels_yaml.py diff --git a/tools/check-channels-yaml.sh b/tools/check-channels-yaml.sh new file mode 100755 index 0000000000..57f157af23 --- /dev/null +++ b/tools/check-channels-yaml.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +T=$(mktemp -d) +trap "rm -rf $T" EXIT + +channels_file=${1:-gerritbot/channels.yaml} + +# strip comments so that output can be compared meaningfully +(printf "# This file is sorted alphabetically by channel name.\n"; sed '/^[[:space:]]*#.*$/d;s/[[:space:]]*#.*$//' gerritbot/channels.yaml) > $T/comments-removed +./tools/normalize_channels_yaml.py >$T/regenned + +diff -u $T/comments-removed $T/regenned diff --git a/tools/normalize_channels_yaml.py b/tools/normalize_channels_yaml.py new file mode 100755 index 0000000000..5d5ad29b0e --- /dev/null +++ b/tools/normalize_channels_yaml.py @@ -0,0 +1,48 @@ +#! /usr/bin/env python +# +# Copyright (c) 2015 Hewlett-Packard Development Company, L.P. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import locale +import os +import sys +import yaml +from collections import OrderedDict +import projectconfig_yamllib as pcy + +def main(): + locale.setlocale(locale.LC_COLLATE, 'C') + + yaml.add_constructor(yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG, + pcy.construct_yaml_map) + + yaml.add_representer(OrderedDict, pcy.project_representer, + Dumper=pcy.IndentedDumper) + + chandata = yaml.load(open('gerritbot/channels.yaml')) + for k,v in chandata.items(): + v['projects'] = sorted(v['projects']) + + sys.stdout.write('# This file is sorted alphabetically by channel name.\n') + first = True + for k in sorted(chandata.keys()): + if not first: + sys.stdout.write('\n') + first = False + sys.stdout.write(yaml.dump({k: chandata[k]}, default_flow_style=False, + Dumper=pcy.IndentedDumper, width=80, indent=2)) + +if __name__ == '__main__': + main() diff --git a/tox.ini b/tox.ini index 7f1f38e7c0..26d594937c 100644 --- a/tox.ini +++ b/tox.ini @@ -33,6 +33,7 @@ deps = PyYAML commands = {toxinidir}/tools/check_irc_access.py -l accessbot/channels.yaml openstackinfra {toxinidir}/tools/irc_tests.py + {toxinidir}/tools/check-channels-yaml.sh [flake8] show-source = True diff --git a/zuul/layout.yaml b/zuul/layout.yaml index 5abe9df838..5ed9c3bc74 100755 --- a/zuul/layout.yaml +++ b/zuul/layout.yaml @@ -1024,6 +1024,10 @@ jobs: files: - 'accessbot/channels.yaml' - 'gerritbot/channels.yaml' + - 'tools/check_channels_yaml.sh' + - 'tools/normalize_channels_yaml.py' + - 'tools/projectconfig_yamllib.py' + - 'tox.ini' - name: gate-infra-docs-index files: