diff options
Diffstat (limited to '.github')
-rw-r--r-- | .github/workflows/linux_unit_tests.yaml | 174 | ||||
-rw-r--r-- | .github/workflows/macos_unit_tests.yaml | 44 | ||||
-rw-r--r-- | .github/workflows/style_and_docs.yaml | 65 | ||||
-rw-r--r-- | .github/workflows/unit_tests.yaml | 337 |
4 files changed, 337 insertions, 283 deletions
diff --git a/.github/workflows/linux_unit_tests.yaml b/.github/workflows/linux_unit_tests.yaml deleted file mode 100644 index a5fdd7b345..0000000000 --- a/.github/workflows/linux_unit_tests.yaml +++ /dev/null @@ -1,174 +0,0 @@ -name: linux tests - -on: - push: - branches: - - develop - - releases/** - pull_request: - branches: - - develop - - releases/** -jobs: - unittests: - runs-on: ubuntu-latest - strategy: - matrix: - python-version: [2.7, 3.5, 3.6, 3.7, 3.8, 3.9] - concretizer: ['original', 'clingo'] - - steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - name: Install System packages - run: | - sudo apt-get -y update - # Needed for unit tests - sudo apt-get install -y coreutils gfortran graphviz gnupg2 mercurial - sudo apt-get install -y ninja-build patchelf - # Needed for kcov - sudo apt-get -y install cmake binutils-dev libcurl4-openssl-dev - sudo apt-get -y install 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 - . .github/workflows/setup_git.sh - - name: Install kcov for bash script coverage - env: - KCOV_VERSION: 34 - 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: Bootstrap clingo from sources - if: ${{ matrix.concretizer == 'clingo' }} - run: | - . share/spack/setup-env.sh - spack external find --not-buildable cmake bison - spack -v solve zlib - - name: Run unit tests - env: - COVERAGE: true - SPACK_TEST_SOLVER: ${{ matrix.concretizer }} - run: | - share/spack/qa/run-unit-tests - coverage combine - coverage xml - - uses: codecov/codecov-action@v1 - with: - flags: unittests,linux,${{ matrix.concretizer }} - shell: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - uses: actions/setup-python@v2 - with: - python-version: 3.9 - - name: Install System packages - run: | - sudo apt-get -y update - # Needed for shell tests - sudo apt-get install -y coreutils csh zsh tcsh fish dash bash - # Needed for kcov - sudo apt-get -y install cmake binutils-dev libcurl4-openssl-dev - sudo apt-get -y install 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 - . .github/workflows/setup_git.sh - - 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 - - uses: codecov/codecov-action@v1 - with: - flags: shelltests,linux - - centos6: - # Test for Python2.6 run on Centos 6 - runs-on: ubuntu-latest - container: spack/github-actions:centos6 - steps: - - name: Run unit tests - env: - HOME: /home/spack-test - run: | - whoami && echo $HOME && cd $HOME - git clone https://github.com/spack/spack.git && cd spack - git fetch origin ${{ github.ref }}:test-branch - git checkout test-branch - share/spack/qa/run-unit-tests - - rhel8-platform-python: - runs-on: ubuntu-latest - container: registry.access.redhat.com/ubi8/ubi - steps: - - name: Install dependencies - run: | - dnf install -y \ - bzip2 curl file gcc-c++ gcc gcc-gfortran git gnupg2 gzip \ - make patch tcl unzip which xz - - uses: actions/checkout@v2 - - name: Setup repo and non-root user - run: | - git --version - git fetch --unshallow - . .github/workflows/setup_git.sh - useradd spack-test - chown -R spack-test . - - name: Run unit tests - env: - SPACK_PYTHON: /usr/libexec/platform-python - shell: runuser -u spack-test -- bash {0} - run: | - source share/spack/setup-env.sh - spack unit-test -k 'not svn and not hg' -x --verbose - clingo-cffi: - # Test for the clingo based solver (using clingo-cffi) - runs-on: ubuntu-latest - container: spack/github-actions:clingo-cffi - steps: - - name: Run unit tests - run: | - whoami && echo PWD=$PWD && echo HOME=$HOME && echo SPACK_TEST_SOLVER=$SPACK_TEST_SOLVER - python3 -c "import clingo; print(hasattr(clingo.Symbol, '_rep'), clingo.__version__)" - git clone https://github.com/spack/spack.git && cd spack - git fetch origin ${{ github.ref }}:test-branch - git checkout test-branch - . share/spack/setup-env.sh - spack compiler find - spack solve mpileaks%gcc - coverage run $(which spack) unit-test -v - coverage combine - coverage xml - - uses: codecov/codecov-action@v1 - with: - flags: unittests,linux,clingo diff --git a/.github/workflows/macos_unit_tests.yaml b/.github/workflows/macos_unit_tests.yaml deleted file mode 100644 index e5918968d2..0000000000 --- a/.github/workflows/macos_unit_tests.yaml +++ /dev/null @@ -1,44 +0,0 @@ -name: macos tests - -on: - push: - branches: - - develop - - releases/** - pull_request: - branches: - - develop - - releases/** -jobs: - build: - runs-on: macos-latest - strategy: - matrix: - python-version: [3.8] - steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - name: Install Python packages - run: | - pip install --upgrade pip six setuptools - pip install --upgrade codecov coverage - pip install --upgrade flake8 pep8-naming mypy - - name: Setup Homebrew packages - run: | - brew install dash fish gcc gnupg2 kcov - - name: Run unit tests - run: | - git --version - . .github/workflows/setup_git.sh - . share/spack/setup-env.sh - coverage run $(which spack) unit-test - coverage combine - coverage xml - - uses: codecov/codecov-action@v1 - with: - file: ./coverage.xml - flags: unittests,macos diff --git a/.github/workflows/style_and_docs.yaml b/.github/workflows/style_and_docs.yaml deleted file mode 100644 index 0f84e1e885..0000000000 --- a/.github/workflows/style_and_docs.yaml +++ /dev/null @@ -1,65 +0,0 @@ -name: style and docs - -on: - push: - branches: - - develop - - releases/** - pull_request: - branches: - - develop - - releases/** -jobs: - validate: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 - with: - python-version: 3.9 - - name: Install Python Packages - run: | - pip install --upgrade pip - pip install --upgrade vermin - - name: Minimum Version (Spack's Core) - run: vermin --backport argparse --backport typing -t=2.6- -t=3.5- -v lib/spack/spack/ lib/spack/llnl/ bin/ - - name: Minimum Version (Repositories) - run: vermin --backport argparse --backport typing -t=2.6- -t=3.5- -v var/spack/repos - style: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - uses: actions/setup-python@v2 - with: - python-version: 3.9 - - name: Install Python packages - run: | - pip install --upgrade pip six setuptools flake8 mypy>=0.800 black - - name: Setup git configuration - run: | - # Need this for the git tests to succeed. - git --version - . .github/workflows/setup_git.sh - - name: Run style tests - run: | - share/spack/qa/run-style-tests - documentation: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 - with: - python-version: 3.9 - - 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/.github/workflows/unit_tests.yaml b/.github/workflows/unit_tests.yaml new file mode 100644 index 0000000000..7fcd61d9f4 --- /dev/null +++ b/.github/workflows/unit_tests.yaml @@ -0,0 +1,337 @@ +name: linux tests + +on: + push: + branches: + - develop + - releases/** + pull_request: + branches: + - develop + - releases/** +jobs: + # Validate that the code can be run on all the Python versions + # supported by Spack + validate: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: 3.9 + - name: Install Python Packages + run: | + pip install --upgrade pip + pip install --upgrade vermin + - name: vermin (Spack's Core) + run: vermin --backport argparse --backport typing -t=2.6- -t=3.5- -v lib/spack/spack/ lib/spack/llnl/ bin/ + - name: vermin (Repositories) + run: vermin --backport argparse --backport typing -t=2.6- -t=3.5- -v var/spack/repos + # Run style checks on the files that have been changed + style: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + - uses: actions/setup-python@v2 + with: + python-version: 3.9 + - name: Install Python packages + run: | + pip install --upgrade pip six setuptools flake8 mypy>=0.800 black + - name: Setup git configuration + run: | + # Need this for the git tests to succeed. + git --version + . .github/workflows/setup_git.sh + - name: Run style tests + run: | + share/spack/qa/run-style-tests + # Build the documentation + documentation: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: 3.9 + - 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 + + # Check which files have been updated by the PR + changes: + runs-on: ubuntu-latest + # Set job outputs to values from filter step + outputs: + core: ${{ steps.filter.outputs.core }} + packages: ${{ steps.filter.outputs.packages }} + with_coverage: ${{ steps.coverage.outputs.with_coverage }} + steps: + # For pull requests it's not necessary to checkout the code + - uses: dorny/paths-filter@v2 + id: filter + with: + # See https://github.com/dorny/paths-filter/issues/56 for the syntax used below + filters: | + core: + - './!(var/**)/**' + packages: + - 'var/**' + # Some links for easier reference: + # + # "github" context: https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context + # job outputs: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idoutputs + # setting environment variables from earlier steps: https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-environment-variable + # + - id: coverage + # Run the subsequent jobs with coverage if this is a PR and core has been modified + # or if this workflow is triggered by a push event (this means that once a PR is + # merged we'll perform a full run with CI on develop even though the PR was only + # modifying packages) + run: | + echo Core changes: ${{ steps.filter.outputs.core }} + echo Event name: ${{ github.event_name }} + if [ "${{ steps.filter.outputs.core }}" == "true" ] || [ "${{ github.event_name }}" == 'push' ] + then + echo "::set-output name=with_coverage::true" + else + echo "::set-output name=with_coverage::false" + fi + + # Run unit tests with different configurations on linux + unittests: + needs: [ validate, style, documentation, changes ] + runs-on: ubuntu-latest + strategy: + matrix: + python-version: [2.7, 3.5, 3.6, 3.7, 3.8, 3.9] + concretizer: ['original', 'clingo'] + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + - uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Install System packages + run: | + sudo apt-get -y update + # Needed for unit tests + sudo apt-get install -y coreutils gfortran graphviz gnupg2 mercurial + sudo apt-get install -y ninja-build patchelf + # Needed for kcov + sudo apt-get -y install cmake binutils-dev libcurl4-openssl-dev + sudo apt-get -y install 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 + . .github/workflows/setup_git.sh + - name: Install kcov for bash script coverage + if: ${{ needs.changes.outputs.with_coverage == 'true' }} + env: + KCOV_VERSION: 34 + 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: Bootstrap clingo from sources + if: ${{ matrix.concretizer == 'clingo' }} + run: | + . share/spack/setup-env.sh + spack external find --not-buildable cmake bison + spack -v solve zlib + - name: Run unit tests (full suite with coverage) + if: ${{ needs.changes.outputs.with_coverage == 'true' }} + env: + COVERAGE: true + SPACK_TEST_SOLVER: ${{ matrix.concretizer }} + run: | + share/spack/qa/run-unit-tests + coverage combine + coverage xml + - name: Run unit tests (reduced suite without coverage) + if: ${{ needs.changes.outputs.with_coverage == 'false' }} + env: + ONLY_PACKAGES: true + SPACK_TEST_SOLVER: ${{ matrix.concretizer }} + run: | + share/spack/qa/run-unit-tests + - uses: codecov/codecov-action@v1 + if: ${{ needs.changes.outputs.with_coverage == 'true' }} + with: + flags: unittests,linux,${{ matrix.concretizer }} + # Test shell integration + shell: + needs: [ validate, style, documentation, changes ] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + - uses: actions/setup-python@v2 + with: + python-version: 3.9 + - name: Install System packages + run: | + sudo apt-get -y update + # Needed for shell tests + sudo apt-get install -y coreutils csh zsh tcsh fish dash bash + # Needed for kcov + sudo apt-get -y install cmake binutils-dev libcurl4-openssl-dev + sudo apt-get -y install 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 + . .github/workflows/setup_git.sh + - name: Install kcov for bash script coverage + if: ${{ needs.changes.outputs.with_coverage == 'true' }} + 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 (without coverage) + if: ${{ needs.changes.outputs.with_coverage == 'false' }} + run: | + share/spack/qa/run-shell-tests + - name: Run shell tests (with coverage) + if: ${{ needs.changes.outputs.with_coverage == 'true' }} + env: + COVERAGE: true + run: | + share/spack/qa/run-shell-tests + - uses: codecov/codecov-action@v1 + if: ${{ needs.changes.outputs.with_coverage == 'true' }} + with: + flags: shelltests,linux + # Test for Python2.6 run on Centos 6 + centos6: + needs: [ validate, style, documentation ] + runs-on: ubuntu-latest + container: spack/github-actions:centos6 + steps: + - name: Run unit tests + env: + HOME: /home/spack-test + run: | + whoami && echo $HOME && cd $HOME + git clone https://github.com/spack/spack.git && cd spack + git fetch origin ${{ github.ref }}:test-branch + git checkout test-branch + share/spack/qa/run-unit-tests + + # Test RHEL8 UBI with platform Python + rhel8-platform-python: + needs: [ validate, style, documentation ] + runs-on: ubuntu-latest + container: registry.access.redhat.com/ubi8/ubi + steps: + - name: Install dependencies + run: | + dnf install -y \ + bzip2 curl file gcc-c++ gcc gcc-gfortran git gnupg2 gzip \ + make patch tcl unzip which xz + - uses: actions/checkout@v2 + - name: Setup repo and non-root user + run: | + git --version + git fetch --unshallow + . .github/workflows/setup_git.sh + useradd spack-test + chown -R spack-test . + - name: Run unit tests + env: + SPACK_PYTHON: /usr/libexec/platform-python + shell: runuser -u spack-test -- bash {0} + run: | + source share/spack/setup-env.sh + spack unit-test -k 'not svn and not hg' -x --verbose + # Test for the clingo based solver (using clingo-cffi) + clingo-cffi: + needs: [ validate, style, documentation, changes ] + runs-on: ubuntu-latest + container: spack/github-actions:clingo-cffi + steps: + - name: Run unit tests + run: | + whoami && echo PWD=$PWD && echo HOME=$HOME && echo SPACK_TEST_SOLVER=$SPACK_TEST_SOLVER + python3 -c "import clingo; print(hasattr(clingo.Symbol, '_rep'), clingo.__version__)" + git clone https://github.com/spack/spack.git && cd spack + git fetch origin ${{ github.ref }}:test-branch + git checkout test-branch + . share/spack/setup-env.sh + spack compiler find + spack solve mpileaks%gcc + coverage run $(which spack) unit-test -v + coverage combine + coverage xml + - uses: codecov/codecov-action@v1 + if: ${{ needs.changes.outputs.with_coverage == 'true' }} + with: + flags: unittests,linux,clingo + # Run unit tests on MacOS + build: + needs: [ validate, style, documentation, changes ] + runs-on: macos-latest + strategy: + matrix: + python-version: [3.8] + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + - uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Install Python packages + run: | + pip install --upgrade pip six setuptools + pip install --upgrade codecov coverage + pip install --upgrade flake8 pep8-naming mypy + - name: Setup Homebrew packages + run: | + brew install dash fish gcc gnupg2 kcov + - name: Run unit tests + run: | + git --version + . .github/workflows/setup_git.sh + . share/spack/setup-env.sh + if [ "${{ needs.changes.outputs.with_coverage }}" == "true" ] + then + coverage run $(which spack) unit-test -x + coverage combine + coverage xml + else + echo "ONLY PACKAGE RECIPES CHANGED [skipping coverage]" + $(which spack) unit-test -x -m "not maybeslow" + fi + - uses: codecov/codecov-action@v1 + if: ${{ needs.changes.outputs.with_coverage == 'true' }} + with: + file: ./coverage.xml + flags: unittests,macos |