summaryrefslogblamecommitdiff
path: root/.github/workflows/valid-style.yml
blob: ad96ff2cc5604ce5e8be02b7a72788c67a5416b9 (plain) (tree)
1
2
3
4
5
6
7
8
9
10









                      
                                                                                         








                                                                
                                                                     
                                                                         
           
                              


                                   
                                            
                                                                            
                                 
                                                                                                                                            
                                 
                                                                                                                      



                                                        
                                                                     

                      
                                                                         
           
                              


                                   
                                            
                                                                            



                                                 
                                            


                                        

                                        
                    

                                                
                            









                                                                                    
                                                                       


                                          
                                                                   
                               
                                              





                                                     
                            
                                      
                                 
                            










                                                  
                                                                     





                                                         
                                                                     







                                             
                                                                     


                                           
                                                                     

                                                   
                                                     























                                                                                                  
name: style

on:
  workflow_call:
    inputs:
      with_coverage:
        required: true
        type: string

concurrency:
  group: style-${{github.ref}}-${{github.event.pull_request.number || github.run_number}}
  cancel-in-progress: true


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@11bd71901bbe5b1630ceea73d27597364c9af683
    - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b
      with:
        python-version: '3.11'
        cache: 'pip'
    - name: Install Python Packages
      run: |
        pip install --upgrade pip setuptools
        pip install -r .github/workflows/requirements/style/requirements.txt
    - name: vermin (Spack's Core)
      run: vermin --backport importlib --backport argparse --violations --backport typing -t=3.6- -vvv lib/spack/spack/ lib/spack/llnl/ bin/
    - name: vermin (Repositories)
      run: vermin --backport importlib --backport argparse --violations --backport typing -t=3.6- -vvv var/spack/repos
  # Run style checks on the files that have been changed
  style:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
      with:
        fetch-depth: 0
    - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b
      with:
        python-version: '3.11'
        cache: 'pip'
    - name: Install Python packages
      run: |
        pip install --upgrade pip setuptools
        pip install -r .github/workflows/requirements/style/requirements.txt
    - name: Setup git configuration
      run: |
        # Need this for the git tests to succeed.
        git --version
        . .github/workflows/bin/setup_git.sh
    - name: Run style tests
      run: |
          share/spack/qa/run-style-tests
  audit:
    uses: ./.github/workflows/audit.yaml
    secrets: inherit
    with:
      with_coverage: ${{ inputs.with_coverage }}
      python_version: '3.11'
  # Check that spack can bootstrap the development environment on Python 3.6 - RHEL8
  bootstrap-dev-rhel8:
    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@11bd71901bbe5b1630ceea73d27597364c9af683
      - name: Setup repo and non-root user
        run: |
          git --version
          git config --global --add safe.directory /__w/spack/spack
          git fetch --unshallow
          . .github/workflows/bin/setup_git.sh
          useradd spack-test
          chown -R spack-test .
      - name: Bootstrap Spack development environment
        shell: runuser -u spack-test -- bash {0}
        run: |
          source share/spack/setup-env.sh
          spack debug report
          spack -d bootstrap now --dev
          spack -d style -t black
          spack unit-test -V
  import-check:
    runs-on: ubuntu-latest
    steps:
    - uses: julia-actions/setup-julia@v2
      with:
        version: '1.10'
    - uses: julia-actions/cache@v2

    # PR: use the base of the PR as the old commit
    - name: Checkout PR base commit
      if: github.event_name == 'pull_request'
      uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
      with:
        ref: ${{ github.event.pull_request.base.sha }}
        path: old
    # not a PR: use the previous commit as the old commit
    - name: Checkout previous commit
      if: github.event_name != 'pull_request'
      uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
      with:
        fetch-depth: 2
        path: old
    - name: Checkout previous commit
      if: github.event_name != 'pull_request'
      run: git -C old reset --hard HEAD^

    - name: Checkout new commit
      uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
      with:
        path: new
    - name: Install circular import checker
      uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
      with:
        repository: haampie/circular-import-fighter
        ref: 9f60f51bc7134e0be73f27623f1b0357d1718427
        path: circular-import-fighter
    - name: Install dependencies
      working-directory: circular-import-fighter
      run: make -j dependencies
    - name: Import cycles before
      working-directory: circular-import-fighter
      run: make SPACK_ROOT=../old && cp solution solution.old
    - name: Import cycles after
      working-directory: circular-import-fighter
      run: make clean-graph && make SPACK_ROOT=../new && cp solution solution.new
    - name: Compare import cycles
      working-directory: circular-import-fighter
      run: |
        edges_before="$(grep -oP 'edges to delete: \K\d+' solution.old)"
        edges_after="$(grep -oP 'edges to delete: \K\d+' solution.new)"
        if [ "$edges_after" -gt "$edges_before" ]; then
          printf '\033[1;31mImport check failed: %s imports need to be deleted, ' "$edges_after"
          printf 'previously this was %s\033[0m\n'  "$edges_before"
          printf 'Compare \033[1;97m"Import cycles before"\033[0m and '
          printf '\033[1;97m"Import cycles after"\033[0m to see problematic imports.\n'
          exit 1
        else
          printf '\033[1;32mImport check passed: %s <= %s\033[0m\n' "$edges_after" "$edges_before"
        fi