1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/dist/tools/ci
2021-01-11 15:57:14 +01:00
..
build_and_test.sh tools/build_and_test: use all instead of all-debug on native 2020-10-28 22:08:18 +01:00
changed_files.sh ci/changed_files: exclude lpc2k_pgm tool 2020-12-03 19:17:58 +01:00
github_annotate.sh github_annotate.sh: fix escaped echo for bash scripts 2021-01-11 15:57:14 +01:00
print_toolchain_versions.sh ci/print_versions: don't print directory for make shell 2020-11-09 20:32:02 +01:00
README.md dist/tools/ci/github_annotate.sh: allow annotations without files 2021-01-08 10:38:59 +01:00
static_tests.sh gh-actions: move PR checks from static tests to own workflow 2021-01-08 14:09:42 +01:00

CI specific scripts

Static tests

The static_tests.sh script runs all static tests and outputs them in a unified output. You can also run this script by running make static-test in the base directory.

To add a new static test, just write a check.sh script or call your static checker directly and add it to the list of static tests in static_tests.sh:

ENV1=foobar ENV2=snafu run <your test command> --args

Github annotations

Using github_annotate.sh you can generate Github annotations for your tests. You can generate both warnings and errors. Before doing anything however, you include github_annotate.sh\ (assuming ${RIOTTOOLS is set to} [dist/tools/])

. "${RIOTTOOLS}"/ci/github_annotate.sh

and set-up the mechanism

github_annotate_setup

If your tests generate output you now can pipe that to the file ${LOGFILE} by using ${LOG}, e.g.

my_awesome_test | ${LOG}

Don't worry, your test will function normal still, if you don't run it in a Github Action!

Now you can use github_annotate_error and github_annotate_warning to generate the actual errors and warnings. Both commands expect 3 parameters:

  1. FILENAME: The name of the file the warning or error occurred in,
  2. LINENUM: The number of the line the warning or error occurred in, and
  3. DETAILS: Some descriptive details or the message of your warning or error.

You can parse those from ${LOGFILE} (e.g. using tools such as grep, sed, or awk) or generate them on the fly, if your script allows for that. E.g.

cat ${LOGFILE} | grep '^.*:[0-9]\+:' | while read error; do
    github_annotate_error \
        $(echo "${error}" | cut -d: -f1) \
        $(echo "${error}" | cut -d: -f2) \
        $(echo "${error}" | cut -d: -f3-)
done

If your output has the common output format <filename>:<lineno>:<details> you can also use the function github_annotate_parse_log_default. It takes the annotation function it should call on every line as an optional parameter with github_annotate_error being the default. E.g.

github_annotate_parse_log_default github_annotate_warning

does the same as the last example snippet, but uses github_annotate_warning instead.

If you do not need to provide a file with your error or warning, you can also use github_annotate_error_no_file or github_annotate_warning_no_file, respectively. Both take a just message as single parameter:

github_annotate_error_no_file "Something is wrong!"

After all errors or warnings are annotated, call github_annotate_teardown to finish annotations.

Note: github_annotate_report_last_run is called within static_tests.sh to attach the actual annotations to your PR. You don't need to call it from within your test if you are adding that test to static_tests.sh.