
A few changes to tarball creation (for build caches): - do not run file to distinguish binary from text - file is slow, even when running it in a batched fashion -- it usually reads all bytes and has slow logic to categorize specific types - we don't need a highly detailed file categorization; a crude categorization of elf, mach-o, text suffices. detecting elf and mach-o is straightforward and cheap - detecting utf-8 (and with that ascii) is highly accurate: false positive rate decays exponentially as file size increases. Further it's not only the most common encoding, but the most common file type in package prefixes. iso-8859-1 is cheaply (but heuristically) detected too, and sufficiently accurate after binaries and utf-8 files are classified earlier - remove file as a dependency of Spack in general, which makes Spack itself easier to install - detect file type and need to relocate as part of creating the tarball, which is more cache friendly and thus faster
264 lines
9.3 KiB
YAML
264 lines
9.3 KiB
YAML
name: unit tests
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
workflow_call:
|
|
|
|
concurrency:
|
|
group: unit_tests-${{github.ref}}-${{github.event.pull_request.number || github.run_number}}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
# Run unit tests with different configurations on linux
|
|
ubuntu:
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
os: [ubuntu-latest]
|
|
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12']
|
|
on_develop:
|
|
- ${{ github.ref == 'refs/heads/develop' }}
|
|
include:
|
|
- python-version: '3.6'
|
|
os: ubuntu-20.04
|
|
on_develop: ${{ github.ref == 'refs/heads/develop' }}
|
|
- python-version: '3.7'
|
|
os: ubuntu-22.04
|
|
on_develop: ${{ github.ref == 'refs/heads/develop' }}
|
|
exclude:
|
|
- python-version: '3.8'
|
|
os: ubuntu-latest
|
|
on_develop: false
|
|
- python-version: '3.9'
|
|
os: ubuntu-latest
|
|
on_develop: false
|
|
- python-version: '3.10'
|
|
os: ubuntu-latest
|
|
on_develop: false
|
|
- python-version: '3.11'
|
|
os: ubuntu-latest
|
|
on_develop: false
|
|
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
|
with:
|
|
fetch-depth: 0
|
|
- uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b
|
|
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 \
|
|
cmake bison libbison-dev subversion
|
|
# On ubuntu 24.04, kcov was removed. It may come back in some future Ubuntu
|
|
- name: Set up Homebrew
|
|
id: set-up-homebrew
|
|
uses: Homebrew/actions/setup-homebrew@40e9946c182a64b3db1bf51be0dcb915f7802aa9
|
|
- name: Install kcov with brew
|
|
run: "brew install kcov"
|
|
- name: Install Python packages
|
|
run: |
|
|
pip install --upgrade pip setuptools pytest pytest-xdist pytest-cov
|
|
pip install --upgrade flake8 "isort>=4.3.5" "mypy>=0.900" "click" "black"
|
|
- name: Setup git configuration
|
|
run: |
|
|
# Need this for the git tests to succeed.
|
|
git --version
|
|
. .github/workflows/bin/setup_git.sh
|
|
- name: Bootstrap clingo
|
|
if: ${{ matrix.concretizer == 'clingo' }}
|
|
env:
|
|
SPACK_PYTHON: python
|
|
run: |
|
|
. share/spack/setup-env.sh
|
|
spack bootstrap disable spack-install
|
|
spack bootstrap now
|
|
spack -v solve zlib
|
|
- name: Run unit tests
|
|
env:
|
|
SPACK_PYTHON: python
|
|
SPACK_TEST_PARALLEL: 2
|
|
COVERAGE: true
|
|
COVERAGE_FILE: coverage/.coverage-${{ matrix.os }}-python${{ matrix.python-version }}
|
|
UNIT_TEST_COVERAGE: ${{ matrix.python-version == '3.11' }}
|
|
run: |
|
|
share/spack/qa/run-unit-tests
|
|
- uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b
|
|
with:
|
|
name: coverage-${{ matrix.os }}-python${{ matrix.python-version }}
|
|
path: coverage
|
|
include-hidden-files: true
|
|
# Test shell integration
|
|
shell:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
|
with:
|
|
fetch-depth: 0
|
|
- uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b
|
|
with:
|
|
python-version: '3.11'
|
|
- 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 subversion
|
|
# On ubuntu 24.04, kcov was removed. It may come back in some future Ubuntu
|
|
- name: Set up Homebrew
|
|
id: set-up-homebrew
|
|
uses: Homebrew/actions/setup-homebrew@40e9946c182a64b3db1bf51be0dcb915f7802aa9
|
|
- name: Install kcov with brew
|
|
run: "brew install kcov"
|
|
- name: Install Python packages
|
|
run: |
|
|
pip install --upgrade pip setuptools pytest coverage[toml] pytest-xdist
|
|
- name: Setup git configuration
|
|
run: |
|
|
# Need this for the git tests to succeed.
|
|
git --version
|
|
. .github/workflows/bin/setup_git.sh
|
|
- name: Run shell tests
|
|
env:
|
|
COVERAGE: true
|
|
run: |
|
|
share/spack/qa/run-shell-tests
|
|
- uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b
|
|
with:
|
|
name: coverage-shell
|
|
path: coverage
|
|
include-hidden-files: true
|
|
|
|
# Test RHEL8 UBI with platform Python. This job is run
|
|
# only on PRs modifying core Spack
|
|
rhel8-platform-python:
|
|
runs-on: ubuntu-latest
|
|
container: registry.access.redhat.com/ubi8/ubi
|
|
steps:
|
|
- name: Install dependencies
|
|
run: |
|
|
dnf install -y \
|
|
bzip2 curl gcc-c++ gcc gcc-gfortran git gnupg2 gzip \
|
|
make patch tcl unzip which xz
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
|
- name: Setup repo and non-root user
|
|
run: |
|
|
git --version
|
|
git config --global --add safe.directory '*'
|
|
git fetch --unshallow
|
|
. .github/workflows/bin/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 bootstrap now --dev
|
|
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:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
|
with:
|
|
fetch-depth: 0
|
|
- uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b
|
|
with:
|
|
python-version: '3.13'
|
|
- name: Install System packages
|
|
run: |
|
|
sudo apt-get -y update
|
|
sudo apt-get -y install coreutils gfortran graphviz gnupg2
|
|
- name: Install Python packages
|
|
run: |
|
|
pip install --upgrade pip setuptools pytest coverage[toml] pytest-cov clingo
|
|
pip install --upgrade flake8 "isort>=4.3.5" "mypy>=0.900" "click" "black"
|
|
- name: Run unit tests (full suite with coverage)
|
|
env:
|
|
COVERAGE: true
|
|
COVERAGE_FILE: coverage/.coverage-clingo-cffi
|
|
run: |
|
|
. share/spack/setup-env.sh
|
|
spack bootstrap disable spack-install
|
|
spack bootstrap disable github-actions-v0.5
|
|
spack bootstrap disable github-actions-v0.6
|
|
spack bootstrap status
|
|
spack solve zlib
|
|
spack unit-test --verbose --cov --cov-config=pyproject.toml --cov-report=xml:coverage.xml lib/spack/spack/test/concretization/core.py
|
|
- uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b
|
|
with:
|
|
name: coverage-clingo-cffi
|
|
path: coverage
|
|
include-hidden-files: true
|
|
# Run unit tests on MacOS
|
|
macos:
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
os: [macos-13, macos-14]
|
|
python-version: ["3.11"]
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
|
with:
|
|
fetch-depth: 0
|
|
- uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
- name: Install Python packages
|
|
run: |
|
|
pip install --upgrade pip setuptools
|
|
pip install --upgrade pytest coverage[toml] pytest-xdist pytest-cov
|
|
- name: Setup Homebrew packages
|
|
run: |
|
|
brew install dash fish gcc gnupg kcov
|
|
- name: Run unit tests
|
|
env:
|
|
SPACK_TEST_PARALLEL: 4
|
|
COVERAGE_FILE: coverage/.coverage-${{ matrix.os }}-python${{ matrix.python-version }}
|
|
run: |
|
|
git --version
|
|
. .github/workflows/bin/setup_git.sh
|
|
. share/spack/setup-env.sh
|
|
$(which spack) bootstrap disable spack-install
|
|
$(which spack) solve zlib
|
|
common_args=(--dist loadfile --tx '4*popen//python=./bin/spack-tmpconfig python -u ./bin/spack python' -x)
|
|
$(which spack) unit-test --verbose --cov --cov-config=pyproject.toml --cov-report=xml:coverage.xml "${common_args[@]}"
|
|
- uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b
|
|
with:
|
|
name: coverage-${{ matrix.os }}-python${{ matrix.python-version }}
|
|
path: coverage
|
|
include-hidden-files: true
|
|
# Run unit tests on Windows
|
|
windows:
|
|
defaults:
|
|
run:
|
|
shell:
|
|
powershell Invoke-Expression -Command "./share/spack/qa/windows_test_setup.ps1"; {0}
|
|
runs-on: windows-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
|
|
with:
|
|
fetch-depth: 0
|
|
- uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b
|
|
with:
|
|
python-version: 3.9
|
|
- name: Install Python packages
|
|
run: |
|
|
python -m pip install --upgrade pip pywin32 setuptools pytest-cov clingo
|
|
- name: Create local develop
|
|
run: |
|
|
./.github/workflows/bin/setup_git.ps1
|
|
- name: Unit Test
|
|
env:
|
|
COVERAGE_FILE: coverage/.coverage-windows
|
|
run: |
|
|
spack unit-test -x --verbose --cov --cov-config=pyproject.toml
|
|
./share/spack/qa/validate_last_exit.ps1
|
|
- uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b
|
|
with:
|
|
name: coverage-windows
|
|
path: coverage
|
|
include-hidden-files: true
|