diff --git a/.gitignore b/.gitignore index a8a37e6e..6347a455 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,12 @@ hs_err_pid* # build /target /generated +/src/jmods/jdeps + +# AppImage build +/OpenJDK*.gz +/usr +/jdk* +/AppDir/usr +/*.AppImage +*~ diff --git a/.travis.yml b/.travis.yml index f948d89c..f5f88dcb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,9 +2,13 @@ language: java jdk: - - openjdk11 + - openjdk13 -script: ./mvnw -Pheadless clean site install +install: skip + +script: + - ./mvnw -U -Pheadless clean site install + - ./buildAppImage.sh after_success: - bash <(curl -s https://codecov.io/bash) diff --git a/ArchitekturEntscheidungen.adoc b/ArchitekturEntscheidungen.adoc index caa9e610..c40f909d 100644 --- a/ArchitekturEntscheidungen.adoc +++ b/ArchitekturEntscheidungen.adoc @@ -146,6 +146,11 @@ Bei Color.red gibt es keine Anomalie. [##literatur] === Literatur und Quellen im Netz +* +* https://maven.apache.org/plugins/maven-jlink-plugin/usage.html +* https://www.youtube.com/watch?v=a8xnnR3Bz6w&feature=youtu.be&t=2570 +* https://stackoverflow.com/questions/47727869/creating-module-info-for-automatic-modules-with-jdeps-in-java-9 +* https://github.com/codetojoy/easter_eggs_for_java_9/blob/master/egg_34_stack_overflow_47727869/run.sh * https://winterbe.com/posts/2018/08/29/migrate-maven-projects-to-java-11-jigsaw/ * https://medium.com/@adam_carroll/java-packager-with-jdk11-31b3d620f4a8 * http://discoveration.de/it/javafx-mit-java-runtime-als-exe-ausliefern/636/ diff --git a/GitCommitMessage.template b/GitCommitMessage.template new file mode 100644 index 00000000..caa77843 --- /dev/null +++ b/GitCommitMessage.template @@ -0,0 +1 @@ +[${ticket:".*"}] \ No newline at end of file diff --git a/buildAppImage.sh b/buildAppImage.sh new file mode 100755 index 00000000..78ab9840 --- /dev/null +++ b/buildAppImage.sh @@ -0,0 +1,56 @@ +#!/usr/bin/env sh + +export ARCH=x86_64 +export CUR_DIR=${PWD}/ +export APP_DIR=target/AppDir/ +export BUILD_DIR=target/appbuild/ +export RESOURCE_DIR=src/appimage-resources/ +export JDK_ARCHIVE_NAME=OpenJDK11U-jdk_x64_linux_openj9_11.0.3_7_openj9-0.14.3.tar.gz + +# download jre 11 +wget -P ${BUILD_DIR} -c https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.3%2B7_openj9-0.14.3/${JDK_ARCHIVE_NAME} +tar -C ${BUILD_DIR} -xf ${BUILD_DIR}${JDK_ARCHIVE_NAME} + +# list deps modules +${BUILD_DIR}jdk-11.0.3+7/bin/jdeps --list-deps ./target/jenkinsmonitor-*-jar-with-dependencies.jar + +# spezielles jre bauen +${BUILD_DIR}jdk-11.0.3+7/bin/jlink --no-header-files --no-man-pages --compress=2 --strip-debug --add-modules java.base,java.desktop,java.logging,java.management,java.naming,java.security.jgss,java.sql,java.xml --output ${BUILD_DIR}usr + +# copy binary +mkdir ${APP_DIR} +cp -Rf ${BUILD_DIR}usr ${APP_DIR} + +# download AppImageKit and give permissions und run it +wget -P ${BUILD_DIR} -c https://github.com/AppImage/AppImageKit/releases/download/12/appimagetool-x86_64.AppImage +chmod +x ${BUILD_DIR}appimagetool-x86_64.AppImage +#wget -P ${BUILD_DIR} https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage +#chmod +x ${BUILD_DIR}linuxdeploy-x86_64.AppImage + + +# copy resources at final place and create sym links +cp -a ./target/jenkinsmonitor-*-jar-with-dependencies.jar ${APP_DIR}usr/bin/jenkinsmonitor-jar-with-dependencies.jar +cp -Rf ${RESOURCE_DIR}* ${APP_DIR} +cd "${APP_DIR}" +ln -s ./usr/bin/jenkinsmonitor.wrapper ./AppRun +ln -s ./usr/share/metainfo/com.github.funthomas424242.jenkinsmonitor.metainfo.xml ./usr/share/metainfo/jenkinsmonitor.appdata.xml +ln -s ./usr/share/applications/jenkinsmonitor.desktop ./jenkinsmonitor.desktop +ln -s ./usr/share/icons/theme/320x235/1984EmmanuelGoldstein.png ./usr/share/icons/theme/256x256/1984EmmanuelGoldstein.png +ln -s ./usr/share/icons/theme/320x235/1984EmmanuelGoldstein.png ./1984EmmanuelGoldstein.png +cd "${CUR_DIR}" + +#read -p "Press [Enter] Resourcenprüfung jetzt möglich ..." + +# loesche altes Image und erstelle neu +rm Jenkins_Monitor*.AppImage +${BUILD_DIR}appimagetool-x86_64.AppImage ${APP_DIR} +#${BUILD_DIR}/linuxdeploy-x86_64.AppImage --appdir ${APP_DIR} -e src/appimage-resources/launch.sh -i src/appimage-resources/1984EmmanuelGoldstein.png -d src/appimage-resources/myapp.desktop --output appimage + +#read -p "Press [Enter] to start remove waste files ..." +#rm ${BUILD_DIR}linuxdeploy*.AppImage +rm -rf ${APP_DIR}* +rm -rf ${APP_DIR}.DirIcon +rm -rf ${BUILD_DIR}usr + + + diff --git a/build_bundle.sh b/build_bundle.sh new file mode 100755 index 00000000..0dbcab22 --- /dev/null +++ b/build_bundle.sh @@ -0,0 +1,4 @@ +#!/bin/bash +jlink --module-path "output;$JAVA_HOME/jmods" --add-modules com.github.funthomas424242.jenkinsmonitor --output laufZeitImage + +#java --module-path com.mydeveloperplanet.jpmshello/target/jpmshello-1.0-SNAPSHOT.jar;com.mydeveloperplanet.jpmshi/target/jpmshi-1.0-SNAPSHOT.jar --module com.mydeveloperplanet.jpmshello/com.mydeveloperplanet.jpmshello.HelloModules diff --git a/mkJmod.sh b/mkJmod.sh new file mode 100755 index 00000000..ef7cc385 --- /dev/null +++ b/mkJmod.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# Herstellung der jmod Dateien für auto module +# +# Gezeigt am Beispiel von commons-lang +# +export GROUP_ID="commons-lang" +export ARTIFACT_ID="commons-lang" +export ARTIFACT_ID_DOT="commons.lang" +export VERSION="2.6" +# bereinige jdeps +rm -rf ./jdeps/* +# generiere Module Definition +jdeps --generate-open-module ./jdeps ~/.m2/repository/${GROUP_ID}/${ARTIFACT_ID}/${VERSION}/${ARTIFACT_ID}-${VERSION}.jar +jdeps --generate-module-info ./jdeps ~/.m2/repository/${GROUP_ID}/${ARTIFACT_ID}/${VERSION}/${ARTIFACT_ID}-${VERSION}.jar +# compiliere module-info +unzip ~/.m2/repository/${GROUP_ID}/${ARTIFACT_ID}/${VERSION}/${ARTIFACT_ID}-${VERSION}.jar -d ./jdeps/${ARTIFACT_ID_DOT}/classes +javac -d ./jdeps/commons.lang/classes ./jdeps/${ARTIFACT_ID_DOT}/module-info.java +# erzeuge jmod module +jmod create --class-path ./jdeps/${ARTIFACT_ID_DOT}/classes src/jmods/${ARTIFACT_ID}-${VERSION}.jmod + diff --git a/pom.xml b/pom.xml index b9739b28..0f03e9a4 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.github.funthomas424242 0.0.2-SNAPSHOT jenkinsmonitor - jar + ${mypackaging} Jenkins Monitor Ein Jenkinsmonitor für den Systemtray 2019 @@ -49,6 +49,7 @@ + jar UTF-8 3.8.1 11 @@ -73,22 +74,17 @@ org.slf4j slf4j-api - 1.7.28 + 2.0.0-alpha1 compile - - javax.validation - validation-api - 2.0.1.Final - compile - - - nl.jqno.equalsverifier - equalsverifier - 3.1.10 - test - + + + + + + + org.apache.httpcomponents @@ -118,7 +114,12 @@ ${junit-jupiter-engine.version} test - + + nl.jqno.equalsverifier + equalsverifier + 3.1.10 + test + org.apache.bval bval-jsr @@ -160,7 +161,7 @@ maven-source-plugin - 3.1.0 + 3.2.0 maven-deploy-plugin @@ -180,7 +181,11 @@ maven-jar-plugin - 3.1.2 + 3.2.0 + + + maven-assembly-plugin + 3.2.0 maven-javadoc-plugin @@ -194,7 +199,7 @@ org.jacoco jacoco-maven-plugin - 0.8.4 + 0.8.5 @@ -252,14 +257,6 @@ display-dependency-updates - - - - show-plugin-updates - - validate - - display-plugin-updates @@ -328,7 +325,12 @@ UTF-8 11 - -Xlint:all + + -Xlint:all + --add-opens=java.base/java.lang=ALL-UNNAMED + --add-opens=java.base/java.net=ALL-UNNAMED + + true @@ -336,6 +338,10 @@ maven-surefire-plugin 3.0.0-M2 + never + + --illegal-access=deny + ${junit-excluded-groups} @@ -370,6 +376,16 @@ + + + + + + + + + + org.apache.maven.plugins maven-site-plugin @@ -404,7 +420,6 @@ maven-assembly-plugin - 3.1.1 package-assemblies @@ -454,12 +469,76 @@ + + local + + + + org.apache.maven.plugins + maven-toolchains-plugin + 3.0.0 + + + + 13 + openjdk + + + + + + + toolchain + + + + + + + + + false + + headless headfull + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/appimage-resources/jenkinsmonitor.properties.template b/src/appimage-resources/jenkinsmonitor.properties.template new file mode 100644 index 00000000..63257bc0 --- /dev/null +++ b/src/appimage-resources/jenkinsmonitor.properties.template @@ -0,0 +1,16 @@ +# config file of jenkinsmonitor + + +jenkinsauth.host-#1=http://192.168.178.54:8080 +jenkinsauth.username-#1=admin +jenkinsauth.password-#1=admin + +# valid valid >4 (value in seconds) +jenkinsmonitor.pollperiod=10 + +# id = [a-zA-Z0-9]+ (Zahlen und Buchstaben) +# joburl-id=http://localhost:8090/job/multibranchjob/job/master +joburl-#1=http://192.168.178.54:8080/job/jenkinsmonitor-single/ +joburl-#3=http://192.168.178.54:8080/job/test/ +joburl-#5=http://localhost:8090/job/localmod/ + diff --git a/src/appimage-resources/usr/bin/jenkinsmonitor.wrapper b/src/appimage-resources/usr/bin/jenkinsmonitor.wrapper new file mode 100755 index 00000000..bb27af06 --- /dev/null +++ b/src/appimage-resources/usr/bin/jenkinsmonitor.wrapper @@ -0,0 +1,23 @@ +#!/usr/bin/sh + +# here copy the jenkinsmonitor.properties.template to ~/jenkinsmonitor.properties if not exists +if [ -f ~/jenkinsmonitor.properties ] +then + echo "~/jenkinsmonitor.properties exists" +else + cp $APPDIR/jenkinsmonitor.properties.template ~/jenkinsmonitor.properties +fi + +# start the app +$APPDIR/usr/bin/java -jar $APPDIR/usr/bin/jenkinsmonitor-jar-with-dependencies.jar + +# +#cp -a $APPDIR/usr/share/applications/JenkinsMonitor.desktop ~/$XDG_DESKTOP_DIR/ +# +#if [ -f $XDG_DESKTOP_DIR/JenkinsMonitor.desktop ] +#then +# echo "JenkinsMonitor.desktop created or exists" +#else +# cp -a $APPDIR/usr/share/applications/JenkinsMonitor.desktop ~/Schreibtisch/ +# cp -a $APPDIR/usr/share/applications/JenkinsMonitor.desktop ~/desktop/ +#fi diff --git a/src/appimage-resources/usr/share/applications/JenkinsMonitor.desktop b/src/appimage-resources/usr/share/applications/JenkinsMonitor.desktop new file mode 100755 index 00000000..1a3c8621 --- /dev/null +++ b/src/appimage-resources/usr/share/applications/JenkinsMonitor.desktop @@ -0,0 +1,14 @@ +[Desktop Entry] +Version=1.0 +Encoding=UTF-8 +Type=Application +Name=Jenkins Monitor 0.0.2-SNAPSHOT +GenericName=Jenkins Monitor +Comment=Ein Monitor für Jenkins Jobs. +Icon=1984EmmanuelGoldstein +Exec=Jenkins_Monitor_0.0.2-SNAPSHOT-x86_64.AppImage +MimeType=application/x-iso9660-appimage; +Terminal=false +StartupNotify=true +Categories=Development; +X-GNOME-Autostart-Delay=5 diff --git a/src/appimage-resources/usr/share/applications/jenkinsmonitor.desktop b/src/appimage-resources/usr/share/applications/jenkinsmonitor.desktop new file mode 100755 index 00000000..3362acab --- /dev/null +++ b/src/appimage-resources/usr/share/applications/jenkinsmonitor.desktop @@ -0,0 +1,14 @@ +[Desktop Entry] +Version=1.0 +Encoding=UTF-8 +Type=Application +Name=Jenkins Monitor 0.0.2-preview +GenericName=Jenkins Monitor +Comment=Ein Monitor für Jenkins Jobs. +Icon=1984EmmanuelGoldstein +Exec=jenkinsmonitor.wrapper +MimeType=application/x-iso9660-appimage; +Terminal=false +StartupNotify=true +Categories=Development; +X-GNOME-Autostart-Delay=5 diff --git a/src/appimage-resources/usr/share/icons/hicolor/scalable/apps/1984EmmanuelGoldstein_1280x640.svg b/src/appimage-resources/usr/share/icons/hicolor/scalable/apps/1984EmmanuelGoldstein_1280x640.svg new file mode 100644 index 00000000..5ae0879f --- /dev/null +++ b/src/appimage-resources/usr/share/icons/hicolor/scalable/apps/1984EmmanuelGoldstein_1280x640.svg @@ -0,0 +1,1632 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/appimage-resources/usr/share/icons/theme/320x235/1984EmmanuelGoldstein.png b/src/appimage-resources/usr/share/icons/theme/320x235/1984EmmanuelGoldstein.png new file mode 100644 index 00000000..68fdcaf1 Binary files /dev/null and b/src/appimage-resources/usr/share/icons/theme/320x235/1984EmmanuelGoldstein.png differ diff --git a/src/appimage-resources/usr/share/metainfo/com.github.funthomas424242.jenkinsmonitor.metainfo.xml b/src/appimage-resources/usr/share/metainfo/com.github.funthomas424242.jenkinsmonitor.metainfo.xml new file mode 100644 index 00000000..27f39f1a --- /dev/null +++ b/src/appimage-resources/usr/share/metainfo/com.github.funthomas424242.jenkinsmonitor.metainfo.xml @@ -0,0 +1,45 @@ +​ +​ +​ +​ com.github.funthomas424242.jenkinsmonitor +​ FSFAP +​ LGPL-3.0+ +​ Jenkins Monitor +​ Monitor zur Überwachung von Jenkins Jobs +​ +​ +​

+ Nach Start erscheint der Jenkins Monitor als Tray Icon. + Per Linksklick kann eine Statusliste aller Jobs ein- und ausgeblendet werden. + Per Rechtsklick wird das Aktionsmenü erreicht. Über dem Menü wird der aktuell Status ebenfalls angezeigt. + Die Konfiguration erfolgt per ~/jenkinsmonitor.properties +

+​
+​ +​ com.github.funthomas424242.jenkinsmonitor.desktop +​ +​ +​ +​ Das Icon der Anwendung +​ https://raw.githubusercontent.com/FunThomas424242/jenkinsmonitor/master/src/main/resources/img/1984EmmanuelGoldstein.jpg +​ +​ +​ https://raw.githubusercontent.com/FunThomas424242/jenkinsmonitor/master/src/main/resources/img/screenshot.jpg +​ +​ +​ +​ https://github.com/FunThomas424242/jenkinsmonitor/ +​ RADeS +​ +​ +​ Jenkins_Monitor_0.0.2-preview-x86_64.AppImage +​ +​ +​ +​ +​ +​ siehe CHANGELOG

+​
+​
+​
+​
diff --git a/src/jmods/README.md b/src/jmods/README.md new file mode 100644 index 00000000..e38f4c01 --- /dev/null +++ b/src/jmods/README.md @@ -0,0 +1,11 @@ +```shell +# Herstellung der jmod Dateien für auto module +# +# Gezeigt am Beispiel von commons-lang +# +jdeps --generate-open-module ./jdeps ~/.m2/repository/commons-lang/commons-lang/2.6/commons-lang-2.6.jar +jdeps --generate-module-info ./jdeps ~/.m2/repository/commons-lang/commons-lang/2.6/commons-lang-2.6.jar +unzip ~/.m2/repository/commons-lang/commons-lang/2.6/commons-lang-2.6.jar -d ./jdeps/commons.lang/classes +javac -d ./jdeps/commons.lang/classes ./jdeps/commons.lang/module-info.java +jmod create --class-path ./jdeps/commons.lang/classes src/jmods/commons-lang-2.6.jmod +``` diff --git a/src/jmods/mkCommonsCodec.sh b/src/jmods/mkCommonsCodec.sh new file mode 100755 index 00000000..b5b2bc0d --- /dev/null +++ b/src/jmods/mkCommonsCodec.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Herstellung der jmod Dateien für auto module +# +# Gezeigt am Beispiel von commons-lang +# +export GROUP_ID="commons-codec" +export ARTIFACT_ID="commons-codec" +export MODULE_ID="org.apache.commons.codec" +export VERSION="1.11" +# bereinige jdeps +rm -rf ./jdeps/* +rm ./${MODULE_ID}-${VERSION}.jmod +# generiere Module Definition +jdeps --generate-open-module ./jdeps ~/.m2/repository/${GROUP_ID}/${ARTIFACT_ID}/${VERSION}/${ARTIFACT_ID}-${VERSION}.jar +jdeps --generate-module-info ./jdeps ~/.m2/repository/${GROUP_ID}/${ARTIFACT_ID}/${VERSION}/${ARTIFACT_ID}-${VERSION}.jar +# compiliere module-info +unzip ~/.m2/repository/${GROUP_ID}/${ARTIFACT_ID}/${VERSION}/${ARTIFACT_ID}-${VERSION}.jar -d ./jdeps/${MODULE_ID}/classes +javac -d ./jdeps/${MODULE_ID}/classes ./jdeps/${MODULE_ID}/module-info.java +# erzeuge jmod module +jmod create --class-path ./jdeps/${MODULE_ID}/classes ./${MODULE_ID}-${VERSION}.jmod + diff --git a/src/jmods/mkOrgJson.sh b/src/jmods/mkOrgJson.sh new file mode 100755 index 00000000..869b5312 --- /dev/null +++ b/src/jmods/mkOrgJson.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Herstellung der jmod Dateien für auto module +# +# Gezeigt am Beispiel von commons-lang +# +export GROUP_ID="org/json" +export ARTIFACT_ID="json" +export MODULE_ID="org.json" +export VERSION="20190722" +# bereinige jdeps +rm -rf ./jdeps/* +rm ./${MODULE_ID}-${VERSION}.jmod +# generiere Module Definition +jdeps --generate-open-module ./jdeps ~/.m2/repository/${GROUP_ID}/${ARTIFACT_ID}/${VERSION}/${ARTIFACT_ID}-${VERSION}.jar +jdeps --generate-module-info ./jdeps ~/.m2/repository/${GROUP_ID}/${ARTIFACT_ID}/${VERSION}/${ARTIFACT_ID}-${VERSION}.jar +# compiliere module-info +unzip ~/.m2/repository/${GROUP_ID}/${ARTIFACT_ID}/${VERSION}/${ARTIFACT_ID}-${VERSION}.jar -d ./jdeps/${MODULE_ID}/classes +javac -d ./jdeps/${MODULE_ID}/classes ./jdeps/${MODULE_ID}/module-info.java +# erzeuge jmod module +jmod create --class-path ./jdeps/${MODULE_ID}/classes ./${MODULE_ID}-${VERSION}.jmod + diff --git a/src/jmods/org.apache.commons.codec-1.11.jmod b/src/jmods/org.apache.commons.codec-1.11.jmod new file mode 100644 index 00000000..854e07e7 Binary files /dev/null and b/src/jmods/org.apache.commons.codec-1.11.jmod differ diff --git a/src/jmods/org.json-20190722.jmod b/src/jmods/org.json-20190722.jmod new file mode 100644 index 00000000..27446c2d Binary files /dev/null and b/src/jmods/org.json-20190722.jmod differ diff --git a/src/main/java/module-info.java-old b/src/main/java/module-info.java-old new file mode 100644 index 00000000..299882b5 --- /dev/null +++ b/src/main/java/module-info.java-old @@ -0,0 +1,37 @@ +/*- + * #%L + * Jenkins Monitor + * %% + * Copyright (C) 2019 PIUG + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ +module com.github.funthomas424242.jenkinsmonitor { + requires java.base; + requires java.desktop; + requires java.net.http; + opens java.net.http; + requires org.slf4j; + requires org.json; + requires org.apache.httpcomponents.httpclient; + requires org.apache.httpcomponents.httpcore; + exports com.github.funthomas424242.jenkinsmonitor; + opens com.github.funthomas424242.jenkinsmonitor; + opens com.github.funthomas424242.jenkinsmonitor.config; + opens com.github.funthomas424242.jenkinsmonitor.gui; + opens com.github.funthomas424242.jenkinsmonitor.jenkins; + opens com.github.funthomas424242.jenkinsmonitor.etc; +} diff --git a/src/main/resources/img/1984EmmanuelGoldstein_1280x640.svg b/src/main/resources/img/1984EmmanuelGoldstein_1280x640.svg new file mode 100644 index 00000000..5ae0879f --- /dev/null +++ b/src/main/resources/img/1984EmmanuelGoldstein_1280x640.svg @@ -0,0 +1,1632 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +