Skip to content

Commit c21820d

Browse files
committed
switch to pkgctl offloaded builds
1 parent 7a36737 commit c21820d

File tree

7 files changed

+832
-1353
lines changed

7 files changed

+832
-1353
lines changed

master/config.example.yml

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,6 @@ url: http://localhost:8010
44
pkgbuilddir: /path/to/pkgbuilds
55
srcdir: /path/to/srcs
66
pkgdir: /path/to/pkgs
7-
sshdir: /path/to/ssh/mountpoint # optional
8-
# worker directories
9-
repodir: /path/to/public/html
10-
# repository suffix
11-
suffix: archbuild
12-
# sign packages
13-
gpg_sign: False
147
# email reports
158
mail_reports: False
169
mail_host: localhost
@@ -25,19 +18,16 @@ admins:
2518
username: password
2619
oauth: True
2720
oauth_openid_configuration_uri: https://auth.domain.tld/.well-known/openid-configuration
28-
# package groups
29-
groups:
21+
# package repos
22+
repos:
3023
- name: core
31-
repo: extra
3224
pkgs:
3325
- name: pkg1
3426
- name: pkg2
3527
testing: True
3628
- name: extra
37-
repo: extra
3829
pkgs:
3930
- name: pkg3
40-
skip_repo: True
4131
- name: pkg4
4232
depends:
4333
- pkg1

master/factory.py

Lines changed: 10 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -3,33 +3,18 @@
33
from steps import (
44
ArchBuild,
55
BumpPkgrel,
6-
Cleanup,
7-
CreateSshfsRemoteDirectory,
8-
CreateSshfsWorkerDirectory,
96
FindDependency,
10-
GpgSign,
11-
MountRemoteDirectory,
12-
MountWorkerDirectory,
13-
MovePackage,
14-
RepoAdd,
15-
RepoSync,
167
SetCommitRevision,
178
SetTagRevision,
18-
Srcinfo,
19-
UnmountRemoteDirectory,
20-
UnmountWorkerDirectory,
219
Updpkgsums,
2210
)
23-
from util import ArchBuildUtil
2411

2512

2613
class ArchBuildFactory(util.BuildFactory):
27-
def __init__(self, pkgbuilddir: str, group: str, pkg_base: str, skip_repo: bool, properties: dict):
14+
def __init__(self, pkgbuilddir: str, repo: str, pkg_base: str, properties: dict):
2815
super().__init__()
2916

30-
gpg_sign = properties["gpg_sign"]
31-
sshdir = properties["sshdir"]
32-
workdir = f"{pkgbuilddir}/{group}/{pkg_base}"
17+
workdir = f"{pkgbuilddir}/{repo}/{pkg_base}"
3318

3419
# set initial properties
3520
self.addStep(steps.SetProperties(name="set properties from srcinfo", properties=properties))
@@ -50,112 +35,20 @@ def __init__(self, pkgbuilddir: str, group: str, pkg_base: str, skip_repo: bool,
5035
]
5136
)
5237

53-
# download build files
54-
self.addStep(
55-
steps.FileDownload(
56-
name="download PKGBUILD",
57-
mastersrc=f"{workdir}/PKGBUILD",
58-
workerdest="PKGBUILD",
59-
)
38+
self.addSteps(
39+
[
40+
BumpPkgrel(workdir=workdir),
41+
Updpkgsums(workdir=workdir),
42+
]
6043
)
61-
for src_name in properties["src_names"]:
62-
self.addStep(
63-
steps.FileDownload(
64-
name=f"download {src_name}"[:50],
65-
mastersrc=f"{workdir}/{src_name}",
66-
workerdest=src_name,
67-
)
68-
)
69-
install = properties["install"]
70-
if install:
71-
self.addStep(
72-
steps.FileDownload(
73-
name=f"download {install}"[:50],
74-
mastersrc=f"{workdir}/{install}",
75-
workerdest=install,
76-
)
77-
)
78-
79-
self.addSteps([BumpPkgrel(), Updpkgsums()])
8044

8145
# update git tag revision
8246
if properties["git_tag"]:
83-
self.addStep(SetTagRevision())
47+
self.addStep(SetTagRevision(workdir=workdir))
8448

8549
# update git commit revision
8650
if properties["git_revision"]:
87-
self.addStep(SetCommitRevision())
51+
self.addStep(SetCommitRevision(workdir=workdir))
8852

8953
# build
90-
self.addStep(ArchBuild())
91-
92-
# update properties
93-
self.addSteps(
94-
[
95-
Srcinfo(),
96-
steps.FileUpload(
97-
name="upload updated PKGBUILD",
98-
workersrc="PKGBUILD",
99-
masterdest=f"{workdir}/PKGBUILD",
100-
),
101-
steps.FileUpload(
102-
name="upload updated .SRCINFO",
103-
workersrc=".SRCINFO",
104-
masterdest=f"{workdir}/.SRCINFO",
105-
),
106-
steps.SetProperties(
107-
name="refresh properties from srcinfo",
108-
properties=ArchBuildUtil.srcinfo,
109-
),
110-
]
111-
)
112-
113-
# upload and optionally sign packages
114-
for pkg_name in properties["pkg_names"]:
115-
self.addSteps(
116-
[
117-
steps.SetProperty(
118-
name=f"set pkg_name to {pkg_name}",
119-
property="pkg_name",
120-
value=pkg_name,
121-
hideStepIf=True,
122-
),
123-
steps.FileUpload(
124-
name=f"upload {pkg_name}",
125-
workersrc=ArchBuildUtil.pkg,
126-
masterdest=ArchBuildUtil.pkg_masterdest,
127-
),
128-
]
129-
)
130-
if gpg_sign:
131-
self.addStep(GpgSign(name=f"sign {pkg_name}"))
132-
133-
# update repository
134-
if not skip_repo:
135-
if gpg_sign:
136-
self.addStep(
137-
steps.FileDownload(
138-
name=f"download {pkg_name} sig",
139-
mastersrc=ArchBuildUtil.sig_mastersrc,
140-
workerdest=ArchBuildUtil.sig_workerdest,
141-
)
142-
)
143-
self.addSteps(
144-
[
145-
MovePackage(name=f"move {pkg_name}"),
146-
RepoAdd(name=f"add {pkg_name}"),
147-
]
148-
)
149-
150-
# synchronize repository
151-
if sshdir:
152-
self.addStep(CreateSshfsWorkerDirectory())
153-
self.addStep(CreateSshfsRemoteDirectory())
154-
self.addStep(MountWorkerDirectory())
155-
self.addStep(MountRemoteDirectory())
156-
self.addStep(RepoSync())
157-
self.addStep(UnmountWorkerDirectory())
158-
self.addStep(UnmountRemoteDirectory())
159-
160-
# cleanup
161-
self.addStep(Cleanup())
54+
self.addStep(ArchBuild(workdir=workdir))

master/master.cfg

Lines changed: 11 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -58,46 +58,22 @@ c["properties"] = {"pkgbuilddir": config["pkgbuilddir"]}
5858

5959
build_lock = util.MasterLock("build")
6060

61-
for repo in (
62-
"core",
63-
"core-testing",
64-
"core-staging",
65-
"extra",
66-
"extra-testing",
67-
"extra-staging",
68-
"multilib",
69-
"multilib-testing",
70-
"multilib-staging",
71-
):
72-
if config["suffix"]:
73-
repo += f'-{config["suffix"]}'
74-
repodir = Path(config["repodir"]) / repo / "x86_64"
75-
if not repodir.is_dir():
76-
repodir.mkdir(parents=True)
77-
7861
git_urls = {}
7962
hg_urls = {}
8063
builders = set()
8164

82-
for group in config["groups"]:
83-
pkgs = group["pkgs"]
65+
for repo in config["repos"]:
66+
pkgs = repo["pkgs"]
8467
if pkgs is not None:
8568
for pkg in pkgs:
8669
properties = {
8770
"pkgbuilddir": config["pkgbuilddir"],
8871
"srcdir": config["srcdir"],
8972
"pkgdir": config["pkgdir"],
90-
"repodir": config["repodir"],
91-
"sshdir": config.get("sshdir", ""),
92-
"remotehost": config.get("remotehost", ""),
93-
"suffix": config["suffix"],
94-
"gpg_sign": config["gpg_sign"],
95-
"gpg_fingerprint": config["gpg_fingerprint"],
96-
"group": group["name"],
97-
"repo": group["repo"],
73+
"repo": repo["repo"],
9874
"pkg_base": pkg["name"],
9975
"depends": pkg.get("depends", None),
100-
**ArchBuildUtil.parse_srcinfo(config["pkgbuilddir"], group["name"], pkg["name"]),
76+
**ArchBuildUtil.parse_srcinfo(config["pkgbuilddir"], repo["name"], pkg["name"]),
10177
}
10278

10379
# These can be overridden
@@ -109,9 +85,7 @@ for group in config["groups"]:
10985
util.BuilderConfig(
11086
name=pkg["name"],
11187
workernames=["worker"],
112-
factory=ArchBuildFactory(
113-
config["pkgbuilddir"], group["name"], pkg["name"], pkg.get("skip_repo", False), properties
114-
),
88+
factory=ArchBuildFactory(config["pkgbuilddir"], repo["name"], pkg["name"], properties),
11589
locks=[build_lock.access("exclusive")],
11690
)
11791
)
@@ -124,12 +98,12 @@ for group in config["groups"]:
12498
util.BooleanParameter(
12599
name="testing",
126100
label="testing",
127-
default=pkg["testing"] if "testing" in pkg else group["testing"],
101+
default=pkg["testing"] if "testing" in pkg else repo["testing"],
128102
),
129103
util.BooleanParameter(
130104
name="staging",
131105
label="staging",
132-
default=pkg["staging"] if "staging" in pkg else group["testing"],
106+
default=pkg["staging"] if "staging" in pkg else repo["staging"],
133107
),
134108
util.StringParameter(name="pkg_ver", label="pkgver", default=""),
135109
util.StringParameter(name="pkg_rel", label="pkgrel", default=""),
@@ -174,8 +148,8 @@ for group in config["groups"]:
174148
change_filter=change_filter,
175149
builderNames=[pkg["name"]],
176150
properties={
177-
"testing": pkg["testing"] if "testing" in pkg else group["testing"],
178-
"staging": pkg["staging"] if "staging" in pkg else group["staging"],
151+
"testing": pkg["testing"] if "testing" in pkg else repo["testing"],
152+
"staging": pkg["staging"] if "staging" in pkg else repo["staging"],
179153
},
180154
treeStableTimer=14400,
181155
)
@@ -191,8 +165,8 @@ for group in config["groups"]:
191165
change_filter=change_filter,
192166
builderNames=[pkg["name"]],
193167
properties={
194-
"testing": pkg["testing"] if "testing" in pkg else group["testing"],
195-
"staging": pkg["staging"] if "staging" in pkg else group["staging"],
168+
"testing": pkg["testing"] if "testing" in pkg else repo["testing"],
169+
"staging": pkg["staging"] if "staging" in pkg else repo["staging"],
196170
},
197171
treeStableTimer=14400,
198172
)

0 commit comments

Comments
 (0)