diff --git a/README.md b/README.md index 43cec29..6309c00 100644 --- a/README.md +++ b/README.md @@ -258,10 +258,11 @@ runs: 🔖 Read more about [`CodeChecker analyze`](http://codechecker.readthedocs.io/en/latest/analyzer/user_guide/#analyze) in the official documentation. -| Variable | Default | Description | -|------------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `analyze-output` | (auto-generated) | The directory where the **raw** analysis output should be stored. | -| `ctu` | `false` | Enable [Cross Translation Unit analysis](http://clang.llvm.org/docs/analyzer/user-docs/CrossTranslationUnit.html) in the _Clang Static Analyzer_. ⚠️ **CAUTION!** _CTU_ analysis might take a very long time, and CTU is officially regarded as experimental. | +| Variable | Default | Description | +|--------------------------|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `analyze-output` | (auto-generated) | The directory where the **raw** analysis output should be stored. | +| `ctu` | `false` | Enable [Cross Translation Unit analysis](http://clang.llvm.org/docs/analyzer/user-docs/CrossTranslationUnit.html) in the _Clang Static Analyzer_. ⚠️ **CAUTION!** _CTU_ analysis might take a very long time, and CTU is officially regarded as experimental. | +| `ignore-analyze-crashes` | `true` | If set to `true`, the analysis phase will not report an error if some analysis actions fail (due to potential crashes in Clang). | ### Report configuration diff --git a/action.yml b/action.yml index 00793bc..c35cfd0 100644 --- a/action.yml +++ b/action.yml @@ -42,6 +42,10 @@ inputs: description: 'Whether to enable Cross Translation Unit (CTU) analysis in the Clang Static Analyzer.' required: true default: 'false' + ignore-analyze-crashes: + description: 'If set to "true", the "analyze" action will ALWAYS pass, and not report a failure if some analysis jobs fail to execute due to internal crashes in the Clang analysers.' + required: true + default: 'true' diff: description: 'Whether to enable calculating the different of the current analysis results against a run stored on a CodeChecker server. If enabled, other flags, such as "diff-url" must also be set.' @@ -176,6 +180,7 @@ runs: IN_CONFIGFILE: ${{ inputs.config }} IN_CTU: ${{ inputs.ctu }} IN_FLAGS: ${{ inputs.analyze-options }} + IN_IGNORE_CRASHES: ${{ inputs.ignore-analyze-crashes }} IN_OUTPUT_DIR: ${{ inputs.analyze-output }} shell: bash run: ${{ github.action_path }}/src/execute-analysis.sh diff --git a/src/execute-analysis.sh b/src/execute-analysis.sh index 98eeed8..961266e 100755 --- a/src/execute-analysis.sh +++ b/src/execute-analysis.sh @@ -33,17 +33,21 @@ echo "::endgroup::" || true echo "::group::Executing Static Analysis" -# Note: Ignoring the result of the analyze command in CTU mode, as we do not -# wish to break the build on a CTU failure. "$CODECHECKER_PATH"/CodeChecker analyze \ "$COMPILATION_DATABASE" \ --output "$OUTPUT_DIR" \ --jobs $(nproc) \ $CONFIG_FLAG_1 $CONFIG_FLAG_2 \ - $CTU_FLAGS \ - || [[ "$IN_CTU" == "true" ]] + $CTU_FLAGS EXIT_CODE=$? echo "::endgroup::" +if [[ $EXIT_CODE -ne 0 && "$IN_IGNORE_CRASHES" == "true" ]]; then + # In general it is a good idea not to destroy the entire job just because a + # few translation units failed. Crashes are, unfortunately, usual. + echo "::warning title=Static Analysis crashed on some inputs::Some of the analysis actions failed to conclude due to internal error in the analyser." + EXIT_CODE=0 +fi + echo "::set-output name=OUTPUT_DIR::$OUTPUT_DIR" exit $EXIT_CODE