Compare commits
8 Commits
cut_base_i
...
from-task
| Author | SHA1 | Date | |
|---|---|---|---|
| 444f185fc5 | |||
|
|
a670e7847c | ||
| c24ac6f89a | |||
| 5c47e2296d | |||
| 34405300aa | |||
| 7ee8840061 | |||
| a36a9d974e | |||
| 8ef16f6ea7 |
69
build.py
69
build.py
@@ -3,6 +3,7 @@
|
||||
import argparse
|
||||
import functools
|
||||
import json
|
||||
import logging
|
||||
import re
|
||||
import subprocess
|
||||
import textwrap
|
||||
@@ -16,6 +17,8 @@ import tomli
|
||||
import yaml
|
||||
from jinja2 import Template
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
ORG_DIR = Path("org")
|
||||
|
||||
PKG_VERSIONS: dict | None = None
|
||||
@@ -25,7 +28,7 @@ PKG_VERSIONS: dict | None = None
|
||||
class Image:
|
||||
canonical_name: str
|
||||
is_versioned: bool | None
|
||||
verion_template: str | None
|
||||
version_template: str | None
|
||||
source_packages: list[str] | None
|
||||
|
||||
def __init__(self, canonical_name: str):
|
||||
@@ -114,6 +117,25 @@ def api_get_source_package_version(branch: str, package_name: str) -> str:
|
||||
return result["versions"][0]["version"]
|
||||
|
||||
|
||||
def api_get_source_package_version_from_task(task_id: str, package_name: str):
|
||||
api_url = f"https://rdb.altlinux.org/api/task/packages/{task_id}"
|
||||
response = requests.get(api_url)
|
||||
if response.status_code != 200:
|
||||
print(response)
|
||||
raise RuntimeError(
|
||||
f"failed to retrieve source package version from task: source package {package_name!r}, branch {branch!r}, task_id {task_id}"
|
||||
)
|
||||
|
||||
result = response.json()
|
||||
for subtask in result["subtasks"]:
|
||||
if subtask["source"]["name"] == package_name:
|
||||
return subtask["source"]["version"]
|
||||
|
||||
raise RuntimeError(
|
||||
f"failed to retrieve source package version from task: source package {package_name!r}, branch {branch!r}, task_id {task_id}"
|
||||
)
|
||||
|
||||
|
||||
class Tags:
|
||||
def __init__(self, tags_file: str | None, latest: str):
|
||||
if tags_file is None:
|
||||
@@ -122,7 +144,7 @@ class Tags:
|
||||
self._tags = tomli.loads(Path(tags_file).read_text())
|
||||
self._latest = latest
|
||||
|
||||
def tags(self, branch: str, image: Image):
|
||||
def tags(self, branch: str, image: Image, tasks: Tasks | None = None):
|
||||
if self._tags is None:
|
||||
if image.is_versioned is None:
|
||||
tags = [branch]
|
||||
@@ -155,7 +177,28 @@ class Tags:
|
||||
package_name = Template(package_name).render(
|
||||
version=PKG_VERSIONS[image.canonical_name]
|
||||
)
|
||||
version = api_get_source_package_version(branch, package_name)
|
||||
|
||||
if tasks is not None:
|
||||
task_ids = tasks.get(branch, image)
|
||||
else:
|
||||
task_ids = []
|
||||
|
||||
if task_ids:
|
||||
logger.info(
|
||||
"getting %s package version from task %s",
|
||||
package_name,
|
||||
task_ids[0],
|
||||
)
|
||||
version = api_get_source_package_version_from_task(
|
||||
task_ids[0], package_name
|
||||
)
|
||||
else:
|
||||
logger.info(
|
||||
"getting %s package version from repo %s",
|
||||
package_name,
|
||||
branch,
|
||||
)
|
||||
version = api_get_source_package_version(branch, package_name)
|
||||
|
||||
if image.version_template is not None:
|
||||
version = (
|
||||
@@ -652,7 +695,7 @@ class DockerBuilder:
|
||||
self.images_info.skip_arches(image.canonical_name)
|
||||
)
|
||||
platforms = ",".join([f"linux/{a}" for a in build_arches])
|
||||
tags = self.tags.tags(self.branch, image)
|
||||
tags = self.tags.tags(self.branch, image, self.tasks)
|
||||
manifest = self.render_full_tag(image, tags[0])
|
||||
|
||||
msg = "Building image {} for {} arches".format(
|
||||
@@ -712,7 +755,7 @@ class DockerBuilder:
|
||||
if self.images_info.skip_branch(image.canonical_name, self.branch):
|
||||
return
|
||||
|
||||
tags = self.tags.tags(self.branch, image)
|
||||
tags = self.tags.tags(self.branch, image, self.tasks)
|
||||
manifests = [self.render_full_tag(image, t) for t in tags]
|
||||
|
||||
for manifest in manifests:
|
||||
@@ -765,6 +808,8 @@ def parse_args():
|
||||
images = [f"{o.name}/{i.name}" for o in organizations for i in o.iterdir()]
|
||||
organizations = [o.name for o in organizations]
|
||||
|
||||
log_levels = ["debug", "info", "warning", "error", "critical"]
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
||||
)
|
||||
@@ -875,6 +920,12 @@ def parse_args():
|
||||
type=json.loads,
|
||||
help="json string where key is image name, value is the package version",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--log-level",
|
||||
default="warning",
|
||||
choices=log_levels,
|
||||
help="log messages above specified level",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
args.stages = set(args.stages) - set(args.skip_stages)
|
||||
@@ -890,6 +941,14 @@ def main():
|
||||
|
||||
args = parse_args()
|
||||
PKG_VERSIONS = args.package_versions
|
||||
|
||||
numeric_level = getattr(logging, args.log_level.upper(), logging.WARNING)
|
||||
logging.basicConfig(
|
||||
level=numeric_level, format="%(asctime)s - %(levelname)s\t- %(message)s"
|
||||
)
|
||||
|
||||
logger.info("PKG_VERSIONS=%s", PKG_VERSIONS)
|
||||
|
||||
arches = args.arches
|
||||
images_info = ImagesInfo()
|
||||
tags = Tags(args.tags, args.latest)
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
["alt/buildpack-deps"]
|
||||
skip-branches = [ "p9" ]
|
||||
|
||||
["alt/distroless-toybox"]
|
||||
skip-branches = [ "p10" ]
|
||||
skip-branches = [ "p10", "c10f2", "c10f1" ]
|
||||
|
||||
["base/distroless-toybox"]
|
||||
skip-branches = [ "p10", "c10f2", "c10f1" ]
|
||||
|
||||
["alt/openjdk21"]
|
||||
skip-arches = [ "386" ]
|
||||
|
||||
["alt/ansible"]
|
||||
skip-branches = [ "c10f2", "c10f1", "p10" ]
|
||||
skip-branches = [ "c10f2", "c10f1", "p10" ]
|
||||
|
||||
@@ -10,6 +10,8 @@ LABEL org.opencontainers.image.vendor="ALT Linux Team"
|
||||
|
||||
{{ install_packages("etcd") }}
|
||||
|
||||
RUN ln -s /usr/sbin/etcd /usr/local/bin/etcd
|
||||
|
||||
VOLUME /data
|
||||
|
||||
ENTRYPOINT ["/usr/sbin/etcd", "--data-dir", "/data"]
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
is_versioned: true
|
||||
version_template: "{{ version }}"
|
||||
source_packages:
|
||||
- python3
|
||||
- python3-module-setuptools
|
||||
- python3-dev
|
||||
- python3-module-pip
|
||||
- gcc-defaults
|
||||
...
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
is_versioned: true
|
||||
version_template: "{{ version }}"
|
||||
source_packages:
|
||||
- python
|
||||
- python-module-setuptools
|
||||
- python-dev
|
||||
- gcc-defaults
|
||||
...
|
||||
|
||||
@@ -10,6 +10,8 @@ LABEL org.opencontainers.image.vendor="ALT Linux Team"
|
||||
|
||||
{{ install_packages("etcd") }}
|
||||
|
||||
RUN ln -s /usr/sbin/etcd /usr/local/bin/etcd
|
||||
|
||||
VOLUME /data
|
||||
|
||||
ENTRYPOINT ["/usr/sbin/etcd", "--data-dir", "/data"]
|
||||
|
||||
@@ -6,7 +6,9 @@ ARG PKG_VERSION
|
||||
|
||||
{{ install_packages("kubernetes${PKG_VERSION}-master") }}
|
||||
|
||||
ENTRYPOINT ["/usr/bin/kube-apiserver"]
|
||||
RUN ln -s /usr/bin/kube-apiserver /usr/local/bin/kube-apiserver
|
||||
|
||||
ENTRYPOINT ["/usr/local/bin/kube-apiserver"]
|
||||
|
||||
LABEL org.opencontainers.image.title="kube-apiserver"
|
||||
LABEL org.opencontainers.image.description="The Kubernetes API server validates and configures data for the api objects which include pods, services, replicationcontrollers, and others."
|
||||
|
||||
@@ -6,7 +6,9 @@ ARG PKG_VERSION
|
||||
|
||||
{{ install_packages("kubernetes${PKG_VERSION}-master") }}
|
||||
|
||||
ENTRYPOINT ["/usr/bin/kube-controller-manager"]
|
||||
RUN ln -s /usr/bin/kube-controller-manager /usr/local/bin/kube-controller-manager
|
||||
|
||||
ENTRYPOINT ["/usr/local/bin/kube-controller-manager"]
|
||||
|
||||
LABEL org.opencontainers.image.title="kube-controller-manager"
|
||||
LABEL org.opencontainers.image.description="The Kubernetes controller manager is a daemon that embeds the core control loops shipped with Kubernetes."
|
||||
|
||||
@@ -4,11 +4,11 @@ MAINTAINER alt-cloud
|
||||
|
||||
ARG PKG_VERSION
|
||||
|
||||
{{ install_packages("kubernetes${PKG_VERSION}-node") }}
|
||||
{{ install_packages("kmod", "ipset", "nftables", "kubernetes${PKG_VERSION}-node") }}
|
||||
|
||||
RUN ln -s /usr/bin/kube-proxy /usr/local/bin/kube-proxy
|
||||
|
||||
ENTRYPOINT ["/usr/bin/kube-proxy"]
|
||||
ENTRYPOINT ["/usr/local/bin/kube-proxy"]
|
||||
|
||||
LABEL org.opencontainers.image.title="kube-proxy"
|
||||
LABEL org.opencontainers.image.description="The Kubernetes network proxy runs on each node."
|
||||
|
||||
@@ -6,7 +6,9 @@ ARG PKG_VERSION
|
||||
|
||||
{{ install_packages("kubernetes${PKG_VERSION}-master") }}
|
||||
|
||||
ENTRYPOINT ["/usr/bin/kube-scheduler"]
|
||||
RUN ln -s /usr/bin/kube-scheduler /usr/local/bin/kube-scheduler
|
||||
|
||||
ENTRYPOINT ["/usr/local/bin/kube-scheduler"]
|
||||
|
||||
LABEL org.opencontainers.image.title="kube-scheduler"
|
||||
LABEL org.opencontainers.image.description="The Kubernetes scheduler is a control plane process which assigns Pods to Nodes."
|
||||
|
||||
@@ -4,11 +4,11 @@ MAINTAINER alt-cloud
|
||||
|
||||
ARG PKG_VERSION
|
||||
|
||||
{{ install_packages("ca-certificates", "ethtool", "socat", "kubernetes${PKG_VERSION}-kubelet") }}
|
||||
{{ install_packages("ca-certificates", "ethtool", "socat", "mount", "kubernetes${PKG_VERSION}-kubelet") }}
|
||||
|
||||
RUN ln -s /usr/bin/kubelet /usr/local/bin/kubelet
|
||||
|
||||
ENTRYPOINT ["/usr/bin/kubelet"]
|
||||
ENTRYPOINT ["/usr/local/bin/kubelet"]
|
||||
|
||||
LABEL org.opencontainers.image.title="kubelet" \
|
||||
org.opencontainers.image.description="An agent that runs on each node in the cluster. It makes sure that containers are running in a Pod." \
|
||||
|
||||
Reference in New Issue
Block a user