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