Compare commits

..

26 Commits

Author SHA1 Message Date
Nadezhda Fedorova
172c934c3c make version_template for every image - list type (for vers-checker) 2025-10-13 16:53:56 +03:00
Nadezhda Fedorova
b320f030c0 add etcd version for k8s workflow 2025-10-10 15:09:12 +03:00
Nadezhda Fedorova
0efbca5122 fix testsscript
change coredns version for k8s building workflow
2025-10-10 12:15:27 +03:00
Nadezhda Fedorova
6a56767489 delete saving error text for notification 2025-10-09 16:49:42 +03:00
Nadezhda Fedorova
f5262e5e76 fix bugs 2025-10-09 14:58:28 +03:00
Nadezhda Fedorova
1e8c1a4a09 fix error notification 2025-10-09 13:43:47 +03:00
Nadezhda Fedorova
18d74c23b5 fix error notification 2025-10-09 13:04:35 +03:00
Nadezhda Fedorova
e9627bfd2e fix tests for wf_full 2025-10-09 11:58:56 +03:00
Nadezhda Fedorova
34d1a8b766 fix notification in wf 2025-10-08 15:03:41 +03:00
Nadezhda Fedorova
01b33b1d5b update telegram-notification version 2025-10-08 13:22:11 +03:00
Nadezhda Fedorova
743d6fffd0 delete notification from single wf 2025-10-08 11:58:08 +03:00
Nadezhda Fedorova
a192690134 change sending notification method for workflows 2025-10-08 11:55:50 +03:00
Nadezhda Fedorova
29128ecd3b add excludes for metrics-server 2025-10-01 15:37:21 +03:00
b9af26e503 feat(k8s/metrics-server): add kubernetes metrics-server image
Link: https://github.com/kubernetes-sigs/metrics-server/blob/v0.8.0/Dockerfile
2025-09-30 13:54:07 +03:00
Nadezhda Fedorova
b96a51b8df fix templeate syntax error 2025-09-25 11:27:19 +03:00
Nadezhda Fedorova
61276ad9fc fix(.gitea/workflows/k8s_vers.json): fix version for coredns 2025-09-25 10:38:07 +03:00
Nadezhda Fedorova
eedd903ee0 fix(.gitea/workflows/k8s_buildscript.py): add debug info 2025-09-25 10:16:50 +03:00
Nadezhda Fedorova
4534622c3d update k8s packages version 2025-09-25 09:45:58 +03:00
Nadezhda Fedorova
87e8fd010e add package info for etcd on p10 2025-09-24 16:16:30 +03:00
Nadezhda Fedorova
1cd238d6a8 add .gitea/workflows/wf_multiple.yaml 2025-09-24 15:55:54 +03:00
Nadezhda Fedorova
7820b657bd fix(.gitea/workflows/): fix logical error 2025-09-22 14:12:17 +03:00
Nadezhda Fedorova
6b5cd17bb6 fix(images-info): add excluding arch 386 for grafana 2025-09-22 10:31:23 +03:00
Nadezhda Fedorova
7e089c45b0 fix(org/alt/php): fix template syntax error 2025-09-22 10:11:41 +03:00
Nadezhda Fedorova
498eec0b05 fix(.gitea/workflows/): fix checking c10f2 branch via dispatch input arguments 2025-09-21 22:54:48 +03:00
Nadezhda Fedorova
b3fe149faa fix(.gitea/workflows/): Change run-event for workflows from push-tag to dispatch with input parameters 2025-08-11 16:48:48 +03:00
Nadezhda Fedorova
f7b261f245 Add new version info to php, postgresql templates 2025-08-11 15:05:03 +03:00
78 changed files with 504 additions and 607 deletions

View File

@@ -60,13 +60,15 @@ def main() -> None:
for ver in vers_branch:
kube_ver = ver.get("kube-version")
dns_ver = ver.get("coredns")
etcd_ver = ver.get("etcd", kube_ver)
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}\"" + "}'"
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\":\"{etcd_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
print(f'Run build command: {args.workspace}/build.py {args.other_build_args} {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)

View File

@@ -5,11 +5,13 @@
"versions": [
{
"kube-version": "1.27",
"coredns": "1.10.1"
"coredns": "0",
"etcd": "3.5.15"
},
{
"kube-version": "1.28",
"coredns": "1.10.1",
"coredns": "0",
"etcd": "3.5.16",
"latest": true
}
]

View File

@@ -49,15 +49,20 @@ do
fi
fi
echo $command
eval $command 2>$IM.log || haserr=true
eval $command 2>$IM.log
if [ "$(echo $?)" == "0" ]; then
rm -rf $IM.log ||:
else
haserr=true
fi
echo "podman rmi --all"
podman rmi --all
if [ "$haserr" ]
if $haserr
then
if [[ -n $(cat $IM.log) ]]
then errors="TEST ERROR OF IMAGE $IM: $(cat $IM.log); $errors"
if [ -f $IM.log ]
then errors="TEST ERROR OF IMAGE $IM: $(cat $IM.log)\n $errors"
#else errors="TEST ERROR OF IMAGE $IM: test returned empty error, but exit status was nozero; $errors"
fi
fi

View File

@@ -1,16 +1,30 @@
name: Full building alt images
on:
push:
tags:
- '*_*'
- '!*_k8s'
workflow_dispatch:
inputs:
branch:
description: 'Branch'
required: true
default: 'sisyphus'
type: choice
options:
- sisyphus
- p10
- p11
- c10f2
group:
description: 'Images group'
required: true
type: choice
options:
- base
- alt
- kubevirt
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 }}
@@ -19,34 +33,27 @@ jobs:
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 python3-module-tomli python3-module-jinja2 python3-module-yaml python3-module-requests podman buildah jq curl golang"
apt-get install -y python3-module-tomli python3-module-jinja2 python3-module-yaml python3-module-requests podman buildah jq curl golang
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)
echo "URL=$repourl" >> ${GITHUB_ENV}
echo $repourl
echo "URL=$repourl"
reponame=$(echo $GR | cut -d '/' -f 1)
echo "REPO=$reponame" >> ${GITHUB_ENV}
echo $reponame
echo "REPO=$reponame"
echo "GROUP=${{ inputs.group }}"
echo "BRANCH=${{ inputs.branch }}"
env:
GU: ${{ gitea.server_url }}
GR: ${{ gitea.repository }}
- 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') }}
if: ${{ contains(inputs.branch, '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 ||:
@@ -55,11 +62,10 @@ jobs:
echo "sed -i 's/ALT Linux Team/BaseALT LLC/g' ${{ gitea.workspace }}/org/$ORG/*/info.yaml ||:"
sed -i 's/ALT Linux Team/BaseALT LLC/g' ${{ gitea.workspace }}/org/$ORG/*/info.yaml ||:
env:
ORG: ${{ env.ORG }}
ORG: ${{ inputs.group }}
- name: Set repo for c10f2 (Temporary)
if: ${{ contains(github.ref_name, 'c10f2') }}
if: ${{ contains(inputs.branch, '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
@@ -74,50 +80,35 @@ jobs:
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
if [[ "$BR" == "sisyphus" && "$ORG" == "base" ]]; then echo "${{ gitea.workspace }}/build.py -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"
${{ gitea.workspace }}/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"
ORG: ${{ inputs.group }}
BR: ${{ inputs.branch }}
BUILD_URL: "${{ env.URL }}/${{ env.REPO }}"
continue-on-error: true
- name: Send notification if build crashed
- name: Send success notification
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) }}
uses: actions/telegram-channel-action@v5
with:
bot_token: ${{ secrets.TELEGRAM_BOT }}
channel_id: ${{ secrets.TELEGRAM_CHANNEL }}
message: "Building of images org/${{ inputs.group }} for branch ${{ inputs.branch }} is failed"
test-process:
needs: build-process
if: ${{ needs.build-process.outputs.buildres == 'success' && needs.build-process.outputs.org != 'k8s' }}
if: ${{ needs.build-process.outputs.buildres == 'success' }}
runs-on: alt-sisyphus
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 podman buildah jq curl"
apt-get install -y python3-module-tomli python3-module-jinja2 podman buildah jq curl
echo "apt-get install -y python3-module-tomli python3-module-jinja2 podman buildah jq curl golang"
apt-get install -y python3-module-tomli python3-module-jinja2 podman buildah jq curl golang
- name: Check out current repo
uses: https://gitea.com/actions/checkout@v4
- name: Test
@@ -126,23 +117,25 @@ jobs:
run: |
$WS/.gitea/workflows/testscript $BR $ORG $URL $REPO $WS
cat haserr.log >> ${GITHUB_ENV}
cat errors.log 2>/dev/null || echo ''
echo "test process finished"
env:
BR: ${{ needs.build-process.outputs.branch }}
ORG: ${{ needs.build-process.outputs.org }}
BR: ${{ inputs.branch }}
ORG: ${{ inputs.group }}
URL: ${{ needs.build-process.outputs.url }}
REPO: ${{ needs.build-process.outputs.repo }}
WS: ${{ gitea.workspace }}
- name: Send notification if test crashed
- name: Send notification if building was crashed
if: ${{ env.ERR == 'true' || steps.test-script.outcome == 'failure' }}
run: |
issueid=1
errors=$(cat errors.log)
body="Testing images finish with some errors. $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: ${{ needs.build-process.outputs.branch }}
URL: ${{ gitea.server_url }}
REPO: ${{ needs.build-process.outputs.repo }}
uses: actions/telegram-channel-action@v5
with:
bot_token: ${{ secrets.TELEGRAM_BOT }}
channel_id: ${{ secrets.TELEGRAM_CHANNEL }}
message: "Testing of images org/${{ inputs.group }} for branch ${{ inputs.branch }} is failed"
- name: Send notification if building was crashed
if: ${{ env.ERR == 'false' && steps.test-script.outcome != 'failure' }}
uses: actions/telegram-channel-action@v5
with:
bot_token: ${{ secrets.TELEGRAM_BOT }}
channel_id: ${{ secrets.TELEGRAM_CHANNEL }}
message: "Images group org/${{ inputs.group }} for branch ${{ inputs.branch }} are builed and ready to push into registry.altlinux.org"

View File

@@ -1,34 +1,43 @@
name: Full building alt images
on:
push:
tags:
- "*_k8s"
workflow_dispatch:
inputs:
branch:
description: 'Branch'
required: true
default: 'sisyphus'
type: choice
options:
- sisyphus
- p10
- p11
- c10f2
env:
ORG: 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
- name: Check workspace and inputs
run: |
repourl=$(echo $GU | cut -d '/' -f 3)
echo "URL=$repourl" >> ${GITHUB_ENV}
echo $repourl
echo "URL=$repourl"
reponame=$(echo $GR | cut -d '/' -f 1)
echo "REPO=$reponame" >> ${GITHUB_ENV}
echo $reponame
echo "REPO=$reponame"
echo "BRANCH=${{ inputs.branch }}"
env:
GU: ${{ gitea.server_url }}
GR: ${{ gitea.repository }}
- name: Set repo for c10f2 (Temporary)
if: ${{ contains(github.ref_name, 'c10f2') }}
if: ${{ contains(inputs.branch, '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
@@ -36,23 +45,14 @@ jobs:
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 python3-module-tomli python3-module-jinja2 python3-module-yaml python3-module-requests podman buildah jq curl golang"
apt-get install -y python3-module-tomli python3-module-jinja2 python3-module-yaml python3-module-requests podman buildah jq curl golang
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') }}
if: ${{ contains(inputs.branch, '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 ||:
@@ -78,29 +78,14 @@ jobs:
${{ gitea.workspace }}/.gitea/workflows/k8s_buildscript.py --branch "$BR" --other-build-args "$build_args" --workspace "${{ gitea.workspace }}"
env:
ORG: ${{ env.ORG }}
BR: ${{ env.BRANCH }}
BR: ${{ inputs.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) }}
uses: actions/telegram-channel-action@v5
with:
bot_token: ${{ secrets.TELEGRAM_BOT }}
channel_id: ${{ secrets.TELEGRAM_CHANNEL }}
message: "Building of images org/k8s for branch ${{ inputs.branch }} is failed"

View File

@@ -0,0 +1,161 @@
name: Dispatch building alt images
on:
workflow_dispatch:
inputs:
branch:
description: 'Branch'
required: true
default: 'sisyphus'
type: choice
options:
- sisyphus
- p10
- p11
- c10f2
images:
description: 'Json containing images with version to build it'
required: true
type: string
jobs:
build-process:
runs-on: alt-sisyphus
outputs:
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: Check inputs
run: |
echo "${{ inputs.images }}"
echo "${{ inputs.branch }}"
- 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 golang"
apt-get install -y python3-module-tomli python3-module-jinja2 python3-module-yaml python3-module-requests podman buildah jq curl golang
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: Get images list to build
env:
BR: ${{ inputs.branch }}
IMS: ${{ inputs.images }}
run: |
images=()
declare -A versions
ims=$(echo $IMS | jq -c -r '.[]')
for im in ${ims[@]}; do
image=$(echo $im | jq -r .name)
version=$(echo $im | jq -r .version)
images+=("$image")
versions["$image"]="$version"
done
image_args="${images[*]}"
package_versions="{"
first=1
for image in "${!versions[@]}"; do
[[ $first -eq 0 ]] && package_versions+=","
package_versions+="\"$image\": \"${versions[$image]}\""
first=0
done
package_versions+="}"
echo "IMAGES=$image_args"
echo "PACKAGE_VERSIONS=$package_versions"
echo "BRANCH=$branch" >> ${GITHUB_ENV}
echo "IMAGES=$image_args" >> $GITHUB_ENV
echo "images=$image_args"
echo "PACKAGE_VERSIONS=$package_versions" >> $GITHUB_ENV
echo "package_versions=$package_versions"
- 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/*/*/Dockerfile.template ||:"
sed -i 's/ALT Linux Team/BaseALT LLC/g' ${{ gitea.workspace }}/org/*/*/Dockerfile.template ||:
echo "sed -i 's/ALT Linux Team/BaseALT LLC/g' ${{ gitea.workspace }}/org/*/*/distroless.toml ||:"
sed -i 's/ALT Linux Team/BaseALT LLC/g' ${{ gitea.workspace }}/org/*/*/distroless.toml ||:
echo "sed -i 's/ALT Linux Team/BaseALT LLC/g' ${{ gitea.workspace }}/org/*/*/info.yaml ||:"
sed -i 's/ALT Linux Team/BaseALT LLC/g' ${{ gitea.workspace }}/org/*/*/info.yaml ||:
- 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 }}"
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 [[ "$BRANCH" == "sisyphus" ]]; then arches="--arches amd64 386 arm64 loong64"; else arches="--arches amd64 386 arm64"; fi
echo "${{ gitea.workspace }}/build.py \
--log-level debug \
--skip-stages push \
--branch $BRANCH \
--registry $BUILD_URL \
--arches $arches \
-i $IMAGES \
--package-versions \"$PACKAGE_VERSIONS\""
${{ gitea.workspace }}/build.py \
--log-level debug \
--skip-stages push \
--branch $BRANCH \
--registry $BUILD_URL \
--arches $arches \
-i $IMAGES \
--package-versions "$PACKAGE_VERSIONS"
echo "start update latest tag"
for im in $IMAGES; do \
image=$(echo $im | cut -d '/' -f 2) ; \
latest=$(skopeo list-tags docker://$BUILD_URL/$BRANCH/$image | jq '.Tags.[]' -r 2> /dev/null | sort -V -r | grep -v latest -m 1) ; \
echo "image: $image; latest version-tag: $latest" ; \
echo "skopeo copy -a docker://$BUILD_URL/$BRANCH/$im:$latest docker://BUILD_URL/$BRANCH/$im:latest"; \
skopeo copy -a docker://$BUILD_URL/$BRANCH/$im:$latest docker://BUILD_URL/$BRANCH/$im:latest ; \
done
echo "finish update latest tag"
env:
BRANCH: ${{ inputs.BRANCH }}
IMAGES: ${{ env.IMAGES }}
PACKAGE_VERSIONS: ${{ env.PACKAGE_VERSIONS }}
BUILD_URL: "${{ env.URL }}/${{ env.REPO }}"
continue-on-error: true
- name: Send notification if building was crashed
if: ${{ steps.build-script.outcome != 'success' }}
uses: actions/telegram-channel-action@v5
with:
bot_token: ${{ secrets.TELEGRAM_BOT }}
channel_id: ${{ secrets.TELEGRAM_CHANNEL }}
message: "Building of images ${{ inputs.images }} for branch ${{ inputs.branch }} is failed"
- name: Send success notification
if: ${{ steps.build-script.outcome == 'success' }}
uses: actions/telegram-channel-action@v5
with:
bot_token: ${{ secrets.TELEGRAM_BOT }}
channel_id: ${{ secrets.TELEGRAM_CHANNEL }}
message: "Images ${{ inputs.images }} for branch ${{ inputs.branch }} are builed and ready to push into registry.altlinux.org"

View File

@@ -1,21 +1,35 @@
name: Building alt images
on:
push:
tags:
- '*_*/*_*'
workflow_dispatch:
inputs:
branch:
description: 'Branch'
required: true
default: 'sisyphus'
type: choice
options:
- sisyphus
- p10
- p11
- c10f2
image:
description: 'Image name'
required: true
type: string
version:
description: 'Needed version'
type: string
jobs:
build-process:
runs-on: alt-sisyphus
outputs:
branch: ${{ env.BRANCH }}
image: ${{ env.IMAGE }}
url: ${{ env.URL }}
repo: ${{ env.REPO }}
buildres: ${{ steps.build-script.outcome }}
test: ${{ env.TEST }}
steps:
- name: Check workspace
- name: Check workspace and inputs
run: |
repourl=$(echo $GU | cut -d '/' -f 3)
echo "URL=$repourl" >> ${GITHUB_ENV}
@@ -23,13 +37,15 @@ jobs:
reponame=$(echo $GR | cut -d '/' -f 1)
echo "REPO=$reponame" >> ${GITHUB_ENV}
echo "REPO=$reponame"
echo "BRANCH=${{ inputs.branch }}"
echo "IMAGE=${{ inputs.image }}"
echo "VERSION=${{ inputs.version }}"
env:
GU: ${{ gitea.server_url }}
GR: ${{ gitea.repository }}
- name: Set repo for c10f2 (Temporary)
if: ${{ contains(github.ref_name, 'c10f2') }}
if: ${{ contains(inputs.branch, '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
@@ -37,8 +53,8 @@ jobs:
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 python3-module-tomli python3-module-jinja2 python3-module-yaml python3-module-requests podman buildah jq curl golang"
apt-get install -y python3-module-tomli python3-module-jinja2 python3-module-yaml python3-module-requests podman buildah jq curl golang
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
@@ -50,79 +66,44 @@ jobs:
env:
P_USER: ${{ secrets.PODMAN_USER }}
P_PASS: ${{ secrets.PODMAN_PASS }}
- name: Check files in the repository
run: |
ls -a ${{ gitea.workspace }}
- 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}
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"
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') }}
if: ${{ contains(inputs.branch, '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 ||:
echo "sed -i 's/ALT Linux Team/BaseALT LLC/g' ${{ gitea.workspace }}/org/$ORG/*/info.yaml ||:"
sed -i 's/ALT Linux Team/BaseALT LLC/g' ${{ gitea.workspace }}/org/$ORG/*/info.yaml ||:
env:
ORG: ${{ env.ORG }}
echo "sed -i 's/ALT Linux Team/BaseALT LLC/g' ${{ gitea.workspace }}/org/$IM/Dockerfile.template ||:"
sed -i 's/ALT Linux Team/BaseALT LLC/g' ${{ gitea.workspace }}/org/$IM/Dockerfile.template ||:
echo "sed -i 's/ALT Linux Team/BaseALT LLC/g' ${{ gitea.workspace }}/org/$IM/distroless.toml ||:"
sed -i 's/ALT Linux Team/BaseALT LLC/g' ${{ gitea.workspace }}/org/$IM/distroless.toml ||:
echo "sed -i 's/ALT Linux Team/BaseALT LLC/g' ${{ gitea.workspace }}/org/$IM/info.yaml ||:"
sed -i 's/ALT Linux Team/BaseALT LLC/g' ${{ gitea.workspace }}/org/$IM/info.yaml ||:
env:
IM: ${{ inputs.image }}
- 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
echo "TEST=$testscript" >> ${GITHUB_ENV}
env:
IM: ${{ env.IMAGE }}
BR: ${{ env.BRANCH }}
IM: ${{ inputs.image }}
BR: ${{ inputs.branch }}
- name: Run building script
id: build-script
run: |
if [[ "$IM" == *"k8s"* ]]; then k8sarg="--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
echo "build.py -i $IM -b $BR $arches --latest $BR --log-level debug --registry $BUILD_URL $k8sarg"
${{ gitea.workspace }}/build.py -i $IM -b $BR $arches --latest $BR --log-level debug --registry $BUILD_URL $k8sarg
env:
IM: ${{ env.IMAGE }}
VER: ${{ env.VER }}
BR: ${{ env.BRANCH }}
ORG: ${{ env.ORG }}
IM: ${{ inputs.image }}
VER: ${{ inputs.version }}
BR: ${{ inputs.branch }}
BUILD_URL: "${{ env.URL }}/${{ env.REPO }}"
continue-on-error: true
- name: Send notification if build crashed
if: ${{ steps.build-script.outcome != 'success' }}
run: |
issueid=1
body="Building image $IM 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 }}
IM: ${{ env.IMAGE }}
- 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) }}
uses: actions/telegram-channel-action@v5
with:
bot_token: ${{ secrets.TELEGRAM_BOT }}
channel_id: ${{ secrets.TELEGRAM_CHANNEL }}
message: "Building of image ${{ inputs.image }} for branch ${{ inputs.branch }} is failed"
test-process:
needs: build-process
if: ${{ needs.build-process.outputs.buildres == 'success' }}
@@ -132,8 +113,8 @@ jobs:
uses: https://gitea.basealt.ru/actions/init-alt-env@v1
- name: Install requires
run: |
echo "apt-get install -y python3-module-tomli python3-module-jinja2 podman buildah curl"
apt-get install -y python3-module-tomli python3-module-jinja2 podman buildah curl
echo "apt-get install -y python3-module-tomli python3-module-jinja2 podman buildah curl golang"
apt-get install -y python3-module-tomli python3-module-jinja2 podman buildah curl golang
- name: Run test
id: test-script
if: ${{ needs.build-process.outputs.test != '' }}
@@ -142,8 +123,8 @@ jobs:
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
env:
IM: ${{ needs.build-process.outputs.image }}
BR: ${{ needs.build-process.outputs.branch }}
IM: ${{ inputs.image }}
BR: ${{ inputs.branch }}
URL: ${{ needs.build-process.outputs.url }}
REPO: ${{ needs.build-process.outputs.repo }}
TEST: ${{ needs.build-process.outputs.test }}
@@ -156,22 +137,8 @@ jobs:
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
env:
IM: ${{ needs.build-process.outputs.image }}
BR: ${{ needs.build-process.outputs.branch }}
IM: ${{ inputs.image }}
BR: ${{ inputs.branch }}
URL: ${{ needs.build-process.outputs.url }}
REPO: ${{ needs.build-process.outputs.repo }}
- name: Send notification if test crashed
if: ${{ steps.test-script.outcome == 'failure' || steps.special-test.outcome == 'failure' }}
run: |
issueid=1
errors=$(cat errors.log)
body="Testing image $IM 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: ${{ needs.build-process.outputs.branch }}
URL: ${{ gitea.server_url }}
REPO: ${{ needs.build-process.outputs.repo }}
IM: ${{ needs.build-process.outputs.image }}

View File

@@ -432,22 +432,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 +785,7 @@ class DockerBuilder:
".",
]
if image.annotations is not None and self.branch != "c10f2":
if image.annotations is not None:
build_cmd = [
"podman",
"build",

View File

@@ -10,12 +10,18 @@ skip-arches = [ "386" ]
["alt/kafka"]
skip-arches = [ "386" ]
["alt/grafana"]
skip-arches = [ "386" ]
["alt/ansible"]
skip-branches = [ "c10f2", "c10f1", "p10" ]
["alt/buildkit"]
skip-branches = [ "c10f1", "p10" ]
["k8s/metrics-server"]
skip-branches = [ "c10f1", "c10f2", "p11", "p10" ]
["kubevirt/virt-api"]
skip-arches = [ "386", "loong64" ]

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- ansible-core
- ansible-vim

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- apache2
annotations:

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- buildkit
annotations:

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- gitea
annotations:

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- golang
annotations:

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- grafana
annotations:

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- kafka
annotations:

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- loki
annotations:

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- nginx
- apache2

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- node
- yarn

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- java-21-openjdk
annotations:

View File

@@ -13,9 +13,14 @@ LABEL org.opencontainers.image.vendor="ALT Linux Team"
"php8.2",
"php8.2-xdebug",
) }}
{% elif branch == 'c10f2' %}
{{ install_packages(
"php8.3",
"php8.3-xdebug",
) }}
{% else %}
{{ install_packages(
"php8.3",
"php8.3-xdebug",
"php8.4",
"php8.4-xdebug",
) }}
{% endif %}

View File

@@ -1,12 +1,15 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- >
{%- if branch in [ "p10", "c10f1", "c10f2"] -%}
{%- if branch in ["p10", "c10f1"] -%}
php8.2
{%- else -%}
{%- elif branch in ["c10f2"] -%}
php8.3
{%- else -%}
php8.4
{%- endif -%}
annotations:
org.opencontainers.image.revision: ''

View File

@@ -7,8 +7,12 @@ LABEL org.opencontainers.image.description="PostgreSQL rograms and libraries"
LABEL org.opencontainers.image.source="https://github.com/postgres/postgres"
LABEL org.opencontainers.image.licenses="PostgreSQL"
LABEL org.opencontainers.image.vendor="ALT Linux Team"
{% if branch == 'c10f2' %}
{{ install_packages("postgresql16","postgresql16-server") }}
{% else %}
{{ install_packages("postgresql17","postgresql17-server") }}
{% endif %}
RUN usermod -a -G postgres postgres
RUN chown -R postgres:postgres /var/lib/pgsql

View File

@@ -1,8 +1,14 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- postgresql16
- >
{%- if branch in ["c10f2"] -%}
postgresql16
{%- else -%}
postgresql17
{%- endif -%}
annotations:
org.opencontainers.image.revision: ''
org.opencontainers.image.source: 'https://github.com/postgres/postgres'

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- prometheus-alertmanager
annotations:

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- prometheus-node_exporter
annotations:

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- prometheus
annotations:

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- python3
- python3-module-setuptools

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- python
- python-module-setuptools

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- rabbitmq-server
annotations:

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- redis
annotations:

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- docker-registry
annotations:

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- >
{%- if branch in ["p10", "c10f2", "c10f1"] -%}

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- systemd
annotations:

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- trivy
annotations:

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- unit
- curl

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- zot
annotations:

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

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

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

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

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

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

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

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

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,6 +1,7 @@
---
is_versioned: true
version_template: v{{ version }}
version_template:
- v{{ version }}
source_packages:
- cert-manager
annotations:

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,6 +1,7 @@
---
is_versioned: true
version_template: v{{ version }}
version_template:
- v{{ version }}
source_packages:
- >
{%- set num_version_parts = (version.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,11 +6,15 @@ 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
{% if branch == 'p10' %}
{{ install_packages("etcd${PKG_VERSION}") }}
{% else %}
{{ install_packages("etcd-for-kubernetes${PKG_VERSION}") }}
{% endif %}
RUN ln -s /usr/sbin/etcd /usr/local/bin/etcd && ln -s /usr/bin/etcdctl /usr/local/bin/etcdctl

View File

@@ -4,8 +4,13 @@ version_template:
- "v{{ version }}"
- "{{ version }}"
- "{{ version }}-0"
source_packages:
- etcd-for-kubernetes{{ version }}
source_packages:
- >
{%- if branch in ["p10"] -%}
etcd{{ version }}
{%- else -%}
etcd-for-kubernetes{{ version }}
{%- endif -%}
annotations:
org.opencontainers.image.revision: ''
org.opencontainers.image.source: 'https://github.com/etcd-io/etcd'

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,5 +1,6 @@
is_versioned: true
version_template: v{{ version }}
version_template:
- v{{ version }}
source_packages:
- flannel
annotations:

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,6 +1,7 @@
---
is_versioned: true
version_template: v{{ version }}
version_template:
- v{{ version }}
source_packages:
- kubernetes{{ version }}
annotations:

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,6 +1,7 @@
---
is_versioned: true
version_template: v{{ version }}
version_template:
- v{{ version }}
source_packages:
- kubernetes{{ version }}
annotations:

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,6 +1,7 @@
---
is_versioned: true
version_template: v{{ version }}
version_template:
- v{{ version }}
source_packages:
- kubernetes{{ version }}
annotations:

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,6 +1,7 @@
---
is_versioned: true
version_template: v{{ version }}
version_template:
- v{{ version }}
source_packages:
- kubernetes{{ version }}
annotations:

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

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

View File

@@ -0,0 +1,13 @@
FROM {{ registry }}{{ branch }}/{{ alt_image }}:latest
{{ install_packages("metrics-server") }}
USER 65534
ENTRYPOINT ["/usr/bin/metrics-server"]
LABEL org.opencontainers.image.title="metrics-server"
LABEL org.opencontainers.image.description="Scalable and efficient source of container resource metrics for Kubernetes built-in autoscaling pipelines."
LABEL org.opencontainers.image.source="https://github.com/kubernetes-sigs/metrics-server"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.vendor="ALT Linux Team"

View File

@@ -0,0 +1,16 @@
---
is_versioned: true
version_template:
- v{{ version }}
source_packages:
- metrics-server
annotations:
org.opencontainers.image.revision: ''
org.opencontainers.image.source: ''
org.opencontainers.image.url: ''
org.opencontainers.image.version: ''
org.opencontainers.image.title: 'metrics-server'
org.opencontainers.image.description: 'Scalable and efficient source of container resource metrics for Kubernetes built-in autoscaling pipelines.'
org.opencontainers.image.licenses: 'Apache-2.0'
org.opencontainers.image.vendor: 'ALT Linux Team'
...

View File

@@ -0,0 +1 @@
metrics-server --version

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",

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- kubevirt
annotations:

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- kubevirt
annotations:

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- kubevirt
annotations:

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- kubevirt
annotations:

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- kubevirt
annotations:

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- kubevirt
annotations:

View File

@@ -1,6 +1,7 @@
---
is_versioned: true
version_template: "{{ version }}"
version_template:
- "{{ version }}"
source_packages:
- kubevirt
annotations:

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