From c3e0510140faa25b7290442832f18fabb4e9d4fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1rton=20Csord=C3=A1s?= Date: Fri, 27 Nov 2020 12:33:20 +0100 Subject: [PATCH] [test] Introduce Github action for CodeChecker tests --- .github/workflows/install-deps.sh | 21 +++ .github/workflows/test.yml | 191 ++++++++++++++++++++++++++ web/server/vue-cli/nightwatch.conf.js | 2 + web/tests/libtest/codechecker.py | 4 + 4 files changed, 218 insertions(+) create mode 100755 .github/workflows/install-deps.sh create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/install-deps.sh b/.github/workflows/install-deps.sh new file mode 100755 index 0000000000..2cda0e9833 --- /dev/null +++ b/.github/workflows/install-deps.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add - +sudo add-apt-repository 'deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-11 main' -y + +sudo apt-get update -q + +sudo apt-get install \ + g++-6 \ + gcc-multilib \ + libc6-dev-i386 \ + libpq-dev \ + libldap2-dev \ + libsasl2-dev \ + libssl-dev \ + clang-11 \ + clang-tidy-11 + +sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-11 9999 +sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-11 9999 +sudo update-alternatives --install /usr/bin/clang-tidy clang-tidy /usr/bin/clang-tidy-11 9999 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000000..29e3c83160 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,191 @@ +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-18.04 + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: '3.6' + - 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 (plist-to-html, report-converter, etc.) + runs-on: ubuntu-18.04 + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: '3.6' + - 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: | + make -f Makefile.manual + make -f Makefile.manual 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 codechecker-report-hash tests + working-directory: tools/codechecker_report_hash + run: | + pip install -r requirements_py/dev/requirements.txt + make test + + - name: Run plist-to-html tests + working-directory: tools/plist_to_html + 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: make test + + analyzer: + name: Analyzer + runs-on: ubuntu-18.04 + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: '3.6' + + - 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 + + web: + name: Web + runs-on: ubuntu-18.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@v2 + with: + python-version: '3.6' + + - 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 + BUILD_UI_DIST=NO make package + + make -C web test_matrix_${{ matrix.database }} + + gui: + name: GUI + runs-on: ubuntu-18.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@v2 + with: + python-version: '3.6' + - uses: actions/setup-node@v1 + with: + node-version: '12.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 }} diff --git a/web/server/vue-cli/nightwatch.conf.js b/web/server/vue-cli/nightwatch.conf.js index 60f2ea863a..8ac722db2d 100644 --- a/web/server/vue-cli/nightwatch.conf.js +++ b/web/server/vue-cli/nightwatch.conf.js @@ -1,5 +1,6 @@ const host = process.env.HOST || "localhost"; const port = process.env.PORT || 8001; +const chromeHeadless = process.env.CHROME_HEADLESS; module.exports = { src_folders: [ "e2e/specs" ], @@ -38,6 +39,7 @@ module.exports = { desiredCapabilities: { browserName: "chrome", chromeOptions : { + args: [ ...[ chromeHeadless ? "--headless" : undefined ] ], w3c: false } } diff --git a/web/tests/libtest/codechecker.py b/web/tests/libtest/codechecker.py index a70559c732..831c21517b 100644 --- a/web/tests/libtest/codechecker.py +++ b/web/tests/libtest/codechecker.py @@ -690,6 +690,10 @@ def add_test_package_product(server_data, test_folder, check_env=None, add_command.append('--postgresql') pg_config['dbname'] = server_data['viewer_product'] + + if os.environ.get('PGPASSWORD'): + pg_config['dbpassword'] = os.environ['PGPASSWORD'] + add_command += _pg_db_config_to_cmdline_params(pg_config) else: # SQLite databases are put under the workspace of the appropriate test.