From a5eabfad9117c1423bb0bfc33bbe0571c5e17c04 Mon Sep 17 00:00:00 2001 From: Massimiliano Culpo Date: Wed, 1 Jul 2020 18:58:53 +0200 Subject: [PATCH] Moved flake8, shell and documentation tests to Github Action (#17328) * Move flake8 tests on Github Actions * Move shell test to Github Actions * Moved documentation build to Github Action * Don't run coverage on Python 2.6 Since we get connection errors consistently on Travis when trying to upload coverage results for Python 2.6, avoid computing coverage entirely to speed-up tests. --- .github/workflows/linux_unit_tests.yaml | 80 ++++++++++++++++ .travis.yml | 119 ++---------------------- lib/spack/spack/test/llnl/util/lock.py | 2 - share/spack/qa/run-shell-tests | 2 +- share/spack/qa/run-unit-tests | 6 +- share/spack/qa/setup.sh | 16 ++-- 6 files changed, 100 insertions(+), 125 deletions(-) diff --git a/.github/workflows/linux_unit_tests.yaml b/.github/workflows/linux_unit_tests.yaml index 3130bfa36e..78fd0e8ce0 100644 --- a/.github/workflows/linux_unit_tests.yaml +++ b/.github/workflows/linux_unit_tests.yaml @@ -60,3 +60,83 @@ jobs: uses: codecov/codecov-action@v1 with: flags: unittests,linux + flake8: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: 3.8 + - name: Install Python packages + run: | + pip install --upgrade pip six setuptools flake8 + - name: Setup git configuration + run: | + # Need this for the git tests to succeed. + git --version + git config --global user.email "spack@example.com" + git config --global user.name "Test User" + git fetch -u origin develop:develop + - name: Run flake8 tests + run: | + share/spack/qa/run-flake8-tests + shell: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: 3.8 + - name: Install System packages + run: | + sudo apt-get -y update + sudo apt-get install -y coreutils gfortran gnupg2 mercurial ninja-build patchelf zsh fish + # Needed for kcov + sudo apt-get -y install cmake binutils-dev libcurl4-openssl-dev zlib1g-dev libdw-dev libiberty-dev + - name: Install Python packages + run: | + pip install --upgrade pip six setuptools codecov coverage + - name: Setup git configuration + run: | + # Need this for the git tests to succeed. + git --version + git config --global user.email "spack@example.com" + git config --global user.name "Test User" + git fetch -u origin develop:develop + - name: Install kcov for bash script coverage + env: + KCOV_VERSION: 38 + run: | + KCOV_ROOT=$(mktemp -d) + wget --output-document=${KCOV_ROOT}/${KCOV_VERSION}.tar.gz https://github.com/SimonKagstrom/kcov/archive/v${KCOV_VERSION}.tar.gz + tar -C ${KCOV_ROOT} -xzvf ${KCOV_ROOT}/${KCOV_VERSION}.tar.gz + mkdir -p ${KCOV_ROOT}/build + cd ${KCOV_ROOT}/build && cmake -Wno-dev ${KCOV_ROOT}/kcov-${KCOV_VERSION} && cd - + make -C ${KCOV_ROOT}/build && sudo make -C ${KCOV_ROOT}/build install + - name: Run shell tests + env: + COVERAGE: true + run: | + share/spack/qa/run-shell-tests + - name: Upload to codecov.io + uses: codecov/codecov-action@v1 + with: + flags: shelltests,linux + documentation: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: 3.8 + - name: Install System packages + run: | + sudo apt-get -y update + sudo apt-get install -y coreutils ninja-build graphviz + - name: Install Python packages + run: | + pip install --upgrade pip six setuptools + pip install --upgrade -r lib/spack/docs/requirements.txt + - name: Build documentation + run: | + share/spack/qa/run-doc-tests diff --git a/.travis.yml b/.travis.yml index 5d8b793758..df4262bf1e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,3 @@ -#============================================================================= -# Project settings -#============================================================================= # Only build master and develop on push; do not build every branch. branches: only: @@ -8,107 +5,30 @@ branches: - develop - /^releases\/.*$/ -#============================================================================= -# Build matrix -#============================================================================= - -dist: bionic - -jobs: - fast_finish: true - include: - - stage: 'style checks' - python: '3.8' - os: linux - language: python - env: TEST_SUITE=flake8 - - stage: 'unit tests + documentation' - python: '2.6' - dist: trusty - os: linux - language: python - addons: - apt: - # Everything but patchelf, that is not available for trusty - packages: - - ccache - - gfortran - - graphviz - - gnupg2 - - kcov - - mercurial - - ninja-build - - realpath - - zsh - - fish - env: [ TEST_SUITE=unit, COVERAGE=true ] - - python: '3.8' - os: linux - language: python - env: [ TEST_SUITE=shell, COVERAGE=true, KCOV_VERSION=38 ] - - python: '3.8' - os: linux - language: python - env: TEST_SUITE=doc - -stages: - - 'style checks' - - 'unit tests + documentation' - - -#============================================================================= -# Environment -#============================================================================= - -# Docs need graphviz to build +language: python +python: '2.6' +dist: trusty +os: linux addons: - # for Linux builds, we use APT apt: packages: - - ccache - - coreutils - gfortran - graphviz - gnupg2 + - kcov - mercurial - ninja-build - - patchelf + - realpath - zsh - fish - update: true - -# ~/.ccache needs to be cached directly as Travis is not taking care of it -# (possibly because we use 'language: python' and not 'language: c') -cache: - pip: true - ccache: true - directories: - - ~/.ccache - -before_install: - - ccache -M 2G && ccache -z - # Install kcov manually, since it's not packaged for bionic beaver - - if [[ "$KCOV_VERSION" ]]; then - sudo apt-get -y install cmake binutils-dev libcurl4-openssl-dev zlib1g-dev libdw-dev libiberty-dev; - KCOV_ROOT=$(mktemp -d); - wget --output-document=${KCOV_ROOT}/${KCOV_VERSION}.tar.gz https://github.com/SimonKagstrom/kcov/archive/v${KCOV_VERSION}.tar.gz; - tar -C ${KCOV_ROOT} -xzvf ${KCOV_ROOT}/${KCOV_VERSION}.tar.gz; - mkdir -p ${KCOV_ROOT}/build; - cd ${KCOV_ROOT}/build && cmake -Wno-dev ${KCOV_ROOT}/kcov-${KCOV_VERSION} && cd - ; - make -C ${KCOV_ROOT}/build && sudo make -C ${KCOV_ROOT}/build install; - fi # Install various dependencies install: - pip install --upgrade pip - pip install --upgrade six - pip install --upgrade setuptools - - pip install --upgrade codecov coverage==4.5.4 - pip install --upgrade flake8 - pip install --upgrade pep8-naming - - if [[ "$TEST_SUITE" == "doc" ]]; then - pip install --upgrade -r lib/spack/docs/requirements.txt; - fi before_script: # Need this for the git tests to succeed. @@ -118,31 +38,12 @@ before_script: # Need this to be able to compute the list of changed files - git fetch origin ${TRAVIS_BRANCH}:${TRAVIS_BRANCH} -#============================================================================= -# Building -#============================================================================= script: - - share/spack/qa/run-$TEST_SUITE-tests + - python bin/spack -h + - python bin/spack help -a + - python bin/spack -p --lines 20 spec mpileaks%gcc ^elfutils@0.170 + - python bin/spack test -x --verbose -after_success: - - ccache -s - - case "$TEST_SUITE" in - unit) - if [[ "$COVERAGE" == "true" ]]; then - codecov --env PYTHON_VERSION - --required - --flags "${TEST_SUITE}${TRAVIS_OS_NAME}"; - fi - ;; - shell) - codecov --env PYTHON_VERSION - --required - --flags "${TEST_SUITE}${TRAVIS_OS_NAME}"; - esac - -#============================================================================= -# Notifications -#============================================================================= notifications: email: recipients: diff --git a/lib/spack/spack/test/llnl/util/lock.py b/lib/spack/spack/test/llnl/util/lock.py index a959ea0c73..b2b7cf85ac 100644 --- a/lib/spack/spack/test/llnl/util/lock.py +++ b/lib/spack/spack/test/llnl/util/lock.py @@ -1143,8 +1143,6 @@ def read(): assert vals['read'] == 1 -@pytest.mark.skipif('macos' in os.environ.get('GITHUB_WORKFLOW', ''), - reason="Skip failing test for GA on MacOS") def test_lock_debug_output(lock_path): host = socket.getfqdn() diff --git a/share/spack/qa/run-shell-tests b/share/spack/qa/run-shell-tests index 126e639186..c5c3425a8e 100755 --- a/share/spack/qa/run-shell-tests +++ b/share/spack/qa/run-shell-tests @@ -18,7 +18,7 @@ ORIGINAL_PATH="$PATH" . "$(dirname $0)/setup.sh" -check_dependencies $coverage git hg svn +check_dependencies $coverage kcov git hg svn # Clean the environment by removing Spack from the path and getting rid of # the spack shell function diff --git a/share/spack/qa/run-unit-tests b/share/spack/qa/run-unit-tests index 7c4abb1413..c529f8297e 100755 --- a/share/spack/qa/run-unit-tests +++ b/share/spack/qa/run-unit-tests @@ -37,11 +37,7 @@ bin/spack -h bin/spack help -a # Profile and print top 20 lines for a simple call to spack spec -if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then - spack -p --lines 20 spec openmpi -else - spack -p --lines 20 spec mpileaks%gcc ^elfutils@0.170 -fi +spack -p --lines 20 spec mpileaks%gcc ^elfutils@0.170 #----------------------------------------------------------- # Run unit tests with code coverage diff --git a/share/spack/qa/setup.sh b/share/spack/qa/setup.sh index 6536479015..34b426dcd7 100755 --- a/share/spack/qa/setup.sh +++ b/share/spack/qa/setup.sh @@ -26,14 +26,11 @@ if [[ "$COVERAGE" == "true" ]]; then coverage=coverage coverage_run="coverage run" - # bash coverage depends on some other factors -- there are issues with - # kcov for Python 2.6, unit tests, and build tests. - if [[ $TRAVIS_PYTHON_VERSION != 2.6 ]]; then - mkdir -p coverage - cc_script="$SPACK_ROOT/lib/spack/env/cc" - bashcov=$(realpath ${QA_DIR}/bashcov) - sed -i~ "s@#\!/bin/bash@#\!${bashcov}@" "$cc_script" - fi + # bash coverage depends on some other factors + mkdir -p coverage + cc_script="$SPACK_ROOT/lib/spack/env/cc" + bashcov=$(realpath ${QA_DIR}/bashcov) + sed -i~ "s@#\!/bin/bash@#\!${bashcov}@" "$cc_script" fi # @@ -74,6 +71,9 @@ check_dependencies() { spack_package=mercurial pip_package=mercurial ;; + kcov) + spack_package=kcov + ;; svn) spack_package=subversion ;;