Skip to content

Commit 1b5f67b

Browse files
MDBF-1203: C/C++ builders
Pretty much a copy-paste from C/ODBC with some small diffs: - no 32-bit Windows builder required. - no MacOS builder required. - both C/C++ 1.0 and 1.1 need C/C 3.3 for deb/rpm package generation - there is no dep of unixodbc -> no need for TEST_ odbc related env variables
1 parent f0f664c commit 1b5f67b

6 files changed

Lines changed: 1208 additions & 11 deletions

File tree

Lines changed: 291 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,294 @@
1+
import os
2+
from pathlib import PurePath
3+
4+
from buildbot.plugins import util
15
from configuration.builders.base import GenericBuilder
2-
from configuration.builders.sequences.connectors.concpp import deb, rpm, tarball
6+
from configuration.builders.common import docker_config
7+
from configuration.builders.infra.runtime import DockerConfig, Sidecar
8+
from configuration.builders.sequences.connectors.concpp import (
9+
bintar,
10+
deb,
11+
deb_pkg_tests,
12+
get_source_package,
13+
git_clone_sq,
14+
rpm,
15+
rpm_pkg_tests,
16+
save_packages,
17+
srpm_pkg_test,
18+
tarball,
19+
windows,
20+
)
21+
22+
PACKAGES_DIR = f"{os.environ['CONNECTORS_PACKAGES_DIR']}/cpp"
23+
BUILD_BASE_PATH = "build"
24+
BINTAR_PATH = f"{BUILD_BASE_PATH}/bintar"
25+
RPM_PATH = f"{BUILD_BASE_PATH}/rpm"
26+
DEB_PATH = f"{BUILD_BASE_PATH}/deb"
27+
SOURCE_PATH = f"{BUILD_BASE_PATH}/source"
28+
BINTAR_PACKAGES_TO_SAVE = [f"{BINTAR_PATH}/*.tar.gz"]
29+
DEB_PACKAGES_TO_SAVE = [f"{DEB_PATH}/*.deb", f"{DEB_PATH}/*.ddeb"]
30+
RPM_PACKAGES_TO_SAVE = [f"{RPM_PATH}/*.rpm", f"{RPM_PATH}/srpms/*.src.rpm"]
31+
32+
33+
# MariaDB Server used for C/C++ tests
34+
SIDECAR = Sidecar(
35+
repository="docker.io/library/",
36+
image_tag="mariadb:lts",
37+
env_vars=[("MARIADB_ALLOW_EMPTY_ROOT_PASSWORD", "1"), ("MARIADB_DATABASE", "test")],
38+
tmpfs=PurePath("/var/lib/mysql"),
39+
)
40+
41+
42+
TARBALL = GenericBuilder(
43+
name="ccpp-tarball-docker",
44+
sequences=[
45+
tarball(
46+
config=docker_config(
47+
image="debian13",
48+
packages_dir=PACKAGES_DIR,
49+
artifacts_url=f"{os.environ['ARTIFACTS_URL']}/connector-cpp/",
50+
),
51+
)
52+
],
53+
)
54+
55+
56+
def generate_bintar_sqs(
57+
build_environment,
58+
ops,
59+
version,
60+
upload_packages_to_ci=True,
61+
get_source_from_git=False,
62+
with_asan_ubsan=False,
63+
with_msan=False,
64+
):
65+
66+
source_sq = [
67+
get_source_package(
68+
config=build_environment,
69+
source_path=SOURCE_PATH,
70+
),
71+
]
72+
73+
if get_source_from_git:
74+
source_sq = [
75+
git_clone_sq(
76+
config=build_environment,
77+
source_path=SOURCE_PATH,
78+
)
79+
]
80+
81+
return (
82+
source_sq
83+
+ [
84+
bintar(
85+
config=build_environment,
86+
source_path=SOURCE_PATH,
87+
bintar_path=BINTAR_PATH,
88+
package_platform_suffix=f"{ops}{version}",
89+
jobs=util.Property("jobs"),
90+
with_asan_ubsan=with_asan_ubsan,
91+
with_msan=with_msan,
92+
),
93+
]
94+
+ (
95+
[
96+
save_packages(
97+
packages=BINTAR_PACKAGES_TO_SAVE,
98+
config=build_environment,
99+
)
100+
]
101+
if upload_packages_to_ci
102+
else []
103+
)
104+
)
105+
106+
107+
def generate_rpm_release_sq(ops, version):
108+
build_environment = docker_config(
109+
image=f"{ops}{version}",
110+
packages_dir=PACKAGES_DIR,
111+
artifacts_url=f"{os.environ['ARTIFACTS_URL']}/connector-cpp/",
112+
)
113+
clean_environment = docker_config(
114+
image=f"{ops}{version}-srpm",
115+
packages_dir=PACKAGES_DIR,
116+
artifacts_url=f"{os.environ['ARTIFACTS_URL']}/connector-cpp/",
117+
)
118+
119+
alma_linux_environment = DockerConfig(
120+
repository="docker.io/library/",
121+
image_tag=f"almalinux:{version}",
122+
)
123+
rockylinux_environment = DockerConfig(
124+
repository="rockylinux/",
125+
image_tag=f"rockylinux:{version}",
126+
)
127+
128+
if ops == "rhel":
129+
rhel_subscription_mounts = [
130+
(
131+
"/etc/pki/entitlement",
132+
"/run/secrets/etc-pki-entitlement",
133+
),
134+
("/etc/rhsm", "/run/secrets/rhsm"),
135+
]
136+
build_environment.bind_mounts += rhel_subscription_mounts
137+
clean_environment.bind_mounts += rhel_subscription_mounts
138+
139+
bintar_sqs = generate_bintar_sqs(build_environment, ops, version)
140+
141+
rhel_sqs = [
142+
rpm(
143+
config=build_environment,
144+
jobs=util.Property("jobs"),
145+
package_platform_suffix=f"{ops}{version}",
146+
rpm_path=RPM_PATH,
147+
source_path=SOURCE_PATH,
148+
os_name=ops.upper(),
149+
),
150+
rpm_pkg_tests(
151+
config=clean_environment,
152+
rpm_path=RPM_PATH,
153+
os_name=ops.upper(),
154+
),
155+
srpm_pkg_test(
156+
config=clean_environment,
157+
jobs=util.Property("jobs"),
158+
rpms_dir=RPM_PATH,
159+
),
160+
save_packages(
161+
packages=RPM_PACKAGES_TO_SAVE,
162+
config=clean_environment,
163+
),
164+
rpm_pkg_tests(
165+
config=alma_linux_environment,
166+
rpm_path=RPM_PATH,
167+
os_name=f"ALMA",
168+
),
169+
rpm_pkg_tests(
170+
config=rockylinux_environment,
171+
rpm_path=RPM_PATH,
172+
os_name=f"ROCKY",
173+
),
174+
]
175+
176+
if ops == "rhel":
177+
return bintar_sqs + rhel_sqs
178+
return bintar_sqs
179+
180+
181+
def generate_deb_release_sq(ops, version):
182+
build_environment = docker_config(
183+
image=f"{ops}{version}",
184+
packages_dir=PACKAGES_DIR,
185+
artifacts_url=f"{os.environ['ARTIFACTS_URL']}/connector-cpp/",
186+
)
187+
clean_environment = DockerConfig(
188+
repository="docker.io/library/",
189+
image_tag=f"{ops}:{version}",
190+
bind_mounts=[(f"{PACKAGES_DIR}/", "/packages")],
191+
)
192+
193+
do_step_if = lambda props: True
194+
bintar_sqs = generate_bintar_sqs(build_environment, ops[:3], version)
195+
deb_sqs = [
196+
deb(
197+
config=build_environment,
198+
jobs=util.Property("jobs"),
199+
package_platform_suffix=f"{ops[:3]}{version}",
200+
deb_path=DEB_PATH,
201+
source_path=SOURCE_PATH,
202+
do_step_if=do_step_if,
203+
),
204+
deb_pkg_tests(
205+
config=clean_environment,
206+
deb_path=DEB_PATH,
207+
do_step_if=do_step_if,
208+
),
209+
save_packages(
210+
packages=DEB_PACKAGES_TO_SAVE,
211+
user="root",
212+
config=clean_environment,
213+
),
214+
]
215+
216+
if (ops == "ubuntu" and version == "26.04") or (
217+
ops == "debian" and version == "13"
218+
):
219+
return bintar_sqs
220+
return bintar_sqs + deb_sqs
221+
3222

4-
TARBALL = GenericBuilder(name="ccpp-tarball-docker", sequences=[tarball()])
5223
RELEASE_BUILDERS_BY_ARCH = {"amd64": [], "aarch64": []}
224+
for arch in ["amd64", "aarch64"]:
225+
for ops, version in [
226+
("fedora", "42"),
227+
("fedora", "43"),
228+
("sles", "1507"),
229+
("sles", "1600"),
230+
("rhel", "8"),
231+
("rhel", "9"),
232+
("rhel", "10"),
233+
]:
234+
if ops == "sles" and arch != "amd64":
235+
continue
236+
builder = GenericBuilder(
237+
name=f"ccpp-{arch}-{ops}-{version}",
238+
sidecar=SIDECAR,
239+
sequences=generate_rpm_release_sq(ops=ops, version=version),
240+
)
241+
RELEASE_BUILDERS_BY_ARCH[arch].append(builder)
242+
243+
for ops, version in [
244+
("debian", "11"),
245+
("debian", "12"),
246+
("debian", "13"),
247+
("ubuntu", "22.04"),
248+
("ubuntu", "24.04"),
249+
("ubuntu", "26.04"),
250+
]:
251+
builder = GenericBuilder(
252+
name=f"ccpp-{arch}-{ops}-{version}",
253+
sidecar=SIDECAR,
254+
sequences=generate_deb_release_sq(ops=ops, version=version),
255+
)
256+
RELEASE_BUILDERS_BY_ARCH[arch].append(builder)
257+
258+
UBASAN_BUILDER = GenericBuilder(
259+
name="ccpp-debian-13-ubasan-clang-22",
260+
sidecar=SIDECAR,
261+
sequences=generate_bintar_sqs(
262+
build_environment=docker_config(
263+
image="debian13-msan-clang-22",
264+
artifacts_url=f"{os.environ['ARTIFACTS_URL']}/connector-cpp/",
265+
),
266+
ops="debian",
267+
version="13",
268+
upload_packages_to_ci=False,
269+
with_asan_ubsan=True,
270+
get_source_from_git=True,
271+
),
272+
)
273+
274+
WINDOWS_64_BUILDER = GenericBuilder(
275+
name="ccpp-amd64-windows",
276+
sequences=[
277+
windows(jobs=util.Property("jobs"), target_platform="64-bit"),
278+
],
279+
)
280+
281+
MSAN_BUILDER = GenericBuilder(
282+
name="ccpp-debian-13-msan-clang-22",
283+
sidecar=SIDECAR,
284+
sequences=generate_bintar_sqs(
285+
build_environment=docker_config(
286+
image="debian13-msan-clang-22",
287+
artifacts_url=f"{os.environ['ARTIFACTS_URL']}/connector-cpp/",
288+
),
289+
with_msan=True,
290+
ops="debian",
291+
version="13",
292+
upload_packages_to_ci=False,
293+
),
294+
)

0 commit comments

Comments
 (0)