diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1f0c5d5..925ff48 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,29 +1,29 @@ name: Continuous Integration -# Trigger the workflow on push or pull request on: [push, pull_request] jobs: - build: runs-on: ubuntu-latest + steps: - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 - - name: Set up JDK 11 - uses: actions/setup-java@v1 + - name: Set up JDK 17 (Azul Zulu) + uses: actions/setup-java@v4 with: - java-version: 11 + distribution: 'zulu' + java-version: '17' - - name: Run tests with Gradle + - name: Run SpotBugs run: | chmod +x ./gradlew ./gradlew --stacktrace --info spotbugsMain - name: Upload Artifacts - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 if: always() with: - name: 'Spotbugs Reports' - path: ./build/reports/ \ No newline at end of file + name: Spotbugs Reports + path: '**/build/spotbugs/' diff --git a/.github/workflows/project-check-reminder.yml b/.github/workflows/project-check-reminder.yml new file mode 100644 index 0000000..0745e7e --- /dev/null +++ b/.github/workflows/project-check-reminder.yml @@ -0,0 +1,42 @@ +name: Project Check Reminder + +on: + schedule: + - cron: '0 8 1 2 *' # 1er février à 08:00 UTC + - cron: '0 8 1 8 *' # 1er août à 08:00 UTC + workflow_dispatch: + +jobs: + create-reminder: + runs-on: ubuntu-latest + + steps: + - name: Récupérer la date du jour + id: date + run: echo "today=$(date +'%d/%m/%Y')" >> "$GITHUB_OUTPUT" + + - name: Générer le contenu dynamique + run: | + cat > issue.md < ${{ github.event.inputs.bump }}" + + - name: Free Disk Space (Ubuntu) + uses: jlumbroso/free-disk-space@main + with: + tool-cache: false + android: true + dotnet: false + haskell: false + large-packages: false + swap-storage: false + - name: Checkout code - uses: actions/checkout@v3 - - name: Set up JDK 11 - uses: actions/setup-java@v3 + uses: actions/checkout@v4 + + - name: Set up JDK 17 + uses: actions/setup-java@v4 with: distribution: 'zulu' - java-version: '11' - + java-version: '17' + - name: Setup Node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: - node-version: 16 + node-version: 16 - name: Download JREs run: | chmod +x ./gradlew ./gradlew --stacktrace --info downloadAndExtractJREs chmod -R 777 build/jre + - name: Setup Git Config + run: | + git config --global user.email "ci@gazeplay.net" + git config --global user.name "GazePlay Automation" - - name: Generate releases + - name: Generate Releases + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - ./gradlew --stacktrace --info packageApp + ./gradlew --stacktrace --info release - - name: Generate Windows Installer with InnoSetup + - name: Rename Releases run: | - chmod 777 build/distributions - chmod -R 777 build/jre - ./gradlew --stacktrace --info generateWindowsInstallerInDocker + cd ./build/distributions/ + mv interAACtionGaze-linux*.tar.gz interAACtionGaze-linux.tar.gz + mv interAACtionGaze-macos*.tar.gz interAACtionGaze-macos.tar.gz + mv interAACtionGaze-no-jre*.zip interAACtionGaze-noJRE.zip + mv interAACtionGaze-no-jre*.tar.gz interAACtionGaze-noJRE.tar.gz + mv interAACtionGaze-windows*.zip interAACtionGaze-windows.zip + mv interAACtionGaze-windows-x64*installer.exe interAACtionGaze-windows-x64-installer.exe - name: Get Env run: | echo "REPO_NAME=${{ github.repository }}" >> $GITHUB_ENV + echo "REPO_BASENAME=$(basename ${{ github.repository }})" >> $GITHUB_ENV - name: New tag id: new-tag run: | - LATEST_RELEASE_INFO=$(curl -s https://api.github.com/repos/${{ env.REPO_NAME }}/releases/latest) - NEW_VERSION_LINK=$(echo "$LATEST_RELEASE_INFO" | grep "browser_download_url.*interAACtionGaze*" | cut -d: -f2,3 | tr -d \") - NEW_VERSION=$( echo "${NEW_VERSION_LINK}" | cut -d/ -f9) - NEW_VERSION_NO_EXT=$( echo ${NEW_VERSION} | cut -d. -f1) - NEW_VERSION_NAME=$(echo "$LATEST_RELEASE_INFO" | grep "name.*interAACtionGaze*" | cut -d: -f2,3 | tr -d \" | head -n 1 | tr -d \,) - GET_TAG=$(echo "$NEW_VERSION_NAME" | cut -d " " -f3) - TAG_1=$(echo "$GET_TAG" | cut -d. -f1) - TAG_2=$(echo "$GET_TAG" | cut -d. -f2) - TAG_3=$(echo "$GET_TAG" | cut -d. -f3) - NEW_TAG=$(echo "$(( $TAG_3 + 1 ))") - TAG="${TAG_1}.${TAG_2}.${NEW_TAG}" - echo "tag=$TAG" >> $GITHUB_OUTPUT + latest_tag=$(curl -s https://api.github.com/repos/${{ env.REPO_NAME }}/releases/latest | jq -r .tag_name) + version="${latest_tag#v}" # strip leading 'v' + IFS='.' read -r major minor patch <<< "$version" + + case "${{ github.event.inputs.bump }}" in + major) + major=$((major + 1)) + minor=0 + patch=0 + nexPatch=$((patch + 1)) + ;; + minor) + minor=$((minor + 1)) + patch=0 + nexPatch=$((patch + 1)) + ;; + patch) + patch=$((patch + 1)) + nexPatch=$((patch + 1)) + ;; + *) + echo "Option invalide: $bump" + exit 1 + ;; + esac + + new_tag="v$major.$minor.$patch" + next_tag="$major.$minor.$nexPatch" + echo "tag=$new_tag" >> $GITHUB_OUTPUT + echo "nextTag=$next_tag" >> $GITHUB_OUTPUT + + - name: Update version project for gradle + run: | + version="${{ steps.new-tag.outputs.nextTag }}" + + if grep -q '^version=' gradle.properties; then + sed -i "s/^version=.*/version=${version}/" gradle.properties + else + echo "version=${version}" >> gradle.properties + fi + + - name: Setup next release + run: | + git config user.name "github-actions" + git config user.email "github-actions@github.com" + git add gradle.properties + git commit -m "Setup next release for gradle" + git push - name: Create GitHub Release id: create_release diff --git a/build.gradle b/build.gradle index ff17508..febce86 100644 --- a/build.gradle +++ b/build.gradle @@ -11,18 +11,24 @@ plugins { id 'application' id 'distribution' id 'jacoco' - id 'org.openjfx.javafxplugin' version '0.0.8' - id 'io.freefair.lombok' version '4.1.4' - id 'com.github.hierynomus.license-report' version '0.15.0' - id 'com.github.spotbugs' version '2.0.0' + id 'org.openjfx.javafxplugin' version '0.1.0' + id 'io.freefair.lombok' version '6.4.3' + id 'com.github.hierynomus.license-report' version '0.16.1' + id 'com.github.spotbugs' version '6.1.11' id 'net.researchgate.release' version '2.6.0' id "de.undercouch.download" version '4.0.4' - id 'org.springframework.boot' version '2.2.1.RELEASE' - id 'io.spring.dependency-management' version '1.0.8.RELEASE' + id 'org.springframework.boot' version '3.4.5' + id 'io.spring.dependency-management' version '1.1.4' } -ext.javafxVersion = "11.0.2" -// Make it available everywhere via the project ext: +dependencies { + implementation 'org.springframework.boot:spring-boot-starter' + implementation 'info.picocli:picocli-spring-boot-starter:4.7.5' + annotationProcessor 'info.picocli:picocli-codegen:4.7.5' +} + +ext.javafxVersion = "21.0.1" + ext { Download = de.undercouch.gradle.tasks.download.Download download = download @@ -38,8 +44,6 @@ javafx { modules = ['javafx.controls', 'javafx.swing', 'javafx.media', 'javafx.web'] } -apply plugin: 'java' -apply plugin: 'maven' apply plugin: 'java' apply plugin: 'io.spring.dependency-management' apply plugin: 'maven-publish' @@ -109,16 +113,11 @@ subprojects { } spotbugs { - toolVersion = '4.0.0-beta3' - - //ignoreFailures = false - //effort = "max" - //reportLevel = "high" - excludeFilter = file("spotbugs-exclude.xml") + toolVersion = '4.9.3' } - spotbugsMain.enabled = spotbugsEnabled - spotbugsTest.enabled = spotbugsEnabled + spotbugsMain.enabled = true + spotbugsTest.enabled = false downloadLicenses { dependencyConfiguration = 'compileClasspath' @@ -134,7 +133,8 @@ subprojects { testImplementation "org.mockito:mockito-core:3.12.+" } - sourceCompatibility = '11' + sourceCompatibility = '17' + targetCompatibility = '17' publishing { publications { @@ -169,30 +169,28 @@ subprojects { dependencies { implementation 'org.projectlombok:lombok:1.18.20' - compile 'com.github.GazePlay:TobiiStreamEngineForJava:5.1' - compile 'com.google.code.gson:gson:2.8.1' - compile 'org.rxtx:rxtx:2.1.7' - compile 'ch.qos.logback:logback-classic:1.2.1' - compile 'ch.qos.logback:logback-core:1.2.1' - compile 'org.slf4j:slf4j-api:1.7.25' - compile 'uk.org.lidalia:sysout-over-slf4j:1.0.2' - compile 'javax.media:jmf:2.1.1e' + implementation files("${rootDir}/lib/EyeTribeJavaFx.jar") + implementation 'com.github.GazePlay:TobiiStreamEngineForJava:5.1' + implementation 'com.google.code.gson:gson:2.10.1' + implementation 'org.rxtx:rxtx:2.1.7' + implementation 'uk.org.lidalia:sysout-over-slf4j:1.0.2' + implementation 'javax.media:jmf:2.1.1e' implementation 'org.json:json:20090211' - compile 'ws.schild:jave-all-deps:2.5.0' - compile 'ws.schild:jave-core:2.5.0' - runtime 'org.slf4j:jcl-over-slf4j:1.7.25' - runtime 'org.slf4j:log4j-over-slf4j:1.7.25' - compile group: 'javax.activation', name: 'activation', version: '1.1.1' + implementation 'ws.schild:jave-all-deps:2.5.0' + implementation 'ws.schild:jave-core:2.5.0' + + implementation 'org.slf4j:slf4j-api:2.0.9' + runtimeOnly 'org.slf4j:jcl-over-slf4j:2.0.9' + runtimeOnly 'org.slf4j:log4j-over-slf4j:2.0.9' } jar { - enabled=true manifest { attributes( "Implementation-Title": project.name, "Implementation-Vendor": "Univ. Grenoble Alpes - LIG - GETALP", "Main-Class": 'application.Main', - "Class-Path": configurations.runtime.collect { it.getName() }.join(' '), + "Class-Path": configurations.runtimeClasspath.collect { it.getName() }.join(' '), "JavaFX-Version": javafxVersion, "Built-By": System.properties['user.name'] ) @@ -201,6 +199,7 @@ jar { distributions { noJRE { + setDistributionBaseName "${project.name}-no-jre" contents { with distributions.main.contents from("build/reports") @@ -211,6 +210,7 @@ distributions { } windows { + setDistributionBaseName "${project.name}-windows-x64" contents { with distributions.main.contents from("build/reports") @@ -227,6 +227,7 @@ distributions { } linux { + setDistributionBaseName "${project.name}-linux" contents { with distributions.main.contents from("build/reports") @@ -246,6 +247,7 @@ distributions { } macos { + setDistributionBaseName "${project.name}-macos" contents { with distributions.main.contents from("build/reports") @@ -277,6 +279,76 @@ macosDistTar.dependsOn(downloadAndExtractMacosJRE) windowsDistZip.dependsOn(downloadAndExtractWindowsJRE) linuxDistTar.dependsOn(downloadAndExtractLinuxDependecies) +tasks.named('resolveMainClassName') { + dependsOn tasks.named('createLicence') + dependsOn tasks.named('unzipDistribution') +} + +tasks.named('distTar') { + dependsOn tasks.named('unzipDistribution') +} + +tasks.named('distZip') { + dependsOn tasks.named('unzipDistribution') +} + +tasks.named('spotbugsMain') { + dependsOn tasks.named('unzipDistribution') +} + +tasks.named('noJREDistTar') { + dependsOn tasks.named('downloadLicenses') + dependsOn tasks.named('scriptsForRelease') +} + +tasks.named('noJREDistZip') { + dependsOn tasks.named('downloadLicenses') + dependsOn tasks.named('scriptsForRelease') +} + +tasks.named('linuxDistTar') { + dependsOn tasks.named('downloadLicenses') + dependsOn tasks.named('scriptsForRelease') +} + +tasks.named('linuxDistZip') { + dependsOn tasks.named('downloadLicenses') + dependsOn tasks.named('scriptsForRelease') + dependsOn tasks.named('extractOpenJFXForLibavPlugin') + dependsOn tasks.named('extractLinuxJRE') + dependsOn tasks.named('extractTobiiDriversForLinux') + dependsOn tasks.named('unzipDistribution') +} + +tasks.named('macosDistTar') { + dependsOn tasks.named('downloadLicenses') + dependsOn tasks.named('scriptsForRelease') +} + +tasks.named('macosDistZip') { + dependsOn tasks.named('downloadLicenses') + dependsOn tasks.named('scriptsForRelease') + dependsOn tasks.named('extractMacosJRE') + dependsOn tasks.named('unzipDistribution') +} + +tasks.named('windowsDistTar') { + dependsOn tasks.named('downloadLicenses') + dependsOn tasks.named('scriptsForRelease') + dependsOn tasks.named('extractWindowsJRE') + dependsOn tasks.named('unzipDistribution') +} + +tasks.named('windowsDistZip') { + dependsOn tasks.named('downloadLicenses') + dependsOn tasks.named('scriptsForRelease') +} + + +tasks.withType(com.github.spotbugs.snom.SpotBugsTask) { + excludeFilter = file("spotbugs-exclude.xml") +} + tasks.withType(Tar){ compression = Compression.GZIP archiveExtension.set('tar.gz') diff --git a/gradle.properties b/gradle.properties index af82e00..de86d31 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1,2 @@ -org.gradle.parallel=true \ No newline at end of file +version=1.1.2 +org.gradle.parallel=true diff --git a/gradle/innosetup/setup.iss.skel b/gradle/innosetup/setup.iss.skel index 7dcf6ae..4c1ca0f 100644 --- a/gradle/innosetup/setup.iss.skel +++ b/gradle/innosetup/setup.iss.skel @@ -34,7 +34,7 @@ DefaultGroupName=InteraactionGaze LicenseFile=licence.txt OutputDir=..\\distributions -OutputBaseFilename=interAACtionGaze-windows-x64-installer +OutputBaseFilename=interAACtionGaze-windows-x64-${applicationVersion}-installer ;Compression=lzma SolidCompression=yes diff --git a/gradle/installer.gradle b/gradle/installer.gradle index 63bc53b..54aadcf 100644 --- a/gradle/installer.gradle +++ b/gradle/installer.gradle @@ -32,8 +32,8 @@ task prepareInnoSetupFiles(group: 'distribution') { from("${rootDir}/gradle/innosetup/setup.iss.skel") rename("setup.iss.skel", "setup.iss") expand([ - applicationVersion: "latest", - unpackedDirectory : "${project.name}-windows" + applicationVersion: "${version}", + unpackedDirectory : "${project.name}-windows-x64-${version}" ]) into(innoSetupDir) } @@ -59,7 +59,7 @@ task prepareInnoSetupFiles(group: 'distribution') { } task unzipDistribution(dependsOn: ['packageApp'], type: Copy, group: 'distribution') { - from zipTree("${buildDir}/distributions/${project.name}-windows.zip") + from zipTree("${buildDir}/distributions/${project.name}-windows-x64-${version}.zip") into buildDir fileMode 0777 dirMode 0777 diff --git a/gradle/jre.gradle b/gradle/jre.gradle index 255d0be..7cbccb5 100644 --- a/gradle/jre.gradle +++ b/gradle/jre.gradle @@ -1,6 +1,7 @@ ext.jreSource = 'https://cdn.azul.com/zulu/bin' -ext.zuluVersion = '11.35.15' -ext.jreVersion = '11.0.5' +ext.zuluVersion = '17.32.13' +ext.jreVersion = '17.0.2' +ext.jre = '17' ext.jreFolder = "${buildDir}/jre" ext.downloadLocation = new File(project.repositories.mavenLocal().url).getAbsolutePath(); diff --git a/gradle/jre/linux.gradle b/gradle/jre/linux.gradle index ebb32c9..42e6fcc 100644 --- a/gradle/jre/linux.gradle +++ b/gradle/jre/linux.gradle @@ -6,7 +6,7 @@ def jreVersion = project.ext.jreVersion def jreFolder = project.ext.jreFolder def filename = "zulu${zuluVersion}-ca-fx-jre${jreVersion}-linux_x64" -def jfxfilename = "javafx-sdk-11.0.2" +def jfxfilename = "javafx-sdk-17.0.2" apply plugin: 'java' apply plugin: 'de.undercouch.download' diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index cea660b..ee2f259 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ #Thu Dec 02 16:38:05 CET 2021 -distributionUrl=https\://services.gradle.org/distributions/gradle-5.2.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-all.zip distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 diff --git a/lib/EyeTribeJavaFx.jar b/lib/EyeTribeJavaFx.jar new file mode 100644 index 0000000..2394152 Binary files /dev/null and b/lib/EyeTribeJavaFx.jar differ diff --git a/spotbugs-exclude.xml b/spotbugs-exclude.xml new file mode 100644 index 0000000..cb5e919 --- /dev/null +++ b/spotbugs-exclude.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/main/java/application/Main.java b/src/main/java/application/Main.java index 6f43b88..8062197 100644 --- a/src/main/java/application/Main.java +++ b/src/main/java/application/Main.java @@ -15,11 +15,9 @@ import javafx.stage.Stage; import javafx.stage.StageStyle; import lombok.Getter; -import lombok.extern.slf4j.Slf4j; import utils.CalibrationConfig; import utils.Settings; -@Slf4j public class Main extends Application { @Getter diff --git a/src/main/java/application/ui/DecoratedPane.java b/src/main/java/application/ui/DecoratedPane.java index c34dcdf..f8834d9 100644 --- a/src/main/java/application/ui/DecoratedPane.java +++ b/src/main/java/application/ui/DecoratedPane.java @@ -14,9 +14,7 @@ import javafx.scene.layout.HBox; import javafx.stage.Screen; import javafx.stage.Stage; -import lombok.extern.slf4j.Slf4j; -@Slf4j public class DecoratedPane extends BorderPane { private double xOffset = 0; diff --git a/src/main/java/utils/CalibrationPoint.java b/src/main/java/utils/CalibrationPoint.java index 9a56d41..e5eb864 100644 --- a/src/main/java/utils/CalibrationPoint.java +++ b/src/main/java/utils/CalibrationPoint.java @@ -3,12 +3,10 @@ import javafx.geometry.Point2D; import javafx.scene.shape.Circle; import lombok.Getter; -import lombok.extern.slf4j.Slf4j; import java.util.LinkedList; import java.util.List; -@Slf4j public class CalibrationPoint { public Cross cross; diff --git a/src/main/java/utils/Cross.java b/src/main/java/utils/Cross.java index 2d2fb6b..36e338a 100644 --- a/src/main/java/utils/Cross.java +++ b/src/main/java/utils/Cross.java @@ -3,9 +3,7 @@ import javafx.scene.Group; import javafx.scene.shape.Circle; import javafx.scene.shape.Line; -import lombok.extern.slf4j.Slf4j; -@Slf4j public class Cross extends Group { public Cross() {