summaryrefslogtreecommitdiff
path: root/.github/workflows
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows')
-rw-r--r--.github/workflows/bootstrap.yml161
-rw-r--r--.github/workflows/build-containers.yml72
-rw-r--r--.github/workflows/linux_build_tests.yaml65
-rw-r--r--.github/workflows/linux_unit_tests.yaml150
-rw-r--r--.github/workflows/macos_unit_tests.yaml44
-rw-r--r--.github/workflows/style_and_docs.yaml65
-rw-r--r--.github/workflows/unit_tests.yaml367
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