-
-
Notifications
You must be signed in to change notification settings - Fork 179
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
added build-release-latest-test-artifacts.yml
- Loading branch information
Showing
2 changed files
with
294 additions
and
0 deletions.
There are no files selected for viewing
294 changes: 294 additions & 0 deletions
294
.github/workflows/build-release-latest-test-artifacts.yml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.