diff options
author | vkalintiris <vasilis@netdata.cloud> | 2024-01-17 14:55:34 +0200 |
---|---|---|
committer | vkalintiris <vasilis@netdata.cloud> | 2024-01-17 14:55:34 +0200 |
commit | 97c12390cb56ca04edbb35c9e0d51a14d45c5083 (patch) | |
tree | a6f94215c094319427de1a8fe7eddcb53e4882fd | |
parent | 71eae1b4e26020486fed0f0e1e4e52f6be6f5121 (diff) |
Stash
-rw-r--r-- | packaging/dag/images.py | 153 | ||||
-rwxr-xr-x | packaging/dag/main.py | 303 |
2 files changed, 261 insertions, 195 deletions
diff --git a/packaging/dag/images.py b/packaging/dag/images.py index df7a62ca51..fe2bc75232 100644 --- a/packaging/dag/images.py +++ b/packaging/dag/images.py @@ -55,7 +55,7 @@ _ALPINE_COMMON_PACKAGES = [ ] -def build_alpine_3_18(client, platform): +def build_alpine_3_18(client: dagger.Client, platform: dagger.Platform) -> dagger.Container: ctr = client.container(platform=platform).from_("alpine:3.18") pkgs = [pkg for pkg in _ALPINE_COMMON_PACKAGES] @@ -67,7 +67,7 @@ def build_alpine_3_18(client, platform): return ctr -def build_alpine_3_19(client, platform: dagger.Platform): +def build_alpine_3_19(client: dagger.Client, platform: dagger.Platform) -> dagger.Container: ctr = client.container(platform=platform).from_("alpine:3.19") pkgs = [pkg for pkg in _ALPINE_COMMON_PACKAGES] @@ -79,7 +79,7 @@ def build_alpine_3_19(client, platform: dagger.Platform): return ctr -def static_build_openssl(client: dagger.Client, ctr: dagger.Container): +def static_build_openssl(client: dagger.Client, ctr: dagger.Container) -> dagger.Container: tree = ( client.git(url="https://github.com/openssl/openssl", keep_git_dir=True) .tag("openssl-3.1.4").tree() @@ -105,7 +105,7 @@ def static_build_openssl(client: dagger.Client, ctr: dagger.Container): return ctr -def static_build_bash(client: dagger.Client, ctr: dagger.Container): +def static_build_bash(client: dagger.Client, ctr: dagger.Container) -> dagger.Container: tree = ( client.git(url="https://git.savannah.gnu.org/git/bash.git", keep_git_dir=True) .tag("bash-5.1").tree() @@ -138,7 +138,7 @@ def static_build_bash(client: dagger.Client, ctr: dagger.Container): return ctr -def static_build_curl(client: dagger.Client, ctr: dagger.Container): +def static_build_curl(client: dagger.Client, ctr: dagger.Container) -> dagger.Container: tree = ( client.git(url="https://github.com/curl/curl", keep_git_dir=True) .tag("curl-8_4_0").tree() @@ -185,7 +185,7 @@ def static_build_curl(client: dagger.Client, ctr: dagger.Container): return ctr -def static_build_ioping(client: dagger.Client, ctr: dagger.Container): +def static_build_ioping(client: dagger.Client, ctr: dagger.Container) -> dagger.Container: tree = ( client.git(url="https://github.com/koct9i/ioping", keep_git_dir=True) .tag("v1.3").tree() @@ -204,7 +204,7 @@ def static_build_ioping(client: dagger.Client, ctr: dagger.Container): return ctr -def static_build_libnetfilter_acct(client: dagger.Client, ctr: dagger.Container): +def static_build_libnetfilter_acct(client: dagger.Client, ctr: dagger.Container) -> dagger.Container: tree = ( client.git(url="git://git.netfilter.org/libnetfilter_acct", keep_git_dir=True) .tag("libnetfilter_acct-1.0.3").tree() @@ -228,7 +228,7 @@ def static_build_libnetfilter_acct(client: dagger.Client, ctr: dagger.Container) return ctr -def static_build_netdata(client: dagger.Client, ctr: dagger.Container): +def static_build_netdata(client: dagger.Client, ctr: dagger.Container) -> dagger.Container: CFLAGS = [ "-ffunction-sections", "-fdata-sections", @@ -383,7 +383,7 @@ _CENTOS_COMMON_PACKAGES = [ "zlib-devel", ] -def build_amazon_linux_2(client, platform): +def build_amazon_linux_2(client: dagger.Client, platform: dagger.Platform) -> dagger.Container: ctr = client.container(platform=platform).from_("amazonlinux:2") pkgs = [pkg for pkg in _CENTOS_COMMON_PACKAGES] @@ -427,7 +427,7 @@ def build_amazon_linux_2(client, platform): return ctr -def build_centos_7(client, platform): +def build_centos_7(client: dagger.Client, platform: dagger.Platform) -> dagger.Container: ctr = client.container(platform=platform).from_("centos:7") pkgs = [pkg for pkg in _CENTOS_COMMON_PACKAGES] + ["bash"] @@ -526,7 +526,7 @@ _ROCKY_LINUX_COMMON_PACKAGES = [ ] -def build_rocky_linux_8(client, platform): +def build_rocky_linux_8(client: dagger.Client, platform: dagger.Platform) -> dagger.Container: ctr = client.container(platform=platform).from_("rockylinux:8") pkgs = [pkg for pkg in _ROCKY_LINUX_COMMON_PACKAGES] + ["autogen"] @@ -554,7 +554,7 @@ def build_rocky_linux_8(client, platform): return ctr -def build_rocky_linux_9(client, platform): +def build_rocky_linux_9(client: dagger.Client, platform: dagger.Platform) -> dagger.Container: ctr = client.container(platform=platform).from_("rockylinux:9") pkgs = [pkg for pkg in _ROCKY_LINUX_COMMON_PACKAGES] @@ -636,7 +636,7 @@ _CENTOS_STREAM_COMMON_PACKAGES = [ ] -def build_centos_stream_8(client, platform): +def build_centos_stream_8(client: dagger.Client, platform: dagger.Platform) -> dagger.Container: ctr = client.container(platform=platform).from_("quay.io/centos/centos:stream8") pkgs = [pkg for pkg in _CENTOS_STREAM_COMMON_PACKAGES] + ["autogen"] @@ -664,7 +664,7 @@ def build_centos_stream_8(client, platform): return ctr -def build_centos_stream_9(client, platform): +def build_centos_stream_9(client: dagger.Client, platform: dagger.Platform) -> dagger.Container: ctr = client.container(platform=platform).from_("quay.io/centos/centos:stream9") pkgs = [pkg for pkg in _CENTOS_STREAM_COMMON_PACKAGES] @@ -695,7 +695,7 @@ def build_centos_stream_9(client, platform): _ORACLE_LINUX_COMMON_PACKAGES = list(_ROCKY_LINUX_COMMON_PACKAGES) -def build_oracle_linux_9(client, platform): +def build_oracle_linux_9(client: dagger.Client, platform: dagger.Platform) -> dagger.Container: ctr = client.container(platform=platform).from_("oraclelinux:9") pkgs = [pkg for pkg in _ORACLE_LINUX_COMMON_PACKAGES] @@ -727,7 +727,7 @@ def build_oracle_linux_9(client, platform): return ctr -def build_oracle_linux_8(client, platform): +def build_oracle_linux_8(client: dagger.Client, platform: dagger.Platform) -> dagger.Container: ctr = client.container(platform=platform).from_("oraclelinux:8") pkgs = [pkg for pkg in _ORACLE_LINUX_COMMON_PACKAGES] + ["autogen"] @@ -807,7 +807,7 @@ _OPENSUSE_COMMON_PACKAGES = [ "xen-devel", ] -def build_opensuse_tumbleweed(client, platform): +def build_opensuse_tumbleweed(client: dagger.Client, platform: dagger.Platform) -> dagger.Container: ctr = client.container(platform=platform).from_("opensuse/tumbleweed:latest") pkgs = [pkg for pkg in _OPENSUSE_COMMON_PACKAGES] + ["protobuf-c"] @@ -833,7 +833,7 @@ def build_opensuse_tumbleweed(client, platform): return ctr -def build_opensuse_15_5(client, platform): +def build_opensuse_15_5(client: dagger.Client, platform: dagger.Platform) -> dagger.Container: ctr = client.container(platform=platform).from_("opensuse/leap:15.5") pkgs = [pkg for pkg in _OPENSUSE_COMMON_PACKAGES] + ["libprotobuf-c-devel"] @@ -859,7 +859,7 @@ def build_opensuse_15_5(client, platform): return ctr -def build_opensuse_15_4(client, platform): +def build_opensuse_15_4(client: dagger.Client, platform: dagger.Platform) -> dagger.Container: crt = client.container(platform=platform).from_("opensuse/leap:15.4") pkgs = [pkg for pkg in _OPENSUSE_COMMON_PACKAGES] + ["libprotobuf-c-devel"] @@ -926,7 +926,7 @@ _FEDORA_COMMON_PACKAGES = [ ] -def build_fedora_37(client, platform): +def build_fedora_37(client: dagger.Client, platform: dagger.Platform) -> dagger.Container: ctr = client.container(platform=platform).from_("fedora:37") pkgs = [pkg for pkg in _FEDORA_COMMON_PACKAGES] @@ -952,7 +952,7 @@ def build_fedora_37(client, platform): return ctr -def build_fedora_38(client, platform): +def build_fedora_38(client: dagger.Client, platform: dagger.Platform) -> dagger.Container: ctr = client.container(platform=platform).from_("fedora:38") pkgs = [pkg for pkg in _FEDORA_COMMON_PACKAGES] @@ -978,7 +978,7 @@ def build_fedora_38(client, platform): return ctr -def build_fedora_39(client, platform): +def build_fedora_39(client: dagger.Client, platform: dagger.Platform) -> dagger.Container: ctr = client.container(platform=platform).from_("fedora:39") pkgs = [pkg for pkg in _FEDORA_COMMON_PACKAGES] @@ -1056,7 +1056,7 @@ _DEBIAN_COMMON_PACKAGES = [ ] -def build_debian_10(client, platform): +def build_debian_10(client: dagger.Client, platform: dagger.Platform) -> dagger.Container: ctr = client.container(platform=platform).from_("debian:buster") pkgs = [pkg for pkg in _DEBIAN_COMMON_PACKAGES] + ["dh-systemd", "libxen-dev"] @@ -1074,7 +1074,7 @@ def build_debian_10(client, platform): return ctr -def build_debian_11(client, platform): +def build_debian_11(client: dagger.Client, platform: dagger.Platform) -> dagger.Container: ctr = client.container(platform=platform).from_("debian:bullseye") pkgs = [pkg for pkg in _DEBIAN_COMMON_PACKAGES] + ["libxen-dev"] @@ -1091,7 +1091,7 @@ def build_debian_11(client, platform): return ctr -def build_debian_12(client, platform) -> dagger.Container: +def build_debian_12(client: dagger.Client, platform: dagger.Platform) -> dagger.Container: ctr = client.container(platform=platform).from_("debian:bookworm") pkgs = [pkg for pkg in _DEBIAN_COMMON_PACKAGES] @@ -1164,7 +1164,7 @@ _UBUNTU_COMMON_PACKAGES = [ "zlib1g-dev", ] -def build_ubuntu_20_04(client, platform): +def build_ubuntu_20_04(client: dagger.Client, platform: dagger.Platform) -> dagger.Container: ctr = client.container(platform=platform).from_("ubuntu:20.04") pkgs = [pkg for pkg in _UBUNTU_COMMON_PACKAGES] + ["dh-systemd"] @@ -1186,7 +1186,7 @@ def build_ubuntu_20_04(client, platform): return ctr -def build_ubuntu_22_04(client, platform): +def build_ubuntu_22_04(client: dagger.Client, platform: dagger.Platform) -> dagger.Container: ctr = client.container(platform=platform).from_("ubuntu:22.04") pkgs = [pkg for pkg in _UBUNTU_COMMON_PACKAGES] @@ -1204,7 +1204,7 @@ def build_ubuntu_22_04(client, platform): return ctr -def build_ubuntu_23_04(client, platform): +def build_ubuntu_23_04(client: dagger.Client, platform: dagger.Platform) -> dagger.Container: ctr = client.container(platform=platform).from_("ubuntu:23.04") pkgs = [pkg for pkg in _UBUNTU_COMMON_PACKAGES] @@ -1222,7 +1222,7 @@ def build_ubuntu_23_04(client, platform): return ctr -def build_ubuntu_23_10(client, platform): +def build_ubuntu_23_10(client: dagger.Client, platform: dagger.Platform) -> dagger.Container: ctr = client.container(platform=platform).from_("ubuntu:23.10") pkgs = [pkg for pkg in _UBUNTU_COMMON_PACKAGES] @@ -1240,77 +1240,24 @@ def build_ubuntu_23_10(client, platform): return ctr -class Image: - def __init__(self, cli_name, docker_name, deps_fn, supported_platforms=None): - self.cli_name = cli_name - self.docker_name = docker_name - self.supported_platforms = supported_platforms - self.deps_fn = deps_fn - - def __hash__(self): - return hash(self.cli_name) - - def __eq__(self, other): - return isinstance(other, Image) and self.cli_name == other.cli_name - - def __lt__(self, other): - return self.cli_name < other.cli_name - - def __str__(self): - return self.cli_name - - def build(self, client, platform): - ctr = self.deps_fn(client, platform) - - ctr = ( - ctr.with_workdir("/") - .with_exec(["sh", "-c", "curl https://sh.rustup.rs -sSf | sh -s -- -y"]) - ) - - bin_paths = [ - "/root/.cargo/bin", - "/usr/local/sbin", - "/usr/local/bin", - "/usr/sbin", - "/usr/bin", - "/sbin", - "/bin", - ] - - ctr = ctr.with_env_variable("PATH", ":".join(bin_paths)) - - ctr = ( - ctr.with_exec(["cargo", "new", "--bin", "hello"]) - .with_workdir("/hello") - .with_exec(["cargo", "run", "-v", "-v"]) - ) - - return ctr - - -SUPPORTED_IMAGES = { - Image("alpine_3_18", "alpine:3.18", build_alpine_3_18), - Image("alpine_3_19", "alpine:3.19", build_alpine_3_19), - Image("amazonlinux2", "amazonlinux:2", build_amazon_linux_2), - # amazonlinux2023 - Image("centos7", "centos:7", build_centos_7), - Image("centos-stream8", "quay.io/centos/centos:stream8", build_centos_stream_8), - Image("centos-stream9", "quay.io/centos/centos:stream9", build_centos_stream_9), - Image("debian10", "debian:buster", build_debian_10), - Image("debian11", "debian:bullseye", build_debian_11), - Image("debian12", "debian:bookworm", build_debian_12), - Image("fedora37", "fedora:37", build_fedora_37), - Image("fedora38", "fedora:38", build_fedora_38), - Image("fedora39", "fedora:39", build_fedora_39), - Image("opensuse15.4", "opensuse/leap:15.4", build_opensuse_15_4), - Image("opensuse15.5", "opensuse/leap:15.5", build_opensuse_15_5), - Image("opensusetumbleweed", "opensuse/tumbleweed:latest", build_opensuse_tumbleweed), - Image("oraclelinux8", "oraclelinux:8", build_oracle_linux_8), - Image("oraclelinux9", "oraclelinux:9", build_oracle_linux_9), - Image("rockylinux8", "rockylinux:8", build_rocky_linux_8), - Image("rockylinux9", "rockylinux:9", build_rocky_linux_9), - Image("ubuntu20.04", "ubuntu:20.04", build_ubuntu_20_04), - Image("ubuntu22.04", "ubuntu:22.04", build_ubuntu_22_04), - Image("ubuntu23.04", "ubuntu:23.04", build_ubuntu_23_04), - Image("ubuntu23.10", "ubuntu:23.10", build_ubuntu_23_10), -} +def install_cargo(ctr: dagger.Container) -> dagger.Container: + bin_paths = [ + "/root/.cargo/bin", + "/usr/local/sbin", + "/usr/local/bin", + "/usr/sbin", + "/usr/bin", + "/sbin", + "/bin", + ] + + ctr = ( + ctr.with_workdir("/") + .with_exec(["sh", "-c", "curl https://sh.rustup.rs -sSf | sh -s -- -y"]) + .with_env_variable("PATH", ":".join(bin_paths)) + .with_exec(["cargo", "new", "--bin", "hello"]) + .with_workdir("/hello") + .with_exec(["cargo", "run", "-v", "-v"]) + ) + + return ctr diff --git a/packaging/dag/main.py b/packaging/dag/main.py index 077ed9aba9..585d78ab36 100755 --- a/packaging/dag/main.py +++ b/packaging/dag/main.py @@ -1,93 +1,205 @@ #!/usr/bin/env python3 import asyncio +import enum import click import os -from pathlib import Path import sys import time import anyio import dagger -from typing import List +from typing import Callable, List, Tuple import images as oci_images - -SUPPORTED_PLATFORMS = [ - "linux/x86_64", - "linux/arm64", - "linux/i386", - "linux/arm/v7", - "linux/arm/v6", - "linux/ppc64le", - "linux/s390x", - "linux/riscv64", -] - - -def netdata_installer(enable_ml=True, enable_ebpf=False, enable_go=False): - cmd = [ - "./netdata-installer.sh", - "--disable-telemetry", - "--disable-logsmanagement" - ] - - if not enable_ebpf: - cmd.append("--disable-ebpf") - - if not enable_ml: - cmd.append("--disable-ml") - - if not enable_go: - cmd.append('--disable-go') - - cmd.extend([ - "--dont-wait", - "--dont-start-it", - "--install-prefix", - "/opt" - ]) - - return cmd - - -def build_image_for_platform(client: dagger.Client, image_name, platform: dagger.Platform, ctr : dagger.Container) -> dagger.Container: - repo_path = str(Path(__file__).parent.parent.parent) - exclude_dirs = exclude=["build", "fluent-bit/build"] - - tag = image_name + "_" + str(platform).replace('/', '_') - - externaldeps_cache = client.cache_volume(f"{tag}-externaldeps") - - source = ( - ctr.with_directory("/netdata", client.host().directory(repo_path), exclude=exclude_dirs) - .with_mounted_cache("/netdata/externaldeps", externaldeps_cache) - .with_env_variable('NETDATA_CMAKE_OPTIONS', '-DCMAKE_BUILD_TYPE=Debug') - ) - - enable_ml = "centos7" not in image_name - build_task = source.with_workdir("/netdata").with_exec(netdata_installer(enable_ml=enable_ml)) - - shell_cmd = "/opt/netdata/usr/sbin/netdata -W buildinfo | tee /opt/netdata/buildinfo.log" - buildinfo_task = build_task.with_exec(["sh", "-c", shell_cmd]) - - # build_dir = buildinfo_task.directory('/opt/netdata') - # artifact_dir = os.path.join(Path.home(), f'ci/{tag}') - # output_task = build_dir.export(artifact_dir) - - return buildinfo_task - - -def build_service(ctr: dagger.Container) -> dagger.Container: - ctr = ( - ctr.with_exec(["/opt/netdata/usr/sbin/netdata", "-D", "-i", "0.0.0.0"]) - .with_exposed_port(19999) - ) - - return ctr - +import pathlib + + +class Platform: + def __init__(self, platform: str): + self.platform = dagger.Platform(platform) + + def escaped(self) -> str: + return str(self.platform).removeprefix("linux/").replace('/', '_') + + def __eq__(self, other): + if isinstance(other, Platform): + return self.platform == other.platform + elif isinstance(other, dagger.Platform): + return self.platform == other + else: + return NotImplemented + + def __ne__(self, other): + return not (self == other) + + def __hash__(self): + return hash(self.platform) + + +SUPPORTED_PLATFORMS = set([ + Platform("linux/x86_64"), + Platform("linux/arm64"), + Platform("linux/i386"), + Platform("linux/arm/v7"), + Platform("linux/arm/v6"), + Platform("linux/ppc64le"), + Platform("linux/s390x"), + Platform("linux/riscv64"), +]) + + +class Distribution: + def __init__(self, display_name: str, docker_tag: str): + self.display_name = display_name + self.docker_tag = docker_tag + + if self.display_name == "alpine_3_18": + self.platforms = SUPPORTED_PLATFORMS + self.builder = oci_images.build_alpine_3_18 + elif self.display_name == "alpine_3_19": + self.platforms = SUPPORTED_PLATFORMS + self.builder = oci_images.build_alpine_3_19 + elif self.display_name == "amazonlinux2": + self.platforms = SUPPORTED_PLATFORMS + self.builder = oci_images.build_amazon_linux_2 + elif self.display_name == "centos7": + self.platforms = SUPPORTED_PLATFORMS + self.builder = oci_images.build_centos_7 + elif self.display_name == "centos-stream8": + self.platforms = SUPPORTED_PLATFORMS + self.builder = oci_images.build_centos_stream_8 + elif self.display_name == "centos-stream9": + self.platforms = SUPPORTED_PLATFORMS + self.builder = oci_images.build_centos_stream_9 + elif self.display_name == "debian10": + self.platforms = SUPPORTED_PLATFORMS + self.builder = oci_images.build_debian_10 + elif self.display_name == "debian11": + self.platforms = SUPPORTED_PLATFORMS + self.builder = oci_images.build_debian_11 + elif self.display_name == "debian12": + self.platforms = SUPPORTED_PLATFORMS + self.builder = oci_images.build_debian_12 + elif self.display_name == "fedora37": + self.platforms = SUPPORTED_PLATFORMS + self.builder = oci_images.build_fedora_37 + elif self.display_name == "fedora38": + self.platforms = SUPPORTED_PLATFORMS + self.builder = oci_images.build_fedora_38 + elif self.display_name == "fedora39": + self.platforms = SUPPORTED_PLATFORMS + self.builder = oci_images.build_fedora_39 + elif self.display_name == "opensuse15.4": + self.platforms = SUPPORTED_PLATFORMS + self.builder = oci_images.build_opensuse_15_4 + elif self.display_name == "opensuse15.5": + self.platforms = SUPPORTED_PLATFORMS + self.builder = oci_images.build_opensuse_15_5 + elif self.display_name == "opensusetumbleweed": + self.platforms = SUPPORTED_PLATFORMS + self.builder = oci_images.build_opensuse_tumbleweed + elif self.display_name == "oraclelinux8": + self.platforms = SUPPORTED_PLATFORMS + self.builder = oci_images.build_oracle_linux_8 + elif self.display_name == "oraclelinux9": + self.platforms = SUPPORTED_PLATFORMS + self.builder = oci_images.build_oracle_linux_9 + elif self.display_name == "rockylinux8": + self.platforms = SUPPORTED_PLATFORMS + self.builder = oci_images.build_rocky_linux_8 + elif self.display_name == "rockylinux9": + self.platforms = SUPPORTED_PLATFORMS + self.builder = oci_images.build_rocky_linux_9 + elif self.display_name == "ubuntu20.04": + self.platforms = SUPPORTED_PLATFORMS + self.builder = oci_images.build_ubuntu_20_04 + elif self.display_name == "ubuntu22.04": + self.platforms = SUPPORTED_PLATFORMS + self.builder = oci_images.build_ubuntu_22_04 + elif self.display_name == "ubuntu23.04": + self.platforms = SUPPORTED_PLATFORMS + self.builder = oci_images.build_ubuntu_23_04 + elif self.display_name == "ubuntu23.10": + self.platforms = SUPPORTED_PLATFORMS + self.builder = oci_images.build_ubuntu_23_10 + else: + raise ValueError(f"Unknown distribution: {self.display_name}") + + + def cache_volume(self, client: dagger.Client, platform: dagger.Platform, path: str) -> dagger.CacheVolume: + tag = "_".join([self.display_name, Platform(platform).escaped()]) + return client.cache_volume(f"{path}-{tag}") + + + def build(self, client: dagger.Client, platform: dagger.Platform) -> dagger.Container: + if platform not in self.platforms: + raise ValueError(f"Building {self.display_name} is not supported on {platform}.") + + ctr = self.builder(client, platform) + ctr = oci_images.install_cargo(ctr) + + return ctr + + +class Context: + def __init__(self, + client: dagger.Client, + platform: dagger.Platform, + repo_root: pathlib.Path, + distribution: Distribution): + self.client = client + self.platform = platform + self.repo_root = repo_root + + +class FeatureFlags(enum.Flag): + DBEngine = enum.auto() + GoPlugin = enum.auto() + ExtendedBPF = enum.auto() + LogsManagement = enum.auto() + MachineLearning = enum.auto() + + +class NetdataInstaller: + def __init__(self, + repo_root: pathlib.Path, + install_prefix: pathlib.Path, + features: FeatureFlags): + self.repo_root = repo_root + self.install_prefix = install_prefix + self.features = features + + def install(self, ctr: dagger.Container, externaldeps: dagger.CacheVolume) -> dagger.Container: + args = ["--dont-wait", "--dont-start-it", "--disable-telemetry"] + + if FeatureFlags.DBEngine not in self.features: + args.append("--disable-dbengine") + + if FeatureFlags.GoPlugin not in self.features: + args.append("--disable-go") + + if FeatureFlags.ExtendedBPF not in self.features: + args.append("--disable-ebpf") + + if FeatureFlags.LogsManagement not in self.features: + args.append("--disable-logsmanagement") + + if FeatureFlags.MachineLearning not in self.features: + args.append("--disable-ml") + + args.extend(["--install-prefix", self.install_prefix]) + + ctr = ( + ctr.with_workdir(self.repo_root) + .with_mounted_cache(os.path.join(self.repo_root, "externaldeps"), externaldeps) + .with_env_variable('NETDATA_CMAKE_OPTIONS', '-DCMAKE_BUILD_TYPE=Debug') + .with_exec(["./netdata-installer.sh"] + args) + ) + + return ctr def run_async(func): """ @@ -100,25 +212,32 @@ def run_async(func): @run_async async def main(): - repo_path = str(Path(__file__).parent.parent.parent) - + repo_root = pathlib.Path(__file__).parent.parent.parent + install_prefix = "/opt" platform = dagger.Platform("linux/x86_64") + dist = Distribution("debian10", "debian:10") config = dagger.Config(log_output=sys.stdout) async with dagger.Connection(config) as client: - ctr = oci_images.build_debian_12(client, platform) - ctr = build_image_for_platform(client, "debian_12", platform, ctr) - ctr = build_service(ctr) - - tunnel = await client.host().tunnel(ctr.as_service(), native=True).start() - - # get HTTP service address - endpoint = tunnel.endpoint() - print(f"GVD >>> The endpoint is: {endpoint=} <<<") - await endpoint - time.sleep(600) - - # await oci_images.static_build(client, repo_path) - + # build base image with packages we need + ctr = dist.build(client, platform) + + # mount root repo from host + ctr = ctr.with_directory("/netdata", client.host().directory(repo_root.as_posix()), exclude=[ + "build", + "fluent-bit/build", + ]) + + # create the cache volume for externaldeps + externaldeps = dist.cache_volume(client, ctr.platform(), "externaldeps") + + # run the netdata installer + features = FeatureFlags.DBEngine + installer = NetdataInstaller("/netdata", install_prefix, FeatureFlags.DBEngine) + ctr = installer.install(ctr, externaldeps) + + await ctr + + if __name__ == '__main__': main() |