1 Commits

Author SHA1 Message Date
444f185fc5 Add support for versioned building from tasks 2025-03-19 22:43:19 +03:00
26 changed files with 127 additions and 526 deletions

View File

@ -1,74 +0,0 @@
#!/usr/bin/env python3
import argparse
import json
import subprocess
vers_path = ".gitea/workflows/k8s_vers.json"
def run(args):
result = subprocess.run(
args,
capture_output = True,
text = True
)
if result.stderr is not None:
print(result.stderr)
return False
print(result.stdout)
return True
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
)
parser.add_argument(
"--branch",
help="used to pick the appropriate VM template to clone",
choices=["sisyphus", "c10f2", "p10", "p11"],
)
parser.add_argument(
"--other-build-args",
help="other build arg as a string",
)
parser.add_argument(
"--workspace",
help="workspace, path to builing script",
)
return parser.parse_args()
def main() -> None:
args = parse_args()
if args.branch is None or args.branch == "":
raise RuntimeError("Empty branch setting. Check your choise --branch.")
data = {}
with open(f"{args.workspace}/{vers_path}", "r") as f:
data = json.load(f)
i = 0
for br in data.get("branches"):
if br.get("name") == args.branch:
break
i += 1
vers_branch = data.get("branches")[i].get("versions")
if vers_branch == None :
raise RuntimeError(f"Unknown branch: {args.branch!r}. In {vers_path} no k8s-versions list.")
images_to_rebuild="k8s/kube-apiserver k8s/kube-scheduler k8s/kube-controller-manager k8s/kube-proxy k8s/kubelet k8s/coredns k8s/etcd"
for ver in vers_branch:
kube_ver = ver.get("kube-version")
dns_ver = ver.get("coredns")
if kube_ver != None and dns_ver != None:
packs_string=f"-b {args.branch} " + "--package-versions '{\"k8s/kube-apiserver\":" + f"\"{kube_ver}\",\"k8s/kube-scheduler\":\"{kube_ver}\",\"k8s/kube-controller-manager\":\"{kube_ver}\",\"k8s/kube-proxy\":\"{kube_ver}\",\"k8s/kubelet\":\"{kube_ver}\",\"k8s/coredns\":\"{dns_ver}\",\"k8s/etcd\":\"{kube_ver}\"" + "}'"
if ver.get("latest") != None and ver.get("latest"):
packs_string=f"-o k8s --latest {args.branch} "+packs_string
else:
packs_string=f"-i {images_to_rebuild} "+packs_string
subprocess.run(f"{args.workspace}/build.py {args.other_build_args} {packs_string}", shell=True)
subprocess.run("podman rmi -f --all", shell=True)
if __name__ == "__main__":
main()

View File

@ -1,72 +0,0 @@
{
"branches": [
{
"name": "p10",
"versions": [
{
"kube-version": "1.27",
"coredns": "1.10.1"
},
{
"kube-version": "1.28",
"coredns": "1.10.1",
"latest": true
}
]
},
{
"name": "p11",
"versions": [
{
"kube-version": "1.31",
"coredns": "1.11.3"
},
{
"kube-version": "1.32",
"coredns": "1.11.3"
},
{
"kube-version": "1.33",
"coredns": "1.33",
"latest": true
}
]
},
{
"name": "c10f2",
"versions": [
{
"kube-version": "1.31",
"coredns": "1.11.3"
},
{
"kube-version": "1.32",
"coredns": "1.11.3"
},
{
"kube-version": "1.33",
"coredns": "1.33",
"latest": true
}
]
},
{
"name": "sisyphus",
"versions": [
{
"kube-version": "1.31",
"coredns": "1.11.3"
},
{
"kube-version": "1.32",
"coredns": "1.11.3"
},
{
"kube-version": "1.33",
"coredns": "1.33",
"latest": true
}
]
}
]
}

View File

@ -32,20 +32,20 @@ do
if [ -n "$test" ]; then
command="podman run --rm --entrypoint=\"$entrypoint\" $url/$imgpath -c \"$test\""
else
if [ "$IM" = distroless-toybox ]; then
command="podman run -q --rm $url/$imgpath toysh -c true"
if [[ "$IM" == distroless-toybox ]]; then
command="podman run --rm $url/$imgpath toysh -c true"
fi
if [ "$IM" = distroless-true ]; then
command="podman run -q --rm $url/$imgpath \"true\""
command="podman run --rm $url/$imgpath \"true\""
fi
if [ "$IM" = distroless-gotop ]; then
command="podman run -q --rm $url/$imgpath \"--version\""
command="podman run --rm $url/$imgpath \"--version\""
fi
if [ "$IM" = flannel-cni-plugin ]; then
command="podman run -q --rm $url/$imgpath \"/flannel\""
command="podman run --rm $url/$imgpath \"/flannel\""
fi
if [ "$IM" == pause ]; then
command="podman run -q --rm $url/$imgpath \"/pause\" \"-v\""
command="podman run --rm $url/$imgpath \"/pause\" \"-v\""
fi
fi
echo $command
@ -58,7 +58,7 @@ do
then
if [[ -n $(cat $IM.log) ]]
then errors="TEST ERROR OF IMAGE $IM: $(cat $IM.log); $errors"
#else errors="TEST ERROR OF IMAGE $IM: test returned empty error, but exit status was nozero; $errors"
else errors="TEST ERROR OF IMAGE $IM: test returned empty error, but exit status was nozero; $errors"
fi
fi
haserr=false

View File

@ -3,7 +3,6 @@ on:
push:
tags:
- '*_*'
- '!*_k8s'
jobs:
build-process:
@ -15,14 +14,6 @@ jobs:
repo: ${{ env.REPO }}
buildres: ${{ steps.build-script.outcome }}
steps:
- name: Update apt
uses: actions/init-alt-env@v1
- name: Install requires
run: |
echo "apt-get install -y python3-module-tomli python3-module-jinja2 python3-module-yaml python3-module-requests podman buildah jq curl"
apt-get install -y python3-module-tomli python3-module-jinja2 python3-module-yaml python3-module-requests podman buildah jq curl
echo "apt-get install -y qemu-user-static-binfmt-aarch64 qemu-user-static-binfmt-arm qemu-user-static-binfmt-riscv qemu-user-static-binfmt-loongarch"
apt-get install -y qemu-user-static-binfmt-aarch64 qemu-user-static-binfmt-arm qemu-user-static-binfmt-riscv qemu-user-static-binfmt-loongarch
- name: Check workspace
run: |
repourl=$(echo $GU | cut -d '/' -f 3)
@ -34,6 +25,23 @@ 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
run: |
echo "apt-get install -y python3-module-tomli python3-module-jinja2 python3-module-yaml python3-module-requests podman buildah jq curl"
apt-get install -y python3-module-tomli python3-module-jinja2 python3-module-yaml python3-module-requests podman buildah jq curl
echo "apt-get install -y qemu-user-static-binfmt-aarch64 qemu-user-static-binfmt-arm qemu-user-static-binfmt-ppc qemu-user-static-binfmt-riscv qemu-user-static-binfmt-loongarch"
apt-get install -y qemu-user-static-binfmt-aarch64 qemu-user-static-binfmt-arm qemu-user-static-binfmt-ppc qemu-user-static-binfmt-riscv qemu-user-static-binfmt-loongarch
- name: Check out current repo
uses: actions/checkout@v4
- name: Parse target branch and tag from events context, save to env
env:
EV: ${{ toJson(gitea.event) }}
@ -43,24 +51,6 @@ jobs:
org=$(echo $EV | jq '.ref' -r | sed 's/refs\/tags\///g' | cut -d '_' -f 2)
echo "ORG=$org" >> ${GITHUB_ENV}
echo "ORG=$org"
- name: Check out current repo
uses: actions/checkout@v4
- name: Change vendor label for c10f
if: ${{ contains(github.ref_name, 'c10f') }}
run: |
echo "sed -i 's/ALT Linux Team/BaseALT LLC/g' ${{ gitea.workspace }}/org/$ORG/*/Dockerfile.template ||:"
sed -i 's/ALT Linux Team/BaseALT LLC/g' ${{ gitea.workspace }}/org/$ORG/*/Dockerfile.template ||:
echo "sed -i 's/ALT Linux Team/BaseALT LLC/g' ${{ gitea.workspace }}/org/$ORG/*/distroless.toml ||:"
sed -i 's/ALT Linux Team/BaseALT LLC/g' ${{ gitea.workspace }}/org/$ORG/*/distroless.toml ||:
env:
ORG: ${{ env.ORG }}
- 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: Login podman gitea
run: |
echo "podman login ${{ env.URL }}"
@ -71,16 +61,14 @@ jobs:
- name: Run building script
id: build-script
run: |
#build base with riskv64 for sisyphus if it is
if [[ "$BR" == "sisyphus" && "$ORG" == "base" ]]; then echo "${{ gitea.workspace }}/build.py --log-level debug -i base/base -b $BR --latest $BR --registry $BUILD_URL"; ${{ gitea.workspace }}/build.py -i base/base -b "$BR" --latest "$BR" --registry "$BUILD_URL"; fi
build_args="-b $BR --log-level debug --latest $BR -o $ORG --registry $BUILD_URL"
if [[ "$BR" == "sisyphus" ]]; then arches="--arches amd64 386 arm64 loong64 --skip-images base/base"; else arches="--arches amd64 386 arm64"; fi
echo "${{ gitea.workspace }}/build.py $build_args $arches"
build_args="-b $BR --latest $BR -o $ORG --registry gitea.basealt.ru/alt"
if [[ "$BR" == "sisyphus" ]]; then arches="--arches amd64 386 arm64 loong64"; else arches="--arches amd64 386 arm64"; fi
if [[ "$ORG" == "k8s" ]]; then build_args="$build_args --overwrite-organization $ORG-$BR --package-versions {\"k8s/kube-apiserver\":\"1.31\",\"k8s/kube-scheduler\":\"1.31\",\"k8s/kube-controller-manager\":\"1.31\",\"k8s/kube-proxy\":\"1.31\",\"k8s/coredns\":\"1.11.3\",\"k8s/kubelet\":\"1.31\"}"; fi
echo "build.py $build_args $arches"
${{ gitea.workspace }}/build.py $build_args $arches
env:
ORG: ${{ env.ORG }}
BR: ${{ env.BRANCH }}
BUILD_URL: "gitea.basealt.ru/alt"
continue-on-error: true
- name: Send notification if build crashed
if: ${{ steps.build-script.outcome != 'success' }}

View File

@ -1,104 +0,0 @@
name: Full building alt images
on:
push:
tags:
- "*_k8s"
jobs:
build-process:
runs-on: alt-sisyphus
outputs:
branch: ${{ env.BRANCH }}
org: ${{ env.ORG }}
url: ${{ env.URL }}
repo: ${{ env.REPO }}
buildres: ${{ steps.build-script.outcome }}
steps:
- name: Check workspace
run: |
repourl=$(echo $GU | cut -d '/' -f 3)
echo "URL=$repourl" >> ${GITHUB_ENV}
echo $repourl
reponame=$(echo $GR | cut -d '/' -f 1)
echo "REPO=$reponame" >> ${GITHUB_ENV}
echo $reponame
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
run: |
echo "apt-get install -y python3-module-tomli python3-module-jinja2 python3-module-yaml python3-module-requests podman buildah jq curl"
apt-get install -y python3-module-tomli python3-module-jinja2 python3-module-yaml python3-module-requests podman buildah jq curl
echo "apt-get install -y qemu-user-static-binfmt-aarch64 qemu-user-static-binfmt-arm qemu-user-static-binfmt-riscv qemu-user-static-binfmt-loongarch"
apt-get install -y qemu-user-static-binfmt-aarch64 qemu-user-static-binfmt-arm qemu-user-static-binfmt-riscv qemu-user-static-binfmt-loongarch
- name: Parse target branch and tag from events context, save to env
env:
EV: ${{ toJson(gitea.event) }}
run: |
echo $EV | jq '.ref' -r | sed "s/refs\/tags\//BRANCH=/g" | cut -d '_' -f 1
echo $EV | jq '.ref' -r | sed "s/refs\/tags\//BRANCH=/g" | cut -d '_' -f 1 >> ${GITHUB_ENV}
org=$(echo $EV | jq '.ref' -r | sed 's/refs\/tags\///g' | cut -d '_' -f 2)
echo "ORG=$org" >> ${GITHUB_ENV}
echo "ORG=$org"
- name: Check out current repo
uses: actions/checkout@v4
- name: Change vendor label for c10f
if: ${{ contains(github.ref_name, 'c10f') }}
run: |
echo "sed -i 's/ALT Linux Team/BaseALT LLC/g' ${{ gitea.workspace }}/org/$ORG/*/Dockerfile.template ||:"
sed -i 's/ALT Linux Team/BaseALT LLC/g' ${{ gitea.workspace }}/org/$ORG/*/Dockerfile.template ||:
echo "sed -i 's/ALT Linux Team/BaseALT LLC/g' ${{ gitea.workspace }}/org/$ORG/*/distroless.toml ||:"
sed -i 's/ALT Linux Team/BaseALT LLC/g' ${{ gitea.workspace }}/org/$ORG/*/distroless.toml ||:
env:
ORG: ${{ env.ORG }}
- name: Login podman gitea
run: |
echo "podman login ${{ env.URL }}"
podman login --username $P_USER --password $P_PASS ${{ env.URL }}
env:
P_USER: ${{ secrets.PODMAN_USER }}
P_PASS: ${{ secrets.PODMAN_PASS }}
- name: Run building script
id: build-script
run: |
if [[ "$BR" == "sisyphus" ]]; then arches="--arches amd64 386 arm64 loong64"; else arches="--arches amd64 386 arm64"; fi
build_args="--registry $BUILD_URL $arches"
#run build script
${{ gitea.workspace }}/.gitea/workflows/k8s_buildscript.py --branch "$BR" --other-build-args "$build_args" --workspace "${{ gitea.workspace }}"
env:
ORG: ${{ env.ORG }}
BR: ${{ env.BRANCH }}
BUILD_URL: "gitea.basealt.ru/alt"
continue-on-error: true
- name: Send notification if build crashed
if: ${{ steps.build-script.outcome != 'success' }}
run: |
issueid=1
body="Building images finish with some errors."
curl -X 'POST' "$URL/api/v1/repos/$REPO/image-forge/issues/$issueid/comments?token=$T" -H 'accept: application/json' -H 'Content-Type: application/json' -d "{ \"body\": \"$body\" }" -s
echo "notification about test error is sent to issue $issueid"
env:
T: ${{ secrets.TOKEN }}
BR: ${{ env.BRANCH }}
URL: ${{ gitea.server_url }}
REPO: ${{ env.REPO }}
- name: Delete event tag
run: |
tagname=$(echo $EV | jq '.ref' -r | sed "s/refs\/tags\///g")
curl -X 'DELETE' "$URL/api/v1/repos/$REPO/image-forge/tags/$tagname?token=$T" -H 'accept: application/json' -s
echo "tag $tagname is deleted"
env:
T: ${{ secrets.TOKEN }}
BR: ${{ env.BRANCH }}
URL: ${{ gitea.server_url }}
REPO: ${{ env.REPO }}
EV: ${{ toJson(gitea.event) }}

View File

@ -68,15 +68,6 @@ jobs:
ver=$(echo $EV | jq '.ref' -r | sed 's/refs\/tags\///g' | cut -d '_' -f 3)
echo "VER=$ver" >> ${GITHUB_ENV}
echo "VER=$ver"
- name: Change vendor label for c10f
if: ${{ contains(github.ref_name, 'c10f') }}
run: |
echo "sed -i 's/ALT Linux Team/BaseALT LLC/g' ${{ gitea.workspace }}/org/$ORG/*/Dockerfile.template ||:"
sed -i 's/ALT Linux Team/BaseALT LLC/g' ${{ gitea.workspace }}/org/$ORG/*/Dockerfile.template ||:
echo "sed -i 's/ALT Linux Team/BaseALT LLC/g' ${{ gitea.workspace }}/org/$ORG/*/distroless.toml ||:"
sed -i 's/ALT Linux Team/BaseALT LLC/g' ${{ gitea.workspace }}/org/$ORG/*/distroless.toml ||:
env:
ORG: ${{ env.ORG }}
- 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
@ -87,10 +78,10 @@ jobs:
- name: Run building script
id: build-script
run: |
if [[ "$IM" == *"k8s"* ]]; then k8sarg="--package-versions {\"$IM\":\"$VER\"}"; else k8sarg=""; fi
if [[ "$IM" == *"k8s"* ]]; then k8sarg="--overwrite-organization $ORG-$BR --package-versions {\"$IM\":\"$VER\"}"; else k8sarg=""; fi
if [[ "$BR" == "sisyphus" ]]; then arches="--arches amd64 386 arm64 loong64"; else arches="--arches amd64 386 arm64"; fi
echo "build.py -i $IM -b $BR $arches $k8sarg"
${{ gitea.workspace }}/build.py -i $IM -b $BR $arches --latest $BR --log-level debug --registry gitea.basealt.ru/alt $k8sarg
${{ gitea.workspace }}/build.py -i $IM -b $BR $arches $k8sarg
env:
IM: ${{ env.IMAGE }}
VER: ${{ env.VER }}
@ -137,8 +128,7 @@ jobs:
if: ${{ needs.build-process.outputs.test != '' }}
continue-on-error: true
run: |
imname=$(echo "$IM" | cut -d "/" -f2)
if [[ "$IM" == *"k8s"* ]]; then echo "skip tests for k8s images"; else podman run --rm --entrypoint="/bin/sh" $URL/$REPO/$BR/$imname:latest -c "$TEST"; fi
if [[ "$IM" == *"k8s"* ]]; then echo "skip tests for k8s images"; else podman run --rm --entrypoint="/bin/sh" $URL/$IM:$BR -c "$TEST"; fi
env:
IM: ${{ needs.build-process.outputs.image }}
BR: ${{ needs.build-process.outputs.branch }}
@ -150,9 +140,8 @@ jobs:
if: ${{ needs.build-process.outputs.test == '' }}
continue-on-error: true
run: |
imname=$(echo "$IM" | cut -d "/" -f2)
if [[ $IM = 'alt/distroless-true' ]]; then podman run --rm $URL/$REPO/$BR/$imname:latest true; fi
if [[ $IM = 'alt/distroless-gotop' ]]; then podman run --rm $URL/$REPO/$BR/$imname:latest --version; fi
if [[ $IM = 'alt/distroless-true' ]]; then podman run --rm $URL/$IM:$BR true; fi
if [[ $IM = 'alt/distroless-gotop' ]]; then podman run --rm $URL/$IM:$BR --version; fi
env:
IM: ${{ needs.build-process.outputs.image }}
BR: ${{ needs.build-process.outputs.branch }}

View File

@ -38,12 +38,10 @@ If you push to the users repository, then organiztion is your username.
If contains jinja2 template syntax, `--package-version`
CLI option must be specified.
- `version_template`: **string** or **list of strings** (OPTIONAL)
- `version_template`: **string** (OPTIONAL)
Template to apply when construction the tag,
`version` string variable is available in the template.
If `version_template` is a list of strings, then the image wiil be tagged
with every string in the list.
template to apply when construction the tag,
`version` string variable is available in the template
### examples
@ -86,22 +84,6 @@ source_packages:
./build.py -i k8s/pause
```
#### org/k8s/etcd
```yaml
is_versioned: true
version_template:
- "v{{ version }}"
- "{{ version }}"
- "{{ version }}-0"
source_packages:
- etcd-for-kubernetes{{ version }}
```
```bash
./build.py -b sisyphus -i k8s/etcd --package-version '{"k8s/etcd": "1.32"}'
```
## Dependencies
On x86_64 machine using p10 branch you need:
- `python3-module-tomli`

132
build.py
View File

@ -11,34 +11,25 @@ from datetime import datetime
from dataclasses import dataclass
from graphlib import TopologicalSorter
from pathlib import Path
from typing import Optional, Union
import requests
import tomli
import yaml
from jinja2 import Environment, BaseLoader
from jinja2 import Template
logger = logging.getLogger(__name__)
clean_images_counter = 0
clean_images_limit_count = 0
ORG_DIR = Path("org")
PKG_VERSIONS: Optional[dict] = None
PKG_VERSIONS: dict | None = None
# Jinja2 custom fail filter
def fail(message: str):
raise ValueError(message)
JINJA_ENV = Environment(loader=BaseLoader())
JINJA_ENV.filters['fail'] = fail
@dataclass
class Image:
canonical_name: str
is_versioned: Optional[bool]
version_template: Union[list[str], str, None]
source_packages: Optional[list[str]]
is_versioned: bool | None
version_template: str | None
source_packages: list[str] | None
def __init__(self, canonical_name: str):
self.canonical_name = canonical_name
@ -103,10 +94,12 @@ def api_get_source_package_version(branch: str, package_name: str) -> str:
params = {"branch": branch, "name": package_name}
response = requests.get(api_url, params)
if response.status_code != 200:
print(response)
api_url = "https://rdb.altlinux.org/api/site/package_versions"
params = {"arch": "x86_64", "package_type": "source", "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} "
)
@ -128,8 +121,9 @@ 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}, task_id {task_id}"
f"failed to retrieve source package version from task: source package {package_name!r}, branch {branch!r}, task_id {task_id}"
)
result = response.json()
@ -138,19 +132,19 @@ def api_get_source_package_version_from_task(task_id: str, package_name: str):
return subtask["source"]["version"]
raise RuntimeError(
f"failed to retrieve source package version from task: source package {package_name!r}, task_id {task_id}"
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: Optional[str], latest: str):
def __init__(self, tags_file: str | None, latest: str):
if tags_file is None:
self._tags = None
else:
self._tags = tomli.loads(Path(tags_file).read_text())
self._latest = latest
def tags(self, branch: str, image: Image, tasks: Optional[Tasks] = None):
def tags(self, branch: str, image: Image, tasks: Tasks | None = None):
if self._tags is None:
if image.is_versioned is None:
tags = [branch]
@ -160,7 +154,10 @@ class Tags:
elif image.is_versioned and image.source_packages:
package_name = image.source_packages[0]
context_version = ""
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(
@ -177,12 +174,8 @@ class Tags:
f"invalid version for image {image.canonical_name!r}: {PKG_VERSIONS[image.canonical_name]!r}"
)
context_version = PKG_VERSIONS[image.canonical_name]
if re.search("{%.*%}", package_name) or re.search("{{.*}}", package_name):
package_name = JINJA_ENV.from_string(package_name).render(
branch=branch,
version=context_version,
package_name = Template(package_name).render(
version=PKG_VERSIONS[image.canonical_name]
)
if tasks is not None:
@ -207,32 +200,18 @@ class Tags:
)
version = api_get_source_package_version(branch, package_name)
tags = []
if image.version_template is not None:
if isinstance(image.version_template, str):
version_tag = (
JINJA_ENV.from_string(image.version_template).render(version=version).strip()
)
tags.append(version_tag)
elif isinstance(image.version_template, list):
for v in image.version_template:
version_tag = (
JINJA_ENV.from_string(v).render(version=version).strip()
)
tags.append(version_tag)
else:
raise RuntimeError(f"expected type for version_template: 'str' or 'list[str]', got '{type(image.version_template)}' for image {image}")
else:
tags.append(version)
version = (
Template(image.version_template).render(version=version).strip()
)
tags = [version]
tags.append("latest")
else:
version = datetime.now().strftime('%Y%m%d')
if image.version_template is not None:
if not isinstance(image.version_template, str):
raise RuntimeError(f"expected type for version_template: 'str', got '{type(image.version_template)}' for image {image}")
version = (
JINJA_ENV.from_string(image.version_template).render(version=version).strip()
Template(image.version_template).render(version=version).strip()
)
tags = [version]
tags.append("latest")
@ -343,7 +322,6 @@ class DockerBuilder:
def __init__(
self,
registry,
overwrite_registry,
branch,
organization,
overwrite_organization,
@ -358,7 +336,6 @@ class DockerBuilder:
self.org_dir = ORG_DIR
self.images_dir = ORG_DIR / organization
self.registry = registry
self.overwrite_registry = overwrite_registry
self.branch = branch
self.organization = organization
if overwrite_organization:
@ -415,13 +392,12 @@ class DockerBuilder:
else:
registry = ""
alt_image = "alt"
rendered = JINJA_ENV.from_string(template).render(
rendered = Template(template).render(
alt_image=alt_image,
branch=self.branch,
install_packages=install_packages,
organization=organization,
registry=registry,
pkg_versions=PKG_VERSIONS,
**kwargs,
)
@ -515,15 +491,6 @@ class DockerBuilder:
tag = f":{tag}"
return f"{registry}{self.overwrite_organization}/{image.base_name}{tag}"
def render_push_registry(self, image: Image, tag: str):
if self.overwrite_registry:
registry = self.overwrite_registry.rstrip("/") + "/"
else:
registry = ""
if tag:
tag = f":{tag}"
return f"{registry}{self.overwrite_organization}/{image.base_name}{tag}"
def run(self, cmd, *args, **kwargs):
if "check" not in kwargs:
kwargs["check"] = True
@ -531,8 +498,6 @@ class DockerBuilder:
pre_cmd = ["echo"]
else:
pre_cmd = []
logger.debug("run: %s", pre_cmd + cmd)
subprocess.run(pre_cmd + cmd, *args, **kwargs)
def distroless_build(self, image: Image, arches):
@ -679,7 +644,7 @@ class DockerBuilder:
build_arches = set(arches) - set(
self.images_info.skip_arches(image.canonical_name)
)
tags = self.tags.tags(self.branch, image, self.tasks)
tags = self.tags.tags(self.branch, image)
manifest = self.render_full_tag(image, tags[0])
msg = "Building image {} for {} arches".format(
@ -791,44 +756,22 @@ class DockerBuilder:
return
tags = self.tags.tags(self.branch, image, self.tasks)
manifests = [self.render_full_tag(image, t) for t in tags]
for t in tags:
manifest = self.render_full_tag(image, t)
push_manifest = self.render_push_registry(image, t)
print(f"Source manifest {manifest}")
print(f"Push manifest {push_manifest}")
for manifest in manifests:
print(f"Push manifest {manifest}")
cmd = [
"podman",
"manifest",
"push",
manifest,
f"docker://{push_manifest}",
f"docker://{manifest}",
]
if sign is not None:
cmd.append(f"--sign-by={sign}")
self.run(cmd)
if clean_images_limit_count > 0:
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:
@ -900,22 +843,9 @@ def parse_args():
"-r",
"--registry",
default="gitea.basealt.ru",
help="source registry",
)
parser.add_argument(
"--clean-images-limit",
default="5",
type=int,
help="limit count of local images, '0' - no clean mode",
)
parser.add_argument(
"--overwrite-registry",
default="gitea.basealt.ru",
help="destination registry",
)
parser.add_argument(
"--overwrite-organization",
help="destination organization",
)
parser.add_argument(
"-l",
@ -1003,9 +933,6 @@ def parse_args():
args.branches = set(args.branches) - set(args.skip_branches)
args.images = set(args.images) - set(args.skip_images)
global clean_images_limit_count
clean_images_limit_count = args.clean_images_limit
return args
@ -1029,7 +956,6 @@ def main():
for branch in args.branches:
db = DockerBuilder(
args.registry,
args.overwrite_registry,
branch,
organization,
args.overwrite_organization,

View File

@ -1,14 +1,11 @@
["alt/distroless-toybox"]
skip-branches = [ "p10", "c10f2", "c10f1" ]
["base/distroless-toybox"]
skip-branches = [ "p10", "c10f2", "c10f1" ]
["alt/openjdk21"]
skip-arches = [ "386" ]
["alt/zot"]
skip-arches = [ "386" ]
["alt/ansible"]
skip-branches = [ "c10f2", "c10f1", "p10" ]
["alt/buildkit"]
skip-branches = [ "c10f1", "p10" ]

View File

@ -1,16 +0,0 @@
FROM {{ registry }}{{ branch }}/base:latest
MAINTAINER alt-cloud
LABEL org.opencontainers.image.title="buildkit"
LABEL org.opencontainers.image.description="Concurrent, cache-efficient, and Dockerfile-agnostic builder toolkit"
LABEL org.opencontainers.image.source="https://github.com/moby/buildkit"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.vendor="ALT Linux Team"
{{ install_packages(
"ca-certificates",
"buildkit"
) }}
ENTRYPOINT ["/usr/bin/buildkitd"]

View File

@ -1 +0,0 @@
buildkitd --version

View File

@ -0,0 +1,17 @@
FROM {{ registry }}{{ branch }}/{{ alt_image }}:latest
MAINTAINER alt-cloud
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="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"]

13
org/alt/etcd/README.md Normal file
View File

@ -0,0 +1,13 @@
dockerfiles-alt-etcd
=========================
ALT dockerfile for etcd.
Copy Dockerfile somewhere and build the image:
`$ docker build --rm -t <username>/etcd.`
And launch the etcd container:
`docker run -d -v <etcd data dir>:/data <username>/etcd`
If etcdclt watnted it could be run via:
`docker run --entrypoint etcdctl <username>/etcd`

View File

@ -2,5 +2,5 @@
is_versioned: true
version_template: "{{ version }}"
source_packages:
- buildkit
- etcd
...

1
org/alt/etcd/test Normal file
View File

@ -0,0 +1 @@
etcdctl version

View File

@ -15,7 +15,7 @@ RUN cd /etc/nginx/sites-enabled.d && ln -s ../sites-available.d/default.conf .
RUN ln -sf /dev/stdout /var/log/nginx/access.log
RUN ln -sf /dev/stderr /var/log/nginx/error.log
RUN sed -Ei 's/^([[:space:]]*listen[[:space:]]+)(localhost|127.0.0.1)(:80)/\10.0.0.0\3/' \
RUN sed -Ei 's/^([[:space:]]*listen[[:space:]]+)localhost(:80)/\10.0.0.0\2/' \
/etc/nginx/sites-available.d/default.conf
EXPOSE 80

View File

@ -3,9 +3,9 @@ is_versioned: true
version_template: "{{ version }}"
source_packages:
- >
{%- if branch in [ "p10", "c10f1", "c10f2"] -%}
php8.2
{%- else -%}
{% if branch in [ "p10", "c10f1", "c10f2"] %}
{% raw %}php8.2{% endraw %}
{% else %}
php8.3
{%- endif -%}
{% endif %}
...

View File

@ -3,9 +3,9 @@ is_versioned: true
version_template: "{{ version }}"
source_packages:
- >
{%- if branch in ["p10", "c10f2", "c10f1"] -%}
ruby
{%- else -%}
{% if branch in ["p10", "c10f2", "c10f1"] %}
{% raw %}ruby{% endraw %}
{% else %}
gem-irb
{%- endif -%}
{% endif %}
...

View File

@ -8,16 +8,7 @@ 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 pkg_versions and "k8s/coredns" in pkg_versions %}
{% set version_parts = pkg_versions["k8s/coredns"].split('.') | length %}
{% else %}
{% set version_parts = 0 %}
{% endif %}
{% if branch in ["sisyphus"] and version_parts == 2 %}
ARG PKG_VERSION
{{ install_packages("coredns-for-kubernetes${PKG_VERSION}") }}
{% elif branch in ["sisyphus", "p11", "c10f2"] and version_parts == 3 %}
{% if branch in ["sisyphus", "p11", "c10f2"] %}
ARG PKG_VERSION
{{ install_packages("coredns${PKG_VERSION}") }}

View File

@ -3,13 +3,9 @@ is_versioned: true
version_template: v{{ version }}
source_packages:
- >
{%- set version_parts = version.split('.') -%}
{%- set version_major = version_parts[1] | int -%}
{%- if branch in ["sisyphus"] and version_parts | length == 2 and version_major >= 33 -%}
coredns-for-kubernetes{{ version }}
{%- elif branch in ["sisyphus", "p11", "c10f2"] -%}
coredns{{ version }}
{%- else -%}
{% if branch in ["sisyphus", "p11", "c10f2"] %}
{% raw %}coredns{{ version }}{% endraw %}
{% else %}
coredns
{%- endif -%}
{% endif %}
...

View File

@ -8,13 +8,9 @@ LABEL org.opencontainers.image.source="https://github.com/etcd-io/etcd"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.vendor="ALT Linux Team"
ARG PKG_VERSION
{{ install_packages("etcd") }}
{{ install_packages("etcd-for-kubernetes${PKG_VERSION}") }}
RUN ln -s /usr/sbin/etcd /usr/local/bin/etcd && ln -s /usr/bin/etcdctl /usr/local/bin/etcdctl
EXPOSE 2379 2380
RUN ln -s /usr/sbin/etcd /usr/local/bin/etcd
VOLUME /data

View File

@ -1,19 +0,0 @@
dockerfiles-alt-etcd
=========================
ALT dockerfile for etcd.
Copy Dockerfile somewhere and build the image:
```console
$ podman build --rm -t <username>/etcd.
```
And launch the etcd container:
```console
$ podman run -d -v <etcd data dir>:/data <username>/etcd
```
If etcdclt is wanted, it could be run via:
```console
$ podman run --entrypoint etcdctl <username>/etcd
```

View File

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

View File

@ -1 +1 @@
etcd --version && etcdctl --version
etcd --version

View File

@ -1,18 +1,6 @@
---
is_versioned: true
version_template: >-
{%- set version_parts = version.split('.') -%}
{%- if version_parts | length == 3 -%}
{%- if version == "1.4.0" -%}
v{{ version }}-flannel1
{%- else -%}
v{{ version }}
{%- endif %}
{%- elif version_parts | length == 4 -%}
v{{ version.rsplit('.', 1) | first }}-flannel{{ version.rsplit('.', 1) | last }}
{%- else -%}
{{ "Invalid version format: must have 3 or 4 parts" | fail }}
{%- endif %}
version_template: v{{ version.rsplit('.', 1) | first }}-flannel{{ version.rsplit('.', 1) | last }}
source_packages:
- cni-plugin-flannel
...

View File

@ -16,6 +16,6 @@ RUN useradd -g qemu -m -d /home/qemu -s /bin/bash -c "qemu user" -u 107 qemu > /
"kubevirt-container-disk"
) }}
RUN cp -f /usr/share/kube-virt/virt-handler/nsswitch.conf /etc/
RUN cp -f /usr/share/kube-virt/virt-handler/nsswitch.conf /etc/ && cp -f /usr/share/kube-virt/virt-handler/virt_launcher.cil /
ENTRYPOINT ["/usr/bin/virt-handle"]