123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- #!/usr/bin/env python
- #
- # python yaml validator for a git commit
- #
- '''
- python yaml validator for a git commit
- '''
- import shutil
- import sys
- import os
- import glob
- import tempfile
- import subprocess
- import yaml
- def get_changes(oldrev, newrev, tempdir):
- '''Get a list of git changes from oldrev to newrev'''
- proc = subprocess.Popen(['/usr/bin/git', 'diff', '--name-only', oldrev,
- newrev, '--diff-filter=ACM'], stdout=subprocess.PIPE)
- proc.wait()
- files = proc.stdout.read().strip().split('\n')
- # No file changes
- if not files:
- return []
- cmd = '/usr/bin/git archive %s %s | /bin/tar x -C %s' % (newrev, " ".join(files), tempdir)
- proc = subprocess.Popen(cmd, shell=True)
- proc.wait()
- return [fmod for fmod in glob.glob('%s/**/*' % tempdir) if not os.path.isdir(fmod)]
- def main():
- '''
- Perform yaml validation
- '''
- results = []
- try:
- tmpdir = tempfile.mkdtemp(prefix='jenkins-git-')
- old, new, _ = sys.argv[1:]
- for file_mod in get_changes(old, new, tmpdir):
- print "+++++++ Received: %s" % file_mod
- if not file_mod.endswith('.yml') or not file_mod.endswith('.yaml'):
- continue
- try:
- yaml.load(file_mod)
- results.append(True)
- except yaml.scanner.ScannerError as yerr:
- print yerr.message
- results.append(False)
- finally:
- shutil.rmtree(tmpdir)
- if not all(results):
- sys.exit(1)
- if __name__ == "__main__":
- main()
|