summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvkalintiris <vasilis@netdata.cloud>2024-01-17 14:55:34 +0200
committervkalintiris <vasilis@netdata.cloud>2024-01-17 14:55:34 +0200
commit97c12390cb56ca04edbb35c9e0d51a14d45c5083 (patch)
treea6f94215c094319427de1a8fe7eddcb53e4882fd
parent71eae1b4e26020486fed0f0e1e4e52f6be6f5121 (diff)
Stash
-rw-r--r--packaging/dag/images.py153
-rwxr-xr-xpackaging/dag/main.py303
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()