Compare commits

..

12 Commits

Author SHA1 Message Date
c1fa009c67 update 2024-09-26 12:13:23 +03:00
fa48a3aa9a tmp 2024-09-19 22:46:25 +03:00
9fd698fc7a update script sisyphus 2024-09-16 04:03:59 +03:00
28c6154743 update scripts 2024-09-13 12:52:26 +03:00
459b85604f tmp 2024-09-13 12:52:20 +03:00
bf6cad8a0a update readme and help 2024-09-13 12:52:20 +03:00
816c336a74 remove usage examples scripts 2024-09-13 12:52:20 +03:00
525e7d3019 build images from tasks by specifying a task id 2024-09-13 12:52:20 +03:00
549ab0d30b add p10 url 2024-09-13 12:52:20 +03:00
7eabf991a9 udpate build scripts for kubernetes
- Get source package version from the public altlinux api.
- Add build options: --dry-run, --push, --skip-build, --latest
- Separate build and push stages of images
2024-09-13 12:52:20 +03:00
ed94f75c7a [wip] add build scripts for k8s 2024-09-13 12:52:20 +03:00
e1de4abc3c wip 2024-09-13 12:52:20 +03:00
37 changed files with 533 additions and 348 deletions

View File

@ -24,7 +24,10 @@ do
then imgpath="$2-$1/$IM:latest"
fi
entrypoint='/bin/sh'
entrypoint='/usr/bin/sh'
if [[ $1 == 'p10' ]]
then entrypoint='/bin/sh'
fi
command="echo empty_command"
if [[ $test != '' ]]; then

View File

@ -26,13 +26,6 @@ jobs:
env:
GU: ${{ gitea.server_url }}
GR: ${{ gitea.repository }}
- name: Set repo for c10f2 (Temporary)
if: ${{ contains(github.ref_name, 'c10f2') }}
run: |
echo "event tag=${{ github.ref_name }}"
echo "10.4.0.3 update.altsp.su" >> /etc/hosts
echo "cat /etc/hosts"
cat /etc/hosts
- name: Update apt
uses: actions/init-alt-env@v1
- name: Install requires
@ -61,10 +54,7 @@ jobs:
echo $EV | jq '.ref' -r | sed "s/refs\/tags\//BRANCH=/g" | cut -d '_' -f 1 >> ${GITHUB_ENV}
localimage=$(echo $EV | jq '.ref' -r | sed 's/refs\/tags\///g' | cut -d '_' -f 2)
echo "IMAGE=$localimage" >> ${GITHUB_ENV}
echo "IMAGE=$localimage"
org=$(echo "$localimage" | cut -d '/' -f 1)
echo "ORG=$org" >> ${GITHUB_ENV}
echo "ORG=$org"
echo "IMAGE=$localimage"
- name: Get test for image
run: |
if test -f ${{ gitea.workspace }}/org/$IM/test; then testscript=$(cat ${{ gitea.workspace }}/org/$IM/test); else testscript=""; fi
@ -75,13 +65,11 @@ jobs:
- name: Run building script
id: build-script
run: |
if [[ "$IM" == *"k8s"* ]]; then k8sarg="--tags=tags.toml --overwrite-organization $ORG-$BR"; else k8sarg=""; fi
echo "build.py -i $IM -b $BR"
${{ gitea.workspace }}/build.py -i $IM -b $BR $k8sarg
${{ gitea.workspace }}/build.py -i $IM -b $BR
env:
IM: ${{ env.IMAGE }}
BR: ${{ env.BRANCH }}
ORG: ${{ env.ORG }}
continue-on-error: true
- name: Send notification if build crashed
if: ${{ steps.build-script.outcome != 'success' }}
@ -123,7 +111,7 @@ jobs:
if: ${{ needs.build-process.outputs.test != '' }}
continue-on-error: true
run: |
if [[ "$IM" == *"k8s"* ]]; then echo "skip tests for k8s images"; else podman run --rm --entrypoint="/bin/sh" $URL/$IM:$BR -c "$TEST"; fi
if [[ $BR = 'p10' ]]; then podman run --rm --entrypoint="/bin/sh" $URL/$IM:$BR -c "$TEST"; else podman run --rm --entrypoint="/usr/bin/sh" $URL/$IM:$BR -c "$TEST"; fi
env:
IM: ${{ needs.build-process.outputs.image }}
BR: ${{ needs.build-process.outputs.branch }}

View File

@ -1,5 +1,22 @@
# image-forge
## Wrapper
### Examples
From the repository
```shell
image-build -b sisyphus -r registry.altlinux.org --prefix=k8s-sisyphus kube-apiserver kubernetes1.28
```
From a task
```shell
image-build -b sisyphus -r test.registry.altlinux.org -t 335250 --prefix=k8s-sisyphus kube-apiserver kubernetes1.28
```
## alt images
To build `alt` images, run:
```bash
@ -26,64 +43,6 @@ the organization `<ORGANIZATION>`, run:
```
If you push to the users repository, then organiztion is your username.
## info.yaml format
- `is_versioned`: **bool** (REQUIRED)
Whether to use package version as a tag for this image
- `source_packages`: **list of strings** (REQUIRED)
List of source packages (src.rpm) this image depends on.
If contains jinja2 template syntax, `--package-version`
CLI option must be specified.
- `version_template`: **string** (OPTIONAL)
template to apply when construction the tag,
`version` string variable is available in the template
### examples
#### org/k8s/flannel-cni-plugin
```yaml
is_versioned: true
version_template: v{{ version.rsplit('.', 1) | first }}-flannel{{ version.rsplit('.', 1) | last }}
source_packages:
- cni-plugin-flannel
```
```bash
./build.py -i k8s/flannel-cni-plugin
```
#### org/k8s/kube-apiserver
```yaml
is_versioned: true
version_template: v{{ version }}
source_packages:
- kubernetes{{ version }}
```
```bash
./build.py -b sisyphus -i k8s/kube-apiserver --package-version '{"k8s/kube-apiserver": "1.31"}'
```
#### org/k8s/pause
```yaml
is_versioned: true
source_packages:
- kubernetes-pause
```
```bash
./build.py -i k8s/pause
```
## Dependencies
On x86_64 machine using p10 branch you need:
- `python3-module-tomli`

122
build.py
View File

@ -6,61 +6,26 @@ import json
import re
import subprocess
import textwrap
from dataclasses import dataclass
from graphlib import TopologicalSorter
from pathlib import Path
import requests
import tomli
import yaml
from jinja2 import Template
ORG_DIR = Path("org")
PKG_VERSIONS: dict | None = None
PKG_VERSION: str = ""
@dataclass
class Image:
canonical_name: str
is_versioned: bool | None
verion_template: str | None
source_packages: list[str] | None
def __init__(self, canonical_name: str):
def __init__(self, canonical_name):
self.canonical_name = canonical_name
self.path = ORG_DIR / canonical_name
self.base_name = re.sub("^[^/]+/", "", canonical_name)
info_file = self.path / "info.yaml"
if not info_file.exists():
self.is_versioned = None
self.source_packages = None
return
info: dict = yaml.safe_load(info_file.read_text())
if "is_versioned" not in info:
raise RuntimeError(
f"info.yaml for {self.canonical_name} doesn't contain 'is_versioned' key"
)
if "source_packages" not in info:
raise RuntimeError(
f"info.yaml for {self.canonical_name} doesn't contain 'source_packages' key"
)
self.is_versioned = info["is_versioned"]
self.source_packages = info["source_packages"]
if self.is_versioned and not self.source_packages:
raise RuntimeError(
f"source_packages for {self.canonical_name} doesn't contain any values"
)
self.version_template = None
if "version_template" in info:
self.version_template = info["version_template"]
def __str__(self):
return (f'Image(canonical_name="{self.canonical_name}", '
f'path="{self.path}", base_name="{self.base_name}")')
class Tasks:
@ -85,67 +50,18 @@ class Tasks:
]
def api_get_source_package_version(branch: str, package_name: str) -> str:
api_url = "https://rdb.altlinux.org/api/site/package_versions_from_tasks"
params = {"branch": branch, "name": package_name}
response = requests.get(api_url, params)
if response.status_code != 200:
print(response)
raise RuntimeError(
f"failed to retrieve source package version: source package {package_name!r}, branch {branch!r} "
)
result = response.json()
return result["versions"][0]["version"]
class Tags:
def __init__(self, tags_file: str | None, latest: str):
def __init__(self, tags_file, latest):
if tags_file is None:
self._tags = None
else:
self._tags = tomli.loads(Path(tags_file).read_text())
tags_file = Path(tags_file)
self._tags = tomli.loads(tags_file.read_text())
self._latest = latest
def tags(self, branch: str, image: Image):
def tags(self, branch, image: Image):
if self._tags is None:
if image.is_versioned and image.source_packages:
package_name = image.source_packages[0]
if re.search("{%.*%}", package_name):
package_name = Template(package_name).render(branch=branch).strip()
print(f"{package_name=}")
if re.search("{{.*}}", package_name):
if PKG_VERSIONS is None:
raise RuntimeError(
f"--package-versions option is not specified, required for {image.canonical_name!r}"
)
if image.canonical_name not in PKG_VERSIONS:
raise RuntimeError(
f"--package-versions option does not contain version for image {image.canonical_name!r}"
)
if not PKG_VERSIONS[image.canonical_name]:
raise RuntimeError(
f"invalid version for image {image.canonical_name!r}: {PKG_VERSIONS[image.canonical_name]!r}"
)
package_name = Template(package_name).render(
version=PKG_VERSIONS[image.canonical_name]
)
version = api_get_source_package_version(branch, package_name)
if image.version_template is not None:
version = (
Template(image.version_template).render(version=version).strip()
)
tags = [version]
else:
tags = [branch]
tags = [branch]
else:
tags = self._tags[image.canonical_name][branch].copy()
if branch == self._latest:
@ -663,14 +579,9 @@ class DockerBuilder:
"--force-rm",
f"--manifest={manifest}",
f"--platform={platforms}",
f'--build-arg=PKG_VERSION={PKG_VERSION}',
".",
]
if PKG_VERSIONS is not None and image.canonical_name in PKG_VERSIONS:
build_cmd.insert(
-1, f"--build-arg=PKG_VERSION={PKG_VERSIONS[image.canonical_name]}"
)
self.run(build_cmd, cwd=image.path)
for tag in tags[1:]:
@ -841,9 +752,8 @@ def parse_args():
help="list of stages to skip",
)
parser.add_argument(
"--package-versions",
type=json.loads,
help="json string where key is image name, value is the package version",
"--package-version",
help="from which package to build",
)
args = parser.parse_args()
@ -856,10 +766,10 @@ def parse_args():
def main():
global PKG_VERSIONS
global PKG_VERSION
args = parse_args()
PKG_VERSIONS = args.package_versions
PKG_VERSION = args.package_version
arches = args.arches
images_info = ImagesInfo()
tags = Tags(args.tags, args.latest)

328
image-build Executable file
View File

@ -0,0 +1,328 @@
#!/bin/sh
set -uo pipefail
PROG='image-build'
HELP_MSG="$(cat <<EOF
$PROG - build an OCI image from a package
Usage: $PROG [options] <image name> <package name>
Options:
-b <branch> package repository branch
-r <registry> OCI destination registry
-t <task id> task id
--latest also tag this image as latest
--push push the image to the registry after build
--skip-build if push is true, then skip the build stage
--dry-run only print what would be done
--prefix <prefix> image name prefix
--help show this text and exit
Notes:
The image is only pushed to the destination registry
if the option --push is present.
EOF
)"
function show_help() {
printf '%s' "$HELP_MSG"
exit
}
function show_usage() {
echo "$PROG: $1" >&2
echo "Try \`image-build --help' for more information." >&2
exit 1
}
TEMP="$(getopt -n "$PROG" -o b:r:t: -l help,latest,push,skip-build,dry-run,prefix:: -- "$@")" || show_usage ""
eval set -- "$TEMP"
branch='sisyphus'
registry='registry.altlinux.org'
task_id=
latest=
push=
skip_build=
dry_run=
prefix=
while :; do
case "$1" in
--) shift; break ;;
-b) shift; branch="$1" ;;
-r) shift; registry="$1" ;;
-t) shift; task_id="$1" ;;
--latest) latest="1" ;;
--push) push="1" ;;
--skip-build) skip_build="1" ;;
--dry-run) dry_run="1" ;;
--prefix) shift; prefix="$1" ;;
-h|--help) show_help ;;
*) show_usage "unrecognized option: $1" ;;
esac
shift
done
[ "$#" -ge 2 ] || show_usage "not enough arguments"
image="$1"
package="$2"
declare -A package_urls
package_urls["c10f2"]="http://update.altsp.su/pub/distributions/ALTLinux/c10f2/branch/files/x86_64/RPMS/"
package_urls["p10"]="http://ftp.altlinux.org/pub/distributions/archive/p10/release/latest/files/x86_64/RPMS/"
package_urls["sisyphus"]="http://ftp.altlinux.org/pub/distributions/archive/sisyphus/latest/files/x86_64/RPMS/"
function handle_error() {
echo "$PROG: $1" >&2
exit 2
}
function get_binary_package_version() {
local branch="$1"
local package="$2"
local line;
line="$(curl -s "${package_urls["$branch"]}" | grep "$package")"
[ "$?" -eq 0 ] || handle_error "package not found: $package"
local version;
version="$(echo "$line" | sed -E "s/.*href=\"$package-(.+)-.+\".+/\1/")"
[ "$?" -eq 0 ] || handle_error "package version not found: $package"
echo "$version"
}
function api_get_source_package_version() {
local branch="$1"
local package="$2"
local version;
version="$(curl -s "https://rdb.altlinux.org/api/site/package_versions_from_tasks?branch=$branch&name=$package" | jq -e -r '.versions[0].version')"
[ "$?" -eq 0 ] || handle_error "error getting package version: no package $package for branch $branch"
echo "$version"
}
function api_get_source_package_version_from_task() {
local task_id="$1"
local package="$2"
local version;
version="$(curl -s "https://rdb.altlinux.org/api/task/packages/$task_id" | jq -e -r --arg package "$package" '.subtasks[].source | select(.name == $package).version')"
[ "$?" -eq 0 ] || handle_error "error getting package version: no package $package in task $task_id"
echo "$version"
}
function string_count() {
local substring="$1"
awk -F"$substring" '{ print NF-1 }'
}
case "$image" in
'etcd' | \
'flannel' | \
'flannel-cni-plugin' | \
'pause' | \
'cert-manager-acmesolver' | \
'cert-manager-cainjector' | \
'cert-manager-controller' | \
'cert-manager-startupapicheck' | \
'cert-manager-webhook')
image="k8s/$image"
version=
additional_options=
if [ -n "$task_id" ]; then
version="$(api_get_source_package_version_from_task "$task_id" "$package")"
[ "$?" -eq 0 ] || handle_error "error getting remote rpm package version: $package, task: $task_id"
tasks_file='/tmp/k8s-tasks.toml'
jq --null-input --arg branch "$branch" --arg task_id "$task_id" --arg image "$image" '{
$branch: {$task_id: [$image]},
}' | dasel -r json -w toml > "$tasks_file"
additional_options+="--tasks $tasks_file "
else
version="$(api_get_source_package_version "$branch" "$package")"
[ "$?" -eq 0 ] || handle_error "error getting remote rpm package version: $package, branch: $branch"
fi
tags_file="/tmp/k8s-tags.toml"
case "$image" in
'k8s/flannel-cni-plugin')
num_dots="$(echo "$version" | string_count '.')"
if [ "$num_dots" -eq 2 ]; then
jq --null-input --arg image "$image" --arg branch "$branch" --arg version "v$version-flannel1" '{
$image: {$branch: [$version]},
}' | dasel -r json -w toml > "$tags_file"
elif [ "$num_dots" -eq 3 ]; then
# up to the last number in version
flannel_version="${version%.*}"
# the last number in version
flannel_release="${version##*.}"
jq --null-input --arg image "$image" --arg branch "$branch" --arg version "v$flannel_version-flannel$flannel_release" '{
$image: {$branch: [$version]},
}' | dasel -r json -w toml > "$tags_file"
else
handle_error "wrong version for package $package: $version"
fi
;;
'k8s/etcd')
jq --null-input --arg image "$image" --arg branch "$branch" --arg version "$version-0" '{
$image: {$branch: [$version]},
}' | dasel -r json -w toml > "$tags_file"
;;
'k8s/pause')
jq --null-input --arg image "$image" --arg branch "$branch" --arg version "$version" '{
$image: {$branch: [$version]},
}' | dasel -r json -w toml > "$tags_file"
;;
*)
jq --null-input --arg image "$image" --arg branch "$branch" --arg version "v$version" '{
$image: {$branch: [$version]},
}' | dasel -r json -w toml > "$tags_file"
;;
esac
if [ -n "$latest" ]; then
additional_options+="--latest $branch "
fi
if [ -z "$push" ]; then
additional_options+='--skip-stages push '
elif [ -n "$skip_build" ]; then
additional_options+='--stages push '
fi
if [ -n "$dry_run" ]; then
additional_options+='--dry-run '
fi
./build.py \
--branch "$branch" \
--registry "$registry" \
--overwrite-organization "$prefix" \
--images "$image" \
--tags "$tags_file" \
$additional_options
;;
'coredns')
image="k8s/$image"
version=
additional_options=
if [ -n "$task_id" ]; then
version="$(api_get_source_package_version_from_task "$task_id" "$package")"
[ "$?" -eq 0 ] || handle_error "error getting remote rpm package version: $package, task: $task_id"
tasks_file='/tmp/k8s-tasks.toml'
jq --null-input --arg branch "$branch" --arg task_id "$task_id" --arg image "$image" '{
$branch: {$task_id: [$image]},
}' | dasel -r json -w toml > "$tasks_file"
additional_options+="--tasks $tasks_file "
else
version="$(api_get_source_package_version "$branch" "$package")"
[ "$?" -eq 0 ] || handle_error "error getting remote rpm package version: $package, branch: $branch"
fi
# if binary package
#version_str="$(echo "$package" | sed -E 's/kubernetes(.+)-.+/\1/')"
#[ "$?" -eq 0 ] || handle_error "error getting specified rpm package version: $package"
# if source package
version_str="$(echo "$package" | sed -E 's/coredns(.+)/\1/')"
[ "$?" -eq 0 ] || handle_error "error getting specified rpm package version: $package"
tags_file="/tmp/k8s-tags.toml"
jq --null-input --arg image "$image" --arg branch "$branch" --arg version "v$version" '{
$image: {$branch: [$version]},
}' | dasel -r json -w toml > "$tags_file"
if [ -n "$latest" ]; then
additional_options+="--latest $branch "
fi
if [ -z "$push" ]; then
additional_options+="--skip-stages push "
elif [ -n "$skip_build" ]; then
additional_options+="--stages push "
fi
if [ -n "$dry_run" ]; then
additional_options+="--dry-run "
fi
./build.py \
--branch "$branch" \
--registry "$registry" \
--overwrite-organization "$prefix" \
--images "$image" \
--tags "$tags_file" \
--package-version "$version_str" \
$additional_options
;;
'kube-apiserver' | 'kube-controller-manager' | 'kube-scheduler' | 'kube-proxy')
image="k8s/$image"
version=
additional_options=
if [ -n "$task_id" ]; then
version="$(api_get_source_package_version_from_task "$task_id" "$package")"
[ "$?" -eq 0 ] || handle_error "error getting remote rpm package version: $package, task: $task_id"
tasks_file='/tmp/k8s-tasks.toml'
jq --null-input --arg branch "$branch" --arg task_id "$task_id" --arg image "$image" '{
$branch: {$task_id: [$image]},
}' | dasel -r json -w toml > "$tasks_file"
additional_options+="--tasks $tasks_file "
else
version="$(api_get_source_package_version "$branch" "$package")"
[ "$?" -eq 0 ] || handle_error "error getting remote rpm package version: $package, branch: $branch"
fi
# if binary package
#version_str="$(echo "$package" | sed -E 's/kubernetes(.+)-.+/\1/')"
#[ "$?" -eq 0 ] || handle_error "error getting specified rpm package version: $package"
# if source package
version_str="$(echo "$package" | sed -E 's/kubernetes(.+)/\1/')"
[ "$?" -eq 0 ] || handle_error "error getting specified rpm package version: $package"
tags_file="/tmp/k8s-tags.toml"
jq --null-input --arg image "$image" --arg branch "$branch" --arg version "v$version" '{
$image: {$branch: [$version]},
}' | dasel -r json -w toml > "$tags_file"
if [ -n "$latest" ]; then
additional_options+="--latest $branch "
fi
if [ -z "$push" ]; then
additional_options+="--skip-stages push "
elif [ -n "$skip_build" ]; then
additional_options+="--stages push "
fi
if [ -n "$dry_run" ]; then
additional_options+="--dry-run "
fi
./build.py \
--branch "$branch" \
--registry "$registry" \
--overwrite-organization "$prefix" \
--images "$image" \
--tags "$tags_file" \
--package-version "$version_str" \
$additional_options
;;
esac

View File

@ -5,4 +5,4 @@ skip-branches = [ "p9" ]
skip-arches = [ "386" ]
["alt/ansible"]
skip-branches = [ "c10f2", "c10f1", "p10" ]
skip-arches = [ "c10f2", "c10f1" ]

View File

@ -2,6 +2,12 @@ FROM {{ registry }}{{ alt_image }}:{{ branch }}
MAINTAINER alt-cloud
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="ALT Linux Team"
{{ install_packages("cert-manager") }}
RUN groupadd -r -g 1000 cert-manger && useradd --no-log-init -r -u 1000 -g cert-manger cert-manger
@ -9,9 +15,3 @@ RUN groupadd -r -g 1000 cert-manger && useradd --no-log-init -r -u 1000 -g cert-
USER 1000
ENTRYPOINT ["/usr/bin/acmesolver"]
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="ALT Linux Team"

View File

@ -1,6 +0,0 @@
---
is_versioned: true
version_template: v{{ version }}
source_packages:
- cert-manager
...

View File

@ -2,6 +2,12 @@ FROM {{ registry }}{{ alt_image }}:{{ branch }}
MAINTAINER alt-cloud
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="ALT Linux Team"
{{ install_packages("cert-manager") }}
RUN groupadd -r -g 1000 cert-manger && useradd --no-log-init -r -u 1000 -g cert-manger cert-manger
@ -9,9 +15,3 @@ RUN groupadd -r -g 1000 cert-manger && useradd --no-log-init -r -u 1000 -g cert-
USER 1000
ENTRYPOINT ["/usr/bin/cainjector"]
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="ALT Linux Team"

View File

@ -1,6 +0,0 @@
---
is_versioned: true
version_template: v{{ version }}
source_packages:
- cert-manager
...

View File

@ -2,6 +2,12 @@ FROM {{ registry }}{{ alt_image }}:{{ branch }}
MAINTAINER alt-cloud
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="ALT Linux Team"
{{ install_packages("cert-manager") }}
RUN groupadd -r -g 1000 cert-manger && useradd --no-log-init -r -u 1000 -g cert-manger cert-manger
@ -9,9 +15,3 @@ RUN groupadd -r -g 1000 cert-manger && useradd --no-log-init -r -u 1000 -g cert-
USER 1000
ENTRYPOINT ["/usr/bin/controller"]
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="ALT Linux Team"

View File

@ -1,6 +0,0 @@
---
is_versioned: true
version_template: v{{ version }}
source_packages:
- cert-manager
...

View File

@ -2,6 +2,12 @@ FROM {{ registry }}{{ alt_image }}:{{ branch }}
MAINTAINER alt-cloud
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="ALT Linux Team"
{{ install_packages("cert-manager") }}
RUN groupadd -r -g 1000 cert-manger && useradd --no-log-init -r -u 1000 -g cert-manger cert-manger
@ -9,9 +15,3 @@ RUN groupadd -r -g 1000 cert-manger && useradd --no-log-init -r -u 1000 -g cert-
USER 1000
ENTRYPOINT ["/usr/bin/startupapicheck"]
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="ALT Linux Team"

View File

@ -1,6 +0,0 @@
---
is_versioned: true
version_template: v{{ version }}
source_packages:
- cert-manager
...

View File

@ -2,6 +2,12 @@ FROM {{ registry }}{{ alt_image }}:{{ branch }}
MAINTAINER alt-cloud
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="ALT Linux Team"
{{ install_packages("cert-manager") }}
RUN groupadd -r -g 1000 cert-manger && useradd --no-log-init -r -u 1000 -g cert-manger cert-manger
@ -9,9 +15,3 @@ RUN groupadd -r -g 1000 cert-manger && useradd --no-log-init -r -u 1000 -g cert-
USER 1000
ENTRYPOINT ["/usr/bin/webhook"]
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="ALT Linux Team"

View File

@ -1,6 +0,0 @@
---
is_versioned: true
version_template: v{{ version }}
source_packages:
- cert-manager
...

View File

@ -8,13 +8,8 @@ LABEL org.opencontainers.image.source="https://github.com/coredns/coredns"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.vendor="ALT Linux Team"
{% if branch in ["sisyphus", "p11", "c10f2"] %}
ARG PKG_VERSION
{{ install_packages("coredns${PKG_VERSION}") }}
{% else %}
{{ install_packages("coredns") }}
{% endif %}
ENTRYPOINT ["/usr/bin/coredns"]

View File

@ -1,11 +0,0 @@
---
is_versioned: true
version_template: v{{ version }}
source_packages:
- >
{% if branch in ["sisyphus", "p11", "c10f2"] %}
{% raw %}coredns{{ version }}{% endraw %}
{% else %}
coredns
{% endif %}
...

View File

@ -1,12 +0,0 @@
---
is_versioned: true
version_template: >
{% set version_patch = version.split(".")[2] | int %}
{% if version_patch < 16 %}
{{ version }}-0
{% else %}
v{{ version }}
{% endif %}
source_packages:
- etcd
...

View File

@ -1,6 +0,0 @@
---
is_versioned: true
version_template: v{{ version.rsplit('.', 1) | first }}-flannel{{ version.rsplit('.', 1) | last }}
source_packages:
- cni-plugin-flannel
...

View File

@ -1,4 +0,0 @@
is_versioned: true
version_template: v{{ version }}
source_packages:
- flannel

View File

@ -2,14 +2,14 @@ FROM {{ registry }}{{ alt_image }}:{{ branch }}
MAINTAINER alt-cloud
ARG PKG_VERSION
{{ install_packages("kubernetes${PKG_VERSION}-master") }}
ENTRYPOINT ["/usr/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."
LABEL org.opencontainers.image.source="https://github.com/kubernetes/kubernetes"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.vendor="ALT Linux Team"
ARG PKG_VERSION
{{ install_packages("kubernetes${PKG_VERSION}-master") }}
ENTRYPOINT ["/usr/bin/kube-apiserver"]

View File

@ -1,6 +0,0 @@
---
is_versioned: true
version_template: v{{ version }}
source_packages:
- kubernetes{{ version }}
...

View File

@ -2,14 +2,14 @@ FROM {{ registry }}{{ alt_image }}:{{ branch }}
MAINTAINER alt-cloud
ARG PKG_VERSION
{{ install_packages("kubernetes${PKG_VERSION}-master") }}
ENTRYPOINT ["/usr/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."
LABEL org.opencontainers.image.source="https://github.com/kubernetes/kubernetes"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.vendor="ALT Linux Team"
ARG PKG_VERSION
{{ install_packages("kubernetes${PKG_VERSION}-master") }}
ENTRYPOINT ["/usr/bin/kube-controller-manager"]

View File

@ -1,6 +0,0 @@
---
is_versioned: true
version_template: v{{ version }}
source_packages:
- kubernetes{{ version }}
...

View File

@ -2,6 +2,12 @@ FROM {{ registry }}{{ alt_image }}:{{ branch }}
MAINTAINER alt-cloud
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="ALT Linux Team"
ARG PKG_VERSION
{{ install_packages("kubernetes${PKG_VERSION}-node") }}
@ -9,9 +15,3 @@ ARG PKG_VERSION
RUN ln -s /usr/bin/kube-proxy /usr/local/bin/kube-proxy
ENTRYPOINT ["/usr/bin/kube-proxy"]
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="ALT Linux Team"

View File

@ -1,6 +0,0 @@
---
is_versioned: true
version_template: v{{ version }}
source_packages:
- kubernetes{{ version }}
...

View File

@ -2,14 +2,14 @@ FROM {{ registry }}{{ alt_image }}:{{ branch }}
MAINTAINER alt-cloud
ARG PKG_VERSION
{{ install_packages("kubernetes${PKG_VERSION}-master") }}
ENTRYPOINT ["/usr/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."
LABEL org.opencontainers.image.source="https://github.com/kubernetes/kubernetes"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.vendor="ALT Linux Team"
ARG PKG_VERSION
{{ install_packages("kubernetes${PKG_VERSION}-master") }}
ENTRYPOINT ["/usr/bin/kube-scheduler"]

View File

@ -1,6 +0,0 @@
---
is_versioned: true
version_template: v{{ version }}
source_packages:
- kubernetes{{ version }}
...

View File

@ -1,6 +0,0 @@
---
is_versioned: true
version_template: v{{ version }}
source_packages:
- kubernetes{{ version }}
...

View File

@ -1,5 +0,0 @@
---
is_versioned: true
source_packages:
- kubernetes-pause
...

View File

@ -9,8 +9,7 @@ LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.vendor="ALT Linux Team"
{{ install_packages(
"k8s-trivy-node-collector",
"procps"
"k8s-trivy-node-collector"
) }}
RUN ln -s /usr/bin/k8s-trivy-node-collector /usr/bin/node-collector

View File

@ -1,5 +0,0 @@
---
is_versioned: true
source_packages:
- k8s-trivy-node-collector
...

46
scripts/build-k8s-c10f2.sh Executable file
View File

@ -0,0 +1,46 @@
#!/bin/sh
set -eu
registry='registry.altlinux.org'
#registry='10.4.4.52:5000'
task_id=
additional_options=
if [ -n "$task_id" ]; then
additional_options="-t $task_id"
fi
./image-build -b c10f2 -r "$registry" $additional_options --prefix=k8s-c10f2 kube-apiserver kubernetes1.28
./image-build -b c10f2 -r "$registry" $additional_options --prefix=k8s-c10f2 kube-controller-manager kubernetes1.28
./image-build -b c10f2 -r "$registry" $additional_options --prefix=k8s-c10f2 kube-scheduler kubernetes1.28
./image-build -b c10f2 -r "$registry" $additional_options --prefix=k8s-c10f2 kube-proxy kubernetes1.28
./image-build -b c10f2 -r "$registry" $additional_options --prefix=k8s-c10f2 kube-apiserver kubernetes1.29
./image-build -b c10f2 -r "$registry" $additional_options --prefix=k8s-c10f2 kube-controller-manager kubernetes1.29
./image-build -b c10f2 -r "$registry" $additional_options --prefix=k8s-c10f2 kube-scheduler kubernetes1.29
./image-build -b c10f2 -r "$registry" $additional_options --prefix=k8s-c10f2 kube-proxy kubernetes1.29
./image-build -b c10f2 -r "$registry" $additional_options --prefix=k8s-c10f2 kube-apiserver kubernetes1.30
./image-build -b c10f2 -r "$registry" $additional_options --prefix=k8s-c10f2 kube-controller-manager kubernetes1.30
./image-build -b c10f2 -r "$registry" $additional_options --prefix=k8s-c10f2 kube-scheduler kubernetes1.30
./image-build -b c10f2 -r "$registry" $additional_options --prefix=k8s-c10f2 kube-proxy kubernetes1.30
./image-build --latest -b c10f2 -r "$registry" $additional_options --prefix=k8s-c10f2 kube-apiserver kubernetes1.31
./image-build --latest -b c10f2 -r "$registry" $additional_options --prefix=k8s-c10f2 kube-controller-manager kubernetes1.31
./image-build --latest -b c10f2 -r "$registry" $additional_options --prefix=k8s-c10f2 kube-scheduler kubernetes1.31
./image-build --latest -b c10f2 -r "$registry" $additional_options --prefix=k8s-c10f2 kube-proxy kubernetes1.31
./image-build --latest -b c10f2 -r "$registry" $additional_options --prefix=k8s-c10f2 etcd etcd
./image-build -b c10f2 -r "$registry" $additional_options --prefix=k8s-c10f2 coredns coredns1.11.1
./image-build --latest -b c10f2 -r "$registry" $additional_options --prefix=k8s-c10f2 coredns coredns1.11.3
./image-build --latest -b c10f2 -r "$registry" $additional_options --prefix=k8s-c10f2 pause kubernetes-pause
#./image-build --latest -b c10f2 -r "$registry" $additional_options --prefix=k8s-c10f2 flannel flannel
#./image-build --latest -b c10f2 -r "$registry" $additional_options --prefix=k8s-c10f2 flannel-cni-plugin cni-plugin-flannel
#./image-build --latest -b c10f2 -r "$registry" $additional_options --prefix=k8s-c10f2 cert-manager-startupapicheck cert-manager
#./image-build --latest -b c10f2 -r "$registry" $additional_options --prefix=k8s-c10f2 cert-manager-acmesolver cert-manager
#./image-build --latest -b c10f2 -r "$registry" $additional_options --prefix=k8s-c10f2 cert-manager-cainjector cert-manager
#./image-build --latest -b c10f2 -r "$registry" $additional_options --prefix=k8s-c10f2 cert-manager-controller cert-manager
#./image-build --latest -b c10f2 -r "$registry" $additional_options --prefix=k8s-c10f2 cert-manager-webhook cert-manager

44
scripts/build-k8s-sisyphus.sh Executable file
View File

@ -0,0 +1,44 @@
#!/bin/sh
set -eu
registry='registry.altlinux.org'
#registry='10.4.4.52:5000'
task_id=
additional_options=
if [ -n "$task_id" ]; then
additional_options="-t $task_id"
fi
./image-build -b sisyphus -r "$registry" $additional_options --prefix=k8s-sisyphus kube-apiserver kubernetes1.28
./image-build -b sisyphus -r "$registry" $additional_options --prefix=k8s-sisyphus kube-controller-manager kubernetes1.28
./image-build -b sisyphus -r "$registry" $additional_options --prefix=k8s-sisyphus kube-scheduler kubernetes1.28
./image-build -b sisyphus -r "$registry" $additional_options --prefix=k8s-sisyphus kube-proxy kubernetes1.28
./image-build -b sisyphus -r "$registry" $additional_options --prefix=k8s-sisyphus kube-apiserver kubernetes1.29
./image-build -b sisyphus -r "$registry" $additional_options --prefix=k8s-sisyphus kube-controller-manager kubernetes1.29
./image-build -b sisyphus -r "$registry" $additional_options --prefix=k8s-sisyphus kube-scheduler kubernetes1.29
./image-build -b sisyphus -r "$registry" $additional_options --prefix=k8s-sisyphus kube-proxy kubernetes1.29
./image-build -b sisyphus -r "$registry" $additional_options --prefix=k8s-sisyphus kube-apiserver kubernetes1.30
./image-build -b sisyphus -r "$registry" $additional_options --prefix=k8s-sisyphus kube-controller-manager kubernetes1.30
./image-build -b sisyphus -r "$registry" $additional_options --prefix=k8s-sisyphus kube-scheduler kubernetes1.30
./image-build -b sisyphus -r "$registry" $additional_options --prefix=k8s-sisyphus kube-proxy kubernetes1.30
./image-build --latest -b sisyphus -r "$registry" $additional_options --prefix=k8s-sisyphus kube-apiserver kubernetes1.31
./image-build --latest -b sisyphus -r "$registry" $additional_options --prefix=k8s-sisyphus kube-controller-manager kubernetes1.31
./image-build --latest -b sisyphus -r "$registry" $additional_options --prefix=k8s-sisyphus kube-scheduler kubernetes1.31
./image-build --latest -b sisyphus -r "$registry" $additional_options --prefix=k8s-sisyphus kube-proxy kubernetes1.31
./image-build --latest -b sisyphus -r "$registry" $additional_options --prefix=k8s-sisyphus etcd etcd
./image-build --latest -b sisyphus -r "$registry" $additional_options --prefix=k8s-sisyphus coredns coredns1.11.3
./image-build --latest -b sisyphus -r "$registry" $additional_options --prefix=k8s-sisyphus pause kubernetes-pause
#./image-build --latest -b sisyphus -r "$registry" $additional_options --prefix=k8s-sisyphus flannel flannel
#./image-build --latest -b sisyphus -r "$registry" $additional_options --prefix=k8s-sisyphus flannel-cni-plugin cni-plugin-flannel
#./image-build --latest -b sisyphus -r "$registry" $additional_options --prefix=k8s-sisyphus cert-manager-startupapicheck cert-manager
#./image-build --latest -b sisyphus -r "$registry" $additional_options --prefix=k8s-sisyphus cert-manager-acmesolver cert-manager
#./image-build --latest -b sisyphus -r "$registry" $additional_options --prefix=k8s-sisyphus cert-manager-cainjector cert-manager
#./image-build --latest -b sisyphus -r "$registry" $additional_options --prefix=k8s-sisyphus cert-manager-controller cert-manager
#./image-build --latest -b sisyphus -r "$registry" $additional_options --prefix=k8s-sisyphus cert-manager-webhook cert-manager

17
scripts/notify.sh Executable file
View File

@ -0,0 +1,17 @@
#!/bin/sh
set -xeuo pipefail
command="$1"
function at_err() {
mpv -really-quiet /usr/share/sounds/freedesktop/stereo/dialog-error.oga &
notify-send -a "$command" "Failed to execute '$command'!"
}
trap at_err ERR
$command
mpv -really-quiet /usr/share/sounds/freedesktop/stereo/complete.oga &
notify-send -a "$command" "Done executing '$command'!"

View File

@ -82,7 +82,6 @@ c10f2 = [ "v1.1.2" ]
["k8s/trivy-node-collector"]
p10 = [ "0.0.9" ]
p11 = [ "0.3.1" ]
sisyphus = [ "0.3.1" ]
sisyphus = [ "0.0.9" ]
c10f1 = [ "0.0.9" ]
c10f2 = [ "0.3.1" ]
c10f2 = [ "0.0.9" ]