From aa016d4772ecedd2aaf685f331c325a350c8a13d Mon Sep 17 00:00:00 2001 From: Philipp Wagner Date: Mon, 15 Jun 2026 17:39:31 +0200 Subject: [PATCH] Add Linux distro and Flatpak artifacts to CI pipelines (#8) (#35) Fix Pipelines hopefully again nochmal ... :) AAAA BBBB fix Flatpack from main Flatpak again .... flatpak github packages test Flatpak? flatpakref fork-ready Install docs n fix Desktop Entries --- .github/workflows/nightly-artifacts.yml | 317 +++++++++++++++++++- .github/workflows/tagged-release.yml | 371 +++++++++++++++++++++++- github_docs/de-Installation.md | 66 ++++- github_docs/en-Installation.md | 66 ++++- 4 files changed, 795 insertions(+), 25 deletions(-) diff --git a/.github/workflows/nightly-artifacts.yml b/.github/workflows/nightly-artifacts.yml index 313aad9..7ce2f0c 100644 --- a/.github/workflows/nightly-artifacts.yml +++ b/.github/workflows/nightly-artifacts.yml @@ -11,6 +11,10 @@ on: env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true +permissions: + contents: read + packages: write + jobs: build-windows-zip: name: Build Windows ZIP @@ -83,8 +87,6 @@ jobs: run: | VERSION=$(grep -m1 '' pom.xml | sed 's/.*\(.*\)<\/version>.*/\1/') SHORT_SHA="${GITHUB_SHA::7}" - echo "VERSION=$VERSION" >> "$GITHUB_ENV" - echo "SHORT_SHA=$SHORT_SHA" >> "$GITHUB_ENV" echo "ASSET_BASENAME=KST4Contest-${VERSION}-${SHORT_SHA}" >> "$GITHUB_ENV" - name: Set up Java 17 @@ -153,6 +155,317 @@ jobs: path: dist/KST4Contest-*-linux-x86_64.AppImage retention-days: 14 + build-linux-deb: + name: Build Debian package + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4.1.7 + + - name: Resolve nightly version info + run: | + VERSION=$(grep -m1 '' pom.xml | sed 's/.*\(.*\)<\/version>.*/\1/') + SHORT_SHA="${GITHUB_SHA::7}" + echo "ASSET_BASENAME=KST4Contest-${VERSION}-${SHORT_SHA}" >> "$GITHUB_ENV" + + - name: Set up Java 17 + uses: actions/setup-java@v4.1.0 + with: + distribution: temurin + java-version: "17" + + - name: Install packaging dependencies + run: | + sudo apt-get update -qq + sudo apt-get install -y --no-install-recommends fakeroot + + - name: Ensure mvnw is executable + run: chmod +x mvnw + + - name: Build JAR and copy runtime dependencies + run: | + ./mvnw -B -DskipTests package dependency:copy-dependencies -DincludeScope=runtime -DoutputDirectory=target/dist-libs + cp "$(ls -t target/praktiKST-*.jar | head -n 1)" target/dist-libs/app.jar + + - name: Build Debian package + run: | + mkdir -p dist + jpackage \ + --type deb \ + --name KST4Contest \ + --input target/dist-libs \ + --main-jar app.jar \ + --main-class kst4contest.view.Kst4ContestApplication \ + --module-path target/dist-libs \ + --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.web,javafx.media,java.sql \ + --dest dist + DEB="$(ls dist/*.deb | head -n 1)" + if [ -z "$DEB" ]; then + echo "No DEB produced by jpackage" && exit 1 + fi + mv "$DEB" "dist/${ASSET_BASENAME}-debian-amd64.deb" + + - name: Upload Debian artifact + uses: actions/upload-artifact@v4.3.4 + with: + name: linux-debian + path: dist/KST4Contest-*-debian-amd64.deb + retention-days: 14 + + build-linux-rpm: + name: Build Fedora package + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4.1.7 + + - name: Resolve nightly version info + run: | + VERSION=$(grep -m1 '' pom.xml | sed 's/.*\(.*\)<\/version>.*/\1/') + SHORT_SHA="${GITHUB_SHA::7}" + echo "ASSET_BASENAME=KST4Contest-${VERSION}-${SHORT_SHA}" >> "$GITHUB_ENV" + + - name: Set up Java 17 + uses: actions/setup-java@v4.1.0 + with: + distribution: temurin + java-version: "17" + + - name: Install packaging dependencies + run: | + sudo apt-get update -qq + sudo apt-get install -y --no-install-recommends rpm + + - name: Ensure mvnw is executable + run: chmod +x mvnw + + - name: Build JAR and copy runtime dependencies + run: | + ./mvnw -B -DskipTests package dependency:copy-dependencies -DincludeScope=runtime -DoutputDirectory=target/dist-libs + cp "$(ls -t target/praktiKST-*.jar | head -n 1)" target/dist-libs/app.jar + + - name: Build Fedora package + run: | + mkdir -p dist + jpackage \ + --type rpm \ + --name KST4Contest \ + --input target/dist-libs \ + --main-jar app.jar \ + --main-class kst4contest.view.Kst4ContestApplication \ + --module-path target/dist-libs \ + --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.web,javafx.media,java.sql \ + --dest dist + RPM="$(ls dist/*.rpm | head -n 1)" + if [ -z "$RPM" ]; then + echo "No RPM produced by jpackage" && exit 1 + fi + mv "$RPM" "dist/${ASSET_BASENAME}-fedora-x86_64.rpm" + + - name: Upload Fedora artifact + uses: actions/upload-artifact@v4.3.4 + with: + name: linux-fedora + path: dist/KST4Contest-*-fedora-x86_64.rpm + retention-days: 14 + + build-linux-arch: + name: Build Arch Linux package + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4.1.7 + + - name: Resolve nightly version info + run: | + VERSION=$(grep -m1 '' pom.xml | sed 's/.*\(.*\)<\/version>.*/\1/') + SHORT_SHA="${GITHUB_SHA::7}" + echo "VERSION=$VERSION" >> "$GITHUB_ENV" + echo "SHORT_SHA=$SHORT_SHA" >> "$GITHUB_ENV" + echo "ASSET_BASENAME=KST4Contest-${VERSION}-${SHORT_SHA}" >> "$GITHUB_ENV" + + - name: Set up Java 17 + uses: actions/setup-java@v4.1.0 + with: + distribution: temurin + java-version: "17" + + - name: Install packaging dependencies + run: | + sudo apt-get update -qq + sudo apt-get install -y --no-install-recommends zstd + + - name: Ensure mvnw is executable + run: chmod +x mvnw + + - name: Build JAR and copy runtime dependencies + run: | + ./mvnw -B -DskipTests package dependency:copy-dependencies -DincludeScope=runtime -DoutputDirectory=target/dist-libs + cp "$(ls -t target/praktiKST-*.jar | head -n 1)" target/dist-libs/app.jar + + - name: Build app-image with jpackage + run: | + mkdir -p dist + jpackage \ + --type app-image \ + --name KST4Contest \ + --input target/dist-libs \ + --main-jar app.jar \ + --main-class kst4contest.view.Kst4ContestApplication \ + --module-path target/dist-libs \ + --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.web,javafx.media,java.sql \ + --dest dist + + - name: Build Arch Linux package artifact + run: | + ARCH=$(uname -m) + PKGVER=$(printf '%s' "${VERSION}-${SHORT_SHA}" | sed 's/[^[:alnum:].+_]/_/g') + PKGROOT="target/archpkg" + rm -rf "$PKGROOT" + mkdir -p "$PKGROOT/usr/lib/KST4Contest" "$PKGROOT/usr/bin" + cp -a dist/KST4Contest/. "$PKGROOT/usr/lib/KST4Contest/" + cat > "$PKGROOT/usr/bin/KST4Contest" << 'EOF' + #!/bin/sh + exec /usr/lib/KST4Contest/bin/KST4Contest "$@" + EOF + chmod 755 "$PKGROOT/usr/bin/KST4Contest" + mkdir -p "$PKGROOT/usr/share/applications" "$PKGROOT/usr/share/icons/hicolor/256x256/apps" + cat > "$PKGROOT/usr/share/applications/KST4Contest.desktop" << 'EOF' + [Desktop Entry] + Type=Application + Name=KST4Contest + Comment=ON4KST Chat Client for VHF/UHF contest operation + Exec=KST4Contest + Icon=KST4Contest + Categories=Network;HamRadio; + Terminal=false + EOF + if [ -f "$PKGROOT/usr/lib/KST4Contest/lib/KST4Contest.png" ]; then + cp "$PKGROOT/usr/lib/KST4Contest/lib/KST4Contest.png" "$PKGROOT/usr/share/icons/hicolor/256x256/apps/KST4Contest.png" + fi + INSTALLED_SIZE=$(du -sk "$PKGROOT" | cut -f1) + cat > "$PKGROOT/.PKGINFO" << EOF + pkgname = kst4contest + pkgbase = kst4contest + pkgver = ${PKGVER}-1 + pkgdesc = KST4Contest amateur radio contest logger + url = https://github.com/${{ github.repository }} + builddate = $(date +%s) + packager = GitHub Actions + size = ${INSTALLED_SIZE} + arch = ${ARCH} + license = custom + depend = java-runtime + EOF + tar --zstd -cf "dist/${ASSET_BASENAME}-archlinux-${ARCH}.pkg.tar.zst" -C "$PKGROOT" . + + - name: Upload Arch Linux artifact + uses: actions/upload-artifact@v4.3.4 + with: + name: linux-arch + path: dist/KST4Contest-*-archlinux-*.pkg.tar.zst + retention-days: 14 + + build-flatpak: + name: Build Flatpak + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4.1.7 + + - name: Resolve nightly version info + run: | + VERSION=$(grep -m1 '' pom.xml | sed 's/.*\(.*\)<\/version>.*/\1/') + SHORT_SHA="${GITHUB_SHA::7}" + echo "VERSION=$VERSION" >> "$GITHUB_ENV" + echo "SHORT_SHA=$SHORT_SHA" >> "$GITHUB_ENV" + echo "ASSET_BASENAME=KST4Contest-${VERSION}-${SHORT_SHA}" >> "$GITHUB_ENV" + + - name: Set up Java 17 + uses: actions/setup-java@v4.1.0 + with: + distribution: temurin + java-version: "17" + + - name: Ensure mvnw is executable + run: chmod +x mvnw + + - name: Install Flatpak tooling + run: | + sudo apt-get update -qq + sudo apt-get install -y --no-install-recommends flatpak flatpak-builder elfutils + flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo + flatpak --user install -y flathub org.freedesktop.Platform//24.08 org.freedesktop.Sdk//24.08 + + - name: Build app-image with jpackage + run: | + ./mvnw -B -DskipTests package dependency:copy-dependencies -DincludeScope=runtime -DoutputDirectory=target/dist-libs + cp "$(ls -t target/praktiKST-*.jar | head -n 1)" target/dist-libs/app.jar + mkdir -p target/flatpak-src + jpackage \ + --type app-image \ + --name KST4Contest \ + --input target/dist-libs \ + --main-jar app.jar \ + --main-class kst4contest.view.Kst4ContestApplication \ + --module-path target/dist-libs \ + --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.web,javafx.media,java.sql \ + --dest target/flatpak-src + + - name: Create Flatpak manifest + run: | + mkdir -p dist + cat > target/de.x08.KST4Contest.yml << 'EOF' + app-id: de.x08.KST4Contest + runtime: org.freedesktop.Platform + runtime-version: "24.08" + sdk: org.freedesktop.Sdk + command: KST4Contest + finish-args: + - --socket=wayland + - --socket=x11 + - --share=network + - --share=ipc + - --device=dri + modules: + - name: kst4contest + buildsystem: simple + build-commands: + - install -d /app/lib/KST4Contest /app/bin /app/share/applications + - cp -a . /app/lib/KST4Contest/ + - printf '#!/bin/sh\nexec /app/lib/KST4Contest/bin/KST4Contest "$@"\n' > /app/bin/KST4Contest + - chmod 755 /app/bin/KST4Contest + - echo '[Desktop Entry]' > /app/share/applications/de.x08.KST4Contest.desktop + - echo 'Type=Application' >> /app/share/applications/de.x08.KST4Contest.desktop + - echo 'Name=KST4Contest' >> /app/share/applications/de.x08.KST4Contest.desktop + - echo 'Comment=ON4KST Chat Client for VHF/UHF contest operation' >> /app/share/applications/de.x08.KST4Contest.desktop + - echo 'Exec=KST4Contest' >> /app/share/applications/de.x08.KST4Contest.desktop + - echo 'Icon=de.x08.KST4Contest' >> /app/share/applications/de.x08.KST4Contest.desktop + - printf 'Categories=Network;HamRadio;\n' >> /app/share/applications/de.x08.KST4Contest.desktop + - echo 'Terminal=false' >> /app/share/applications/de.x08.KST4Contest.desktop + - test -f /app/lib/KST4Contest/lib/KST4Contest.png && install -Dm644 /app/lib/KST4Contest/lib/KST4Contest.png /app/share/icons/hicolor/256x256/apps/de.x08.KST4Contest.png || true + sources: + - type: dir + path: flatpak-src/KST4Contest + EOF + + - name: Build Flatpak bundle + run: | + flatpak-builder --force-clean target/flatpak-build target/de.x08.KST4Contest.yml + flatpak build-export target/flatpak-repo target/flatpak-build + flatpak build-bundle target/flatpak-repo "dist/${ASSET_BASENAME}-linux-x86_64.flatpak" de.x08.KST4Contest + + - name: Upload Flatpak artifact + uses: actions/upload-artifact@v4.3.4 + with: + name: linux-flatpak + path: dist/KST4Contest-*-linux-x86_64.flatpak + retention-days: 14 + build-macos-dmg: name: Build macOS DMG (${{ matrix.os }}) runs-on: ${{ matrix.os }} diff --git a/.github/workflows/tagged-release.yml b/.github/workflows/tagged-release.yml index 2f3f520..3b58954 100644 --- a/.github/workflows/tagged-release.yml +++ b/.github/workflows/tagged-release.yml @@ -8,6 +8,7 @@ on: permissions: contents: write + packages: write env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true @@ -134,6 +135,313 @@ jobs: name: linux-appimage path: dist/KST4Contest-${{ github.ref_name }}-linux-x86_64.AppImage + build-linux-deb: + name: Build Debian package + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4.1.7 + + - name: Set up Java 17 + uses: actions/setup-java@v4.1.0 + with: + distribution: temurin + java-version: "17" + + - name: Install packaging dependencies + run: | + sudo apt-get update -qq + sudo apt-get install -y --no-install-recommends fakeroot + + - name: Ensure mvnw is executable + run: chmod +x mvnw + + - name: Build JAR and copy runtime dependencies + run: | + ./mvnw -B -DskipTests package dependency:copy-dependencies -DincludeScope=runtime -DoutputDirectory=target/dist-libs + cp "$(ls -t target/praktiKST-*.jar | head -n 1)" target/dist-libs/app.jar + + - name: Build Debian package + run: | + mkdir -p dist + jpackage \ + --type deb \ + --name KST4Contest \ + --input target/dist-libs \ + --main-jar app.jar \ + --main-class kst4contest.view.Kst4ContestApplication \ + --module-path target/dist-libs \ + --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.web,javafx.media,java.sql \ + --dest dist + DEB="$(ls dist/*.deb | head -n 1)" + if [ -z "$DEB" ]; then + echo "No DEB produced by jpackage" && exit 1 + fi + mv "$DEB" "dist/KST4Contest-${{ github.ref_name }}-debian-amd64.deb" + + - name: Upload Debian artifact + uses: actions/upload-artifact@v4.3.4 + with: + name: linux-debian + path: dist/KST4Contest-${{ github.ref_name }}-debian-amd64.deb + + build-linux-rpm: + name: Build Fedora package + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4.1.7 + + - name: Set up Java 17 + uses: actions/setup-java@v4.1.0 + with: + distribution: temurin + java-version: "17" + + - name: Install packaging dependencies + run: | + sudo apt-get update -qq + sudo apt-get install -y --no-install-recommends rpm + + - name: Ensure mvnw is executable + run: chmod +x mvnw + + - name: Build JAR and copy runtime dependencies + run: | + ./mvnw -B -DskipTests package dependency:copy-dependencies -DincludeScope=runtime -DoutputDirectory=target/dist-libs + cp "$(ls -t target/praktiKST-*.jar | head -n 1)" target/dist-libs/app.jar + + - name: Build Fedora package + run: | + mkdir -p dist + jpackage \ + --type rpm \ + --name KST4Contest \ + --input target/dist-libs \ + --main-jar app.jar \ + --main-class kst4contest.view.Kst4ContestApplication \ + --module-path target/dist-libs \ + --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.web,javafx.media,java.sql \ + --dest dist + RPM="$(ls dist/*.rpm | head -n 1)" + if [ -z "$RPM" ]; then + echo "No RPM produced by jpackage" && exit 1 + fi + mv "$RPM" "dist/KST4Contest-${{ github.ref_name }}-fedora-x86_64.rpm" + + - name: Upload Fedora artifact + uses: actions/upload-artifact@v4.3.4 + with: + name: linux-fedora + path: dist/KST4Contest-${{ github.ref_name }}-fedora-x86_64.rpm + + build-linux-arch: + name: Build Arch Linux package + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4.1.7 + + - name: Set up Java 17 + uses: actions/setup-java@v4.1.0 + with: + distribution: temurin + java-version: "17" + + - name: Install packaging dependencies + run: | + sudo apt-get update -qq + sudo apt-get install -y --no-install-recommends zstd + + - name: Ensure mvnw is executable + run: chmod +x mvnw + + - name: Build JAR and copy runtime dependencies + run: | + ./mvnw -B -DskipTests package dependency:copy-dependencies -DincludeScope=runtime -DoutputDirectory=target/dist-libs + cp "$(ls -t target/praktiKST-*.jar | head -n 1)" target/dist-libs/app.jar + + - name: Build app-image with jpackage + run: | + mkdir -p dist + jpackage \ + --type app-image \ + --name KST4Contest \ + --input target/dist-libs \ + --main-jar app.jar \ + --main-class kst4contest.view.Kst4ContestApplication \ + --module-path target/dist-libs \ + --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.web,javafx.media,java.sql \ + --dest dist + + - name: Build Arch Linux package artifact + run: | + ARCH=$(uname -m) + PKGVER=$(printf '%s' "${{ github.ref_name }}" | sed 's/[^[:alnum:].+_]/_/g') + PKGROOT="target/archpkg" + rm -rf "$PKGROOT" + mkdir -p "$PKGROOT/usr/lib/KST4Contest" "$PKGROOT/usr/bin" + cp -a dist/KST4Contest/. "$PKGROOT/usr/lib/KST4Contest/" + cat > "$PKGROOT/usr/bin/KST4Contest" << 'EOF' + #!/bin/sh + exec /usr/lib/KST4Contest/bin/KST4Contest "$@" + EOF + chmod 755 "$PKGROOT/usr/bin/KST4Contest" + mkdir -p "$PKGROOT/usr/share/applications" "$PKGROOT/usr/share/icons/hicolor/256x256/apps" + cat > "$PKGROOT/usr/share/applications/KST4Contest.desktop" << 'EOF' + [Desktop Entry] + Type=Application + Name=KST4Contest + Comment=ON4KST Chat Client for VHF/UHF contest operation + Exec=KST4Contest + Icon=KST4Contest + Categories=Network;HamRadio; + Terminal=false + EOF + if [ -f "$PKGROOT/usr/lib/KST4Contest/lib/KST4Contest.png" ]; then + cp "$PKGROOT/usr/lib/KST4Contest/lib/KST4Contest.png" "$PKGROOT/usr/share/icons/hicolor/256x256/apps/KST4Contest.png" + fi + INSTALLED_SIZE=$(du -sk "$PKGROOT" | cut -f1) + cat > "$PKGROOT/.PKGINFO" << EOF + pkgname = kst4contest + pkgbase = kst4contest + pkgver = ${PKGVER}-1 + pkgdesc = KST4Contest amateur radio contest logger + url = https://github.com/${{ github.repository }} + builddate = $(date +%s) + packager = GitHub Actions + size = ${INSTALLED_SIZE} + arch = ${ARCH} + license = custom + depend = java-runtime + EOF + tar --zstd -cf "dist/KST4Contest-${{ github.ref_name }}-archlinux-${ARCH}.pkg.tar.zst" -C "$PKGROOT" . + + - name: Upload Arch Linux artifact + uses: actions/upload-artifact@v4.3.4 + with: + name: linux-arch + path: dist/KST4Contest-${{ github.ref_name }}-archlinux-*.pkg.tar.zst + + build-flatpak: + name: Build Flatpak + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4.1.7 + + - name: Set up Java 17 + uses: actions/setup-java@v4.1.0 + with: + distribution: temurin + java-version: "17" + + - name: Ensure mvnw is executable + run: chmod +x mvnw + + - name: Install Flatpak tooling + run: | + sudo apt-get update -qq + sudo apt-get install -y --no-install-recommends flatpak flatpak-builder elfutils + flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo + flatpak --user install -y flathub org.freedesktop.Platform//24.08 org.freedesktop.Sdk//24.08 + + - name: Build app-image with jpackage + run: | + ./mvnw -B -DskipTests package dependency:copy-dependencies -DincludeScope=runtime -DoutputDirectory=target/dist-libs + cp "$(ls -t target/praktiKST-*.jar | head -n 1)" target/dist-libs/app.jar + mkdir -p target/flatpak-src + jpackage \ + --type app-image \ + --name KST4Contest \ + --input target/dist-libs \ + --main-jar app.jar \ + --main-class kst4contest.view.Kst4ContestApplication \ + --module-path target/dist-libs \ + --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.web,javafx.media,java.sql \ + --dest target/flatpak-src + + - name: Create Flatpak manifest + run: | + mkdir -p dist + cat > target/de.x08.KST4Contest.yml << 'EOF' + app-id: de.x08.KST4Contest + runtime: org.freedesktop.Platform + runtime-version: "24.08" + sdk: org.freedesktop.Sdk + command: KST4Contest + finish-args: + - --socket=wayland + - --socket=x11 + - --share=network + - --share=ipc + - --device=dri + modules: + - name: kst4contest + buildsystem: simple + build-commands: + - install -d /app/lib/KST4Contest /app/bin /app/share/applications + - cp -a . /app/lib/KST4Contest/ + - printf '#!/bin/sh\nexec /app/lib/KST4Contest/bin/KST4Contest "$@"\n' > /app/bin/KST4Contest + - chmod 755 /app/bin/KST4Contest + - echo '[Desktop Entry]' > /app/share/applications/de.x08.KST4Contest.desktop + - echo 'Type=Application' >> /app/share/applications/de.x08.KST4Contest.desktop + - echo 'Name=KST4Contest' >> /app/share/applications/de.x08.KST4Contest.desktop + - echo 'Comment=ON4KST Chat Client for VHF/UHF contest operation' >> /app/share/applications/de.x08.KST4Contest.desktop + - echo 'Exec=KST4Contest' >> /app/share/applications/de.x08.KST4Contest.desktop + - echo 'Icon=de.x08.KST4Contest' >> /app/share/applications/de.x08.KST4Contest.desktop + - printf 'Categories=Network;HamRadio;\n' >> /app/share/applications/de.x08.KST4Contest.desktop + - echo 'Terminal=false' >> /app/share/applications/de.x08.KST4Contest.desktop + - test -f /app/lib/KST4Contest/lib/KST4Contest.png && install -Dm644 /app/lib/KST4Contest/lib/KST4Contest.png /app/share/icons/hicolor/256x256/apps/de.x08.KST4Contest.png || true + sources: + - type: dir + path: flatpak-src/KST4Contest + EOF + + - name: Import Flatpak signing key + run: | + echo "${{ secrets.FLATPAK_GPG_PRIVATE_KEY }}" | gpg --batch --import + FLATPAK_GPG_KEY_ID=$(gpg --list-secret-keys --with-colons | awk -F: '/^fpr/{print $10; exit}') + echo "FLATPAK_GPG_KEY_ID=$FLATPAK_GPG_KEY_ID" >> "$GITHUB_ENV" + + - name: Build Flatpak repo + run: | + flatpak-builder --force-clean target/flatpak-build target/de.x08.KST4Contest.yml + flatpak build-export --gpg-sign="$FLATPAK_GPG_KEY_ID" target/flatpak-repo target/flatpak-build stable + flatpak build-update-repo --gpg-sign="$FLATPAK_GPG_KEY_ID" target/flatpak-repo + + - name: Create flatpakref + run: | + REPO_NAME="${GITHUB_REPOSITORY#*/}" + PAGES_URL="https://${GITHUB_REPOSITORY_OWNER}.github.io/${REPO_NAME}/" + GPG_KEY_B64=$(gpg --export "$FLATPAK_GPG_KEY_ID" | base64 -w 0) + cat > "dist/de.x08.KST4Contest.flatpakref" << EOF + [Flatpak Ref] + Name=de.x08.KST4Contest + Branch=stable + Title=KST4Contest – ON4KST Chat Client + Url=${PAGES_URL} + RuntimeRepo=https://flathub.org/repo/flathub.flatpakrepo + GPGKey=${GPG_KEY_B64} + IsRuntime=false + EOF + + - name: Upload flatpakref + uses: actions/upload-artifact@v4.3.4 + with: + name: flatpakref + path: dist/de.x08.KST4Contest.flatpakref + + - name: Upload Flatpak OSTree repo + uses: actions/upload-artifact@v4.3.4 + with: + name: flatpak-ostree-repo + path: target/flatpak-repo/ + build-macos-dmg: name: Build macOS DMG (${{ matrix.os }}) runs-on: ${{ matrix.os }} @@ -171,7 +479,7 @@ jobs: --module-path target/dist-libs \ --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.web,javafx.media,java.sql \ --dest dist - + env: MACOSX_DEPLOYMENT_TARGET: "13.0" @@ -267,14 +575,47 @@ jobs: name: docs-pdf path: dist/KST4Contest-${{ github.ref_name }}-manual-*.pdf + publish-flatpak-repo: + name: Publish Flatpak OSTree Repo to GitHub Pages + runs-on: ubuntu-latest + needs: build-flatpak + + steps: + - name: Download OSTree repo artifact + uses: actions/download-artifact@v4.1.3 + with: + name: flatpak-ostree-repo + path: flatpak-ostree-repo/ + + - name: Download flatpakref + uses: actions/download-artifact@v4.1.3 + with: + name: flatpakref + path: flatpak-ostree-repo/ + + - name: Push to flatpak-repo branch + run: | + cd flatpak-ostree-repo + git init + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git config user.name "github-actions[bot]" + git add -A + git commit -m "Flatpak repo: ${{ github.ref_name }}" + git push --force https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git HEAD:flatpak-repo + release-tag: name: Publish Tagged Release runs-on: ubuntu-latest needs: - build-windows-zip - build-linux-appimage + - build-linux-deb + - build-linux-rpm + - build-linux-arch - build-macos-dmg + - build-flatpak - build-docs-pdf + - publish-flatpak-repo steps: - name: Download Windows artifact @@ -296,6 +637,30 @@ jobs: merge-multiple: true path: release-assets/macos + - name: Download Debian artifact + uses: actions/download-artifact@v4.1.3 + with: + name: linux-debian + path: release-assets/debian + + - name: Download Fedora artifact + uses: actions/download-artifact@v4.1.3 + with: + name: linux-fedora + path: release-assets/fedora + + - name: Download Arch Linux artifact + uses: actions/download-artifact@v4.1.3 + with: + name: linux-arch + path: release-assets/archlinux + + - name: Download flatpakref + uses: actions/download-artifact@v4.1.3 + with: + name: flatpakref + path: release-assets/flatpakref + - name: Download PDF manuals uses: actions/download-artifact@v4.1.3 with: @@ -316,6 +681,10 @@ jobs: artifacts: >- release-assets/windows/praktiKST-${{ github.ref_name }}-windows-x64.zip, release-assets/linux/KST4Contest-${{ github.ref_name }}-linux-x86_64.AppImage, + release-assets/debian/KST4Contest-${{ github.ref_name }}-debian-amd64.deb, + release-assets/fedora/KST4Contest-${{ github.ref_name }}-fedora-x86_64.rpm, + release-assets/archlinux/KST4Contest-${{ github.ref_name }}-archlinux-*.pkg.tar.zst, + release-assets/flatpakref/de.x08.KST4Contest.flatpakref, release-assets/macos/KST4Contest-${{ github.ref_name }}-macos-*.dmg, release-assets/docs/KST4Contest-${{ github.ref_name }}-manual-en.pdf, release-assets/docs/KST4Contest-${{ github.ref_name }}-manual-de.pdf diff --git a/github_docs/de-Installation.md b/github_docs/de-Installation.md index 2570f0c..a0ab4a0 100644 --- a/github_docs/de-Installation.md +++ b/github_docs/de-Installation.md @@ -42,11 +42,19 @@ Der Dateiname hat das Format `praktiKST-v-windows-x64.zip `. ### Linux -Die aktuelle Version kann als AppImage heruntergeladen werden: +Mehrere Paketformate stehen auf der Releases-Seite zur Verfügung: **https://github.com/praktimarc/kst4contest/releases/latest** -Der Dateiname hat das Format `KST4Contest-v-linux-x86_64.AppImage`. +| Format | Dateiname | Geeignet für | +|---|---|---| +| AppImage | `KST4Contest-v-linux-x86_64.AppImage` | Alle Distributionen | +| Debian-Paket | `KST4Contest-v-debian-amd64.deb` | Debian, Ubuntu, Linux Mint, … | +| RPM-Paket | `KST4Contest-v-fedora-x86_64.rpm` | Fedora, RHEL, openSUSE, … | +| Arch-Paket | `KST4Contest-v-archlinux-x86_64.pkg.tar.zst` | Arch Linux, Manjaro, … | +| Flatpak | `de.x08.KST4Contest.flatpakref` | Alle Distributionen mit Flatpak | + +> **Empfehlung für Linux:** Die Flatpak-Installation ist der einfachste Weg, immer aktuell zu bleiben – `flatpak update` erledigt alle zukünftigen Updates automatisch. Das Repository ist GPG-signiert. ### macOS @@ -72,12 +80,47 @@ Der Dateiname hat das Format `KST4Contest-v-macos-. Die Einstellungen werden unter `%USERPROFILE%\.praktikst\preferences.xml` gespeichert. ### Linux -1. AppImage herunterladen. -2. AppImage in gewünschten Ordner entpacken. -3. AppImage ausführbar machen (geht im Terminal mit `chmod +x KST4Contest-v-linux-x86_64.AppImage`) -4. AppImage ausführen. -Die Einstellungen werden unter `~/.praktikst/preferences.xml` gespeichert. +Die Einstellungen werden immer unter `~/.praktikst/preferences.xml` gespeichert. + +#### AppImage + +1. AppImage herunterladen. +2. Ausführbar machen: `chmod +x KST4Contest-v-linux-x86_64.AppImage` +3. Starten. + +#### Debian / Ubuntu + +```bash +sudo apt install ./KST4Contest-v-debian-amd64.deb +``` + +Oder die `.deb`-Datei im Dateimanager doppelklicken. + +#### Fedora / RHEL + +```bash +sudo dnf install ./KST4Contest-v-fedora-x86_64.rpm +``` + +#### Arch Linux + +```bash +sudo pacman -U KST4Contest-v-archlinux-x86_64.pkg.tar.zst +``` + +#### Flatpak + +Die Datei `de.x08.KST4Contest.flatpakref` aus dem [aktuellen Release](https://github.com/praktimarc/kst4contest/releases/latest) herunterladen und öffnen, oder: +```bash +flatpak install de.x08.KST4Contest.flatpakref +``` + +Oder den Remote manuell hinzufügen: +```bash +flatpak remote-add kst4contest https://praktimarc.github.io/kst4contest/ +flatpak install kst4contest de.x08.KST4Contest +``` ### macOS 1. DMG-Datei für die eigene Architektur herunterladen (Apple Silicon oder Intel). @@ -114,10 +157,11 @@ Die Einstellungsdatei (`preferences.xml`) bleibt erhalten, da sie im Benutzerord #### Linux -Derzeit folgendermaßen: -1. neues AppImage herunterladen -2. neues AppImage ausführbar makieren -3. (optional) altes AppImage löschen. +- **AppImage**: Neues AppImage herunterladen, ausführbar machen (`chmod +x`), altes optional löschen. +- **Debian/Ubuntu**: `sudo apt install ./KST4Contest-v-debian-amd64.deb` +- **Fedora/RHEL**: `sudo dnf upgrade ./KST4Contest-v-fedora-x86_64.rpm` +- **Arch Linux**: `sudo pacman -U KST4Contest-v-archlinux-x86_64.pkg.tar.zst` +- **Flatpak (Repository)**: `flatpak update` – aktualisiert alle Flatpak-Apps einschließlich KST4Contest. #### macOS diff --git a/github_docs/en-Installation.md b/github_docs/en-Installation.md index a1115a2..33640df 100644 --- a/github_docs/en-Installation.md +++ b/github_docs/en-Installation.md @@ -42,11 +42,19 @@ The filename has the format `praktiKST-v-windows-x64.zip`. ### Linux -The latest version can be downloaded as an AppImage: +Multiple package formats are available from the releases page: **https://github.com/praktimarc/kst4contest/releases/latest** -The filename has the format `KST4Contest-v-linux-x86_64.AppImage`. +| Format | Filename | Suitable for | +|---|---|---| +| AppImage | `KST4Contest-v-linux-x86_64.AppImage` | All distributions | +| Debian package | `KST4Contest-v-debian-amd64.deb` | Debian, Ubuntu, Linux Mint, … | +| RPM package | `KST4Contest-v-fedora-x86_64.rpm` | Fedora, RHEL, openSUSE, … | +| Arch package | `KST4Contest-v-archlinux-x86_64.pkg.tar.zst` | Arch Linux, Manjaro, … | +| Flatpak | `de.x08.KST4Contest.flatpakref` | All distributions with Flatpak | + +> **Recommended for Linux:** The Flatpak installation is the easiest way to stay up to date — `flatpak update` handles all future updates automatically. The repository is GPG-signed for security. ### macOS @@ -72,12 +80,47 @@ The filename has the format `KST4Contest-v-macos-.dmg`, wh Settings are stored at `%USERPROFILE%\.praktikst\preferences.xml`. ### Linux -1. Download the AppImage. -2. Unzip the AppImage into a folder of your choice. -3. Make the AppImage executable (in the terminal with `chmod +x KST4Contest-v-linux-x86_64.AppImage`) -4. Run the AppImage. -Settings are stored at `~/.praktikst/preferences.xml`. +Settings are always stored at `~/.praktikst/preferences.xml`. + +#### AppImage + +1. Download the AppImage. +2. Make it executable: `chmod +x KST4Contest-v-linux-x86_64.AppImage` +3. Run it. + +#### Debian / Ubuntu + +```bash +sudo apt install ./KST4Contest-v-debian-amd64.deb +``` + +Or double-click the `.deb` file in your file manager. + +#### Fedora / RHEL + +```bash +sudo dnf install ./KST4Contest-v-fedora-x86_64.rpm +``` + +#### Arch Linux + +```bash +sudo pacman -U KST4Contest-v-archlinux-x86_64.pkg.tar.zst +``` + +#### Flatpak + +Download `de.x08.KST4Contest.flatpakref` from the [latest release](https://github.com/praktimarc/kst4contest/releases/latest) and open it, or run: +```bash +flatpak install de.x08.KST4Contest.flatpakref +``` + +Or add the remote manually: +```bash +flatpak remote-add kst4contest https://praktimarc.github.io/kst4contest/ +flatpak install kst4contest de.x08.KST4Contest +``` ### macOS 1. Download the DMG file for your architecture (Apple Silicon or Intel). @@ -114,10 +157,11 @@ The settings file (`preferences.xml`) is preserved because it is stored in the u #### Linux -Currently as follows: -1. Download the new AppImage -2. Mark the new AppImage as executable -3. (optional) Delete the old AppImage. +- **AppImage**: Download the new AppImage, make it executable (`chmod +x`), optionally delete the old one. +- **Debian/Ubuntu**: `sudo apt install ./KST4Contest-v-debian-amd64.deb` +- **Fedora/RHEL**: `sudo dnf upgrade ./KST4Contest-v-fedora-x86_64.rpm` +- **Arch Linux**: `sudo pacman -U KST4Contest-v-archlinux-x86_64.pkg.tar.zst` +- **Flatpak (repository)**: `flatpak update` – updates all Flatpak apps including KST4Contest. #### macOS