Skip to content

Commit

Permalink
adding codechecker analysis workflow
Browse files Browse the repository at this point in the history
  • Loading branch information
dkrupp committed Aug 17, 2023
1 parent 38f9315 commit 30c9c03
Show file tree
Hide file tree
Showing 6 changed files with 336 additions and 0 deletions.
220 changes: 220 additions & 0 deletions .github/workflows/codechecker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,220 @@
name: codechecker-tests

# Triggers the workflow on push or pull request events.
on: [push, pull_request]

jobs:
# Note: UI related linter tests will run in the gui job.
lint:
name: Linters (pylint, pycodestyle)

runs-on: ubuntu-20.04

steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v4
with:
python-version: '3.8'
- name: Install dependencies
run: |
pip install $(grep -iE "pylint|pycodestyle" analyzer/requirements_py/dev/requirements.txt)
- name: Run tests
run: make pylint pycodestyle

tools:
name: Tools (report-converter, etc.)
runs-on: ubuntu-20.04

steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v4
with:
python-version: '3.8'
- name: Setup Bazel
uses: abhinavsingh/setup-bazel@v3
with:
version: 4.0.0
- name: Install common dependencies
run: |
sudo apt-get update -q
sudo apt-get install gcc-multilib
- name: Run build-logger tests
working-directory: analyzer/tools/build-logger
run: |
pip install -r requirements_py/dev/requirements.txt
make all
make test
- name: Run merge-clang-extdef-mappings tests
working-directory: analyzer/tools/merge_clang_extdef_mappings
run: |
pip install -r requirements_py/dev/requirements.txt
make test
- name: Run statistics-collector tests
working-directory: analyzer/tools/statistics_collector
run: |
pip install -r requirements_py/dev/requirements.txt
make test
- name: Run report-converter tests
working-directory: tools/report-converter
run: |
pip install -r requirements_py/dev/requirements.txt
make package
make test
- name: Run tu-collector tests
working-directory: tools/tu_collector
run: |
pip install -r requirements_py/dev/requirements.txt
make test
- name: Run bazel-compile-commands tests
working-directory: tools/bazel
run: |
pip install -r requirements_py/dev/requirements.txt
make test
analyzer:
name: Analyzer
runs-on: ubuntu-20.04

steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v4
with:
python-version: '3.8'

- name: Install dependencies
run: sh .github/workflows/install-deps.sh

- name: Build the package
run: |
make pip_dev_deps
BUILD_UI_DIST=NO make package
- name: Run analyzer tests
working-directory: analyzer
run: make test_unit test_functional

- name: Analyzer unit tests coverage
working-directory: analyzer
run: make test_unit_cov

common:
name: Common libraries
runs-on: ubuntu-20.04

steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v4
with:
python-version: '3.8'

- name: Install requirements
working-directory: codechecker_common
run: |
pip install -r requirements_py/dev/requirements.txt
- name: Run mypy tests
working-directory: codechecker_common/tests
run: make mypy

web:
name: Web
runs-on: ubuntu-20.04

services:
postgres:
image: postgres
env:
POSTGRES_PASSWORD: postgres
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
strategy:
matrix:
database: [sqlite, psql_pg8000, psql_psycopg2]

steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v4
with:
python-version: '3.8'

- name: Install dependencies
run: sh .github/workflows/install-deps.sh

- name: Init .pgpass
run: |
echo '*:*:*:*:postgres' > $HOME/.pgpass
chmod 0600 $HOME/.pgpass
- name: Run tests
env:
PGPASSWORD: postgres
run: |
export PGPASSFILE=$HOME/.pgpass
make pip_dev_deps
pip3 install -r web/requirements_py/auth/requirements.txt
BUILD_UI_DIST=NO make package
make -C web test_matrix_${{ matrix.database }}
- name: Run unit tests coverage
working-directory: web
run: make test_unit_cov

gui:
name: GUI
runs-on: ubuntu-20.04

strategy:
matrix:
# FIXME: in Chrome the UI test cases run non-deterministically and
# sometimes fail. For this reason we will not run GUI test cases
# in Chrome.
browser: [firefox]

steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v4
with:
python-version: '3.8'
- uses: actions/setup-node@v1
with:
node-version: '16.x'

# - name: Update chrome
# run: |
# sudo apt-get update -q
# sudo apt-get install google-chrome-stable

- name: Install dependencies
run: sh .github/workflows/install-deps.sh

- name: Build the package
run: |
make pip_dev_deps
make package
- name: Run tests
working-directory: web/server/vue-cli
env:
# CHROME_HEADLESS: 1
MOZ_HEADLESS: 1
DISPLAY: ":99.0"
run: |
export PATH="${{ github.workspace }}/build/CodeChecker/bin:$PATH"
npm run test:lint
npm run test:unit
npm run test:e2e.${{ matrix.browser }}
39 changes: 39 additions & 0 deletions .github/workflows/codechecker_master_analysis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: codechecker-master-analysis

# Triggers the workflow on push or pull request events.
on:
push:
branches:
- master
jobs:
codechecker-master-analyis:
name: CodeChecker analyze master

runs-on: ubuntu-20.04
env:
PR_NUMBER: ${{ github.event.number }}
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v4
with:
python-version: '3.8'
- name: Install dependencies
run: |
pip install $(grep -iE "pylint|pycodestyle" analyzer/requirements_py/dev/requirements.txt)
pip install codechecker
sh .github/workflows/install-deps.sh
- name: Build the CodeChecker package
run: |
make pip_dev_deps
BUILD_UI_DIST=NO make package
- name: Run CodeChecker analysis
env:
CODECHECKER_TOKEN: ${{secrets.CODECHECKER_STORE_TOKEN}}
PR_NUMBER: ${{ github.event.number }}
run: |
pwd
ls
touch ~/.codechecker.passwords.json
chmod 0600 ~/.codechecker.passwords.json
echo "{\"client_autologin\" : true,\"credentials\": {\"https://codechecker-demo.eastus.cloudapp.azure.com\": \"store:$CODECHECKER_TOKEN\"}}" > ~/.codechecker.passwords.json
bash ./scripts/github-analysis/codechecker_gate_master.sh
39 changes: 39 additions & 0 deletions .github/workflows/codechecker_pr_analysis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: codechecker-pr-analysis

# Triggers the workflow on push or pull request events.
on:
push:
branches-ignore:
- master
jobs:
codechecker-pr-analyis:
name: CodeChecker PR analysis

runs-on: ubuntu-20.04
env:
PR_NUMBER: ${{ github.event.number }}
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v4
with:
python-version: '3.8'
- name: Install dependencies
run: |
pip install $(grep -iE "pylint|pycodestyle" analyzer/requirements_py/dev/requirements.txt)
pip install codechecker
sh .github/workflows/install-deps.sh
- name: Build the CodeChecker package
run: |
make pip_dev_deps
BUILD_UI_DIST=NO make package
- name: Run CodeChecker analysis
env:
CODECHECKER_TOKEN: ${{secrets.CODECHECKER_STORE_TOKEN}}
PR_NUMBER: ${{ github.event.number }}
run: |
pwd
ls
touch ~/.codechecker.passwords.json
chmod 0600 ~/.codechecker.passwords.json
echo "{\"client_autologin\" : true,\"credentials\": {\"https://codechecker-demo.eastus.cloudapp.azure.com\": \"store:$CODECHECKER_TOKEN\"}}" > ~/.codechecker.passwords.json
bash ./scripts/github-analysis/codechecker_gate_pr.sh $GITHUB_REF
15 changes: 15 additions & 0 deletions scripts/github-analysis/codechecker_gate_master.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/bash
./scripts/github-analysis/pylint_analyze.sh
report-converter -c -t pylint -o ./reports-pylint ./pylint-reports.json
CodeChecker store ./reports-pylint --url https://codechecker-demo.eastus.cloudapp.azure.com/codechecker --trim-path-prefix `pwd` -n master
new_findings=`CodeChecker cmd results --url https://codechecker-demo.eastus.cloudapp.azure.com/codechecker/ master --detection-status 'NEW' 'REOPENED' --review-status 'UNREVIEWED' 'CONFIRMED'|grep "NEW\|REOPENED"|wc -l`
if [ "$new_findings" -ne "0" ]; then
echo "ERROR. This PUSH introduced $new_findings new findings to the master branch! Please check them at https://codechecker-demo.eastus.cloudapp.azure.com/codechecker/reports?review-status=Unreviewed&review-status=Confirmed%20bug&detection-status=New&run=master&is-unique=off&diff-type=New"
exit 1
else
echo "SUCCESS. No new reports introduced"
fi




18 changes: 18 additions & 0 deletions scripts/github-analysis/codechecker_gate_pr.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#!/bin/bash
if [ "$#" -ne 1 ]; then
echo "<PR_NAME> is missing"
fi
./scripts/github-analysis/pylint_analyze.sh
report-converter -c -t pylint -o ./reports-pylint ./pylint-reports.json
CodeChecker store -f ./reports-pylint --url https://codechecker-demo.eastus.cloudapp.azure.com/codechecker --trim-path-prefix `pwd` -n $1
CodeChecker cmd diff --url https://codechecker-demo.eastus.cloudapp.azure.com/codechecker -b master -n $1 --new
if [ $? -ne 0 ]; then
echo "ERROR. YOUR PR FAILED GATING! Please check new reports at https://codechecker-demo.eastus.cloudapp.azure.com/codechecker/reports?run=master&newcheck=$1"
exit 1
else
echo "Gating successful. No new report found. Your PR is ready to be merged."
fi




5 changes: 5 additions & 0 deletions scripts/github-analysis/pylint_analyze.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash
pylint --version
disabled_checkers="--disable duplicate-code --disable fixme --disable consider-using-get --disable too-many-instance-attributes"
pylint --rcfile=.pylintrc -j0 --ignore=migrations ./build/CodeChecker/lib/python3/* --enable all $disabled_checkers -f json --output ./pylint-reports.json

0 comments on commit 30c9c03

Please sign in to comment.