aboutsummaryrefslogtreecommitdiff
blob: b3ddb169826f1e20373e69756473346f62b49199 (plain)
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# Copyright 2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

from twisted.internet import defer

from buildbot.plugins import util
from buildbot_gentoo_ci.config import buildfactorys

def getWorkersLocal(worker_type, workers):
        worker_list = []
        for worker in workers:
            if worker['type'] == worker_type and worker['enable'] is True:
                worker_list.append(worker['name'])
        return worker_list

def getWorkers(worker_type, workers):
        worker_list = []
        for worker in workers:
            if worker['type'] == worker_type and worker['enable'] is True:
                worker_list.append(worker['uuid'])
        return worker_list

@defer.inlineCallbacks
def CanWorkerBuildProject(builder, wfb, request):
    gentooci = builder.master.namedServices['services'].namedServices['gentooci']
    project_build_data = request.properties['project_build_data']
    project_workers = yield gentooci.db.projects.getWorkersByProjectUuid(project_build_data['project_uuid'])
    print(project_workers)
    print(wfb)
    for worker in project_workers:
        if wfb.worker.workername == worker['worker_uuid']:
            print('Find a worker: YES')
            return True
    print('Find a worker: NO')
    return False

# Use same worker as update_cpv_data was done by so we have same git commit
def CanWorkerUpdateV(builder, wfb, request):
    print(request.properties['cp_worker'])
    print(wfb)
    if wfb.worker.workername == request.properties['cp_worker']:
        print('Find a worker: YES')
        return True
    print('Find a worker: NO')
    return False

def gentoo_builders(worker_data):
    b = []
    b.append(util.BuilderConfig(
        name='update_db_check',
        workername=getWorkersLocal('local', worker_data['local'])[0],
        workerbuilddir='builds',
        collapseRequests=False,
        factory=buildfactorys.update_db_check()
        )
    )
    b.append(util.BuilderConfig(
        name='update_repo_check',
        workername=getWorkersLocal('local', worker_data['local'])[1],
        workerbuilddir='builds',
        collapseRequests=True,
        factory=buildfactorys.update_repo_check()
        )
    )
    # update cpv in db and call build_request_data
    #FIXME: look so we don't run parallel with diffrent worker
    # (builders.UpdateRepos step)
    b.append(util.BuilderConfig(
        name='update_cpv_data',
        workernames=getWorkers('log', worker_data['docker'])[0],
        workerbuilddir='builds',
        collapseRequests=False,
        factory=buildfactorys.update_db_cpv()
        )
    )
    # Use multiplay workers
    b.append(util.BuilderConfig(
        name='update_v_data',
        workername=getWorkers('log', worker_data['docker'])[0],
        workerbuilddir='builds',
        collapseRequests=False,
        canStartBuild=CanWorkerUpdateV,
        factory=buildfactorys.update_db_v()
        )
    )
    # Use multiplay workers
    b.append(util.BuilderConfig(
        name='build_request_data',
        workernames=getWorkersLocal('local', worker_data['local']),
        collapseRequests=False,
        factory=buildfactorys.build_request_check()
        )
    )
    # Use multiplay workers
    b.append(util.BuilderConfig(
        name='run_build_request',
        workernames=getWorkers('build', worker_data['docker']),
        canStartBuild=CanWorkerBuildProject,
        collapseRequests=False,
        factory=buildfactorys.run_build_request()
        )
    )
    # Use multiplay workers
    b.append(util.BuilderConfig(
        name='parse_build_log',
        workernames=getWorkers('log', worker_data['docker'])[1:],
        collapseRequests=False,
        factory=buildfactorys.parse_build_log()
        )
    )
    # For node workers
    b.append(util.BuilderConfig(
        name='run_build_images_request',
        workernames=getWorkers('node', worker_data['node']),
        #FIXME: support more the one node
        #canStartBuild=CanWorkerBuildProject,
        collapseRequests=False,
        factory=buildfactorys.run_build_images_request()
        )
    )
    return b