Add a tox environment for flexible candidate checking

By default ci_check_all_candidate_files.py, does as it implies and
checks all candidates for the current election.

Add new operation modes for:
 1. Checking all files for the current git commit '--HEAD'
 2. Checking all files specified on the command line

We also add a voting job on the check pipeline only for validating
the current review.  Local users are encouraged to use this as:

 tox -e ci-checks-review ; or
 tox -e ci-checks-review -- path/to/file

Change-Id: I0c82c59409bb58169840de42c02072aeae182b2b
Co-authored-by: Doug Hellmann <doug@doughellmann.com>
This commit is contained in:
Tony Breeds 2018-09-05 12:55:06 +10:00
parent 3efc347226
commit 60fb423adf
4 changed files with 51 additions and 7 deletions

View File

@ -1,10 +1,21 @@
- job: - job:
name: election-tox-ci-checks name: election-tox-ci-checks-election
parent: openstack-tox parent: openstack-tox
description: | description: |
Run the ci-checks tox environment Run the ci-checks-election tox environment
This environment runs the easy, for a machine, to validate election This environment runs the easy, for a machine, to validate election
checks. checks.
vars: vars:
tox_envlist: ci-checks tox_envlist: ci-checks-election
- job:
name: election-tox-ci-checks-review
parent: openstack-tox
description: |
Run the ci-checks-review tox environment
This environment runs the easy, for a machine, to validate election
checks against only files modified in the current review.
vars:
tox_envlist: ci-checks-review

View File

@ -7,12 +7,13 @@
jobs: jobs:
- openstack-tox-py27 - openstack-tox-py27
- openstack-tox-linters - openstack-tox-linters
- election-tox-ci-checks - election-tox-ci-checks-review
- election-tox-ci-checks-election
gate: gate:
jobs: jobs:
- openstack-tox-py27 - openstack-tox-py27
- openstack-tox-linters - openstack-tox-linters
- election-tox-ci-checks - election-tox-ci-checks-election
post: post:
jobs: jobs:
- publish-tox-docs-static - publish-tox-docs-static

View File

@ -16,6 +16,7 @@ from __future__ import unicode_literals
import argparse import argparse
import os import os
import subprocess
from openstack_election import check_candidacy from openstack_election import check_candidacy
from openstack_election import utils from openstack_election import utils
@ -75,6 +76,19 @@ def check_for_changes(projects, filepath, limit):
return bool(changes_found) return bool(changes_found)
def find_modified_candidate_files():
"Return a list of files modified by the most recent commit."
results = subprocess.check_output(
['git', 'diff', '--name-only', '--pretty=format:', 'HEAD^']
).decode('utf-8')
filenames = [
l.strip()
for l in results.splitlines()
if l.startswith(utils.CANDIDATE_PATH + '/')
]
return filenames
def main(): def main():
description = ('Check all files under the current open election are valid') description = ('Check all files under the current open election are valid')
parser = argparse.ArgumentParser(description) parser = argparse.ArgumentParser(description)
@ -90,6 +104,14 @@ def main():
default=utils.conf['release'], default=utils.conf['release'],
help=('The relase to validate candidates against. ' help=('The relase to validate candidates against. '
'Default: %(default)s')) 'Default: %(default)s'))
parser.add_argument('--HEAD',
dest='head_only',
action='store_true',
default=False,
help='Validate all candidates.')
parser.add_argument('files',
nargs='*',
help='Candidate files to validate.')
args = parser.parse_args() args = parser.parse_args()
errors = False errors = False
@ -99,7 +121,14 @@ def main():
projects = utils.get_projects(tag=args.tag, fallback_to_master=True) projects = utils.get_projects(tag=args.tag, fallback_to_master=True)
for filepath in utils.find_candidate_files(election=args.release): if args.files:
to_process = args.files
elif args.head_only:
to_process = find_modified_candidate_files()
else:
to_process = utils.find_candidate_files(election=args.release)
for filepath in to_process:
candidate_ok = True candidate_ok = True
candidate_ok &= validate_filename(filepath) candidate_ok &= validate_filename(filepath)

View File

@ -29,7 +29,10 @@ commands = {posargs}
[testenv:docs] [testenv:docs]
commands = sphinx-build -v -W -b html -d doc/build/doctrees doc/source doc/build/html commands = sphinx-build -v -W -b html -d doc/build/doctrees doc/source doc/build/html
[testenv:ci-checks] [testenv:ci-checks-review]
commands = ci-check-all-candidate-files {posargs:--HEAD}
[testenv:ci-checks-election]
commands = ci-check-all-candidate-files commands = ci-check-all-candidate-files
[flake8] [flake8]