summaryrefslogtreecommitdiff
path: root/.github
diff options
context:
space:
mode:
authorHarmen Stoppels <me@harmenstoppels.nl>2024-09-18 09:07:23 +0200
committerGitHub <noreply@github.com>2024-09-18 09:07:23 +0200
commit28e3295fb04d8d502b2fae7894f1942af86875aa (patch)
tree50f63e672b04f41ea1e88f0dabe828d2263e6106 /.github
parent314a3fbe7735cf2b07cceb4e2e1f4c8bca75e100 (diff)
downloadspack-28e3295fb04d8d502b2fae7894f1942af86875aa.tar.gz
spack-28e3295fb04d8d502b2fae7894f1942af86875aa.tar.bz2
spack-28e3295fb04d8d502b2fae7894f1942af86875aa.tar.xz
spack-28e3295fb04d8d502b2fae7894f1942af86875aa.zip
Add GHA for circular imports regressions (#46436)
Diffstat (limited to '.github')
-rw-r--r--.github/workflows/valid-style.yml59
1 files changed, 59 insertions, 0 deletions
diff --git a/.github/workflows/valid-style.yml b/.github/workflows/valid-style.yml
index feaa64484e..8bc58efff7 100644
--- a/.github/workflows/valid-style.yml
+++ b/.github/workflows/valid-style.yml
@@ -87,3 +87,62 @@ jobs:
spack -d bootstrap now --dev
spack 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@692973e3d937129bcbf40652eb9f2f61becf3332
+ 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@692973e3d937129bcbf40652eb9f2f61becf3332
+ 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@692973e3d937129bcbf40652eb9f2f61becf3332
+ with:
+ path: new
+ - name: Install circular import checker
+ uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
+ 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