From 654f6839ebe33d64710b5e7f3c388539e84f8e35 Mon Sep 17 00:00:00 2001
From: Harmen Stoppels <harmenstoppels@gmail.com>
Date: Thu, 18 Nov 2021 13:00:39 +0100
Subject: ci: run style unit tests only if we target develop (#27472)

Some tests assume the base branch is develop, but this branch may not
have been checked out.
---
 .github/workflows/setup_git.sh         |  9 ++++-----
 .github/workflows/unit_tests.yaml      |  2 ++
 lib/spack/spack/test/cmd/style.py      | 13 ++++++++++++-
 lib/spack/spack/test/package_sanity.py |  6 +++++-
 share/spack/qa/run-style-tests         | 10 +++++-----
 5 files changed, 28 insertions(+), 12 deletions(-)

diff --git a/.github/workflows/setup_git.sh b/.github/workflows/setup_git.sh
index bd79daf268..e319e07512 100755
--- a/.github/workflows/setup_git.sh
+++ b/.github/workflows/setup_git.sh
@@ -1,9 +1,8 @@
 #!/usr/bin/env sh
 git config --global user.email "spack@example.com"
 git config --global user.name "Test User"
-# With fetch-depth: 0 we have a remote develop
-# but not a local branch. Don't do this on develop
-if [ "$(git branch --show-current)" != "develop" ]
-then
-  git branch develop origin/develop
+
+# create a local pr base branch
+if [[ -n $GITHUB_BASE_REF ]]; then
+    git fetch origin "${GITHUB_BASE_REF}:${GITHUB_BASE_REF}"
 fi
diff --git a/.github/workflows/unit_tests.yaml b/.github/workflows/unit_tests.yaml
index 35722b9137..764a9cdcf0 100644
--- a/.github/workflows/unit_tests.yaml
+++ b/.github/workflows/unit_tests.yaml
@@ -211,6 +211,7 @@ jobs:
           git clone "${{ github.server_url }}/${{ github.repository }}.git" && cd spack
           git fetch origin "${{ github.ref }}:test-branch"
           git checkout test-branch
+          . .github/workflows/setup_git.sh
           bin/spack unit-test -x
     - name: Run unit tests (only package tests)
       if: ${{ needs.changes.outputs.with_coverage == 'false' }}
@@ -223,6 +224,7 @@ jobs:
           git clone "${{ github.server_url }}/${{ github.repository }}.git" && cd spack
           git fetch origin "${{ github.ref }}:test-branch"
           git checkout test-branch
+          . .github/workflows/setup_git.sh
           bin/spack unit-test -x -m "not maybeslow" -k "package_sanity"
 
   # Test RHEL8 UBI with platform Python. This job is run
diff --git a/lib/spack/spack/test/cmd/style.py b/lib/spack/spack/test/cmd/style.py
index af0fc47d24..29cde14400 100644
--- a/lib/spack/spack/test/cmd/style.py
+++ b/lib/spack/spack/test/cmd/style.py
@@ -24,8 +24,19 @@ style_data = os.path.join(spack.paths.test_path, 'data', 'style')
 
 style = spack.main.SpackCommand("style")
 
+
+def has_develop_branch():
+    git = which('git')
+    if not git:
+        return False
+    git("show-ref", "--verify", "--quiet",
+        "refs/heads/develop", fail_on_error=False)
+    return git.returncode == 0
+
+
 # spack style requires git to run -- skip the tests if it's not there
-pytestmark = pytest.mark.skipif(not which('git'), reason='requires git')
+pytestmark = pytest.mark.skipif(not has_develop_branch(),
+                                reason='requires git with develop branch')
 
 # The style tools have requirements to use newer Python versions.  We simplify by
 # requiring Python 3.6 or higher to run spack style.
diff --git a/lib/spack/spack/test/package_sanity.py b/lib/spack/spack/test/package_sanity.py
index 35840d85da..dd2f4b425f 100644
--- a/lib/spack/spack/test/package_sanity.py
+++ b/lib/spack/spack/test/package_sanity.py
@@ -206,8 +206,12 @@ def test_prs_update_old_api():
     """Ensures that every package modified in a PR doesn't contain
     deprecated calls to any method.
     """
+    ref = os.getenv("GITHUB_BASE_REF")
+    if not ref:
+        pytest.skip("No base ref found")
+
     changed_package_files = [
-        x for x in style.changed_files() if style.is_package(x)
+        x for x in style.changed_files(base=ref) if style.is_package(x)
     ]
     failing = []
     for file in changed_package_files:
diff --git a/share/spack/qa/run-style-tests b/share/spack/qa/run-style-tests
index 72c47ff055..9f0cbdb266 100755
--- a/share/spack/qa/run-style-tests
+++ b/share/spack/qa/run-style-tests
@@ -14,15 +14,15 @@
 # Usage:
 #     run-flake8-tests
 #
-. "$(dirname $0)/setup.sh"
+. "$(dirname "$0")/setup.sh"
 
-BASE=""
-if [ -n "$GITHUB_BASE_REF" ]; then
-    BASE="--base ${GITHUB_BASE_REF}"
+args=()
+if [[ -n $GITHUB_BASE_REF ]]; then
+    args+=("--base" "${GITHUB_BASE_REF}")
 fi
 
 # verify that the code style is correct
-spack style --root-relative $BASE
+spack style --root-relative "${args[@]}"
 
 # verify that the license headers are present
 spack license verify
-- 
cgit v1.2.3-70-g09d2