summaryrefslogtreecommitdiff
path: root/buildslave/update.py
blob: 022805910daa48e6838e9197f1fa0c68da3736cc (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/usr/bin/env python
import json
import os
import re
from subprocess import call
import shutil

import MySQLdb
from git import Repo

PLATFORMS = ['linux32', 'linux64', 'mac', 'win32', 'win64']

os.chdir('/tmp')

db = MySQLdb.connect(host="db", user="clpm", passwd="clpm", db="clpmdb")

pcur = db.cursor()
vcur = db.cursor()

pcur.execute('SELECT `id`,`name`,`git_url` FROM `package`')
for pkg in pcur.fetchall():
    print(pkg[1])

    known_versions = []
    vcur.execute('SELECT `major`,`minor`,`revision` FROM `version` ' + \
            'WHERE `package_id`=%d' % pkg[0])
    for ver in vcur.fetchall():
        known_versions.append((ver[0], ver[1], ver[2]))

    try:
        shutil.rmtree(pkg[1])
    except:
        pass

    repo = Repo.clone_from(pkg[2], pkg[1])
    for tag in repo.tags:
        mat = re.match(r'v(\d+)\.(\d+)\.(\d+)', str(tag))
        if mat:
            [vmaj, vmin, vrev] = [int(mat.group(i)) for i in [1,2,3]]

            if (vmaj, vmin, vrev) in known_versions:
                continue

            repo.head.reference = tag
            repo.head.reset(index=True, working_tree=True)

            os.makedirs('/repo/%s/%d.%d.%d' % (pkg[1], vmaj, vmin, vrev))
            for pf in PLATFORMS:
                print(str(tag) + '-' + pf)
                call(['make', '-C', pkg[1], pf + '.tar.gz'])
                shutil.move(
                    '/tmp/%s/%s.tar.gz' % (pkg[1], pf),
                    '/repo/%s/%d.%d.%d/%s.tar.gz' %
                    (pkg[1], vmaj, vmin, vrev, pf))
                call(['make', '-C', pkg[1], 'clean'])

            depends = []
            with open('/tmp/%s/clpm.json' % pkg[1], 'r') as clpm:
                depends = json.load(clpm)['depends']

            vcur.execute('INSERT INTO `version` ' + \
                    '(`package_id`,`major`,`minor`,`revision`,`depends`) ' + \
                    'VALUES (%d,%d,%d,%d,\'%s\')' %
                    (pkg[0], vmaj, vmin, vrev, json.dumps(depends)))

    try:
        shutil.rmtree(pkg[1])
    except:
        pass

db.commit()
db.close()