Blame tools/ci.py

Packit 2035a7
#!/usr/bin/env python
Packit 2035a7
Packit 2035a7
# continuous integration
Packit 2035a7
# build daily reports (doxygen,coverage,etc)
Packit 2035a7
Packit 2035a7
import datetime
Packit 2035a7
import time
Packit 2035a7
import subprocess
Packit 2035a7
import pexpect
Packit 2035a7
import glob
Packit 2035a7
import sys
Packit 2035a7
Packit 2035a7
Packit 2035a7
# Upload file to sourceforge web server using scp
Packit 2035a7
def upload(file_to_upload, destination):
Packit 2035a7
    try:
Packit 2035a7
        password = sys.argv[1]
Packit 2035a7
        child = pexpect.spawn(
Packit 2035a7
            'scp ' + file_to_upload + ' danielmarjamaki,cppcheck@web.sourceforge.net:' + destination)
Packit 2035a7
        # child.expect(
Packit 2035a7
        #    'danielmarjamaki,cppcheck@web.sourceforge.net\'s password:')
Packit 2035a7
        child.expect('Password:')
Packit 2035a7
        child.sendline(password)
Packit 2035a7
        child.interact()
Packit 2035a7
    except (IOError, OSError, pexpect.TIMEOUT):
Packit 2035a7
        pass
Packit 2035a7
Packit 2035a7
Packit 2035a7
# git push
Packit 2035a7
def gitpush():
Packit 2035a7
    try:
Packit 2035a7
        password = sys.argv[1]
Packit 2035a7
        child = pexpect.spawn('git push')
Packit 2035a7
        child.expect("Enter passphrase for key '/home/daniel/.ssh/id_rsa':")
Packit 2035a7
        child.sendline(password)
Packit 2035a7
        child.interact()
Packit 2035a7
    except (IOError, OSError, pexpect.TIMEOUT):
Packit 2035a7
        pass
Packit 2035a7
Packit 2035a7
Packit 2035a7
def iconv(filename):
Packit 2035a7
    p = subprocess.Popen(['file', '-i', filename],
Packit 2035a7
                         stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
Packit 2035a7
    comm = p.communicate()
Packit 2035a7
    if 'charset=iso-8859-1' in comm[0]:
Packit 2035a7
        subprocess.call(
Packit 2035a7
            ["iconv", filename, "--from=ISO-8859-1", "--to=UTF-8", "-o", filename])
Packit 2035a7
Packit 2035a7
Packit 2035a7
# Generate daily webreport
Packit 2035a7
def generate_webreport():
Packit 2035a7
    for filename in glob.glob('*/*.cpp'):
Packit 2035a7
        iconv(filename)
Packit 2035a7
    subprocess.call(
Packit 2035a7
        ["git", "commit", "-a", "-m", '"automatic conversion from iso-8859-1 formatting to utf-8"'])
Packit 2035a7
    gitpush()
Packit 2035a7
Packit 2035a7
    subprocess.call(["rm", "-rf", "devinfo"])
Packit 2035a7
    subprocess.call(['nice', "./webreport.sh"])
Packit 2035a7
    upload('-r devinfo', 'htdocs/')
Packit 2035a7
    subprocess.call(["make", "clean"])
Packit 2035a7
    subprocess.call(["rm", "-rf", "devinfo"])
Packit 2035a7
Packit 2035a7
Packit 2035a7
# Perform a git pull.
Packit 2035a7
def gitpull():
Packit 2035a7
    try:
Packit 2035a7
        password = sys.argv[1]
Packit 2035a7
        child = pexpect.spawn('git pull')
Packit 2035a7
        child.expect("Enter passphrase for key '/home/daniel/.ssh/id_rsa':")
Packit 2035a7
        child.sendline(password)
Packit 2035a7
        child.expect('Already up-to-date.')
Packit 2035a7
        child.interact()
Packit 2035a7
Packit 2035a7
    except (IOError, OSError, pexpect.TIMEOUT):
Packit 2035a7
        pass
Packit 2035a7
    except pexpect.EOF:
Packit 2035a7
        return True
Packit 2035a7
Packit 2035a7
    return False
Packit 2035a7
Packit 2035a7
Packit 2035a7
t0 = None
Packit 2035a7
while True:
Packit 2035a7
    if datetime.date.today() != t0:
Packit 2035a7
        print("generate daily reports")
Packit 2035a7
        t0 = datetime.date.today()
Packit 2035a7
        gitpull()
Packit 2035a7
        generate_webreport()
Packit 2035a7
    time.sleep(60)