diff --git a/.gitea/workflows/testscript b/.gitea/workflows/testscript new file mode 100755 index 0000000..54351d6 --- /dev/null +++ b/.gitea/workflows/testscript @@ -0,0 +1,65 @@ +#!/bin/bash + +#$1 - ${{ needs.build-process.outputs.branch }} +#$2 - ${{ needs.build-process.outputs.org }} +#$3 - ${{ needs.build-process.outputs.url }} +#$4 - ${{ needs.build-process.outputs.repo }} +#$5 - ${{ gitea.workspace }} + +errors='' +haserr=false +for IM in $(ls $5/org/$2/ | xargs) +do + echo "image=$IM" + if test -f $5/org/$2/$IM/test + then + test=$(cat $5/org/$2/$IM/test) + else test='' + fi + + echo "test script=$test" + imgpath="$2/$IM:$1" + + if [[ $2 == 'k8s' ]] + then imgpath="$2-$1/$IM:latest" + fi + + command="echo empty_command" + if [[ $test != '' ]]; then + command="podman run --rm --entrypoint=\"/bin/sh\" $3/$imgpath -c \"$test\"" + else + if [[ $IM = 'distroless-true' ]]; then + command="podman run --rm $3/$imgpath \"true\"" + fi + if [[ $IM = 'distroless-gotop' ]]; then + command="podman run --rm $3/$imgpath \"--version\"" + fi + if [[ $IM = 'flannel-cni-plugin' ]]; then + command="podman run --rm $3/$imgpath \"/flannel\"" + fi + if [[ $IM = 'pause' ]]; then + command="podman run --rm $3/$imgpath \"/pause\" \"-v\"" + fi + fi + echo $command + eval $command 2>$IM.log || haserr=true + + echo "podman rmi --all" + podman rmi --all + + if [ "$haserr" = true ] + then + if [[ $(cat $IM.log) != '' ]] + then errors="TEST ERROR OF IMAGE $IM: $(cat $IM.log); $errors" + else errors="TEST ERROR OF IMAGE $IM: test returned empty error, but exit status was nozero; $errors" + fi + fi + haserr=false +done + +echo "$errors" +if [[ $errors != '' ]] + then haserr=true +fi +echo "ERR=$haserr" > haserr.log +echo $errors > errors.log diff --git a/.gitea/workflows/wf_full_sis.yaml b/.gitea/workflows/wf_full_sis.yaml new file mode 100644 index 0000000..b492e28 --- /dev/null +++ b/.gitea/workflows/wf_full_sis.yaml @@ -0,0 +1,131 @@ +name: Full building alt images +on: + push: + tags: + - 'sisyphus_*' + +jobs: + build-process: + runs-on: alt-sisyphus + outputs: + branch: ${{ env.BRANCH }} + org: ${{ env.ORG }} + url: ${{ env.URL }} + repo: ${{ env.REPO }} + buildres: ${{ steps.build-script.outcome }} + steps: + - name: Check workspace + run: | + repourl=$(echo $GU | cut -d '/' -f 3) + echo "URL=$repourl" >> ${GITHUB_ENV} + echo $repourl + reponame=$(echo $GR | cut -d '/' -f 1) + echo "REPO=$reponame" >> ${GITHUB_ENV} + echo $reponame + env: + GU: ${{ gitea.server_url }} + GR: ${{ gitea.repository }} + - name: 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 qemu-user-static-binfmt-aarch64 qemu-user-static-binfmt-arm qemu-user-static-binfmt-ppc" + apt-get install -y qemu-user-static-binfmt-aarch64 qemu-user-static-binfmt-arm qemu-user-static-binfmt-ppc + - 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) }} + 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: 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: | + build_args="-b $BR -o $ORG --skip-images alt/distroless-devel" + if [[ $BR == 'sisyphus' ]]; then build_args="$build_args --skip-arches arm"; fi + if [[ $ORG == 'k8s' ]]; then build_args="$build_args --tags tags.toml --overwrite-organization $ORG-$BR --skip-images k8s/kube-apiserver k8s/kube-controller-manager k8s/kube-proxy k8s/kube-scheduler"; fi + echo "build.py $build_args" + ${{ gitea.workspace }}/build.py $build_args + env: + ORG: ${{ env.ORG }} + BR: ${{ env.BRANCH }} + continue-on-error: true + - name: Send notification if build crashed + if: ${{ steps.build-script.outcome != 'success' }} + run: | + issueid=$(curl -X 'GET' "$URL/api/v1/repos/$REPO/image-forge/issues?state=open&labels=building&type=issues&page=1&limit=1&token=$T" -H 'accept: application/json' -s | jq '.[].number' -r) + if [[ $issueid != '' ]]; then \ + 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"; \ + else echo "no issue to send notification"; fi + 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) }} + test-process: + needs: build-process + 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 + - name: Check out current repo + uses: https://gitea.com/actions/checkout@v4 + - name: Test + id: test-script + continue-on-error: true + run: | + $WS/.gitea/workflows/testscript $BR $ORG $URL $REPO $WS + cat haserr.log >> ${GITHUB_ENV} + echo "test process finished" + env: + BR: ${{ needs.build-process.outputs.branch }} + ORG: ${{ needs.build-process.outputs.org }} + URL: ${{ needs.build-process.outputs.url }} + REPO: ${{ needs.build-process.outputs.repo }} + WS: ${{ gitea.workspace }} + - name: Send notification if test crashed + if: ${{ env.ERR == 'true' || steps.test-script.outcome == 'failure' }} + run: | + issueid=$(curl -X 'GET' "$URL/api/v1/repos/$REPO/image-forge/issues?state=open&labels=building&type=issues&page=1&limit=1&token=$T" -H 'accept: application/json' -s | jq '.[].number' -r) + if [[ $issueid != '' ]]; then \ + 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"; \ + else echo "no issue to send notification"; fi + env: + T: ${{ secrets.TOKEN }} + BR: ${{ needs.build-process.outputs.branch }} + URL: ${{ gitea.server_url }} + REPO: ${{ needs.build-process.outputs.repo }}