Added CI script to repo
This commit is contained in:
parent
f0a621a952
commit
46b4a19bd3
|
@ -0,0 +1,170 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
# continuous integration
|
||||
# build daily reports (doxygen,coverage,etc)
|
||||
|
||||
import datetime
|
||||
import time
|
||||
import subprocess
|
||||
import pexpect
|
||||
import glob
|
||||
import os
|
||||
import sys
|
||||
import urllib
|
||||
|
||||
|
||||
def wget(url):
|
||||
try:
|
||||
fp = urllib.urlopen(url)
|
||||
data = fp.read()
|
||||
return data
|
||||
except IOError:
|
||||
pass
|
||||
return ''
|
||||
|
||||
|
||||
# Upload file to sourceforge web server using scp
|
||||
def upload(file_to_upload, destination):
|
||||
try:
|
||||
password = sys.argv[1]
|
||||
child = pexpect.spawn(
|
||||
'scp ' + file_to_upload + ' danielmarjamaki,cppcheck@web.sourceforge.net:' + destination)
|
||||
child.expect(
|
||||
'danielmarjamaki,cppcheck@web.sourceforge.net\'s password:')
|
||||
child.sendline(password)
|
||||
child.interact()
|
||||
except IOError:
|
||||
pass
|
||||
except OSError:
|
||||
pass
|
||||
except pexpect.TIMEOUT:
|
||||
pass
|
||||
|
||||
|
||||
# Perform a 'make test' on the repo
|
||||
def maketest(preclean):
|
||||
if preclean == True:
|
||||
subprocess.call(['make', 'clean'])
|
||||
|
||||
p = subprocess.Popen(
|
||||
['nice', 'make', 'test'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
comm = p.communicate()
|
||||
|
||||
f = open('maketest.txt', 'wt')
|
||||
f.write('Errors\n======\n')
|
||||
f.write(comm[1] + '\n')
|
||||
f.write('Output\n======\n')
|
||||
f.write(comm[0] + '\n')
|
||||
f.close()
|
||||
|
||||
upload('maketest.txt', 'htdocs/devinfo/')
|
||||
|
||||
|
||||
# git push
|
||||
def gitpush():
|
||||
try:
|
||||
password = sys.argv[1]
|
||||
child = pexpect.spawn('git push')
|
||||
child.expect("Enter passphrase for key '/home/daniel/.ssh/id_rsa':")
|
||||
child.sendline(password)
|
||||
child.interact()
|
||||
except IOError:
|
||||
pass
|
||||
except OSError:
|
||||
pass
|
||||
except pexpect.TIMEOUT:
|
||||
pass
|
||||
|
||||
|
||||
def iconv(filename):
|
||||
p = subprocess.Popen(['file', '-i', filename],
|
||||
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||
comm = p.communicate()
|
||||
if comm[0].find('charset=iso-8859-1') >= 0:
|
||||
subprocess.call(
|
||||
["iconv", filename, "--from=ISO-8859-1", "--to=UTF-8", "-o", filename])
|
||||
|
||||
|
||||
# Generate daily webreport
|
||||
def generate_webreport():
|
||||
filenames = glob.glob('*/*.cpp')
|
||||
for filename in filenames:
|
||||
iconv(filename)
|
||||
subprocess.call(
|
||||
["git", "commit", "-a", "-m", '"automatic conversion from iso-8859-1 formatting to utf-8"'])
|
||||
gitpush()
|
||||
|
||||
subprocess.call(["rm", "-rf", "devinfo"])
|
||||
subprocess.call(['nice', "./webreport.sh"])
|
||||
upload('-r devinfo', 'htdocs/')
|
||||
subprocess.call(["make", "clean"])
|
||||
subprocess.call(["rm", "-rf", "devinfo"])
|
||||
|
||||
|
||||
# Perform a git pull.
|
||||
def gitpull():
|
||||
try:
|
||||
password = sys.argv[1]
|
||||
child = pexpect.spawn('git pull')
|
||||
child.expect("Enter passphrase for key '/home/daniel/.ssh/id_rsa':")
|
||||
child.sendline(password)
|
||||
child.expect('Already up-to-date.')
|
||||
child.interact()
|
||||
|
||||
except IOError:
|
||||
pass
|
||||
except OSError:
|
||||
pass
|
||||
except pexpect.TIMEOUT:
|
||||
pass
|
||||
except pexpect.EOF:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def daca2(foldernum):
|
||||
folders = '0123456789abcdefghijklmnopqrstuvwxyz'
|
||||
folder = folders[foldernum % len(folders)]
|
||||
|
||||
print('Daca2 folder=' + folder)
|
||||
|
||||
p = subprocess.Popen(['git', 'show', '--format=%h'],
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
comm = p.communicate()
|
||||
rev = comm[0]
|
||||
rev = rev[:rev.find('\n')]
|
||||
|
||||
subprocess.call(
|
||||
['nice', 'make', 'SRCDIR=build', 'CXXFLAGS="-O2 -DMAXTIME=600"'])
|
||||
subprocess.call(
|
||||
['mv', 'cppcheck', os.path.expanduser('~/daca2/cppcheck-O2')])
|
||||
|
||||
subprocess.call(['python', 'tools/daca2.py', folder, '--rev=' + rev])
|
||||
subprocess.call(
|
||||
['python', 'tools/daca2.py', 'lib' + folder, '--rev=' + rev])
|
||||
|
||||
print('Generate DACA2 report')
|
||||
subprocess.call(['rm', '-rf', 'daca2-report'])
|
||||
subprocess.call(['mkdir', 'daca2-report'])
|
||||
subprocess.call(['python', 'tools/daca2-report.py', 'daca2-report'])
|
||||
upload('-r daca2-report', 'htdocs/devinfo/')
|
||||
|
||||
t0 = datetime.date.today()
|
||||
foldernum = 0
|
||||
while True:
|
||||
if datetime.date.today() != t0:
|
||||
print("generate daily reports")
|
||||
t0 = datetime.date.today()
|
||||
generate_webreport()
|
||||
|
||||
if gitpull() == True:
|
||||
print("make test")
|
||||
# maketest(False) # Integral make test build
|
||||
|
||||
cmd = wget('http://cppcheck.sourceforge.net/cgi-bin/ci.cgi?clear')
|
||||
if cmd.find("doxygen") >= 0:
|
||||
generate_webreport()
|
||||
|
||||
daca2(foldernum)
|
||||
foldernum = foldernum + 1
|
Loading…
Reference in New Issue