diff options
Diffstat (limited to '.github/workflows')
-rw-r--r-- | .github/workflows/bootstrap.yml | 161 | ||||
-rw-r--r-- | .github/workflows/build-containers.yml | 72 | ||||
-rw-r--r-- | .github/workflows/linux_build_tests.yaml | 65 | ||||
-rw-r--r-- | .github/workflows/linux_unit_tests.yaml | 150 | ||||
-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 | 367 |
7 files changed, 600 insertions, 324 deletions
diff --git a/.github/workflows/bootstrap.yml b/.github/workflows/bootstrap.yml new file mode 100644 index 0000000000..ac2215a768 --- /dev/null +++ b/.github/workflows/bootstrap.yml @@ -0,0 +1,161 @@ +name: Bootstrapping + +on: + pull_request: + branches: + - develop + - releases/** + paths-ignore: + # Don't run if we only modified packages in the + # built-in repository or documentation + - 'var/spack/repos/builtin/**' + - '!var/spack/repos/builtin/packages/clingo-bootstrap/**' + - '!var/spack/repos/builtin/packages/python/**' + - '!var/spack/repos/builtin/packages/re2c/**' + - 'lib/spack/docs/**' + schedule: + # nightly at 2:16 AM + - cron: '16 2 * * *' + +jobs: + + fedora-sources: + runs-on: ubuntu-latest + container: "fedora:latest" + steps: + - name: Install dependencies + run: | + dnf install -y \ + bzip2 curl file gcc-c++ gcc gcc-gfortran git gnupg2 gzip \ + make patch unzip which xz python3 python3-devel tree \ + cmake bison bison-devel libstdc++-static + - 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: Bootstrap clingo + shell: runuser -u spack-test -- bash {0} + run: | + source share/spack/setup-env.sh + spack bootstrap untrust github-actions + spack external find cmake bison + spack -d solve zlib + tree ~/.spack/bootstrap/store/ + + ubuntu-sources: + runs-on: ubuntu-latest + container: "ubuntu:latest" + steps: + - name: Install dependencies + env: + DEBIAN_FRONTEND: noninteractive + run: | + apt-get update -y && apt-get upgrade -y + apt-get install -y \ + bzip2 curl file g++ gcc gfortran git gnupg2 gzip \ + make patch unzip xz-utils python3 python3-dev tree \ + cmake bison + - uses: actions/checkout@v2 + - name: Setup repo and non-root user + run: | + git --version + git fetch --unshallow + . .github/workflows/setup_git.sh + useradd -m spack-test + chown -R spack-test . + - name: Bootstrap clingo + shell: runuser -u spack-test -- bash {0} + run: | + source share/spack/setup-env.sh + spack bootstrap untrust github-actions + spack external find cmake bison + spack -d solve zlib + tree ~/.spack/bootstrap/store/ + + opensuse-sources: + runs-on: ubuntu-latest + container: "opensuse/tumbleweed:latest" + steps: + - name: Install dependencies + run: | + zypper update -y + zypper install -y \ + bzip2 curl file gcc-c++ gcc gcc-fortran tar git gpg2 gzip \ + make patch unzip which xz python3 python3-devel tree \ + cmake bison + - uses: actions/checkout@v2 + - name: Setup repo and non-root user + run: | + git --version + git fetch --unshallow + . .github/workflows/setup_git.sh + - name: Bootstrap clingo + run: | + source share/spack/setup-env.sh + spack bootstrap untrust github-actions + spack external find cmake bison + spack -d solve zlib + tree ~/.spack/bootstrap/store/ + + macos-sources: + runs-on: macos-latest + steps: + - name: Install dependencies + run: | + brew install cmake bison@2.7 tree + - uses: actions/checkout@v2 + - name: Bootstrap clingo + run: | + source share/spack/setup-env.sh + export PATH=/usr/local/opt/bison@2.7/bin:$PATH + spack bootstrap untrust github-actions + spack external find --not-buildable cmake bison + spack -d solve zlib + tree ~/.spack/bootstrap/store/ + + macos-clingo-binaries: + runs-on: macos-latest + strategy: + matrix: + python-version: ['3.5', '3.6', '3.7', '3.8', '3.9'] + steps: + - name: Install dependencies + run: | + brew install tree + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Bootstrap clingo + run: | + source share/spack/setup-env.sh + spack bootstrap untrust spack-install + spack -d solve zlib + tree ~/.spack/bootstrap/store/ + + + ubuntu-clingo-binaries: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ['2.7', '3.5', '3.6', '3.7', '3.8', '3.9'] + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Setup repo and non-root user + run: | + git --version + git fetch --unshallow + . .github/workflows/setup_git.sh + - name: Bootstrap clingo + run: | + source share/spack/setup-env.sh + spack bootstrap untrust spack-install + spack -d solve zlib + tree ~/.spack/bootstrap/store/ diff --git a/.github/workflows/build-containers.yml b/.github/workflows/build-containers.yml new file mode 100644 index 0000000000..d2dd2d825e --- /dev/null +++ b/.github/workflows/build-containers.yml @@ -0,0 +1,72 @@ +name: Build & Deploy Docker Containers +on: + # Build new Spack develop containers nightly. + schedule: + - cron: '34 0 * * *' + # Let's also build & tag Spack containers on releases. + release: + types: [published] + +jobs: + deploy-images: + runs-on: ubuntu-latest + strategy: + # Even if one container fails to build we still want the others + # to continue their builds. + fail-fast: false + # A matrix of Dockerfile paths, associated tags, and which architectures + # they support. + matrix: + dockerfile: [[amazon-linux, amazonlinux-2.dockerfile, 'linux/amd64,linux/arm64'], + [centos7, centos-7.dockerfile, 'linux/amd64,linux/arm64'], + [leap15, leap-15.dockerfile, 'linux/amd64,linux/arm64'], + [ubuntu-xenial, ubuntu-1604.dockerfile, 'linux/amd64,linux/arm64'], + [ubuntu-bionic, ubuntu-1804.dockerfile, 'linux/amd64,linux/arm64']] + name: Build ${{ matrix.dockerfile[0] }} + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Set Container Tag Normal (Nightly) + run: | + container="ghcr.io/spack/${{ matrix.dockerfile[0]}}:latest" + echo "container=${container}" >> $GITHUB_ENV + echo "versioned=${container}" >> $GITHUB_ENV + + # On a new release create a container with the same tag as the release. + - name: Set Container Tag on Release + if: github.event_name == 'release' + run: | + versioned="ghcr.io/spack/${{matrix.dockerfile[0]}}:${GITHUB_REF##*/}" + echo "versioned=${versioned}" >> $GITHUB_ENV + + - name: Check ${{ matrix.dockerfile[1] }} Exists + run: | + printf "Preparing to build ${{ env.container }} from ${{ matrix.dockerfile[1] }}" + if [ ! -f "share/spack/docker/${{ matrix.dockerfile[1]}}" ]; then + printf "Dockerfile ${{ matrix.dockerfile[0]}} does not exist" + exit 1; + fi + + - name: Log in to GitHub Container Registry + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Build & Deploy ${{ matrix.dockerfile[1] }} + uses: docker/build-push-action@v2 + with: + file: share/spack/docker/${{matrix.dockerfile[1]}} + platforms: ${{ matrix.dockerfile[2] }} + push: true + tags: | + ${{ env.container }} + ${{ env.versioned }} diff --git a/.github/workflows/linux_build_tests.yaml b/.github/workflows/linux_build_tests.yaml deleted file mode 100644 index 0a2946f63f..0000000000 --- a/.github/workflows/linux_build_tests.yaml +++ /dev/null @@ -1,65 +0,0 @@ -name: linux builds - -on: - push: - branches: - - develop - - releases/** - pull_request: - branches: - - develop - - releases/** - paths-ignore: - # Don't run if we only modified packages in the built-in repository - - 'var/spack/repos/builtin/**' - - '!var/spack/repos/builtin/packages/lz4/**' - - '!var/spack/repos/builtin/packages/mpich/**' - - '!var/spack/repos/builtin/packages/tut/**' - - '!var/spack/repos/builtin/packages/py-setuptools/**' - - '!var/spack/repos/builtin/packages/openjpeg/**' - - '!var/spack/repos/builtin/packages/r-rcpp/**' - - '!var/spack/repos/builtin/packages/ruby-rake/**' - # Don't run if we only modified documentation - - 'lib/spack/docs/**' - -jobs: - build: - runs-on: ubuntu-latest - strategy: - matrix: - package: - - lz4 # MakefilePackage - - mpich~fortran # AutotoolsPackage - - tut # WafPackage - - py-setuptools # PythonPackage - - openjpeg # CMakePackage - - r-rcpp # RPackage - - ruby-rake # RubyPackage - steps: - - uses: actions/checkout@v2 - - uses: actions/cache@v2 - with: - path: ~/.ccache - key: ccache-build-${{ matrix.package }} - restore-keys: | - ccache-build-${{ matrix.package }} - - uses: actions/setup-python@v2 - with: - python-version: 3.9 - - name: Install System Packages - run: | - sudo apt-get update - sudo apt-get -yqq install ccache gfortran perl perl-base r-base r-base-core r-base-dev ruby findutils openssl libssl-dev libpciaccess-dev - R --version - perl --version - ruby --version - - name: Copy Configuration - run: | - ccache -M 300M && ccache -z - # Set up external deps for build tests, b/c they take too long to compile - cp share/spack/qa/configuration/*.yaml etc/spack/ - - name: Run the build test - run: | - . share/spack/setup-env.sh - SPEC=${{ matrix.package }} share/spack/qa/run-build-tests - ccache -s diff --git a/.github/workflows/linux_unit_tests.yaml b/.github/workflows/linux_unit_tests.yaml deleted file mode 100644 index f21f9cd0ab..0000000000 --- a/.github/workflows/linux_unit_tests.yaml +++ /dev/null @@ -1,150 +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 - - 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 29caaa2e08..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 - - 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 5abedab784..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 -t=2.6- -t=3.5- -v lib/spack/spack/ lib/spack/llnl/ bin/ - - name: Minimum Version (Repositories) - run: vermin --backport argparse -t=2.6- -t=3.5- -v var/spack/repos - flake8: - 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 - - name: Setup git configuration - run: | - # Need this for the git tests to succeed. - git --version - . .github/workflows/setup_git.sh - - name: Run flake8 tests - run: | - share/spack/qa/run-flake8-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..b6a3d58934 --- /dev/null +++ b/.github/workflows/unit_tests.yaml @@ -0,0 +1,367 @@ +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 --violations --backport typing -t=2.6- -t=3.5- -vvv lib/spack/spack/ lib/spack/llnl/ bin/ + - name: vermin (Repositories) + run: vermin --backport argparse --violations --backport typing -t=2.6- -t=3.5- -vvv 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 types-six + - 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: + - uses: actions/checkout@v2 + if: ${{ github.event_name == 'push' }} + with: + fetch-depth: 0 + # 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 core has been modified, + # regardless of whether this is a pull request or a push to a branch + run: | + echo Core changes: ${{ steps.filter.outputs.core }} + echo Event name: ${{ github.event_name }} + if [ "${{ steps.filter.outputs.core }}" == "true" ] + 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 -y install \ + coreutils cvs gfortran graphviz gnupg2 mercurial ninja-build \ + patchelf cmake bison libbison-dev kcov + - name: Install Python packages + run: | + pip install --upgrade pip six setuptools codecov coverage[toml] + # ensure style checks are not skipped in unit tests for python >= 3.6 + # note that true/false (i.e., 1/0) are opposite in conditions in python and bash + if python -c 'import sys; sys.exit(not sys.version_info >= (3, 6))'; then + pip install --upgrade flake8 isort>=4.3.5 mypy>=0.900 black + fi + - name: Setup git configuration + run: | + # Need this for the git tests to succeed. + git --version + . .github/workflows/setup_git.sh + - name: Bootstrap clingo + if: ${{ matrix.concretizer == 'clingo' }} + env: + SPACK_PYTHON: python + run: | + . share/spack/setup-env.sh + spack bootstrap untrust spack-install + spack -v solve zlib + - name: Run unit tests (full suite with coverage) + if: ${{ needs.changes.outputs.with_coverage == 'true' }} + env: + SPACK_PYTHON: python + 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: + SPACK_PYTHON: python + ONLY_PACKAGES: true + SPACK_TEST_SOLVER: ${{ matrix.concretizer }} + run: | + share/spack/qa/run-unit-tests + - uses: codecov/codecov-action@v2.1.0 + 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 kcov csh zsh tcsh fish dash bash + - name: Install Python packages + run: | + pip install --upgrade pip six setuptools codecov coverage[toml] + - name: Setup git configuration + run: | + # Need this for the git tests to succeed. + git --version + . .github/workflows/setup_git.sh + - 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@v2.1.0 + if: ${{ needs.changes.outputs.with_coverage == 'true' }} + with: + flags: shelltests,linux + # Test for Python2.6 run on Centos 6 + centos6: + needs: [ validate, style, documentation, changes ] + runs-on: ubuntu-latest + container: spack/github-actions:centos6 + steps: + - name: Run unit tests (full test-suite) + # The CentOS 6 container doesn't run with coverage, but + # under the same conditions it runs the full test suite + if: ${{ needs.changes.outputs.with_coverage == 'true' }} + env: + HOME: /home/spack-test + SPACK_TEST_SOLVER: original + 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 + bin/spack unit-test -x + - name: Run unit tests (only package tests) + if: ${{ needs.changes.outputs.with_coverage == 'false' }} + env: + HOME: /home/spack-test + ONLY_PACKAGES: true + SPACK_TEST_SOLVER: original + 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 + bin/spack unit-test -x -m "not maybeslow" -k "package_sanity" + + # Test RHEL8 UBI with platform Python. This job is run + # only on PRs modifying core Spack + rhel8-platform-python: + needs: [ validate, style, documentation, changes ] + runs-on: ubuntu-latest + if: ${{ needs.changes.outputs.with_coverage == 'true' }} + 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 + shell: runuser -u spack-test -- bash {0} + run: | + source share/spack/setup-env.sh + spack -d solve zlib + spack unit-test -k 'not cvs and 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 + 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 unit tests + sudo apt-get -y install \ + coreutils cvs gfortran graphviz gnupg2 mercurial ninja-build \ + patchelf kcov + - name: Install Python packages + run: | + pip install --upgrade pip six setuptools codecov coverage[toml] clingo + - name: Setup git configuration + run: | + # Need this for the git tests to succeed. + git --version + . .github/workflows/setup_git.sh + - name: Run unit tests (full suite with coverage) + if: ${{ needs.changes.outputs.with_coverage == 'true' }} + env: + COVERAGE: true + SPACK_TEST_SOLVER: clingo + 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: clingo + run: | + share/spack/qa/run-unit-tests + - uses: codecov/codecov-action@v2.1.0 + 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[toml] + - name: Setup Homebrew packages + run: | + brew install dash fish gcc gnupg2 kcov + - name: Run unit tests + env: + SPACK_TEST_SOLVER: clingo + run: | + git --version + . .github/workflows/setup_git.sh + . share/spack/setup-env.sh + $(which spack) bootstrap untrust spack-install + $(which spack) solve zlib + if [ "${{ needs.changes.outputs.with_coverage }}" == "true" ] + then + coverage run $(which spack) unit-test -x + coverage combine + coverage xml + # Delete the symlink going from ./lib/spack/docs/_spack_root back to + # the initial directory, since it causes ELOOP errors with codecov/actions@2 + rm lib/spack/docs/_spack_root + else + echo "ONLY PACKAGE RECIPES CHANGED [skipping coverage]" + $(which spack) unit-test -x -m "not maybeslow" -k "package_sanity" + fi + - uses: codecov/codecov-action@v2.1.0 + if: ${{ needs.changes.outputs.with_coverage == 'true' }} + with: + files: ./coverage.xml + flags: unittests,macos |