File: validate.sh

package info (click to toggle)
vite 1.4-6
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 19,160 kB
  • sloc: cpp: 30,167; makefile: 467; sh: 237; python: 140; ansic: 67; xml: 19
file content (64 lines) | stat: -rwxr-xr-x 2,317 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/usr/bin/env bash
###
#
#  @file validate.sh
#  @copyright 2023-2024 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
#                       Univ. Bordeaux. All rights reserved.
#
#  @version 1.2.0
#  @author Mathieu Faverge
#  @author Florent Pruvost
#  @date 2023-12-07
#
###

# Check some metrics on sonarqube (https://sonarqube.inria.fr/sonarqube/)
# and depending on the value return 0 (success) or 1 (failure).

if [ $# -gt 0 ]; then
    METRIC=$1
fi
METRIC=${METRIC:-BUG}

if [[ -z $CI_MERGE_REQUEST_IID || -z $CI_PROJECT_NAMESPACE || -z $CI_PROJECT_NAME ]]; then
    echo """
ERROR: One of the variables CI_MERGE_REQUEST_IID, CI_PROJECT_NAMESPACE,
  CI_PROJECT_NAME is empty. This script must be used during a gitlab merge
  request only -> Failure.
"""
    exit 1
fi

if [[ -z $SONARQUBE_LOGIN ]]; then
    echo """
ERROR: SONARQUBE_LOGIN is empty, please give a valid sonarqube user's token,
  with permissions set on the project -> Failure.
"""
    exit 1
fi

if [[ $METRIC == "BUG" ]]; then
    BUG=`curl -u $SONARQUBE_LOGIN: -X GET "https://sonarqube.inria.fr/sonarqube/api/measures/component?component=${CI_PROJECT_NAMESPACE}%3A${CI_PROJECT_NAME}&pullRequest=${CI_MERGE_REQUEST_IID}&metricKeys=new_bugs" |jq '.component.measures[0].period.value' | sed -e "s#\"##g"`
    echo "BUG=$BUG"
    if [[ $BUG -gt 0 ]]; then
        echo "%{BUG} new bugs detected by Sonarqube -> Failure."
        exit 1
    else
        echo "No new bugs detected by Sonarqube -> Success."
        exit 0
    fi
elif [[ $METRIC == "COVERAGE" ]]; then
    COV=`curl -u $SONARQUBE_LOGIN: -X GET "https://sonarqube.inria.fr/sonarqube/api/measures/component?component=${CI_PROJECT_NAMESPACE}%3A${CI_PROJECT_NAME}&pullRequest=${CI_MERGE_REQUEST_IID}&metricKeys=new_coverage" |jq '.component.measures[0].period.value' | sed -e "s#\"##g" | cut -d "." -f 1`
    echo "COV=$COV"
    if [[ $COV == "null" || -z $COV  ]]; then
        echo "Coverage is empty, certainly that there are no lines of new code (considered during the analysis) to compare -> Success."
    else
        if [[ $COV -lt 80 ]]; then
            echo "Coverage on new lines is ${COV}%, which is < 80% -> Failure."
            exit 1
        else
            echo "Coverage on new lines is ${COV}%, which is >= 80% -> Success."
            exit 0
        fi
    fi
fi