automation/eclair: reorganize pipelines

Introduce accepted_guidelines.sh: a script to autogenerate the
configuration file accepted.ecl from docs/misra/rules.rst which enables
all accepted guidelines.

Introduce monitored.ecl: a manual selection of accepted guidelines
which are clean or almost clean, it is intended to be used for the
analyses triggered by commits.

Reorganize tagging.ecl:
  -Remove "accepted" tags: keeping track of accepted guidelines tagging
   them as "accepted" in the configuration file tagging.ecl is no
   longer needed since docs/rules.rst is keeping track of them.
  -Tag more guidelines as clean.

Reorganize eclair pipelines:
  - Set1, Set2, Set3 are now obsolete: remove the corresponding
    pipelines and ecl files.
  - Amend scheduled eclair pipeline to use accepted.ecl.
  - Amend triggered eclair pipeline to use monitored.ecl.

Rename and improve action_check_clean_regressions.sh to print a
diagnostic in case a commit introduces a violation of a clean guideline.

An example of diagnostic is the following:

Failure: 13 regressions found for clean guidelines
  service MC3R1.R8.2: (required) Function types shall be in prototype form with named parameters:
   violation: 13

Signed-off-by: Simone Ballarin <simone.ballarin@bugseng.com>
Signed-off-by: Federico Serafini <federico.serafini@bugseng.com>
Signed-off-by: Alessandro Zucchelli <alessandro.zucchelli@bugseng.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
This commit is contained in:
Simone Ballarin authored and Stefano Stabellini committed 2024-04-25 13:01:30 -07:00
1 parent 23cd1207e7
commit 4edbbcd0c0
13 files changed
+108 -209

No files matched your search

@@ -1,25 +0,0 @@
-doc_begin="Set 2 of Xen MISRA C guidelines"
-enable=MC3R1.R10.1
-enable=MC3R1.R10.2
-enable=MC3R1.R10.3
-enable=MC3R1.R10.4
-enable=MC3R1.R10.6
-enable=MC3R1.R10.7
-enable=MC3R1.R10.8
-enable=MC3R1.R11.1
-enable=MC3R1.R11.2
-enable=MC3R1.R11.3
-enable=MC3R1.R11.6
-enable=MC3R1.R11.7
-enable=MC3R1.R11.8
-enable=MC3R1.R11.9
-enable=MC3R1.R12.2
-enable=MC3R1.R13.1
-enable=MC3R1.R13.2
-enable=MC3R1.R13.5
-enable=MC3R1.R13.6
-enable=MC3R1.R14.1
-enable=MC3R1.R14.2
-enable=MC3R1.R14.3
-enable=MC3R1.R14.4
-doc_end
@@ -1,67 +0,0 @@
-doc_begin="Set 3 of Xen MISRA C guidelines"
-enable=MC3R1.D4.12
-enable=MC3R1.R5.5
-enable=MC3R1.R5.7
-enable=MC3R1.R5.8
-enable=MC3R1.R15.2
-enable=MC3R1.R15.3
-enable=MC3R1.R15.6
-enable=MC3R1.R15.7
-enable=MC3R1.R16.1
-enable=MC3R1.R16.2
-enable=MC3R1.R16.3
-enable=MC3R1.R16.4
-enable=MC3R1.R16.5
-enable=MC3R1.R16.6
-enable=MC3R1.R16.7
-enable=MC3R1.R17.1
-enable=MC3R1.R17.2
-enable=MC3R1.R17.5
-enable=MC3R1.R17.7
-enable=MC3R1.R18.1
-enable=MC3R1.R18.2
-enable=MC3R1.R18.3
-enable=MC3R1.R18.6
-enable=MC3R1.R18.7
-enable=MC3R1.R18.8
-enable=MC3R1.R20.2
-enable=MC3R1.R20.3
-enable=MC3R1.R20.4
-enable=MC3R1.R20.6
-enable=MC3R1.R20.7
-enable=MC3R1.R20.8
-enable=MC3R1.R20.9
-enable=MC3R1.R20.11
-enable=MC3R1.R20.12
-enable=MC3R1.R20.13
-enable=MC3R1.R20.14
-enable=MC3R1.R21.1
-enable=MC3R1.R21.2
-enable=MC3R1.R21.3
-enable=MC3R1.R21.4
-enable=MC3R1.R21.5
-enable=MC3R1.R21.6
-enable=MC3R1.R21.7
-enable=MC3R1.R21.8
-enable=MC3R1.R21.9
-enable=MC3R1.R21.10
-enable=MC3R1.R21.12
-enable=MC3R1.R21.14
-enable=MC3R1.R21.15
-enable=MC3R1.R21.16
-enable=MC3R1.R22.1
-enable=MC3R1.R22.3
-enable=MC3R1.R22.7
-enable=MC3R1.R22.8
-enable=MC3R1.R22.9
-enable=MC3R1.R22.10
-enable=MC3R1.R2.6
-enable=MC3R1.R4.2
-doc_end
-doc_begin="Guidelines added with Xen MISRA C Task (a): Xen Coding Guidelines v1.1, June 1, 2023"
-enable=MC3R1.R21.11
-enable=MC3R1.D4.4
-enable=MC3R1.R8.9
-enable=MC3R1.R12.4
-doc_end
+13
View File
@@ -0,0 +1,13 @@
#!/bin/bash
# Stop immediately if any executed command has exit status different from 0.
set -eu
script_dir="$(
cd "$(dirname "$0")"
echo "${PWD}"
)"
accepted_rst=$1
grep -Eo "\`(Dir|Rule) [0-9]+\.[0-9]+" ${accepted_rst} \
| sed -e 's/`Rule /MC3R1.R/' -e 's/`Dir /MC3R1.D/' -e 's/.*/-enable=&/' > ${script_dir}/accepted.ecl
@@ -127,7 +127,7 @@ EOF
fi
case ${ci} in
github)
cat "${summaryTxt}" >"${GITHUB_STEP_SUMMARY}"
cat "${summaryTxt}" "${cleanRegressionsLog}" >"${GITHUB_STEP_SUMMARY}"
;;
gitlab)
open_section ECLAIR_summary "ECLAIR analysis summary" ""
@@ -140,6 +140,7 @@ ${analysisSummaryMsgLog}
${currentReportsMsgLog}
${referenceReportsMsgLog}
EOF
cat ${cleanRegressionsLog}
close_section ECLAIR_summary
;;
jenkins)
@@ -175,6 +175,7 @@ eclairReportUrlPrefix=https://saas.eclairit.com:3787
jobDir="${artifactsDir}/${subDir}/${jobId}"
updateLog="${analysisOutputDir}/update.log"
cleanRegressionsLog="${analysisOutputDir}/clean_regressions.log"
commentLog="${analysisOutputDir}/comment.json"
indexHtmlUrl="${eclairReportUrlPrefix}/fs${jobDir}/index.html"
summaryTxt="${analysisOutputDir}/summary.txt"
@@ -0,0 +1,38 @@
#!/bin/sh
set -eu
usage() {
echo "Usage: $0 ANALYSIS_OUTPUT_DIR" >&2
exit 2
}
[ $# -eq 1 ] || usage
analysisOutputDir=$1
# Load settings and helpers
. "$(dirname "$0")/action.helpers"
. "$(dirname "$0")/action.settings"
cleanRegressionsTxt=${analysisOutputDir}/clean_regressions.txt
cleanRegressionCount=$("${ECLAIR_BIN_DIR}eclair_report" \
"-db='${analysisOutputDir}/PROJECT.ecd'" \
"-sel_unfixed=unfixed" \
"-sel_tag_glob=violation_only,kind,violation" \
"-sel_tag_glob=clean_added,clean,added" \
"-report_counts_txt=service,'${cleanRegressionsTxt}'" \
"-print='',reports_count()")
if [ "${cleanRegressionCount}" -gt 0 ]; then
{
echo "Failure: ${cleanRegressionCount} regressions found for clean guidelines"
sed -n '/^Number of.*$/,/^$/{ /^Number of.*$/! { /^$/! p } }' ${cleanRegressionsTxt}
} > ${cleanRegressionsLog}
rm ${cleanRegressionsTxt}
exit 1
else
echo "Success: No regressions for clean guidelines" > ${cleanRegressionsLog}
rm ${cleanRegressionsTxt}
fi
@@ -1,36 +0,0 @@
#!/bin/sh
set -eu
usage() {
echo "Usage: $0 ANALYSIS_OUTPUT_DIR" >&2
exit 2
}
[ $# -eq 1 ] || usage
analysisOutputDir=$1
cleanAddedTxt="${analysisOutputDir}/clean_added.log"
# Load settings and helpers
. "$(dirname "$0")/action.helpers"
. "$(dirname "$0")/action.settings"
unexpectedReports=$("${ECLAIR_BIN_DIR}eclair_report" \
"-db='${analysisOutputDir}/PROJECT.ecd'" \
"-sel_unfixed=unfixed" \
"-sel_tag_glob=clean_added,clean,added" \
"-print='',reports_count()")
if [ "${unexpectedReports}" -gt 0 ]; then
cat <<EOF >"${cleanAddedTxt}"
Failure: ${unexpectedReports} unexpected reports found.
Unexpected reports are tagged 'clean:added'.
EOF
exit 1
else
cat <<EOF >"${cleanAddedTxt}"
Success: No unexpected reports.
EOF
fi
+1 -1
View File
@@ -52,7 +52,7 @@ VARIANT="${XEN_TARGET_ARCH}"
# Used in analysis.ecl
case "$2" in
Set0|Set1|Set2|Set3)
accepted|monitored)
export SET="$2"
;;
*)
@@ -10,6 +10,10 @@ script_dir="$(
)"
exclude_list="${ECLAIR_PROJECT_ROOT}/docs/misra/exclude-list.json"
accepted_rst="${ECLAIR_PROJECT_ROOT}/docs/misra/rules.rst"
# Generate the exclude list file
"${script_dir}/adopted.sh" "${exclude_list}"
# Generate accepted guidelines
"${script_dir}/accepted_guidelines.sh" "${accepted_rst}"
@@ -1,36 +1,57 @@
-doc_begin="Set 1 of Xen MISRA C guidelines"
-enable=MC3R1.R9.1
-doc_begin="A set of guidelines that are clean or that only have few violations left."
-enable=MC3R1.D1.1
-enable=MC3R1.D2.1
-enable=MC3R1.D4.1
-enable=MC3R1.D4.10
-enable=MC3R1.D4.11
-enable=MC3R1.D4.12
-enable=MC3R1.D4.14
-enable=MC3R1.D4.3
-enable=MC3R1.D4.7
-enable=MC3R1.R10.1
-enable=MC3R1.R10.2
-enable=MC3R1.R1.1
-enable=MC3R1.R11.1
-enable=MC3R1.R11.7
-enable=MC3R1.R11.8
-enable=MC3R1.R11.9
-enable=MC3R1.R12.5
-enable=MC3R1.R1.3
-enable=MC3R1.R13.6
-enable=MC3R1.R1.4
-enable=MC3R1.R14.1
-enable=MC3R1.R14.4
-enable=MC3R1.R16.2
-enable=MC3R1.R16.6
-enable=MC3R1.R16.7
-enable=MC3R1.R17.1
-enable=MC3R1.R17.3
-enable=MC3R1.R17.4
-enable=MC3R1.R17.5
-enable=MC3R1.R17.6
-enable=MC3R1.R19.1
-enable=MC3R1.R20.12
-enable=MC3R1.R20.13
-enable=MC3R1.R20.14
-enable=MC3R1.R20.4
-enable=MC3R1.R20.9
-enable=MC3R1.R2.1
-enable=MC3R1.R21.13
-enable=MC3R1.R21.17
-enable=MC3R1.R21.18
-enable=MC3R1.R21.19
-enable=MC3R1.R21.20
-enable=MC3R1.R21.21
-enable=MC3R1.R2.2
-enable=MC3R1.R22.2
-enable=MC3R1.R22.4
-enable=MC3R1.R22.5
-enable=MC3R1.R22.6
-enable=MC3R1.D1.1
-enable=MC3R1.D2.1
-enable=MC3R1.D4.1
-enable=MC3R1.D4.3
-enable=MC3R1.D4.7
-enable=MC3R1.D4.10
-enable=MC3R1.D4.11
-enable=MC3R1.D4.14
-enable=MC3R1.R1.1
-enable=MC3R1.R1.3
-enable=MC3R1.R1.4
-enable=MC3R1.R2.1
-enable=MC3R1.R2.2
-enable=MC3R1.R2.6
-enable=MC3R1.R3.1
-enable=MC3R1.R3.2
-enable=MC3R1.R4.1
-enable=MC3R1.R4.2
-enable=MC3R1.R5.1
-enable=MC3R1.R5.2
-enable=MC3R1.R5.3
@@ -43,15 +64,15 @@
-enable=MC3R1.R7.3
-enable=MC3R1.R7.4
-enable=MC3R1.R8.1
-enable=MC3R1.R8.10
-enable=MC3R1.R8.12
-enable=MC3R1.R8.14
-enable=MC3R1.R8.2
-enable=MC3R1.R8.3
-enable=MC3R1.R8.4
-enable=MC3R1.R8.5
-enable=MC3R1.R8.6
-enable=MC3R1.R8.8
-enable=MC3R1.R8.10
-enable=MC3R1.R8.12
-enable=MC3R1.R8.14
-enable=MC3R1.R9.2
-enable=MC3R1.R9.3
-enable=MC3R1.R9.4
+2 -13
View File
@@ -13,24 +13,13 @@
-doc="Hide reports marked as disapplied."
-remap_rtag={disapplied,hide}
#######################
# Accepted guidelines #
#######################
-doc="Accepted guidelines as reported in XEN/docs/misra/rules.rst"
-service_selector={accepted_guidelines,
"MC3R1.D1.1||MC3R1.D2.1||MC3R1.D4.1||MC3R1.D4.3||MC3R1.D4.7||MC3R1.D4.10||MC3R1.D4.11||MC3R1.D4.14||MC3R1.R1.1||MC3R1.R1.3||MC3R1.R1.4||MC3R1.R2.1||MC3R1.R2.2||MC3R1.R2.6||MC3R1.R3.1||MC3R1.R3.2||MC3R1.R4.1||MC3R1.R4.2||MC3R1.R5.1||MC3R1.R5.2||MC3R1.R5.3||MC3R1.R5.4||MC3R1.R5.6||MC3R1.R6.1||MC3R1.R6.2||MC3R1.R7.1||MC3R1.R7.2||MC3R1.R7.3||MC3R1.R7.4||MC3R1.R8.1||MC3R1.R8.2||MC3R1.R8.3||MC3R1.R8.4||MC3R1.R8.5||MC3R1.R8.6||MC3R1.R8.8||MC3R1.R8.10||MC3R1.R8.12||MC3R1.R8.14||MC3R1.R9.1||MC3R1.R9.2||MC3R1.R9.3||MC3R1.R9.4||MC3R1.R9.5||MC3R1.R10.1||MC3R1.R10.2||MC3R1.R10.3||MC3R1.R10.4||MC3R1.R11.7||MC3R1.R11.8||MC3R1.R11.9||MC3R1.R12.5||MC3R1.R13.1||MC3R1.R13.5||MC3R1.R13.6||MC3R1.R14.1||MC3R1.R14.2||MC3R1.R14.3||MC3R1.R16.7||MC3R1.R17.3||MC3R1.R17.4||MC3R1.R17.6||MC3R1.R18.3||MC3R1.R19.1||MC3R1.R20.7||MC3R1.R20.13||MC3R1.R20.14||MC3R1.R21.13||MC3R1.R21.17||MC3R1.R21.18||MC3R1.R21.19||MC3R1.R21.20||MC3R1.R21.21||MC3R1.R22.2||MC3R1.R22.4||MC3R1.R22.5||MC3R1.R22.6"
}
-doc="All reports of accepted guidelines are tagged as accepted."
-reports+={status:accepted,"service(accepted_guidelines)"}
####################
# Clean guidelines #
####################
-doc_begin="Clean guidelines: new violations for these guidelines are not accepted."
-service_selector={clean_guidelines_common,"MC3R1.D1.1||MC3R1.D2.1||MC3R1.D4.11||MC3R1.D4.14||MC3R1.R1.1||MC3R1.R1.3||MC3R1.R1.4||MC3R1.R2.2||MC3R1.R3.1||MC3R1.R3.2||MC3R1.R4.1||MC3R1.R4.2||MC3R1.R5.1||MC3R1.R5.2||MC3R1.R5.4||MC3R1.R5.6||MC3R1.R6.1||MC3R1.R6.2||MC3R1.R7.1||MC3R1.R8.1||MC3R1.R8.2||MC3R1.R8.5||MC3R1.R8.6||MC3R1.R8.8||MC3R1.R8.10||MC3R1.R8.12||MC3R1.R8.14||MC3R1.R9.2||MC3R1.R9.4||MC3R1.R9.5||MC3R1.R12.5||MC3R1.R17.3||MC3R1.R17.4||MC3R1.R17.6||MC3R1.R20.13||MC3R1.R20.14||MC3R1.R21.13||MC3R1.R21.19||MC3R1.R21.21||MC3R1.R22.2||MC3R1.R22.4||MC3R1.R22.5||MC3R1.R22.6"
-service_selector={clean_guidelines_common,"MC3R1.D1.1||MC3R1.D2.1||MC3R1.D4.1||MC3R1.D4.11||MC3R1.D4.14||MC3R1.R1.1||MC3R1.R11.7||MC3R1.R11.9||MC3R1.R12.5||MC3R1.R1.3||MC3R1.R1.4||MC3R1.R14.1||MC3R1.R16.7||MC3R1.R17.1||MC3R1.R17.3||MC3R1.R17.4||MC3R1.R17.5||MC3R1.R17.6||MC3R1.R20.13||MC3R1.R20.14||MC3R1.R20.4||MC3R1.R20.9||MC3R1.R21.13||MC3R1.R21.19||MC3R1.R21.21||MC3R1.R2.2||MC3R1.R22.2||MC3R1.R22.4||MC3R1.R22.5||MC3R1.R22.6||MC3R1.R2.6||MC3R1.R3.1||MC3R1.R3.2||MC3R1.R4.1||MC3R1.R4.2||MC3R1.R5.1||MC3R1.R5.2||MC3R1.R5.4||MC3R1.R5.6||MC3R1.R6.1||MC3R1.R6.2||MC3R1.R7.1||MC3R1.R7.4||MC3R1.R8.1||MC3R1.R8.10||MC3R1.R8.12||MC3R1.R8.14||MC3R1.R8.2||MC3R1.R8.5||MC3R1.R8.6||MC3R1.R8.8||MC3R1.R9.2||MC3R1.R9.3||MC3R1.R9.4||MC3R1.R9.5"
}
-setq=target,getenv("XEN_TARGET_ARCH")
@@ -40,7 +29,7 @@ if(string_equal(target,"x86_64"),
)
if(string_equal(target,"arm64"),
service_selector({"additional_clean_guidelines","MC3R1.R5.3||MC3R1.R7.2||MC3R1.R7.3||MC3R1.R8.6||MC3R1.R9.3"})
service_selector({"additional_clean_guidelines","MC3R1.R16.6||MC3R1.R20.12||MC3R1.R2.1||MC3R1.R5.3||MC3R1.R7.2||MC3R1.R7.3||MC3R1.R8.6||MC3R1.R9.3"})
)
-reports+={clean:added,"service(clean_guidelines_common||additional_clean_guidelines)"}
+6 -42
View File
@@ -39,14 +39,14 @@ eclair-x86_64:
variables:
LOGFILE: "eclair-x86_64.log"
VARIANT: "X86_64"
RULESET: "Set1"
RULESET: "monitored"
eclair-ARM64:
extends: .eclair-analysis:triggered
variables:
LOGFILE: "eclair-ARM64.log"
VARIANT: "ARM64"
RULESET: "Set1"
RULESET: "monitored"
.eclair-analysis:on-schedule:
extends: .eclair-analysis
@@ -55,56 +55,20 @@ eclair-ARM64:
when: never
- !reference [.eclair-analysis, rules]
eclair-x86_64-Set1:on-schedule:
eclair-x86_64:on-schedule:
extends: .eclair-analysis:on-schedule
variables:
VARIANT: "X86_64"
RULESET: "Set1"
RULESET: "accepted"
ANALYSIS_KIND: "${RULESET}-scheduled"
LOGFILE: "eclair-${VARIANT}-${RULESET}.log"
allow_failure: true
eclair-x86_64-Set2:on-schedule:
extends: .eclair-analysis:on-schedule
variables:
VARIANT: "X86_64"
RULESET: "Set2"
ANALYSIS_KIND: "${RULESET}-scheduled"
LOGFILE: "eclair-${VARIANT}-${RULESET}.log"
allow_failure: true
eclair-x86_64-Set3:on-schedule:
extends: .eclair-analysis:on-schedule
variables:
VARIANT: "X86_64"
RULESET: "Set3"
ANALYSIS_KIND: "${RULESET}-scheduled"
LOGFILE: "eclair-${VARIANT}-${RULESET}.log"
allow_failure: true
eclair-ARM64-Set1:on-schedule:
eclair-ARM64:on-schedule:
extends: .eclair-analysis:on-schedule
variables:
VARIANT: "ARM64"
RULESET: "Set1"
ANALYSIS_KIND: "${RULESET}-scheduled"
LOGFILE: "eclair-${VARIANT}-${RULESET}.log"
allow_failure: true
eclair-ARM64-Set2:on-schedule:
extends: .eclair-analysis:on-schedule
variables:
VARIANT: "ARM64"
RULESET: "Set2"
ANALYSIS_KIND: "${RULESET}-scheduled"
LOGFILE: "eclair-${VARIANT}-${RULESET}.log"
allow_failure: true
eclair-ARM64-Set3:on-schedule:
extends: .eclair-analysis:on-schedule
variables:
VARIANT: "ARM64"
RULESET: "Set3"
RULESET: "accepted"
ANALYSIS_KIND: "${RULESET}-scheduled"
LOGFILE: "eclair-${VARIANT}-${RULESET}.log"
allow_failure: true
+2 -6
View File
@@ -18,12 +18,8 @@ ex=0
"${ex}"
[ "${ex}" = 0 ] || exit "${ex}"
# Fail in case of new reports
"${ECLAIR_DIR}/action_clean_added.sh" "${ECLAIR_OUTPUT_DIR}" || ex=$?
"${ECLAIR_DIR}/action_log.sh" DIFF_CHECK_LOG \
"ECLAIR diff check" \
"${ECLAIR_OUTPUT_DIR}/clean_added.log" \
"${ex}"
# Fail in case of new reports for clean guidelines
"${ECLAIR_DIR}/action_check_clean_regressions.sh" "${ECLAIR_OUTPUT_DIR}" || ex=$?
"${ECLAIR_DIR}/action_push.sh" "${WTOKEN}" "${ECLAIR_OUTPUT_DIR}"
[ "${ex}" = 0 ] || exit "${ex}"
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.