Skip to content

Commit

Permalink
added build-release-latest-test-artifacts.yml
Browse files Browse the repository at this point in the history
  • Loading branch information
HenriWahl committed Apr 21, 2024
1 parent 911ecf5 commit 80d78df
Show file tree
Hide file tree
Showing 2 changed files with 294 additions and 0 deletions.
294 changes: 294 additions & 0 deletions .github/workflows/build-release-latest-test-artifacts.yml
Original file line number Diff line number Diff line change
@@ -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 [email protected]: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 "[email protected]" && 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 [email protected]: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 "[email protected]" && 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 [email protected]: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 "[email protected]" && 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
File renamed without changes.

0 comments on commit 80d78df

Please sign in to comment.