diff --git a/.github/workflows/nightly-artifacts.yml b/.github/workflows/nightly-artifacts.yml new file mode 100644 index 0000000..ff34964 --- /dev/null +++ b/.github/workflows/nightly-artifacts.yml @@ -0,0 +1,145 @@ +name: Nightly Runtime Artifacts + +on: + push: + branches: + - main + schedule: + - cron: "20 2 * * *" + workflow_dispatch: + +jobs: + build-windows-zip: + name: Build Windows ZIP Artifact + runs-on: windows-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Extract version from pom.xml + shell: pwsh + run: | + $xml = [xml](Get-Content pom.xml) + $version = $xml.project.version + Add-Content -Path $env:GITHUB_ENV -Value "VERSION=$version" + + - name: Set up Java 17 + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: "17" + + - name: Install WiX Toolset + shell: pwsh + run: choco install wixtoolset --no-progress -y + + - name: Build JAR and copy runtime dependencies + shell: pwsh + run: | + .\mvnw.cmd -B -DskipTests package dependency:copy-dependencies -DincludeScope=runtime -DoutputDirectory=target/dist-libs + $jar = Get-ChildItem -Path target -Filter 'praktiKST-*.jar' | Sort-Object LastWriteTime -Descending | Select-Object -First 1 + if (-not $jar) { + throw "No project JAR produced" + } + Copy-Item $jar.FullName target/dist-libs/app.jar + + - name: Build app-image with jpackage + shell: pwsh + run: | + New-Item -ItemType Directory -Force -Path dist | Out-Null + jpackage --type app-image --name praktiKST --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: Create Windows ZIP + shell: pwsh + run: | + if (-not (Test-Path dist/praktiKST)) { + throw "No Windows app-image produced by jpackage" + } + Compress-Archive -Path dist/praktiKST -DestinationPath dist/praktiKST-${{ env.VERSION }}-windows-x64.zip -Force + + - name: Upload Windows ZIP artifact + uses: actions/upload-artifact@v4 + with: + name: nightly-windows-zip + path: dist/praktiKST-${{ env.VERSION }}-windows-x64.zip + retention-days: 14 + + build-linux-appimage: + name: Build Linux AppImage Artifact + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Extract version from pom.xml + run: | + VERSION=$(grep -m1 '' pom.xml | sed 's/.*\(.*\)<\/version>.*/\1/') + echo "VERSION=$VERSION" >> $GITHUB_ENV + + - name: Set up Java 17 + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: "17" + + - 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 praktiKST \ + --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: Create AppDir metadata + run: | + rm -rf target/praktiKST.AppDir + cp -a dist/praktiKST target/praktiKST.AppDir + + cat > target/praktiKST.AppDir/AppRun << 'EOF' + #!/bin/sh + HERE="$(dirname "$(readlink -f "$0")")" + exec "$HERE/bin/praktiKST" "$@" + EOF + chmod +x target/praktiKST.AppDir/AppRun + + cat > target/praktiKST.AppDir/praktiKST.desktop << 'EOF' + [Desktop Entry] + Type=Application + Name=praktiKST + Exec=praktiKST + Icon=praktiKST + Categories=Network;HamRadio; + Terminal=false + EOF + + if [ -f target/praktiKST.AppDir/lib/praktiKST.png ]; then + cp target/praktiKST.AppDir/lib/praktiKST.png target/praktiKST.AppDir/praktiKST.png + fi + + - name: Build AppImage + run: | + wget -q -O target/appimagetool.AppImage https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage + chmod +x target/appimagetool.AppImage + APPIMAGE_EXTRACT_AND_RUN=1 ARCH=x86_64 target/appimagetool.AppImage target/praktiKST.AppDir dist/praktiKST-${{ env.VERSION }}-linux-x86_64.AppImage + + - name: Upload Linux AppImage artifact + uses: actions/upload-artifact@v4 + with: + name: nightly-linux-appimage + path: dist/praktiKST-${{ env.VERSION }}-linux-x86_64.AppImage + retention-days: 14 diff --git a/.github/workflows/pr-compile-check.yml b/.github/workflows/pr-compile-check.yml new file mode 100644 index 0000000..e9f5a56 --- /dev/null +++ b/.github/workflows/pr-compile-check.yml @@ -0,0 +1,28 @@ +name: PR Compile Check + +on: + pull_request: + branches: + - main + workflow_dispatch: + +jobs: + compile: + name: Compile (Java 17) + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Java 17 + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: "17" + + - name: Ensure mvnw is executable + run: chmod +x mvnw + + - name: Compile + run: ./mvnw -B -DskipTests compile diff --git a/.github/workflows/tagged-release.yml b/.github/workflows/tagged-release.yml new file mode 100644 index 0000000..30abf55 --- /dev/null +++ b/.github/workflows/tagged-release.yml @@ -0,0 +1,164 @@ +name: Tagged Release Build + +on: + push: + tags: + - "*" + workflow_dispatch: + +permissions: + contents: write + +jobs: + build-windows-zip: + name: Build Windows ZIP + runs-on: windows-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Java 17 + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: "17" + + - name: Install WiX Toolset + shell: pwsh + run: choco install wixtoolset --no-progress -y + + - name: Build JAR and copy runtime dependencies + shell: pwsh + run: | + .\mvnw.cmd -B -DskipTests package dependency:copy-dependencies -DincludeScope=runtime -DoutputDirectory=target/dist-libs + $jar = Get-ChildItem -Path target -Filter 'praktiKST-*.jar' | Sort-Object LastWriteTime -Descending | Select-Object -First 1 + if (-not $jar) { + throw "No project JAR produced" + } + Copy-Item $jar.FullName target/dist-libs/app.jar + + - name: Build app-image with jpackage + shell: pwsh + run: | + New-Item -ItemType Directory -Force -Path dist | Out-Null + jpackage --type app-image --name praktiKST --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: Create Windows ZIP + shell: pwsh + run: | + if (-not (Test-Path dist/praktiKST)) { + throw "No Windows app-image produced by jpackage" + } + Compress-Archive -Path dist/praktiKST -DestinationPath dist/praktiKST-${{ github.ref_name }}-windows-x64.zip -Force + + - name: Upload Windows artifact + uses: actions/upload-artifact@v4 + with: + name: windows-zip + path: dist/praktiKST-${{ github.ref_name }}-windows-x64.zip + + build-linux-appimage: + name: Build Linux AppImage + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Java 17 + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: "17" + + - 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 praktiKST \ + --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: Create AppDir metadata + run: | + rm -rf target/praktiKST.AppDir + cp -a dist/praktiKST target/praktiKST.AppDir + + cat > target/praktiKST.AppDir/AppRun << 'EOF' + #!/bin/sh + HERE="$(dirname "$(readlink -f "$0")")" + exec "$HERE/bin/praktiKST" "$@" + EOF + chmod +x target/praktiKST.AppDir/AppRun + + cat > target/praktiKST.AppDir/praktiKST.desktop << 'EOF' + [Desktop Entry] + Type=Application + Name=praktiKST + Exec=praktiKST + Icon=praktiKST + Categories=Network;HamRadio; + Terminal=false + EOF + + if [ -f target/praktiKST.AppDir/lib/praktiKST.png ]; then + cp target/praktiKST.AppDir/lib/praktiKST.png target/praktiKST.AppDir/praktiKST.png + fi + + - name: Build AppImage + run: | + wget -q -O target/appimagetool.AppImage https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage + chmod +x target/appimagetool.AppImage + APPIMAGE_EXTRACT_AND_RUN=1 ARCH=x86_64 target/appimagetool.AppImage target/praktiKST.AppDir dist/praktiKST-${{ github.ref_name }}-linux-x86_64.AppImage + + - name: Upload Linux artifact + uses: actions/upload-artifact@v4 + with: + name: linux-appimage + path: dist/praktiKST-${{ github.ref_name }}-linux-x86_64.AppImage + + release-tag: + name: Publish Tagged Release + runs-on: ubuntu-latest + needs: + - build-windows-zip + - build-linux-appimage + + steps: + - name: Download Windows artifact + uses: actions/download-artifact@v4 + with: + name: windows-zip + path: release-assets/windows + + - name: Download Linux artifact + uses: actions/download-artifact@v4 + with: + name: linux-appimage + path: release-assets/linux + + - name: Create tagged release + uses: ncipollo/release-action@v1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + tag: ${{ github.ref_name }} + name: Release ${{ github.ref_name }} + allowUpdates: false + replacesArtifacts: false + makeLatest: true + generateReleaseNotes: true + artifacts: release-assets/windows/praktiKST-${{ github.ref_name }}-windows-x64.zip,release-assets/linux/praktiKST-${{ github.ref_name }}-linux-x86_64.AppImage diff --git a/pom.xml b/pom.xml index 52e53b5..cc71a1e 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ de.x08 praktiKST - 1.0-SNAPSHOT + 1.40.0-nightly praktiKST @@ -32,7 +32,7 @@ 19.0.2.1 24.0.1 5.10.1 - 1.18.30 + 1.18.44 5.7.0 3.43.2.2 @@ -54,8 +54,8 @@ 6.55.0 2.16.1 0.0.8 - 4.8.1.0 - 4.8.1 + 4.9.8.2 + 4.9.8 UTF-8 diff --git a/src/main/java/kst4contest/ApplicationConstants.java b/src/main/java/kst4contest/ApplicationConstants.java index 6aa35e6..20ee0f6 100644 --- a/src/main/java/kst4contest/ApplicationConstants.java +++ b/src/main/java/kst4contest/ApplicationConstants.java @@ -20,7 +20,7 @@ public class ApplicationConstants { /** * Name of file to store preferences in. */ - public static final double APPLICATION_CURRENTVERSIONNUMBER = 1.33; + public static final double APPLICATION_CURRENTVERSIONNUMBER = 1.40; public static final String VERSIONINFOURLFORUPDATES_KST4CONTEST = "https://do5amf.funkerportal.de/kst4ContestVersionInfo.xml"; public static final String VERSIONINFDOWNLOADEDLOCALFILE = "kst4ContestVersionInfo.xml"; diff --git a/src/main/java/kst4contest/controller/ReadUDPByWintestThread.java b/src/main/java/kst4contest/controller/ReadUDPByWintestThread.java index 7f739a0..70c71f4 100644 --- a/src/main/java/kst4contest/controller/ReadUDPByWintestThread.java +++ b/src/main/java/kst4contest/controller/ReadUDPByWintestThread.java @@ -205,7 +205,7 @@ public class ReadUDPByWintestThread extends Thread { } String formattedQRG = String.format(Locale.US, "%.1f", freqFloat); - this.client.getChatPreferences().getMYQRG().set(formattedQRG); + this.client.getChatPreferences().getMYQRGFirstCat().set(formattedQRG); System.out.println("[WinTest STATUS] stn=" + stn + ", mode=" + mode + ", qrg=" + formattedQRG); } catch (Exception e) {