summaryrefslogtreecommitdiff
path: root/.github/workflows/valid-style.yml
blob: b72acfaadd5cd0e3729a4516cdbebcde02565c35 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
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: 555519c6fd5564fd2eb844e7b87e84f4d12602e2
        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