File: ci-run-cppcheck.sh

package info (click to toggle)
zsv 1.3.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 49,160 kB
  • sloc: ansic: 175,811; cpp: 56,301; sh: 3,623; makefile: 3,048; javascript: 577; cs: 90; awk: 70; python: 41; sql: 15
file content (98 lines) | stat: -rwxr-xr-x 2,918 bytes parent folder | download
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/bin/sh

set -e

echo "[INF] Running $0"

if ! which cppcheck >/dev/null; then
  echo "[ERR] cppcheck is not installed!"
  exit 1
fi

VERSION=$(cppcheck --version | sed 's/^[^0-9]*//g' | sed 's/ .*$//g')
echo "[INF] cppcheck version [$VERSION]"

CPPCHECK_PROJECT_FILE=".cppcheck"
CPPCHECK_BUILD_DIR="cppcheck-build-dir"
CPPCHECK_XML_OUTPUT_FILE="cppcheck.xml"
CPPCHECK_HTML_REPORT_DIR="cppcheck-html-report-dir"

echo "[INF] CPPCHECK_PROJECT_FILE:    $CPPCHECK_PROJECT_FILE"
echo "[INF] CPPCHECK_BUILD_DIR:       $CPPCHECK_BUILD_DIR"
echo "[INF] CPPCHECK_XML_OUTPUT_FILE: $CPPCHECK_XML_OUTPUT_FILE"
echo "[INF] CPPCHECK_HTML_REPORT_DIR: $CPPCHECK_HTML_REPORT_DIR"

if [ "$(uname -s)" = "Darwin" ]; then
  alias nproc="sysctl -n hw.logicalcpu"
fi

mkdir -p "$CPPCHECK_BUILD_DIR"

echo "[INF] Generating XML report..."
cppcheck \
  -j "$(nproc)" \
  --quiet \
  --enable=all \
  --project="$CPPCHECK_PROJECT_FILE" \
  --xml \
  --output-file="$CPPCHECK_XML_OUTPUT_FILE"

ls -hl "$CPPCHECK_XML_OUTPUT_FILE"

echo "[INF] Generating HTML report..."
cppcheck-htmlreport \
  --title="zsv" \
  --file="$CPPCHECK_XML_OUTPUT_FILE" \
  --report-dir="$CPPCHECK_HTML_REPORT_DIR" \
  --source-dir="$PWD"

# GitHub Actions
if [ "$CI" = true ]; then
  CPPCHECK_XML_ARTIFACT_NAME="zsv-cppcheck-xml-report-$GITHUB_RUN_ID.zip"
  CPPCHECK_HTML_ARTIFACT_NAME="zsv-cppcheck-html-report-$GITHUB_RUN_ID.zip"

  echo "[INF] Generating ZIP archive (XML)... [$CPPCHECK_XML_ARTIFACT_NAME]"
  zip "$CPPCHECK_XML_ARTIFACT_NAME" "$CPPCHECK_XML_OUTPUT_FILE"

  echo "[INF] Generating ZIP archive (HTML)... [$CPPCHECK_HTML_ARTIFACT_NAME]"
  zip -r "$CPPCHECK_HTML_ARTIFACT_NAME" "$CPPCHECK_HTML_REPORT_DIR"

  {
    echo "CPPCHECK_XML_ARTIFACT_NAME=$CPPCHECK_XML_ARTIFACT_NAME"
    echo "CPPCHECK_HTML_ARTIFACT_NAME=$CPPCHECK_HTML_ARTIFACT_NAME"
  } >>"$GITHUB_ENV"

  echo "[INF] Generating Markdown step summary..."

  BRANCH=
  if [ "$GITHUB_REF_TYPE" = "branch" ]; then
    if [ "$GITHUB_EVENT_NAME" = "push" ]; then
      BRANCH="$GITHUB_REF_NAME"
    elif [ "$GITHUB_EVENT_NAME" = "pull_request" ]; then
      BRANCH="$GITHUB_HEAD_REF"
    fi
  elif [ "$GITHUB_REF_TYPE" = "tag" ]; then
    BRANCH="main"
  fi

  SOURCE_LINK="[{file}:{line}](https://github.com/liquidaty/zsv/blob/$BRANCH/{file}#L{line})"
  CWE_LINK="[{cwe}](https://cwe.mitre.org/data/definitions/{cwe}.html)"
  TEMPLATE="| $SOURCE_LINK | {column} | {severity} | {id} | {message} | $CWE_LINK |"
  {
    echo "<details>"
    echo "<summary>Cppcheck Static Analysis Summary</summary>"
    echo
    echo "| File:Line | Column | Severity |  ID   | Message |  CWE  |"
    echo "| :-------: | :----: | :------: | :---: | :-----: | :---: |"
    cppcheck \
      -j "$(nproc)" \
      --quiet \
      --enable=all \
      --project="$CPPCHECK_PROJECT_FILE" \
      --template="$TEMPLATE" \
      2>&1
    echo "</details>"
  } >>"$GITHUB_STEP_SUMMARY"
fi

echo "[INF] --- [DONE] ---"