Compare commits

..

1 Commits

Author SHA1 Message Date
d4d68fd1c6 style: remove trailing whitespace 2025-07-17 13:18:49 +03:00
31 changed files with 50 additions and 566 deletions

View File

@ -19,6 +19,8 @@ import yaml
from jinja2 import Environment, BaseLoader
logger = logging.getLogger(__name__)
clean_images_counter = 0
clean_images_limit_count = 5
ORG_DIR = Path("org")
@ -101,8 +103,6 @@ class Tasks:
if image.canonical_name in i or len(i) == 0
]
class AltAPIError(Exception):
pass
def api_get_source_package_version(branch: str, package_name: str) -> str:
api_url = "https://rdb.altlinux.org/api/site/package_versions_from_tasks"
@ -113,7 +113,7 @@ def api_get_source_package_version(branch: str, package_name: str) -> str:
params = {"arch": "x86_64", "package_type": "source", "name": package_name}
response = requests.get(api_url, params)
if response.status_code != 200:
raise AltAPIError(
raise RuntimeError(
f"failed to retrieve source package version: source package {package_name!r}, branch {branch!r} "
)
result = response.json()
@ -121,7 +121,7 @@ def api_get_source_package_version(branch: str, package_name: str) -> str:
if v["branch"] == branch:
return v["version"]
raise AltAPIError(
raise RuntimeError(
f"failed to retrieve source package version: source package {package_name!r}, branch {branch!r} "
)
@ -134,7 +134,7 @@ 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:
raise AltAPIError(
raise RuntimeError(
f"failed to retrieve source package version from task: source package {package_name!r}, task_id {task_id}"
)
@ -143,7 +143,7 @@ def api_get_source_package_version_from_task(task_id: str, package_name: str):
if subtask["source"]["name"] == package_name:
return subtask["source"]["version"]
raise AltAPIError(
raise RuntimeError(
f"failed to retrieve source package version from task: source package {package_name!r}, task_id {task_id}"
)
@ -202,22 +202,9 @@ class Tags:
package_name,
task_ids[0],
)
try:
version = api_get_source_package_version_from_task(
task_ids[0], package_name
)
except AltAPIError:
logger.warning(
"failed getting %s package version from task %s",
package_name,
task_ids[0],
)
logger.info(
"getting %s package version from repo %s",
package_name,
branch,
)
version = api_get_source_package_version(branch, package_name)
version = api_get_source_package_version_from_task(
task_ids[0], package_name
)
else:
logger.info(
"getting %s package version from repo %s",
@ -432,22 +419,12 @@ class DockerBuilder:
else:
registry = ""
alt_image = "alt"
if self.branch == "c10f2":
base_image_prefix = "c10f"
label_vendor = "BaseALT LLC"
else:
base_image_prefix = self.branch
label_vendor = "ALT Linux Team"
rendered = JINJA_ENV.from_string(template).render(
alt_image=alt_image,
branch=self.branch,
base_image_prefix=base_image_prefix,
install_packages=install_packages,
organization=organization,
registry=registry,
label_vendor=label_vendor,
pkg_versions=PKG_VERSIONS,
**kwargs,
)
@ -795,7 +772,7 @@ class DockerBuilder:
".",
]
if image.annotations is not None and self.branch != "c10f2":
if image.annotations != None:
build_cmd = [
"podman",
"build",
@ -852,6 +829,23 @@ class DockerBuilder:
self.run(cmd)
global clean_images_counter
if clean_images_limit_count <= clean_images_counter:
cmd = [
"podman",
"rmi",
"--all",
"-f",
]
self.run(cmd,
check=False,
stderr=subprocess.DEVNULL,
stdout=subprocess.DEVNULL,
)
clean_images_counter = 0
else:
clean_images_counter += 1
class ImagesInfo:
@ -1000,10 +994,6 @@ def parse_args():
type=json.loads,
help="json string where key is image name, value is the package version",
)
parser.add_argument(
"--clean-images-limit",
help="remove all the images in the container storage when number of images hits the limit",
)
parser.add_argument(
"--log-level",
default="warning",
@ -1033,8 +1023,6 @@ def main():
logger.info("PKG_VERSIONS=%s", PKG_VERSIONS)
clean_images_counter = 0
arches = args.arches
images_info = ImagesInfo()
tags = Tags(args.tags, args.latest)
@ -1056,7 +1044,6 @@ def main():
if "render_dockerfiles" in args.stages:
db.render_dockerfiles()
db.load_distrolesses()
for image in db.get_build_order():
if image.canonical_name not in args.images:
continue
@ -1070,23 +1057,6 @@ def main():
if "push" in args.stages:
db.podman_push(image, args.sign)
if args.clean_images_limit is not None:
if clean_images_counter >= args.clean_images_limit:
cmd = [
"podman",
"rmi",
"--all",
"-f",
]
db.run(cmd,
check=False,
stderr=subprocess.DEVNULL,
stdout=subprocess.DEVNULL,
)
clean_images_counter = 0
else:
clean_images_counter += 1
if __name__ == "__main__":
main()

View File

@ -7,32 +7,8 @@ skip-arches = [ "386" ]
["alt/zot"]
skip-arches = [ "386" ]
["alt/kafka"]
skip-arches = [ "386" ]
["alt/ansible"]
skip-branches = [ "c10f2", "c10f1", "p10" ]
["alt/buildkit"]
skip-branches = [ "c10f1", "p10" ]
["kubevirt/virt-api"]
skip-arches = [ "386", "loong64" ]
["kubevirt/virt-controller"]
skip-arches = [ "386", "loong64" ]
["kubevirt/virt-exportproxy"]
skip-arches = [ "386", "loong64" ]
["kubevirt/virt-exportserver"]
skip-arches = [ "386", "loong64" ]
["kubevirt/virt-handler"]
skip-arches = [ "386", "loong64" ]
["kubevirt/virt-launcher"]
skip-arches = [ "386", "loong64" ]
["kubevirt/virt-operator"]
skip-arches = [ "386", "loong64" ]

View File

@ -1,21 +0,0 @@
FROM {{ registry }}{{ branch }}/{{ alt_image }}:latest
MAINTAINER alt-cloud
LABEL org.opencontainers.image.title="kafka"
LABEL org.opencontainers.image.description="Apache Kafka is a distributed event store and stream-processing platform"
LABEL org.opencontainers.image.source="https://github.com/apache/kafka"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.vendor="ALT Linux Team"
{{ install_packages("kafka", "ca-certificates", "gpg") }}
USER kafka:kafka
EXPOSE 9092 2181
WORKDIR /var/lib/kafka
VOLUME ["/var/lib/kafka","/var/log/kafka"]
COPY kafka-entrypoint.sh /kafka-entrypoint.sh
ENTRYPOINT [ "/bin/bash" ]
CMD ["/kafka-entrypoint.sh"]

View File

@ -1,37 +0,0 @@
# Kafka image
Command for run kafka server:
```
podman run --rm -it -p 9092:9092 <REGISTRY>/<BRANCH>/kafka:latest
```
To lead images running need use kafka-entrypoint.sh or change it. As default login kafka need runnig zookeeper and than kafka's start script.
Commnad for using kafka:
```
podman exec -it -u kafka <CONTAINER ID> /usr/bin/sh
```
```
sh-5.2$ /usr/lib/kafka/bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092
```
Created topic quickstart-events.
```
sh-5.2$ /usr/lib/kafka/bin/kafka-topics.sh --describe --topic quickstart-events --bootstrap-server localhost:9092
```
Topic: quickstart-events TopicId: kPjhCFFAS-Sg5J3Hpgr-PA PartitionCount: 1 ReplicationFactor: 1 Configs:
Topic: quickstart-events Partition: 0 Leader: 0 Replicas: 0 Isr: 0 Elr: N/A LastKnownElr: N/A
```
sh-5.2$ /usr/lib/kafka/bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092
```
>hello 1
>hello 2
>hello 3
```
sh-5.2$ /usr/lib/kafka/bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092
```
hello 1
hello 2
hello 3
^CProcessed a total of 3 messages

View File

@ -1,15 +0,0 @@
---
is_versioned: true
version_template: "{{ version }}"
source_packages:
- kafka
annotations:
org.opencontainers.image.revision: ''
org.opencontainers.image.source: 'https://github.com/apache/kafka'
org.opencontainers.image.url: ''
org.opencontainers.image.version: ''
org.opencontainers.image.title: 'kafka'
org.opencontainers.image.description: 'Apache Kafka is a distributed event store and stream-processing platform'
org.opencontainers.image.licenses: Apache-2.0
org.opencontainers.image.vendor: 'ALT Linux Team'
...

View File

@ -1,4 +0,0 @@
#!/bin/sh -eux
nohup /usr/lib/kafka/bin/zookeeper-server-start.sh /etc/kafka/zookeeper.properties &
/usr/lib/kafka/bin/kafka-server-start.sh /etc/kafka/server.properties

View File

@ -1 +0,0 @@
ls -a /usr/lib/kafka/bin/ | grep kafka && /usr/lib/kafka/bin/kafka-topics.sh --version

View File

@ -1,19 +0,0 @@
FROM {{ registry }}{{ branch }}/{{ alt_image }}:latest
MAINTAINER alt-cloud
LABEL org.opencontainers.image.title="redis"
LABEL org.opencontainers.image.description="Redis is an advanced key-value store"
LABEL org.opencontainers.image.source="http://redis.io"
LABEL org.opencontainers.image.licenses="BSD-3-Clause AND BSD-2-Clause AND MIT AND BSL-1.0"
LABEL org.opencontainers.image.vendor="ALT Linux Team"
{{ install_packages("ca-certificates","redis","redis-cli") }}
USER _redis:_redis
EXPOSE 6379
VOLUME ["/var/lib/redis","/var/log/redis"]
WORKDIR /var/lib/redis
ENTRYPOINT [ "/usr/sbin/redis-server" ]
CMD [ "/etc/redis/redis.conf" ]

View File

@ -1,8 +0,0 @@
# Redis image
Command for run redis-db server:
```
podman run --rm -it -v ./redis.conf:/etc/redis/redis.conf -p 6379:6379 <REGISTRY>/<BRANCH>/redis:latest
```
For testing running server you can run redis.py, if it's working you will see version redis

View File

@ -1,15 +0,0 @@
---
is_versioned: true
version_template: "{{ version }}"
source_packages:
- redis
annotations:
org.opencontainers.image.revision: ''
org.opencontainers.image.source: 'http://redis.io/'
org.opencontainers.image.url: ''
org.opencontainers.image.version: ''
org.opencontainers.image.title: 'redis'
org.opencontainers.image.description: 'Redis is an advanced key-value store'
org.opencontainers.image.licenses: 'BSD-3-Clause AND BSD-2-Clause AND MIT AND BSL-1.0'
org.opencontainers.image.vendor: 'ALT Linux Team'
...

View File

@ -1,22 +0,0 @@
#!/usr/bin/python3
import redis
def main():
r = redis.Redis(host='127.0.0.1', port=6379, db=0, username='test', password='test')
try:
info = r.info()
print(info['redis_version'])
response = r.ping()
if response:
print("Подключение успешно!")
else:
print("Не удалось подключиться к Redis.")
except redis.exceptions.RedisError as e:
print(f"Ошибка: {e}")
if __name__ == "__main__":
main()

View File

@ -1 +0,0 @@
redis-cli --version && redis-server --version

View File

@ -1,5 +0,0 @@
bind 0.0.0.0
requirepass test
appendonly yes
appendfsync everysec
user test on -DEBUG +@all ~* >test

View File

@ -14,4 +14,4 @@ LABEL org.opencontainers.image.title="cert-manager-acmesolver"
LABEL org.opencontainers.image.description="HTTP server used to solve ACME challenges."
LABEL org.opencontainers.image.source="https://github.com/cert-manager/cert-manager"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.vendor="{{ label_vendor }}"
LABEL org.opencontainers.image.vendor="ALT Linux Team"

View File

@ -14,4 +14,4 @@ LABEL org.opencontainers.image.title="cert-manager-cainjector"
LABEL org.opencontainers.image.description="cert-manager CA injector is a Kubernetes addon to automate the injection of CA data into webhooks and APIServices from cert-manager certificates."
LABEL org.opencontainers.image.source="https://github.com/cert-manager/cert-manager"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.vendor="{{ label_vendor }}"
LABEL org.opencontainers.image.vendor="ALT Linux Team"

View File

@ -14,4 +14,4 @@ LABEL org.opencontainers.image.title="cert-manager-controller"
LABEL org.opencontainers.image.description="Automatically provision and manage TLS certificates in Kubernetes."
LABEL org.opencontainers.image.source="https://github.com/cert-manager/cert-manager"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.vendor="{{ label_vendor }}"
LABEL org.opencontainers.image.vendor="ALT Linux Team"

View File

@ -14,4 +14,4 @@ LABEL org.opencontainers.image.title="cert-manager-startupapicheck"
LABEL org.opencontainers.image.description="Check that cert-manager started successfully."
LABEL org.opencontainers.image.source="https://github.com/cert-manager/cert-manager"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.vendor="{{ label_vendor }}"
LABEL org.opencontainers.image.vendor="ALT Linux Team"

View File

@ -14,4 +14,4 @@ LABEL org.opencontainers.image.title="cert-manager-webhook"
LABEL org.opencontainers.image.description="The webhook component provides API validation, mutation and conversion functionality for cert-manager."
LABEL org.opencontainers.image.source="https://github.com/cert-manager/cert-manager"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.vendor="{{ label_vendor }}"
LABEL org.opencontainers.image.vendor="ALT Linux Team"

View File

@ -1,4 +1,4 @@
FROM {{ registry }}{{ base_image_prefix }}/{{ alt_image }}:latest
FROM {{ registry }}{{ branch }}/{{ alt_image }}:latest
MAINTAINER alt-cloud
@ -6,7 +6,7 @@ LABEL org.opencontainers.image.title="coredns"
LABEL org.opencontainers.image.description="CoreDNS is a DNS server that chains plugins"
LABEL org.opencontainers.image.source="https://github.com/coredns/coredns"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.vendor="{{ label_vendor }}"
LABEL org.opencontainers.image.vendor="ALT Linux Team"
{% if pkg_versions and "k8s/coredns" in pkg_versions %}
{% set num_version_parts = (pkg_versions["k8s/coredns"].split('.') | length) %}

View File

@ -1,4 +1,4 @@
FROM {{ registry }}{{ base_image_prefix }}/{{ alt_image }}:latest
FROM {{ registry }}{{ branch }}/{{ alt_image }}:latest
MAINTAINER alt-cloud
@ -6,7 +6,7 @@ LABEL org.opencontainers.image.title="etcd"
LABEL org.opencontainers.image.description="Distributed reliable key-value store for the most critical data of a distributed system"
LABEL org.opencontainers.image.source="https://github.com/etcd-io/etcd"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.vendor="{{ label_vendor }}"
LABEL org.opencontainers.image.vendor="ALT Linux Team"
ARG PKG_VERSION

View File

@ -6,7 +6,7 @@ LABEL org.opencontainers.image.title="flannel-cni-plugin" \
org.opencontainers.image.description="CNI network plugin that is powered by flannel" \
org.opencontainers.image.source="https://github.com/flannel-io/cni-plugin" \
org.opencontainers.image.licenses="Apache-2.0" \
org.opencontainers.image.vendor="{{ label_vendor }}"
org.opencontainers.image.vendor="ALT Linux Team"
{{ install_packages("cni-plugin-flannel") }}

View File

@ -6,7 +6,7 @@ LABEL org.opencontainers.image.title="flannel"
LABEL org.opencontainers.image.description="Network fabric for containers"
LABEL org.opencontainers.image.source="https://github.com/flannel-io/flannel"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.vendor="{{ label_vendor }}"
LABEL org.opencontainers.image.vendor="ALT Linux Team"
{{ install_packages(
"iproute2",

View File

@ -1,4 +1,4 @@
FROM {{ registry }}{{ base_image_prefix }}/{{ alt_image }}:latest
FROM {{ registry }}{{ branch }}/{{ alt_image }}:latest
MAINTAINER alt-cloud
@ -14,4 +14,4 @@ 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."
LABEL org.opencontainers.image.source="https://github.com/kubernetes/kubernetes"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.vendor="{{ label_vendor }}"
LABEL org.opencontainers.image.vendor="ALT Linux Team"

View File

@ -1,4 +1,4 @@
FROM {{ registry }}{{ base_image_prefix }}/{{ alt_image }}:latest
FROM {{ registry }}{{ branch }}/{{ alt_image }}:latest
MAINTAINER alt-cloud
@ -14,4 +14,4 @@ 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."
LABEL org.opencontainers.image.source="https://github.com/kubernetes/kubernetes"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.vendor="{{ label_vendor }}"
LABEL org.opencontainers.image.vendor="ALT Linux Team"

View File

@ -1,4 +1,4 @@
FROM {{ registry }}{{ base_image_prefix }}/{{ alt_image }}:latest
FROM {{ registry }}{{ branch }}/{{ alt_image }}:latest
MAINTAINER alt-cloud
@ -14,4 +14,4 @@ LABEL org.opencontainers.image.title="kube-proxy"
LABEL org.opencontainers.image.description="The Kubernetes network proxy runs on each node."
LABEL org.opencontainers.image.source="https://github.com/kubernetes/kubernetes"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.vendor="{{ label_vendor }}"
LABEL org.opencontainers.image.vendor="ALT Linux Team"

View File

@ -1,4 +1,4 @@
FROM {{ registry }}{{ base_image_prefix }}/{{ alt_image }}:latest
FROM {{ registry }}{{ branch }}/{{ alt_image }}:latest
MAINTAINER alt-cloud
@ -14,4 +14,4 @@ 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."
LABEL org.opencontainers.image.source="https://github.com/kubernetes/kubernetes"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.vendor="{{ label_vendor }}"
LABEL org.opencontainers.image.vendor="ALT Linux Team"

View File

@ -1,4 +1,4 @@
FROM {{ registry }}{{ base_image_prefix }}/{{ alt_image }}:latest
FROM {{ registry }}{{ branch }}/{{ alt_image }}:latest
MAINTAINER alt-cloud
@ -14,4 +14,4 @@ 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." \
org.opencontainers.image.source="https://github.com/kubernetes/kubernetes" \
org.opencontainers.image.licenses="Apache-2.0" \
org.opencontainers.image.vendor="{{ label_vendor }}" \
org.opencontainers.image.vendor="ALT Linux Team" \

View File

@ -5,7 +5,7 @@ MAINTAINER alt-cloud
LABEL org.opencontainers.image.title="pause" \
org.opencontainers.image.description="Simple pause image" \
org.opencontainers.image.licenses="GPLv2" \
org.opencontainers.image.vendor="{{ label_vendor }}"
org.opencontainers.image.vendor="ALT Linux Team"
{{ install_packages("kubernetes-pause") }}

View File

@ -6,7 +6,7 @@ LABEL org.opencontainers.image.title="trivy-node-collector"
LABEL org.opencontainers.image.description="Open source collector who collect Node information (fs and process data) and output in a table/json format"
LABEL org.opencontainers.image.source="https://github.com/aquasecurity/k8s-node-collector"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.vendor="{{ label_vendor }}"
LABEL org.opencontainers.image.vendor="ALT Linux Team"
{{ install_packages(
"k8s-trivy-node-collector",

192
test.py
View File

@ -1,192 +0,0 @@
#!/usr/bin/env python3
import argparse
import json
import logging
import subprocess
import os
import tempfile
from pathlib import Path
import requests
import yaml
from jinja2 import Template
from build import AltAPIError
logger = logging.getLogger(__name__)
def api_get_package_versions_from_task(task_id: str) -> dict[str, str]:
api_url = f"https://rdb.altlinux.org/api/task/packages/{task_id}"
response = requests.get(api_url)
if response.status_code != 200:
raise AltAPIError(
f"failed to retrieve kubernetes versions from task: task_id {task_id}"
)
result = response.json()
packages = {}
for subtask in result["subtasks"]:
packages[subtask["source"]["name"]] = subtask["source"]["version"]
return packages
def api_get_latest_flannel_tag(branch: str):
api_url = f"https://registry.altlinux.org/v2/{branch}/flannel/tags/list"
response = requests.get(api_url)
if response.status_code != 200:
raise AltAPIError(
f"failed to get latest flannel version for branch {branch}"
)
result = response.json()
return result["tags"][-1]
def run(cmd: list[str]):
global DRY_RUN
logger.debug("%s", cmd)
if not DRY_RUN:
subprocess.run(cmd, check=True)
def parse_args():
log_levels = ["debug", "info", "warning", "error", "critical"]
parser = argparse.ArgumentParser()
parser.add_argument(
"--log-level",
default="debug",
choices=log_levels,
help="log messages above specified level",
)
parser.add_argument(
"--dry-run",
action="store_true",
help="don't run commands",
)
parser.add_argument(
"--skip-packages",
nargs="+",
help="log messages above specified level",
)
parser.add_argument("branch")
parser.add_argument("task_id")
return parser.parse_args()
def main():
global DRY_RUN
args = parse_args()
DRY_RUN = args.dry_run
numeric_level = getattr(logging, args.log_level.upper(), logging.DEBUG)
logging.basicConfig(
level=numeric_level, format="%(asctime)s - %(levelname)s\t- %(message)s"
)
package_versions = api_get_package_versions_from_task(args.task_id)
test_registry = "10.4.5.110:5000"
image_forge_dir = Path(".").resolve()
tests_dir = Path("../kubernetes-tests").resolve()
registry_prefix = args.branch
if args.branch == "c10f2":
registry_prefix = "c10f"
srpm_to_images = yaml.safe_load(Path("srpm_to_images.yaml").read_text())
temp_tasks_config = tempfile.NamedTemporaryFile(mode="w+", delete=False, delete_on_close=False)
temp_tasks_config.write(f"""\
[{args.branch}]
{args.task_id} = [{",".join([f'"{image}"' for pkg_name in package_versions if pkg_name in srpm_to_images for image in srpm_to_images[pkg_name]])}]
""")
temp_tasks_config.close()
k8s_dir = image_forge_dir / "org" / "k8s"
image_to_version_template: dict[str, str | list[str]] = {}
for image_dir in k8s_dir.iterdir():
info_file = image_dir / "info.yaml"
info = yaml.safe_load(info_file.read_text())
image_to_version_template[f"{image_dir.parent.name}/{image_dir.name}"] = info.get("version_template", None)
run([
"podman",
"login",
test_registry,
"--username", "admin",
"--password", "123"
])
flannel_tag = api_get_latest_flannel_tag(registry_prefix)
run(["skopeo", "copy", "-a", f"docker://registry.altlinux.org/{registry_prefix}/flannel:{flannel_tag}", f"docker://{test_registry}/{registry_prefix}/flannel:{flannel_tag}"])
if args.skip_packages is not None:
package_versions = {name: version for name, version in package_versions.items() if name not in args.skip_packages}
for pkg_name, pkg_version in package_versions.items():
os.chdir(image_forge_dir)
if pkg_name not in srpm_to_images:
continue
cmd = [
"./build.py",
"--branch", args.branch,
"--registry", "registry.altlinux.org",
"--overwrite-organization", registry_prefix,
"--skip-arches", "riscv64", "loong64",
"--skip-stage", "push",
"--log-level", "debug",
"--tasks", temp_tasks_config.name,
"-i",
]
cmd += srpm_to_images[pkg_name]
version_for_template = pkg_version[:4]
if pkg_name.startswith("coredns-for-kubernetes") or pkg_name.startswith("etcd-for-kubernetes"):
version_for_template = pkg_name[-4:]
versions_arg = {image: version_for_template for image in srpm_to_images[pkg_name]}
cmd += [
"--package-versions",
json.dumps(versions_arg),
]
run(cmd)
for image in srpm_to_images[pkg_name]:
version_template = image_to_version_template[image]
tags = []
if version_template is not None:
if isinstance(version_template, str):
tags.append(Template(version_template).render(version=pkg_version).strip())
elif isinstance(version_template, list):
for template in version_template:
tags.append(Template(template).render(version=pkg_version).strip())
else:
tags = [pkg_version]
image_name = image[4:]
for tag in tags:
run([
"podman",
"manifest",
"push",
f"registry.altlinux.org/{registry_prefix}/{image_name}:{tag}",
f"docker://{test_registry}/{registry_prefix}/{image_name}:{tag}"
])
os.chdir(tests_dir)
for pkg_name, pkg_version in package_versions.items():
if pkg_name.startswith("kubernetes"):
run(["./run.sh", args.branch, pkg_version, flannel_tag, test_registry, args.task_id, "iptables"])
if __name__ == "__main__":
main()

122
test.sh
View File

@ -1,122 +0,0 @@
#!/bin/bash
set -efu
dry_run=0
while true; do
case "$1" in
--dry-run)
dry_run=1
shift
;;
*)
break
;;
esac
done
r()
{
if [[ $dry_run == 1 ]]; then
echo "$@"
else
"$@"
fi
}
branch=$1
task_id=$2
# kubernetes_package_versions=()
declare -A kubernetes_package_versions
api_url="https://rdb.altlinux.org/api/task/packages/$task_id"
test_registry=10.4.5.110:5000
image_forge_dir=$PWD
tests_dir=$(realpath ../kubernetes-tests)
kubernetes_images=(k8s/kube-apiserver k8s/kube-controller-manager k8s/kube-scheduler k8s/kube-proxy k8s/kubelet)
temp_tasks_config=$(mktemp)
registry_prefix=$branch
if [[ $branch == c10f2 ]]; then
registry_prefix=c10f
fi
api_response=$(curl -s "$api_url")
while read -r subtask; do
package_name=$(jq -r '.source.name' <<< "$subtask")
package_version=$(jq -r '.source.version' <<< "$subtask")
if [[ $package_name =~ ^kubernetes1\.[0-9]{2}$ ]]; then
kubernetes_package_versions[$package_name]=$package_version
elif [[ $package_name =~ ^etcd-for-kubernetes ]]; then
kubernetes_package_versions[$package_name]=$package_version
fi
done < <(jq -c '.subtasks[]' <<< "$api_response")
printf -v kubernetes_images_joined '"%s", ' "${kubernetes_images[@]}"
cat <<EOF > "$temp_tasks_config"
[$branch]
$task_id = [${kubernetes_images_joined%, }]
EOF
r podman login "$test_registry" --username admin --password 123
flannel_tag=$(curl -s "https://registry.altlinux.org/v2/$registry_prefix/flannel/tags/list" | jq -r '.tags[-1]')
r skopeo copy -a "docker://registry.altlinux.org/$registry_prefix/flannel:$flannel_tag" "docker://$test_registry/$registry_prefix/flannel:$flannel_tag"
if [[ ${!kubernetes_package_versions[*]} =~ cni-plugin-flannel ]]; then
r ./build.py \
--branch "$branch" \
--registry registry.altlinux.org \
--overwrite-organization "$registry_prefix" \
--skip-arches riscv64 loong64 \
--skip-stage push \
--log-level debug \
--tasks "$temp_tasks_config" \
-i k8s/flannel-cni-plugin
r podman manifest push "registry.altlinux.org/$registry_prefix/flannel-cni-plugin:v$version" "docker://$test_registry/$registry_prefix/$image_name:v$version"
fi
for name in "${!kubernetes_package_versions[@]}"; do
version=${kubernetes_package_versions[$name]}
images=()
versions='{'
if [[ $name =~ ^kubernetes1\.[0-9]{2}$ ]]; then
images+=("${kubernetes_images[@]}")
for image in "${kubernetes_images[@]}"; do
versions+="\"$image\":\"${version::4}\","
done
fi
if [[ $name =~ ^etcd-for-kubernetes(1\.[0-9]{2})$ ]]; then
images+=("k8s/etcd")
versions+="\"k8s/etcd\":\"${BASH_REMATCH[1]::4}\","
fi
versions="${versions%,}}"
cd "$image_forge_dir"
r ./build.py \
--branch "$branch" \
--registry registry.altlinux.org \
--overwrite-organization "$registry_prefix" \
--skip-arches riscv64 loong64 \
--skip-stage push \
--log-level debug \
--tasks "$temp_tasks_config" \
-i "${images[@]}" \
--package-versions "$versions"
for image in "${images[@]}"; do
image_name=${image:4}
r podman manifest push "registry.altlinux.org/$registry_prefix/$image_name:v$version" "docker://$test_registry/$registry_prefix/$image_name:v$version"
if [[ $image_name == etcd ]]; then
r podman manifest push "registry.altlinux.org/$registry_prefix/$image_name:v$version" "docker://$test_registry/$registry_prefix/$image_name:$version-0"
r podman manifest push "registry.altlinux.org/$registry_prefix/$image_name:v$version" "docker://$test_registry/$registry_prefix/$image_name:$version"
fi
done
done
if [[ =~ ^kubernetes1\.[0-9]{2}$ ]]; then
cd "$tests_dir"
r ./run.sh "$branch" "$version" "$flannel_tag" "$test_registry" "$task_id" iptables
fi