Compare commits
	
		
			40 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| cb91ecc9f6 | |||
| 761fda61c1 | |||
| 6cbde103dd | |||
| 
						 | 
					14c787b0db | ||
| 
						 | 
					d161930947 | ||
| 0c426721dd | |||
| 0d08c6f88f | |||
| a56bc4eb06 | |||
| 739b5d8eba | |||
| 941b8fb599 | |||
| aacaf22d79 | |||
| 
						 | 
					2d5df6ea4c | ||
| 
						 | 
					626b6feb4c | ||
| 
						 | 
					69e7c13ea2 | ||
| d47bc5a030 | |||
| 9702a487d7 | |||
| 
						 | 
					c3398350b7 | ||
| 
						 | 
					c6011932ec | ||
| 
						 | 
					b1a9067f7d | ||
| 
						 | 
					2755b77312 | ||
| 61993c8c67 | |||
| 8831b5d4f3 | |||
| c9361ef016 | |||
| bb0eb56454 | |||
| 
						 | 
					059f378d62 | ||
| 
						 | 
					c0534070b3 | ||
| 
						 | 
					ede851f34f | ||
| 
						 | 
					b1867f776f | ||
| 
						 | 
					686bed6efa | ||
| 
						 | 
					124ed4ff29 | ||
| 
						 | 
					a5d6c2d543 | ||
| 
						 | 
					ba6faf6d32 | ||
| 8bd17b82bc | |||
| 20c4e922df | |||
| c3778f6436 | |||
| 5a22edb089 | |||
| 4ba29556fe | |||
| 4db1672f06 | |||
| 24c24ddd57 | |||
| 
						 | 
					97478923d3 | 
@@ -3,6 +3,7 @@ on:
 | 
			
		||||
  push:
 | 
			
		||||
    tags:
 | 
			
		||||
      - '*_*'
 | 
			
		||||
      - '!*_k8s'
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  build-process:
 | 
			
		||||
@@ -14,6 +15,14 @@ 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)
 | 
			
		||||
@@ -25,23 +34,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
 | 
			
		||||
        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) }}
 | 
			
		||||
@@ -51,6 +43,24 @@ 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 }}"
 | 
			
		||||
@@ -61,14 +71,16 @@ jobs:
 | 
			
		||||
      - name: Run building script
 | 
			
		||||
        id: build-script
 | 
			
		||||
        run: |
 | 
			
		||||
          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"
 | 
			
		||||
          #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 --package-versions {\"alt/etcd\":\"3.5.15\"}"
 | 
			
		||||
          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
 | 
			
		||||
        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' }}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										155
									
								
								.gitea/workflows/wf_multiple.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										155
									
								
								.gitea/workflows/wf_multiple.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,155 @@
 | 
			
		||||
name: Building alt images
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    tags:
 | 
			
		||||
      - '**'
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
        run: |
 | 
			
		||||
          repourl=$(echo $GU | cut -d '/' -f 3)
 | 
			
		||||
          echo "URL=$repourl" >> ${GITHUB_ENV}
 | 
			
		||||
          echo "URL=$repourl"
 | 
			
		||||
          reponame=$(echo $GR | cut -d '/' -f 1)
 | 
			
		||||
          echo "REPO=$reponame" >> ${GITHUB_ENV}
 | 
			
		||||
          echo "REPO=$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-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: 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: 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: |
 | 
			
		||||
          branch="$(echo $EV | jq '.ref' -r | sed "s|refs/tags/||g" | cut -d '_' -f 1)"
 | 
			
		||||
          echo "BRANCH=$branch"
 | 
			
		||||
 | 
			
		||||
          rest="$(echo $EV | jq '.ref' -r | sed "s|refs/tags/||g" | cut -d '_' -f 2-)"
 | 
			
		||||
          IFS='_' read -ra parts <<< "$rest"
 | 
			
		||||
 | 
			
		||||
          images=()
 | 
			
		||||
          declare -A versions
 | 
			
		||||
 | 
			
		||||
          for part in "${parts[@]}"; do
 | 
			
		||||
              if [[ "$part" == *@* ]]; then
 | 
			
		||||
                  image="${part%@*}"
 | 
			
		||||
                  version="${part#*@}"
 | 
			
		||||
                  images+=("$image")
 | 
			
		||||
                  versions["$image"]="$version"
 | 
			
		||||
              else
 | 
			
		||||
                  image="$part"
 | 
			
		||||
                  images+=("$image")
 | 
			
		||||
              fi
 | 
			
		||||
          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 "PACKAGE_VERSIONS=$package_versions" >> $GITHUB_ENV
 | 
			
		||||
      - 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: Run building script
 | 
			
		||||
        id: build-script
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "${{ gitea.workspace }}/build.py \
 | 
			
		||||
            --log-level debug \
 | 
			
		||||
            --skip-stages push \
 | 
			
		||||
            --branch $BRANCH \
 | 
			
		||||
            --registry gitea.basealt.ru/alt \
 | 
			
		||||
            --arches amd64 \
 | 
			
		||||
            -i $IMAGES \
 | 
			
		||||
            --package-versions \"$PACKAGE_VERSIONS\""
 | 
			
		||||
 | 
			
		||||
          ${{ gitea.workspace }}/build.py \
 | 
			
		||||
            --log-level debug \
 | 
			
		||||
            --skip-stages push \
 | 
			
		||||
            --branch $BRANCH \
 | 
			
		||||
            --registry gitea.basealt.ru/alt \
 | 
			
		||||
            --arches amd64 \
 | 
			
		||||
            -i $IMAGES \
 | 
			
		||||
            --package-versions "$PACKAGE_VERSIONS"
 | 
			
		||||
        env:
 | 
			
		||||
          BRANCH: ${{ env.BRANCH }}
 | 
			
		||||
          IMAGES: ${{ env.IMAGES }}
 | 
			
		||||
          PACKAGE_VERSIONS: ${{ env.PACKAGE_VERSIONS }}
 | 
			
		||||
        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" -H "Authorization: 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) }}
 | 
			
		||||
@@ -68,6 +68,15 @@ 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
 | 
			
		||||
@@ -78,10 +87,10 @@ jobs:
 | 
			
		||||
      - name: Run building script
 | 
			
		||||
        id: build-script
 | 
			
		||||
        run: |
 | 
			
		||||
          if [[ "$IM" == *"k8s"* ]]; then k8sarg="--overwrite-organization $ORG-$BR --package-versions {\"$IM\":\"$VER\"}"; else k8sarg=""; fi
 | 
			
		||||
          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 $k8sarg 
 | 
			
		||||
          ${{ gitea.workspace }}/build.py -i $IM -b $BR $arches --latest $BR --log-level debug --registry gitea.basealt.ru/alt $k8sarg 
 | 
			
		||||
        env:
 | 
			
		||||
          IM: ${{ env.IMAGE }}
 | 
			
		||||
          VER: ${{ env.VER }}
 | 
			
		||||
@@ -128,7 +137,8 @@ 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
 | 
			
		||||
          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 }}
 | 
			
		||||
@@ -140,8 +150,9 @@ jobs:
 | 
			
		||||
        if: ${{ needs.build-process.outputs.test == '' }}
 | 
			
		||||
        continue-on-error: true
 | 
			
		||||
        run: |
 | 
			
		||||
          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
 | 
			
		||||
          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
 | 
			
		||||
        env:
 | 
			
		||||
          IM: ${{ needs.build-process.outputs.image }}
 | 
			
		||||
          BR: ${{ needs.build-process.outputs.branch }}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										24
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								README.md
									
									
									
									
									
								
							@@ -38,10 +38,12 @@ 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** (OPTIONAL)
 | 
			
		||||
- `version_template`: **string** or **list of strings** (OPTIONAL)
 | 
			
		||||
 | 
			
		||||
  template to apply when construction the tag,
 | 
			
		||||
  `version` string variable is available in the template
 | 
			
		||||
  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.
 | 
			
		||||
 | 
			
		||||
### examples
 | 
			
		||||
 | 
			
		||||
@@ -84,6 +86,22 @@ 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`
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										127
									
								
								build.py
									
									
									
									
									
								
							
							
						
						
									
										127
									
								
								build.py
									
									
									
									
									
								
							@@ -4,32 +4,41 @@ import argparse
 | 
			
		||||
import functools
 | 
			
		||||
import json
 | 
			
		||||
import logging
 | 
			
		||||
import os
 | 
			
		||||
import re
 | 
			
		||||
import subprocess
 | 
			
		||||
import textwrap
 | 
			
		||||
from datetime import datetime
 | 
			
		||||
from dataclasses import dataclass
 | 
			
		||||
from graphlib import TopologicalSorter
 | 
			
		||||
from http import HTTPStatus
 | 
			
		||||
from pathlib import Path
 | 
			
		||||
from typing import Optional, Union
 | 
			
		||||
 | 
			
		||||
import requests
 | 
			
		||||
import tomli
 | 
			
		||||
import yaml
 | 
			
		||||
from jinja2 import Template
 | 
			
		||||
from jinja2 import Environment, BaseLoader
 | 
			
		||||
 | 
			
		||||
logger = logging.getLogger(__name__)
 | 
			
		||||
 | 
			
		||||
ORG_DIR = Path("org")
 | 
			
		||||
 | 
			
		||||
PKG_VERSIONS: dict | None = None
 | 
			
		||||
PKG_VERSIONS: Optional[dict] = 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: bool | None
 | 
			
		||||
    version_template: str | None
 | 
			
		||||
    source_packages: list[str] | None
 | 
			
		||||
    is_versioned: Optional[bool]
 | 
			
		||||
    version_template: Union[list[str], str, None]
 | 
			
		||||
    source_packages: Optional[list[str]]
 | 
			
		||||
 | 
			
		||||
    def __init__(self, canonical_name: str):
 | 
			
		||||
        self.canonical_name = canonical_name
 | 
			
		||||
@@ -94,12 +103,10 @@ 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} "
 | 
			
		||||
            )
 | 
			
		||||
@@ -121,9 +128,8 @@ def api_get_source_package_version_from_task(task_id: str, package_name: str):
 | 
			
		||||
    api_url = f"https://rdb.altlinux.org/api/task/packages/{task_id}"
 | 
			
		||||
    response = requests.get(api_url)
 | 
			
		||||
    if response.status_code != 200:
 | 
			
		||||
        print(response)
 | 
			
		||||
        raise RuntimeError(
 | 
			
		||||
            f"failed to retrieve source package version from task: source package {package_name!r}, branch {branch!r}, task_id {task_id}"
 | 
			
		||||
            f"failed to retrieve source package version from task: source package {package_name!r}, task_id {task_id}"
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    result = response.json()
 | 
			
		||||
@@ -132,19 +138,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}, branch {branch!r}, task_id {task_id}"
 | 
			
		||||
        f"failed to retrieve source package version from task: source package {package_name!r}, task_id {task_id}"
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Tags:
 | 
			
		||||
    def __init__(self, tags_file: str | None, latest: str):
 | 
			
		||||
    def __init__(self, tags_file: Optional[str], 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: Tasks | None = None):
 | 
			
		||||
    def tags(self, branch: str, image: Image, tasks: Optional[Tasks] = None):
 | 
			
		||||
        if self._tags is None:
 | 
			
		||||
            if image.is_versioned is None:
 | 
			
		||||
                tags = [branch]
 | 
			
		||||
@@ -154,10 +160,7 @@ class Tags:
 | 
			
		||||
            elif 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=}")
 | 
			
		||||
 | 
			
		||||
                context_version = ""
 | 
			
		||||
                if re.search("{{.*}}", package_name):
 | 
			
		||||
                    if PKG_VERSIONS is None:
 | 
			
		||||
                        raise RuntimeError(
 | 
			
		||||
@@ -174,8 +177,12 @@ class Tags:
 | 
			
		||||
                            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]
 | 
			
		||||
                    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,
 | 
			
		||||
                    )
 | 
			
		||||
 | 
			
		||||
                if tasks is not None:
 | 
			
		||||
@@ -200,18 +207,32 @@ class Tags:
 | 
			
		||||
                    )
 | 
			
		||||
                    version = api_get_source_package_version(branch, package_name)
 | 
			
		||||
 | 
			
		||||
                tags = []
 | 
			
		||||
                if image.version_template is not None:
 | 
			
		||||
                    version = (
 | 
			
		||||
                        Template(image.version_template).render(version=version).strip()
 | 
			
		||||
                    )
 | 
			
		||||
                    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)
 | 
			
		||||
 | 
			
		||||
                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 = (
 | 
			
		||||
                        Template(image.version_template).render(version=version).strip()
 | 
			
		||||
                        JINJA_ENV.from_string(image.version_template).render(version=version).strip()
 | 
			
		||||
                    )
 | 
			
		||||
                tags = [version]
 | 
			
		||||
                tags.append("latest")
 | 
			
		||||
@@ -392,12 +413,13 @@ class DockerBuilder:
 | 
			
		||||
        else:
 | 
			
		||||
            registry = ""
 | 
			
		||||
            alt_image = "alt"
 | 
			
		||||
        rendered = Template(template).render(
 | 
			
		||||
        rendered = JINJA_ENV.from_string(template).render(
 | 
			
		||||
            alt_image=alt_image,
 | 
			
		||||
            branch=self.branch,
 | 
			
		||||
            install_packages=install_packages,
 | 
			
		||||
            organization=organization,
 | 
			
		||||
            registry=registry,
 | 
			
		||||
            pkg_versions=PKG_VERSIONS,
 | 
			
		||||
            **kwargs,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
@@ -498,6 +520,8 @@ 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):
 | 
			
		||||
@@ -644,7 +668,7 @@ class DockerBuilder:
 | 
			
		||||
        build_arches = set(arches) - set(
 | 
			
		||||
            self.images_info.skip_arches(image.canonical_name)
 | 
			
		||||
        )
 | 
			
		||||
        tags = self.tags.tags(self.branch, image)
 | 
			
		||||
        tags = self.tags.tags(self.branch, image, self.tasks)
 | 
			
		||||
        manifest = self.render_full_tag(image, tags[0])
 | 
			
		||||
 | 
			
		||||
        msg = "Building image {} for {} arches".format(
 | 
			
		||||
@@ -926,6 +950,23 @@ def parse_args():
 | 
			
		||||
        choices=log_levels,
 | 
			
		||||
        help="log messages above specified level",
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    parser.add_argument(
 | 
			
		||||
        "--run-workflow",
 | 
			
		||||
        action="store_true",
 | 
			
		||||
        help="run gitea workflow to build oci images",
 | 
			
		||||
    )
 | 
			
		||||
    parser.add_argument(
 | 
			
		||||
        "--workflow-repo",
 | 
			
		||||
        default="stepchenkoas/image-forge",
 | 
			
		||||
        help="path to gitea repository where to activate workflow",
 | 
			
		||||
    )
 | 
			
		||||
    parser.add_argument(
 | 
			
		||||
        "--workflow-branch",
 | 
			
		||||
        default="master",
 | 
			
		||||
        help="branch in gitea repository where to activate workflow",
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    args = parser.parse_args()
 | 
			
		||||
 | 
			
		||||
    args.stages = set(args.stages) - set(args.skip_stages)
 | 
			
		||||
@@ -949,6 +990,42 @@ def main():
 | 
			
		||||
 | 
			
		||||
    logger.info("PKG_VERSIONS=%s", PKG_VERSIONS)
 | 
			
		||||
 | 
			
		||||
    if args.run_workflow:
 | 
			
		||||
        gitea_token = os.environ.get("GITEA_TOKEN")
 | 
			
		||||
        if gitea_token is None:
 | 
			
		||||
            raise RuntimeError("Gitea authorization token is not provided through the environment variable GITEA_TOKEN")
 | 
			
		||||
 | 
			
		||||
        api_url = f"https://gitea.basealt.ru/api/v1/repos/{args.workflow_repo}/tags"
 | 
			
		||||
        headers = {
 | 
			
		||||
            "Accept": "application/json",
 | 
			
		||||
            "Content-Type": "application/json",
 | 
			
		||||
            "Authorization": f"token {gitea_token}",
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        tag_name = list(args.branches)[0]
 | 
			
		||||
        for image in args.images:
 | 
			
		||||
            tag_name += "_" + image
 | 
			
		||||
            if PKG_VERSIONS is not None:
 | 
			
		||||
                if (version := PKG_VERSIONS.get(image)) is not None:
 | 
			
		||||
                    tag_name += "@" + version
 | 
			
		||||
 | 
			
		||||
        logger.debug("tag_name=\"%s\"", tag_name)
 | 
			
		||||
 | 
			
		||||
        json = {
 | 
			
		||||
            "message": "workflow trigger",
 | 
			
		||||
            "target": args.workflow_branch,
 | 
			
		||||
            "tag_name": tag_name,
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        response = requests.post(api_url, json=json, headers=headers)
 | 
			
		||||
        if response.status_code != HTTPStatus.CREATED:
 | 
			
		||||
            print(f"{response.status_code=}")
 | 
			
		||||
            raise RuntimeError(
 | 
			
		||||
                    f"failed to run workflow: {response.text!r}"
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
        return
 | 
			
		||||
 | 
			
		||||
    arches = args.arches
 | 
			
		||||
    images_info = ImagesInfo()
 | 
			
		||||
    tags = Tags(args.tags, args.latest)
 | 
			
		||||
 
 | 
			
		||||
@@ -9,3 +9,6 @@ skip-arches = [ "386" ]
 | 
			
		||||
 | 
			
		||||
["alt/ansible"]
 | 
			
		||||
skip-branches = [ "c10f2", "c10f1", "p10" ]
 | 
			
		||||
 | 
			
		||||
["alt/buildkit"]
 | 
			
		||||
skip-branches = [ "c10f1", "p10" ]
 | 
			
		||||
							
								
								
									
										16
									
								
								org/alt/buildkit/Dockerfile.template
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								org/alt/buildkit/Dockerfile.template
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
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"]
 | 
			
		||||
@@ -2,5 +2,5 @@
 | 
			
		||||
is_versioned: true
 | 
			
		||||
version_template: "{{ version }}"
 | 
			
		||||
source_packages:
 | 
			
		||||
  - etcd
 | 
			
		||||
  - buildkit
 | 
			
		||||
...
 | 
			
		||||
							
								
								
									
										1
									
								
								org/alt/buildkit/test
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								org/alt/buildkit/test
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
buildkitd --version
 | 
			
		||||
@@ -1,17 +0,0 @@
 | 
			
		||||
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"]
 | 
			
		||||
@@ -1,13 +0,0 @@
 | 
			
		||||
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`
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
etcdctl version
 | 
			
		||||
@@ -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(:80)/\10.0.0.0\2/' \
 | 
			
		||||
RUN sed -Ei 's/^([[:space:]]*listen[[:space:]]+)(localhost|127.0.0.1)(:80)/\10.0.0.0\3/' \
 | 
			
		||||
            /etc/nginx/sites-available.d/default.conf
 | 
			
		||||
 | 
			
		||||
EXPOSE 80
 | 
			
		||||
 
 | 
			
		||||
@@ -3,9 +3,9 @@ is_versioned: true
 | 
			
		||||
version_template: "{{ version }}"
 | 
			
		||||
source_packages:
 | 
			
		||||
  - >
 | 
			
		||||
    {% if branch in [ "p10", "c10f1", "c10f2"] %}
 | 
			
		||||
    {% raw %}php8.2{% endraw %}
 | 
			
		||||
    {% else %}
 | 
			
		||||
    {%- if branch in [ "p10", "c10f1", "c10f2"] -%}
 | 
			
		||||
    php8.2
 | 
			
		||||
    {%- else -%}
 | 
			
		||||
    php8.3
 | 
			
		||||
    {% endif %}
 | 
			
		||||
    {%- endif -%}
 | 
			
		||||
...
 | 
			
		||||
 
 | 
			
		||||
@@ -3,9 +3,9 @@ is_versioned: true
 | 
			
		||||
version_template: "{{ version }}"
 | 
			
		||||
source_packages:
 | 
			
		||||
  - >
 | 
			
		||||
    {% if branch in ["p10", "c10f2", "c10f1"] %}
 | 
			
		||||
    {% raw %}ruby{% endraw %}
 | 
			
		||||
    {% else %}
 | 
			
		||||
    {%- if branch in ["p10", "c10f2", "c10f1"] -%}
 | 
			
		||||
    ruby
 | 
			
		||||
    {%- else -%}
 | 
			
		||||
    gem-irb
 | 
			
		||||
    {% endif %}
 | 
			
		||||
    {%- endif -%}
 | 
			
		||||
...
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,16 @@ 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"] %}
 | 
			
		||||
{% 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 %}
 | 
			
		||||
ARG PKG_VERSION
 | 
			
		||||
 | 
			
		||||
{{ install_packages("coredns${PKG_VERSION}") }}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,9 +3,13 @@ is_versioned: true
 | 
			
		||||
version_template: v{{ version }}
 | 
			
		||||
source_packages:
 | 
			
		||||
  - >
 | 
			
		||||
    {% if branch in ["sisyphus", "p11", "c10f2"] %}
 | 
			
		||||
    {% raw %}coredns{{ version }}{% endraw %}
 | 
			
		||||
    {% else %}
 | 
			
		||||
    {%- 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 -%}
 | 
			
		||||
    coredns
 | 
			
		||||
    {% endif %}
 | 
			
		||||
    {%- endif -%}
 | 
			
		||||
...
 | 
			
		||||
 
 | 
			
		||||
@@ -8,9 +8,13 @@ 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") }}
 | 
			
		||||
ARG PKG_VERSION
 | 
			
		||||
 | 
			
		||||
RUN ln -s /usr/sbin/etcd /usr/local/bin/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
 | 
			
		||||
 | 
			
		||||
VOLUME /data
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										19
									
								
								org/k8s/etcd/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								org/k8s/etcd/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
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
 | 
			
		||||
```
 | 
			
		||||
@@ -1,12 +1,9 @@
 | 
			
		||||
---
 | 
			
		||||
is_versioned: true
 | 
			
		||||
version_template: >
 | 
			
		||||
  {% set version_patch = version.split(".")[2] | int %}
 | 
			
		||||
  {% if version_patch < 16 %}
 | 
			
		||||
    {{ version }}-0
 | 
			
		||||
  {% else %}
 | 
			
		||||
    v{{ version }}
 | 
			
		||||
  {% endif %}
 | 
			
		||||
version_template:
 | 
			
		||||
  - "v{{ version }}"
 | 
			
		||||
  - "{{ version }}"
 | 
			
		||||
  - "{{ version }}-0"
 | 
			
		||||
source_packages:
 | 
			
		||||
  - etcd
 | 
			
		||||
  - etcd-for-kubernetes{{ version }}
 | 
			
		||||
...
 | 
			
		||||
 
 | 
			
		||||
@@ -1 +1 @@
 | 
			
		||||
etcd --version
 | 
			
		||||
etcd --version && etcdctl --version
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,18 @@
 | 
			
		||||
---
 | 
			
		||||
is_versioned: true
 | 
			
		||||
version_template: v{{ version.rsplit('.', 1) | first  }}-flannel{{ version.rsplit('.', 1) | last }}
 | 
			
		||||
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 %}
 | 
			
		||||
source_packages:
 | 
			
		||||
  - cni-plugin-flannel
 | 
			
		||||
...
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user