2021-11-27 11:18:56 +01:00
name : 'CodeChecker Static Analysis'
author : 'Whisperity'
description : 'Execute C/C++ static analysis of LLVM/Clang (Clang Static Analyzer and Clang-Tidy) driven via CodeChecker.'
2021-11-27 12:34:26 +01:00
branding :
icon : 'tool'
color : 'blue'
2021-11-27 11:18:56 +01:00
inputs :
2021-11-27 11:23:14 +01:00
repository :
description : 'The CodeChecker repository to check out and build from.'
required : true
default : 'Ericsson/CodeChecker'
2021-11-27 11:18:56 +01:00
version :
description : 'The version of the CodeChecker suite to obtain and execute. Might be a Git commit SHA, a branch name, or a tag.'
required : true
default : 'master'
2021-11-27 12:34:26 +01:00
llvm-version :
description : 'The major version of LLVM to install and use. LLVM is installed from PPA. If "latest", automatically gather the latest version. If "ignore", do not install anything. (Not recommended)'
required : true
default : 'latest'
2021-11-28 10:34:05 +01:00
config :
description : 'The CodeChecker configuration JSON that contains for each CodeChecker action (analyze, parse, ...) the list of flags that should be appended to the invocation of the command.'
required : false
logfile :
description : 'The location of the JSON Compilation Database for the project. This file describes how the project is compiled, and thus how it should be analysed. Mutually exclusive with "build-command".'
required : false
build-command :
description : 'The build command to execute and log for the creation of a JSON Compilation Database. Mutually exclusive with "logfile".'
required : false
2021-11-27 11:18:56 +01:00
runs :
using : "composite"
steps :
2021-11-27 11:23:14 +01:00
- name : "Check out repository ${{ inputs.repository }}"
uses : actions/checkout@v2
with :
repository : ${{ inputs.repository }}
path : CodeChecker
ref : ${{ inputs.version }}
- name : "Install dependencies of CodeChecker"
shell : bash
run : |
sudo apt-get -qy update
2021-11-27 12:34:26 +01:00
${{ github.action_path }}/src/apt-dependencies.sh
- name : "Install LLVM version"
id : llvm
if : ${{ inputs.llvm-version != 'ignore' }}
env :
CONFIGURED_LLVM_VERSION : ${{ inputs.llvm-version }}
shell : bash
run : |
${{ github.action_path }}/src/get-llvm.sh
echo "::set-output name=REAL_VERSION::$(clang --version | head -n 1 | cut -d' ' -f4-)"
2021-11-27 11:23:14 +01:00
- name : "Build and Package CodeChecker"
2021-11-27 12:34:26 +01:00
id : codechecker
2021-11-27 11:23:14 +01:00
env :
2021-11-27 12:34:26 +01:00
CODECHECKER_WILL_USE_WEB_API: false # TODO : Add support for this later.
2021-11-27 11:23:14 +01:00
shell : bash
2021-11-27 11:18:56 +01:00
run : |
2021-11-27 12:34:26 +01:00
set -ex
2021-11-27 11:23:14 +01:00
if [[ "$CODECHECKER_WILL_USE_WEB_API" == "false" ]]; then
# If the job is only running analysis, do not spend time with building the API stuff!
echo "Building only 'analyzer' module..."
pushd CodeChecker/analyzer
else
echo "Building full CodeChecker package..."
pushd CodeChecker
fi
make venv
source venv/bin/activate
BUILD_UI_DIST=NO make standalone_package
deactivate
./build/CodeChecker/bin/CodeChecker analyzer-version
if [[ "$CODECHECKER_WILL_USE_WEB_API" == "true" ]]; then
./build/CodeChecker/bin/CodeChecker web-version
else
echo "CodeChecker 'web' package not built."
fi
2021-11-27 12:34:26 +01:00
echo "::set-output name=PATH::$(readlink -f ./build/CodeChecker/bin)"
echo "::set-output name=VERSION::$(./build/CodeChecker/bin/CodeChecker analyzer-version | grep 'Base package' | cut -d'|' -f 2 | tr -d ' ')"
echo "::set-output name=GITSEVEN::$(./build/CodeChecker/bin/CodeChecker analyzer-version | grep 'Git commit' | cut -d'|' -f 2 | cut -c 2-8)"
2021-11-27 11:23:14 +01:00
popd
2021-11-28 10:34:05 +01:00
- name : "Prepare JSON Compilation Database"
env :
CODECHECKER_PATH : ${{ steps.codechecker.outputs.PATH }}
IN_LOGFILE : ${{ inputs.logfile }}
IN_COMMAND : ${{ inputs.build-command }}
OUT_FILE : ${{ github.workspace }}/codechecker_compilation_database.json
shell : bash
run : ${{ github.action_path }}/src/get-or-create-build-json.sh