From 376e9fe69980d0af33a5b303bb6107c29aad0bc6 Mon Sep 17 00:00:00 2001
From: Olivier Maury <Olivier.Maury@inrae.fr>
Date: Fri, 28 Feb 2025 12:07:46 +0100
Subject: [PATCH] build(ci): ajouter GitLab-CI. refs #10596

---
 .gitlab-ci.yml            | 124 ++++++++++++++++++++++++++++++++++++++
 bin/sloccount.sh          |  43 ++++++-------
 bin/tokei2cloc.py         |  26 ++++----
 pom.xml                   |   2 +-
 src/main/config/dev/.keep |   0
 src/site/site.xml         |   2 +-
 6 files changed, 158 insertions(+), 39 deletions(-)
 create mode 100644 .gitlab-ci.yml
 create mode 100644 src/main/config/dev/.keep

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 000000000..c4f163731
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,124 @@
+# To use the registry, DOCKER_AUTH_CONFIG must be set
+image: $CI_REGISTRY/agroclim/common/docker-projets-java:latest
+
+variables:
+  MAVEN_OPTS: "-Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository"
+  MAVEN_CLI_OPTS: "-s $CI_PROJECT_DIR/ci_settings.xml"
+
+default:
+  # Cache downloaded dependencies and plugins between builds.
+  cache:
+    key: maven-repository
+    paths:
+      - $CI_PROJECT_DIR/.m2/repository
+  tags:
+    - agroclim
+
+stages:
+    - build
+    - test
+    - install
+    - code-check
+    - deploy
+
+.settingsxml:
+  before_script:
+    - echo "Maven settings.xml"
+    - echo "$M2_SETTINGS_XML" > $CI_PROJECT_DIR/ci_settings.xml
+
+dependencies_job:
+  stage: build
+  extends: .settingsxml
+  script:
+    - echo "Download all dependencies (dependencies, plugins, reports)"
+    - mvn -s $CI_PROJECT_DIR/ci_settings.xml dependency:go-offline
+
+build_job:
+  stage: build
+  extends: .settingsxml
+  needs: ["dependencies_job"]
+  script:
+    - echo "Maven compile started"
+    - mvn $MAVEN_CLI_OPTS clean compile test-compile gwt:compile
+    - /usr/bin/tokei --version
+  artifacts:
+    expire_in: 1 week
+    when: always
+    paths:
+      - target
+
+test_job:
+  stage: test
+  extends: .settingsxml
+  needs: ["build_job"]
+  script:
+    - echo "Maven test started"
+    - mvn $MAVEN_CLI_OPTS test org.jacoco:jacoco-maven-plugin:report-aggregate
+  artifacts:
+    expire_in: 1 week
+    when: always
+    paths:
+      - target
+    reports:
+      junit:
+        - target/surefire-reports/TEST-*.xml
+        - target/failsafe-reports/TEST-*.xml
+
+install_job:
+  stage: install
+  extends: .settingsxml
+  needs: ["test_job"]
+  script:
+    - echo "Maven packaging started"
+    - mvn $MAVEN_CLI_OPTS install -Dcheckstyle.skip=true -Dcpd.skip=true -Dpmd.skip=true -DskipTests
+  artifacts:
+    expire_in: 1 week
+    when: always
+    paths:
+      - .m2/repository
+      - target
+
+checkstyle_job:
+  stage: code-check
+  extends: .settingsxml
+  needs: ["install_job"]
+  script:
+    - mvn $MAVEN_CLI_OPTS checkstyle:check
+
+pmd_job:
+  stage: code-check
+  extends: .settingsxml
+  needs: ["install_job"]
+  script:
+    - mvn $MAVEN_CLI_OPTS pmd:check
+
+cpd_job:
+  stage: code-check
+  extends: .settingsxml
+  needs: ["install_job"]
+  script:
+    - mvn $MAVEN_CLI_OPTS pmd:cpd-check
+
+cobertura_job:
+  stage: deploy
+  needs: ["test_job"]
+  script:
+    # convert report from jacoco to cobertura, using relative project path
+    - python /opt/cover2cover.py
+      target/site/jacoco-aggregate/jacoco.xml
+      $CI_PROJECT_DIR/src/main/java/
+      > target/cobertura.xml
+
+# https://tempo.pages.mia.inra.fr/visualisation/
+pages:
+  stage: deploy
+  extends: .settingsxml
+  needs: ["checkstyle_job", "pmd_job", "cpd_job"]
+  script:
+    - mvn $MAVEN_CLI_OPTS site -DskipTests
+  artifacts:
+    expire_in: 1 week
+    when: always
+    paths:
+      - target
+  publish: target/site
diff --git a/bin/sloccount.sh b/bin/sloccount.sh
index f2f7bb635..b133820fa 100755
--- a/bin/sloccount.sh
+++ b/bin/sloccount.sh
@@ -16,33 +16,26 @@
 # You should have received a copy of the GNU General Public License
 # along with this program. If not, see <http://www.gnu.org/licenses/>.
 #
-
-
-TOKEI2SLOCCOUNT=$(dirname $0)/tokei2sloccount.py
+ROOT_DIR=$(dirname $(dirname $0))
 TOKEI2CLOC=$(dirname $0)/tokei2cloc.py
-TOKEITGZ=tokei-v7.0.3-x86_64-unknown-linux-gnu.tar.gz
-if [ ! -f bin/tokei ]; then
-	mkdir -p ~/tmp bin
-	if [ ! -f ~/tmp/$TOKEITGZ ]; then
-		wget "https://github.com/Aaronepower/tokei/releases/download/v7.0.3/$TOKEITGZ" -O ~/tmp/$TOKEITGZ
+TOKEI=$(command -v tokei)
+if [ ! -x "$TOKEI" ]; then
+	TOKEITGZ=tokei-x86_64-unknown-linux-gnu.tar.gz
+	if [ ! -f bin/tokei ]; then
+		mkdir -p ~/tmp
+		if [ ! -f ~/tmp/$TOKEITGZ ]; then
+			wget "https://github.com/Aaronepower/tokei/releases/download/v12.1.2/$TOKEITGZ" -O ~/tmp/$TOKEITGZ
+		fi
+		tar zxf ~/tmp/$TOKEITGZ -C bin
 	fi
-	tar zxf ~/tmp/$TOKEITGZ -C bin
+	TOKEI=bin/tokei
 fi
-if [ -f bin/tokei ]; then
-	mkdir -p target
-	#bin/tokei -f -o json src | $TOKEI2SLOCCOUNT > target/sloccount.sc
-	bin/tokei -f -o json src | $TOKEI2CLOC > target/cloc.xml
-	exit
+if [ ! -f $TOKEI ]; then
+	echo "Strange, $TOKEI does not exist!"
+	exit 1
 fi
 
-SLOCCOUNT=$(which sloccount);
-if [ "$SLOCCOUNT" != "" ]; then
-	DATADIR=$(dirname $0)/.slocdata;
-	if [ ! -f $DATADIR ]; then
-		mkdir -p $DATADIR;
-	fi
-	mkdir -p target ;
-	/usr/bin/sloccount --datadir $DATADIR --duplicates --wide --details src > target/sloccount.sc;
-else 
-	echo "sloccount not found!";
-fi
\ No newline at end of file
+echo "tokei is installed at $TOKEI"
+$TOKEI --version
+mkdir -p $ROOT_DIR/target
+$TOKEI -f -o json $ROOT_DIR/src | $TOKEI2CLOC > target/cloc.xml
diff --git a/bin/tokei2cloc.py b/bin/tokei2cloc.py
index 5bd014600..3308aa346 100755
--- a/bin/tokei2cloc.py
+++ b/bin/tokei2cloc.py
@@ -18,12 +18,12 @@
 # along with this program. If not, see <http://www.gnu.org/licenses/>.
 #
 
-# $Id: tokei2cloc.py 77 2019-01-11 17:24:18Z omaury $
+# $Id$
 #
 # Author : Olivier Maury
 # Creation Date : 2019-01-15 10:30:29 +0200
-# Last Revision : $Date: 2019-01-11 18:24:18 +0100 (ven., 11 janv. 2019) $
-# Revision : $Rev: 77 $
+# Last Revision : $Date$
+# Revision : $Rev$
 u"""
 NOM
         %prog - Tokei2Cloc
@@ -38,10 +38,10 @@ u"""
         Olivier Maury
 
 VERSION
-        $Date: 2019-01-11 18:24:18 +0100 (ven., 11 janv. 2019) $
+        $Date$
 """
 
-__revision__ = "$Rev: 77 $"
+__revision__ = "$Rev$"
 __author__ = "Olivier Maury"
 import json
 import sys
@@ -52,8 +52,10 @@ results = json.loads(sys.stdin.read())
 nb_files = 0
 nb_lines = 0
 for lang in results:
-    nb_files += len(results[lang]['stats'])
-    nb_lines += int(results[lang]['lines'])
+    nb_files += len(results[lang]['reports'])
+    nb_lines += int(results[lang]['blanks'])
+    nb_lines += int(results[lang]['code'])
+    nb_lines += int(results[lang]['comments'])
 
 print("""<?xml version="1.0"?><results>
 <header>
@@ -73,11 +75,11 @@ total_blank = 0
 total_comment = 0
 total_code = 0
 for lang in results:
-    for result in results[lang]['stats']:
-        blank = int(result['blanks'])
-        comment = int(result['comments'])
-        code = int(result['code'])
-        print("""  <file name="%s" blank="%d" comment="%d" code="%d"  language="%s" />""" % 
+    for result in results[lang]['reports']:
+        blank = int(result['stats']['blanks'])
+        comment = int(result['stats']['comments'])
+        code = int(result['stats']['code'])
+        print("""  <file name="%s" blank="%d" comment="%d" code="%d"  language="%s" />""" %
             (result['name'], blank, comment, code, lang))
         total_blank += blank
         total_comment += comment
diff --git a/pom.xml b/pom.xml
index 3eac3c389..5141bb0b8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -899,7 +899,7 @@
 			<plugins>
 				<plugin>
 					<artifactId>maven-site-plugin</artifactId>
-					<version>4.0.0-M6</version>
+					<version>3.21.0</version>
 					<configuration>
 						<locales>fr</locales>
 					</configuration>
diff --git a/src/main/config/dev/.keep b/src/main/config/dev/.keep
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/site/site.xml b/src/site/site.xml
index 6da2fa987..1e4e4f1f0 100644
--- a/src/site/site.xml
+++ b/src/site/site.xml
@@ -23,7 +23,7 @@
     <skin>
         <groupId>org.apache.maven.skins</groupId>
         <artifactId>maven-fluido-skin</artifactId>
-        <version>2.0.0-M7</version>
+        <version>2.0.1</version>
     </skin>
 
     <custom>
-- 
GitLab