From 9a956e994230e3c3363e9417180795807059b052 Mon Sep 17 00:00:00 2001
From: Emmanuel Bruno <emmanuel.bruno@univ-tln.fr>
Date: Fri, 28 Oct 2022 17:36:23 +0200
Subject: [PATCH] initial release.

---
 action.yml       | 29 +++++++++++++++++++++++++++++
 checkVersions.sh |  3 +++
 ci-settings.xml  | 37 +++++++++++++++++++++++++++++++++++++
 mvn.sh           | 23 +++++++++++++++++++++++
 sonar.sh         |  7 +++++++
 5 files changed, 99 insertions(+)
 create mode 100644 action.yml
 create mode 100755 checkVersions.sh
 create mode 100644 ci-settings.xml
 create mode 100755 mvn.sh
 create mode 100755 sonar.sh

diff --git a/action.yml b/action.yml
new file mode 100644
index 0000000..3af3326
--- /dev/null
+++ b/action.yml
@@ -0,0 +1,29 @@
+name: 'Java CI Build'
+description: 'Build a Java CI project with maven and Docker'
+runs:
+  using: "composite"
+  steps:
+      # build the project in a docker container with a specific maven settings.xml
+      # it uses env variables from github secrets for the credentials
+      # to github, dockerhub and sonar.
+      - name: Build and deploy site with Maven
+        run: ${{ github.action_path }}/mvn.sh site:site site-deploy
+        shell: bash
+      - name: Notify dedicated teams channel of Success
+        uses: dragos-cojocari/ms-teams-notification@v1.0.0
+        if: ${{ success() }}
+        with:
+          github-token: ${{ github.token }} # this will use the runner's token.
+          ms-teams-webhook-uri: ${{ env.MSTEAMS_WEBHOOK }}
+          notification-summary: Web site deployed.
+          notification-color: 28a745
+          timezone: Europe/Paris
+      - name: Notify dedicated teams channel of Failure
+        uses: dragos-cojocari/ms-teams-notification@v1.0.0
+        if: ${{ failure() }}
+        with:
+          github-token: ${{ github.token }} # this will use the runner's token.
+          ms-teams-webhook-uri: ${{ env .MSTEAMS_WEBHOOK }}
+          notification-summary: Failed to deploy web site.
+          notification-color: dc3545
+          timezone: Europe/Paris
diff --git a/checkVersions.sh b/checkVersions.sh
new file mode 100755
index 0000000..e7c0fea
--- /dev/null
+++ b/checkVersions.sh
@@ -0,0 +1,3 @@
+mvn versions:display-dependency-updates
+mvn versions:display-plugin-updates
+mvn versions:display-property-updates
diff --git a/ci-settings.xml b/ci-settings.xml
new file mode 100644
index 0000000..3ccf09a
--- /dev/null
+++ b/ci-settings.xml
@@ -0,0 +1,37 @@
+<!-- A MAVEN SETTINGS FILE TO BE USED IN CI -->
+<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
+                          https://maven.apache.org/xsd/settings-1.0.0.xsd">
+
+    <servers>
+        <server>
+            <id>github</id>
+            <username>${env.GITHUBLOGIN}</username>
+            <password>${env.GITHUBPASSWORD}</password>
+        </server>
+        <server>
+            <id>dockerhub</id>
+            <username>${env.DOCKER_USERNAME}</username>
+            <password>${env.DOCKER_PASSWORD}</password>
+        </server>
+        <server>
+            <id>github.pages</id>
+            <username>git</username>
+            <configuration>
+                <scmVersionType>branch</scmVersionType>
+                <scmVersion>gh-pages</scmVersion>
+            </configuration>
+        </server>
+    </servers>
+
+    <profiles>
+        <profile>
+            <id>sonar</id>
+            <properties>
+                <sonar.host.url>${env.SONAR_URL}</sonar.host.url>
+                <sonar.login>${env.SONAR_TOKEN}</sonar.login>
+            </properties>
+        </profile>
+    </profiles>
+
+</settings>
diff --git a/mvn.sh b/mvn.sh
new file mode 100755
index 0000000..2d4f93b
--- /dev/null
+++ b/mvn.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+export MAVEN_IMAGE=brunoe/maven:3.8.6-eclipse-temurin-17
+SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
+CURRENT=$(pwd)
+echo SCRIPT_DIR=$SCRIPT_DIR
+echo PWD=$CURRENT
+
+
+# mount the gh action directory in the container
+docker run \
+          --env GITHUBLOGIN=$GITHUBLOGIN \
+          --env GITHUBPASSWORD=$GITHUBPASSWORD \
+          --mount type=bind,source=${HOME}/.m2,target=/var/maven/.m2 \
+          --mount type=bind,source=${HOME}/.ssh,target=/home/user/.ssh \
+          --mount type=bind,source=${HOME}/.gitconfig,target=/home/user/.gitconfig,readonly \
+          --mount type=bind,source="$(pwd)",target=/usr/src/mymaven \
+          --mount type=bind,source=${SCRIPT_DIR},target=/usr/local/ci-java-build-action \
+          --workdir /usr/src/mymaven \
+          --rm \
+          --env PUID=`id -u` -e PGID=`id -g` \
+          --env MAVEN_CONFIG=/var/maven/.m2 \
+          $MAVEN_IMAGE \
+          runuser --user user --group user -- mvn -B -e -T 1C -Duser.home=/var/maven --settings /usr/local/ci-java-build-action/ci-settings.xml "$@"
diff --git a/sonar.sh b/sonar.sh
new file mode 100755
index 0000000..59f54c6
--- /dev/null
+++ b/sonar.sh
@@ -0,0 +1,7 @@
+./mvn.sh sonar:sonar \
+  -D sonar.branch.name=$(git rev-parse --abbrev-ref HEAD|tr / _ ) \
+  -DskipTests=true \
+  -Dsonar.language=java \
+  -Dsonar.report.export.path=sonar-report.json \
+  -Dsonar.host.url=http://localhost:9000 \
+  --activate-profiles sonar
-- 
GitLab