Add script to validate manifests syntax
This commit is contained in:
parent
5bbc140133
commit
f6457f06f0
1 changed files with 49 additions and 0 deletions
49
ci/validate
Executable file
49
ci/validate
Executable file
|
@ -0,0 +1,49 @@
|
|||
#!/usr/bin/python3
|
||||
# Validate basic syntax of shell script and yaml.
|
||||
|
||||
import os
|
||||
import stat
|
||||
import subprocess
|
||||
import yaml
|
||||
|
||||
validated=0
|
||||
|
||||
def openat(dirfd, name, mode='r'):
|
||||
def opener(path, flags):
|
||||
return os.open(path, flags, dir_fd=dirfd)
|
||||
return open(name, mode, opener=opener)
|
||||
|
||||
|
||||
def validate_shell(rootfd, name):
|
||||
subprocess.check_call(['bash', '-n', name], preexec_fn=lambda: os.fchdir(rootfd))
|
||||
global validated
|
||||
validated +=1
|
||||
|
||||
|
||||
for root, dirs, files, rootfd in os.fwalk('.'):
|
||||
# Skip .git
|
||||
if '.git' in dirs:
|
||||
dirs.remove('.git')
|
||||
for name in files:
|
||||
if name.endswith(('.yaml', '.yml')):
|
||||
print("Validating:", name)
|
||||
with open(os.open(name, dir_fd=rootfd, flags=os.O_RDONLY)) as f:
|
||||
yaml.safe_load(f)
|
||||
validated +=1
|
||||
continue
|
||||
elif name.endswith('.sh'):
|
||||
print("Validating:", name)
|
||||
validate_shell(rootfd, name)
|
||||
continue
|
||||
stbuf = os.lstat(name, dir_fd=rootfd)
|
||||
if not stat.S_ISREG(stbuf.st_mode):
|
||||
continue
|
||||
if not stbuf.st_mode & stat.S_IXUSR:
|
||||
continue
|
||||
mimetype = subprocess.check_output(['file', '-b', '--mime-type', name], encoding='UTF-8',
|
||||
preexec_fn=lambda: os.fchdir(rootfd)).strip()
|
||||
if mimetype == 'text/x-shellscript':
|
||||
print("Validating:", name)
|
||||
validate_shell(rootfd, name)
|
||||
|
||||
print(f"Validated {validated} files")
|
Loading…
Reference in a new issue