summaryrefslogblamecommitdiff
path: root/.github/workflows/unit_tests.yaml
blob: 63d55a204ae6956c28ffd08d3d5d75bdf0c43f4c (plain) (tree)
1
2
3
4
5
6
7
8
9
10
                

   
                    
                

            
                                                                                              

                          
     
                                                         
         
                             

             
                           
                                                                     
                               

                                                   
                
                                
                           
                               
                                                               



                                                               

                               
                           


                               
                           


                               
                           

                               
                                
                           

                               



                                
 
          
                                                                     

                      
                                                                         





                                                    
                                   
                                                                            
                                           

                                   
                                                                             
                                                                                   




                                                   
                            
                                               

                              

                                    
                                               
                             
                             
                          
          
                              
                                                      

                                
                                                                    

                                       
                                                                           

                                                        
                                           
                     

                          

                          
                                                                     

                      
                                                                         
           
                              



                                   
                                                                            

                                   
                                                                                 




                                                   
                           



                                        
                                                                           

                               
                                           
                     
 

                                                        
                        







                                                                        
                                                                     


                                        
                                                                   




                                          


                                              
                                      
                                                                          

                                                        
                          
          
                                                                     

                      
                                                                         
           
                              


                                   
                                                                                                   

                                   
                                                                                                   
                                                                                   





                                                     




                                       
                                                                           

                                     
                                           
                     
                           
        
                             

             
                                
                                
          
                                                                     

                      
                                                                         



                                                    
                                              
                                                                             



                                              

                                 
                              



                                        
                                                      
                                 
                                                                                                                  
                                                                                                                              
                                                                           
           
                              
                                           
                     
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.7', '3.8', '3.9', '3.10', '3.11', '3.12']
        concretizer: ['clingo']
        on_develop:
        - ${{ github.ref == 'refs/heads/develop' }}
        include:
        - python-version: '3.11'
          os: ubuntu-latest
          concretizer: original
          on_develop: ${{ github.ref == 'refs/heads/develop' }}
        - python-version: '3.6'
          os: ubuntu-20.04
          concretizer: clingo
          on_develop: ${{ github.ref == 'refs/heads/develop' }}
        exclude:
        - python-version: '3.7'
          os: ubuntu-latest
          concretizer: 'clingo'
          on_develop: false
        - python-version: '3.8'
          os: ubuntu-latest
          concretizer: 'clingo'
          on_develop: false
        - python-version: '3.9'
          os: ubuntu-latest
          concretizer: 'clingo'
          on_develop: false
        - python-version: '3.10'
          os: ubuntu-latest
          concretizer: 'clingo'
          on_develop: false
        - python-version: '3.11'
          os: ubuntu-latest
          concretizer: 'clingo'
          on_develop: false

    steps:
    - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
      with:
        fetch-depth: 0
    - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d
      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 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/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_SOLVER: ${{ matrix.concretizer }}
          SPACK_TEST_PARALLEL: 2
          COVERAGE: true
          UNIT_TEST_COVERAGE: ${{ matrix.python-version == '3.11' }}
      run: |
          share/spack/qa/run-unit-tests
    - uses: codecov/codecov-action@125fc84a9a348dbcf27191600683ec096ec9021c
      with:
        flags: unittests,linux,${{ matrix.concretizer }}
        token: ${{ secrets.CODECOV_TOKEN }}
        verbose: true
  # Test shell integration
  shell:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
      with:
        fetch-depth: 0
    - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d
      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 kcov csh zsh tcsh fish dash bash
    - 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/setup_git.sh
    - name: Run shell tests
      env:
          COVERAGE: true
      run: |
          share/spack/qa/run-shell-tests
    - uses: codecov/codecov-action@125fc84a9a348dbcf27191600683ec096ec9021c
      with:
        flags: shelltests,linux
        token: ${{ secrets.CODECOV_TOKEN }}
        verbose: 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 file gcc-c++ gcc gcc-gfortran git gnupg2 gzip \
              make patch tcl unzip which xz
    - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
    - name: Setup repo and non-root user
      run: |
          git --version
          git config --global --add safe.directory /__w/spack/spack
          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 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@a5ac7e51b41094c92402da3b24376905380afc29
      with:
        fetch-depth: 0
    - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d
      with:
        python-version: '3.11'
    - name: Install System packages
      run: |
          sudo apt-get -y update
          sudo apt-get -y install coreutils cvs gfortran graphviz gnupg2 mercurial ninja-build kcov
    - name: Install Python packages
      run: |
          pip install --upgrade pip setuptools pytest coverage[toml] pytest-cov clingo pytest-xdist
          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/setup_git.sh
    - name: Run unit tests (full suite with coverage)
      env:
          COVERAGE: true
          SPACK_TEST_SOLVER: clingo
      run: |
          share/spack/qa/run-unit-tests
    - uses: codecov/codecov-action@125fc84a9a348dbcf27191600683ec096ec9021c
      with:
        flags: unittests,linux,clingo
        token: ${{ secrets.CODECOV_TOKEN }}
        verbose: 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@a5ac7e51b41094c92402da3b24376905380afc29
      with:
        fetch-depth: 0
    - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d
      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 gnupg2 kcov
    - name: Run unit tests
      env:
        SPACK_TEST_SOLVER: clingo
        SPACK_TEST_PARALLEL: 4
      run: |
        git --version
        . .github/workflows/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: codecov/codecov-action@125fc84a9a348dbcf27191600683ec096ec9021c
      with:
        flags: unittests,macos
        token: ${{ secrets.CODECOV_TOKEN }}
        verbose: true