diff --git a/.github/workflows/build-release-latest-test-artifacts.yml b/.github/workflows/build-release-latest-test-artifacts.yml new file mode 100644 index 000000000..77a91c45a --- /dev/null +++ b/.github/workflows/build-release-latest-test-artifacts.yml @@ -0,0 +1,294 @@ +name: build-release-latest +on: + push: + tags-ignore: 'v*' + branches: + - '**' + - '!master' + - '!*.*.*' + +env: + python_win_version: 3.11.8 + repo_dir: nagstamon-jekyll/docs/repo + cr_image: ghcr.io/henriwahl/build-nagstamon + # to be increased if new updates of build images are necessary + cr_image_version: 4 + # release type this file is used for + release: latest + +jobs: + debian: + runs-on: ubuntu-latest + needs: test + steps: + - uses: actions/checkout@v4 + # docker login is needed for pushing the build image + - uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + # if image defined by variable cr_image_version is not pullable aka does not exist it will be created and pushed + - run: docker pull ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} || /usr/bin/docker build -t ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} -f build/docker/Dockerfile-${{ github.job }} . + - run: docker push ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} + # building in precompiled image makes them way faster instead of creating the build environment every time from scratch + - run: /usr/bin/docker run -v ${{ github.workspace }}:/nagstamon -e DEB_BUILD_OPTIONS=nocheck ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} + - uses: actions/upload-artifact@v4 + with: + path: build/*.deb + retention-days: 1 + if-no-files-found: error + name: ${{ github.job }} + + fedora-37: + runs-on: ubuntu-latest + needs: test + steps: + - uses: actions/checkout@v4 + # docker login is needed for pushing the build image + - uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + # if image defined by variable cr_image_version is not pullable aka does not exist it will be created and pushed + - run: docker pull ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} || /usr/bin/docker build -t ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} -f build/docker/Dockerfile-${{ github.job }} . + - run: docker push ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} + # building in precompiled image makes them way faster instead of creating the build environment every time from scratch + - run: /usr/bin/docker run -v ${{ github.workspace }}:/nagstamon ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} + - uses: actions/upload-artifact@v4 + with: + path: build/*.rpm + retention-days: 1 + if-no-files-found: error + name: ${{ github.job }} + + fedora-38: + runs-on: ubuntu-latest + needs: test + steps: + - uses: actions/checkout@v4 + # docker login is needed for pushing the build image + - uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + # if image defined by variable cr_image_version is not pullable aka does not exist it will be created and pushed + - run: docker pull ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} || /usr/bin/docker build -t ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} -f build/docker/Dockerfile-${{ github.job }} . + - run: docker push ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} + # building in precompiled image makes them way faster instead of creating the build environment every time from scratch + - run: /usr/bin/docker run -v ${{ github.workspace }}:/nagstamon ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} + - uses: actions/upload-artifact@v4 + with: + path: build/*.rpm + retention-days: 1 + if-no-files-found: error + name: ${{ github.job }} + + fedora-39: + runs-on: ubuntu-latest + needs: test + steps: + - uses: actions/checkout@v4 + # docker login is needed for pushing the build image + - uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + # if image defined by variable cr_image_version is not pullable aka does not exist it will be created and pushed + - run: docker pull ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} || /usr/bin/docker build -t ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} -f build/docker/Dockerfile-${{ github.job }} . + - run: docker push ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} + # building in precompiled image makes them way faster instead of creating the build environment every time from scratch + - run: /usr/bin/docker run -v ${{ github.workspace }}:/nagstamon ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} + - uses: actions/upload-artifact@v4 + with: + path: build/*.rpm + retention-days: 1 + if-no-files-found: error + name: ${{ github.job }} + + fedora-40: + runs-on: ubuntu-latest + needs: test + steps: + - uses: actions/checkout@v4 + # docker login is needed for pushing the build image + - uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + # if image defined by variable cr_image_version is not pullable aka does not exist it will be created and pushed + - run: docker pull ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} || /usr/bin/docker build -t ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} -f build/docker/Dockerfile-${{ github.job }} . + - run: docker push ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} + # building in precompiled image makes them way faster instead of creating the build environment every time from scratch + - run: /usr/bin/docker run -v ${{ github.workspace }}:/nagstamon ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} + - uses: actions/upload-artifact@v4 + with: + path: build/*.rpm + retention-days: 1 + if-no-files-found: error + name: ${{ github.job }} + + fedora-41: + runs-on: ubuntu-latest + needs: test + steps: + - uses: actions/checkout@v4 + # docker login is needed for pushing the build image + - uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + # if image defined by variable cr_image_version is not pullable aka does not exist it will be created and pushed + - run: docker pull ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} || /usr/bin/docker build -t ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} -f build/docker/Dockerfile-${{ github.job }} . + - run: docker push ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} + # building in precompiled image makes them way faster instead of creating the build environment every time from scratch + - run: /usr/bin/docker run -v ${{ github.workspace }}:/nagstamon ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} + - uses: actions/upload-artifact@v4 + with: + path: build/*.rpm + retention-days: 1 + if-no-files-found: error + name: ${{ github.job }} + + rhel-9: + runs-on: ubuntu-latest + needs: test + steps: + - uses: actions/checkout@v4 + # docker login is needed for pushing the build image + - uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + # if image defined by variable cr_image_version is not pullable aka does not exist it will be created and pushed + - run: docker pull ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} || /usr/bin/docker build -t ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} -f build/docker/Dockerfile-${{ github.job }} . + - run: docker push ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} + # building in precompiled image makes them way faster instead of creating the build environment every time from scratch + - run: /usr/bin/docker run -v ${{ github.workspace }}:/nagstamon ${{ env.cr_image }}-${{ github.job }}:${{ env.cr_image_version }} + - uses: actions/upload-artifact@v4 + with: + path: build/*.rpm + retention-days: 1 + if-no-files-found: error + name: ${{ github.job }} + +# borrowed from dhcpy6d + repo-debian: + runs-on: ubuntu-latest + # try to avoid race condition and start uploading only after the last install package has been build + needs: [debian, fedora-37, fedora-38, fedora-39, fedora-40, fedora-41, rhel-9] + env: + family: debian + steps: + - uses: actions/checkout@v4 + # get binaries created by other jobs + - uses: actions/download-artifact@v4 + with: + pattern: 'debian*' + - run: pwd + - run: find . -name '*.deb' + # get secret signing key + - run: echo "${{ secrets.PACKAGE_SIGNING_KEY }}" > signing_key.asc + # organize SSH deploy key for nagstamon-jekyll repo + - run: mkdir ~/.ssh + - run: echo "${{ secrets.NAGSTAMON_REPO_KEY_WEB }}" > ~/.ssh/id_ed25519 + - run: chmod -R go-rwx ~/.ssh + # get and prepare nagstamon-jekyll + - run: git clone git@github.com:HenriWahl/nagstamon-jekyll.git + - run: rm -rf ${{ env.repo_dir }}/${{ env.family }}/${{ env.dist }}/${{ env.release }} + - run: mkdir -p ${{ env.repo_dir }}/${{ env.family }}/${{ env.dist }}/${{ env.release }} + # create deb repo via Debian build container + - run: | + /usr/bin/docker run --rm \ + -v ${{ github.workspace }}:/workspace \ + -v $PWD/${{ env.repo_dir }}/${{ env.family }}/${{ env.release }}:/repo \ + ${{ env.cr_image }}-${{ env.family }}:${{ env.cr_image_version }} \ + /bin/sh -c "cd /workspace && \ + gpg --import signing_key.asc && \ + cp -r artifact/*.deb nagstamon-jekyll/docs/repo/${{ env.family }}/${{ env.release }} && \ + cd nagstamon-jekyll/docs/repo/${{ env.family }}/${{ env.release }} + dpkg-scanpackages . > Packages && \ + gzip -k -f Packages && \ + apt-ftparchive release . > Release && \ + gpg -abs -o Release.gpg Release && \ + gpg --clearsign -o InRelease Release && \ + gpg --output key.gpg --armor --export" + # commit and push new binaries to nagstamon-jekyll + - run: git config --global user.email "repo@nagstamon.de" && git config --global user.name "Nagstamon Repository" + - run: cd ${{ env.repo_dir }} && git add . && git commit -am "new ${{ env.release }} repo ${{ env.family }}" && git push + + repo-rpm-fedora: + runs-on: ubuntu-latest + # if not all are ready there might be trouble when downloading artifacts + # maybe faster now with build containers + needs: [repo-debian] + env: + family: fedora + # which image to use for packaging + cr_image_latest: 39 + steps: + # get binaries created by other jobs + - uses: actions/download-artifact@v4 + with: + pattern: 'fedora*' + # organize SSH deploy key for nagstamon-repo + - run: mkdir ~/.ssh + - run: echo "${{ secrets.NAGSTAMON_REPO_KEY_WEB }}" > ~/.ssh/id_ed25519 + - run: chmod -R go-rwx ~/.ssh + # get and prepare nagstamon-jekyll + - run: git clone git@github.com:HenriWahl/nagstamon-jekyll.git + - run: rm -rf ${{ env.repo_dir }}/${{ env.family }}/${{ env.release }} + - run: mkdir -p ${{ env.repo_dir }}/${{ env.family }}/${{ env.release }} + # copy *.rpm files into nagstamon-jekyll and create repodata + - run: | + version=${{ env.release }} && \ + mkdir -p mkdir -p ${{ env.repo_dir }}/${{ env.family }}/${version} && \ + cp -r artifact/*.${{ env.family }}* ${{ env.repo_dir }}/${{ env.family }}/${version} && \ + docker run --rm -v ${PWD}/${{ env.repo_dir }}/${{ env.family }}/${version}:/repo \ + ${{ env.cr_image }}-${{ env.family }}-${{ env.cr_image_latest }}:${{ env.cr_image_version }} \ + /bin/bash -c "createrepo --verbose --workers 1 /repo" && \ + ls -laR ${PWD}/${{ env.repo_dir }}/${{ env.family }}/${version} + # commit and push new binaries to nagstamon-repo + - run: git config --global user.email "repo@nagstamon.de" && git config --global user.name "Nagstamon Repository" + - run: cd ${{ env.repo_dir }} && git pull && git add . && git commit -am "new latest repo ${{ env.family }}" && git push + + repo-rpm-rhel: + runs-on: ubuntu-latest + # if not all are ready there might be trouble when downloading artifacts + # maybe faster now with build containers + needs: [repo-rpm-fedora] + env: + family: rhel + # currently just one version available + version: 9 + steps: + # get binaries created by other jobs + - uses: actions/download-artifact@v4 + with: + name: 'rhel*' + # organize SSH deploy key for nagstamon-repo + - run: mkdir ~/.ssh + - run: echo "${{ secrets.NAGSTAMON_REPO_KEY_WEB }}" > ~/.ssh/id_ed25519 + - run: chmod -R go-rwx ~/.ssh + # get and prepare nagstamon-jekyll + - run: git clone git@github.com:HenriWahl/nagstamon-jekyll.git + - run: rm -rf ${{ env.repo_dir }}/${{ env.family }}/${{ env.release }} + - run: mkdir -p ${{ env.repo_dir }}/${{ env.family }}/${{ env.release }} + # copy *.rpm files into nagstamon-jekyll and create repodata + - run: | + version=${{ env.release }} && \ + mkdir -p mkdir -p ${{ env.repo_dir }}/${{ env.family }}/${version} && \ + cp -r artifact/*.${{ env.family }}* ${{ env.repo_dir }}/${{ env.family }}/${version} && \ + docker run --rm -v ${PWD}/${{ env.repo_dir }}/${{ env.family }}/${version}:/repo \ + ${{ env.cr_image }}-${{ env.family }}-${{ env.version }}:${{ env.cr_image_version }} \ + /bin/bash -c "createrepo --verbose --workers 1 /repo" && \ + ls -laR ${PWD}/${{ env.repo_dir }}/${{ env.family }}/${version} + # commit and push new binaries to nagstamon-repo + - run: git config --global user.email "repo@nagstamon.de" && git config --global user.name "Nagstamon Repository" + - run: cd ${{ env.repo_dir }} && git pull && git add . && git commit -am "new latest repo ${{ env.family }}" && git push diff --git a/.github/workflows/build-release-latest.yml b/.github/workflows/build-release-latest.yml_deactivated similarity index 100% rename from .github/workflows/build-release-latest.yml rename to .github/workflows/build-release-latest.yml_deactivated