| Index: build.py |
| diff --git a/build.py b/build.py |
| index 08331854986a6e9ec5d8cb0385170fef58014d55..5b199812047584378f8c29069a6d3e7231292d01 100644 |
| --- a/build.py |
| +++ b/build.py |
| @@ -4,11 +4,15 @@ |
| import argparse |
| import logging |
| +import io |
| +import json |
| import os |
| import re |
| import shutil |
| import subprocess |
| import sys |
| +from urllib import urlencode |
| +import urllib2 |
| from functools import partial |
| from StringIO import StringIO |
| from zipfile import ZipFile |
| @@ -34,7 +38,8 @@ def make_argument(*args, **kwargs): |
| return partial(_make_argument, *args, **kwargs) |
| -def argparse_command(valid_platforms=None, multi_platform=False, arguments=()): |
| +def argparse_command(valid_platforms=None, multi_platform=False, |
| + no_platform=False, arguments=()): |
| def wrapper(func): |
| def func_wrapper(*args, **kwargs): |
| return func(*args, **kwargs) |
| @@ -49,6 +54,7 @@ def argparse_command(valid_platforms=None, multi_platform=False, arguments=()): |
| 'multi_platform': multi_platform, |
| 'function': func, |
| 'arguments': arguments, |
| + 'no_platform': no_platform, |
| }) |
| return func_wrapper |
| return wrapper |
| @@ -56,7 +62,7 @@ def argparse_command(valid_platforms=None, multi_platform=False, arguments=()): |
| def make_subcommand(name, description, help_text, function, arguments): |
| new_parser = SUB_PARSERS.add_parser( |
| - name, description=description, help=help_text, |
| + name.replace('_', '-'), description=description, help=help_text, |
| formatter_class=argparse.RawDescriptionHelpFormatter, |
| ) |
| @@ -95,6 +101,7 @@ def build_available_subcommands(base_dir): |
| for command_params in ALL_COMMANDS: |
| multi_platform = command_params.pop('multi_platform') |
| + no_platform = command_params.pop('no_platform') |
| platforms = types.intersection(command_params.pop('valid_platforms')) |
| if len(platforms) > 1: |
| if multi_platform: |
| @@ -104,12 +111,12 @@ def build_available_subcommands(base_dir): |
| else: |
| help_text = None |
| action = 'store' |
| - |
| - command_params['arguments'] += ( |
| - make_argument('-t', '--type', dest='platform', required=True, |
| - choices=platforms, action=action, |
| - help=help_text), |
| - ) |
| + if not no_platform: |
| + command_params['arguments'] += ( |
| + make_argument('-t', '--type', dest='platform', |
| + required=True, choices=platforms, |
| + action=action, help=help_text), |
| + ) |
| make_subcommand(**command_params) |
| elif len(platforms) == 1: |
| sub_parser = make_subcommand(**command_params) |
| @@ -375,6 +382,27 @@ def updatepsl(base_dir, **kwargs): |
| publicSuffixListUpdater.updatePSL(base_dir) |
| +@argparse_command(no_platform=True) |
| +def lint_gitlab_ci(base_dir, **kwargs): |
| + """Lint the .gitlab-ci.yaml file. |
| + |
| + Test the .gitlab-ci.yaml file for validity. (Note: You need to have PyYAML |
| + installed.) |
| + """ |
| + import yaml |
| + filename = '.gitlab-ci.yml' |
| + try: |
| + with io.open(os.path.join(base_dir, filename), 'rt') as fp: |
| + yaml_data = yaml.load(fp.read()) |
| + |
| + post_data = {'content': json.dumps(yaml_data)} |
| + request = urllib2.Request('https://gitlab.com/api/v4/ci/lint/', |
| + data=urlencode(post_data)) |
| + print urllib2.urlopen(request).read() |
|
Vasily Kuznetsov
2018/07/09 17:59:48
Could we maybe set the return code based on the re
tlucas
2018/07/10 09:41:35
It's not hard to interpret at all ( on success it
|
| + except IOError: |
| + print 'No valid {} found.'.format(filename) |
| + |
| + |
| def process_args(base_dir, *args): |
| if build_available_subcommands(base_dir): |
| MAIN_PARSER.set_defaults(base_dir=base_dir) |