]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Merge TSAN test matrices in CI (#123278)
author🇺🇦 Sviatoslav Sydorenko (Святослав Сидоренко) <webknjaz@redhat.com>
Wed, 29 Jan 2025 09:16:51 +0000 (10:16 +0100)
committerGitHub <noreply@github.com>
Wed, 29 Jan 2025 09:16:51 +0000 (11:16 +0200)
.github/workflows/build.yml
.github/workflows/reusable-tsan.yml
Tools/tsan/suppressions.txt [moved from Tools/tsan/supressions.txt with 100% similarity]

index 0c20b85acbd56553c0beb6ed3e5b87f9b638bb5f..72c1618982b1468ce892407372bf0d4e4fe0ac58 100644 (file)
@@ -512,26 +512,20 @@ jobs:
       run: xvfb-run make ci
 
   build_tsan:
-    name: 'Thread sanitizer'
-    needs: check_source
-    if: needs.check_source.outputs.run_tests == 'true'
-    uses: ./.github/workflows/reusable-tsan.yml
-    with:
-      config_hash: ${{ needs.check_source.outputs.config_hash }}
-      options: ./configure --config-cache --with-thread-sanitizer --with-pydebug
-      suppressions_path: Tools/tsan/supressions.txt
-      tsan_logs_artifact_name: tsan-logs-default
-
-  build_tsan_free_threading:
-    name: 'Thread sanitizer (free-threading)'
+    name: >-
+      Thread sanitizer
+      ${{ fromJSON(matrix.free-threading) && '(free-threading)' || '' }}
     needs: check_source
     if: needs.check_source.outputs.run_tests == 'true'
+    strategy:
+      matrix:
+        free-threading:
+        - false
+        - true
     uses: ./.github/workflows/reusable-tsan.yml
     with:
       config_hash: ${{ needs.check_source.outputs.config_hash }}
-      options: ./configure --config-cache --disable-gil --with-thread-sanitizer --with-pydebug
-      suppressions_path: Tools/tsan/suppressions_free_threading.txt
-      tsan_logs_artifact_name: tsan-logs-free-threading
+      free-threading: ${{ matrix.free-threading }}
 
   # CIFuzz job based on https://google.github.io/oss-fuzz/getting-started/continuous-integration/
   cifuzz:
@@ -591,7 +585,6 @@ jobs:
     - test_hypothesis
     - build_asan
     - build_tsan
-    - build_tsan_free_threading
     - cifuzz
 
     runs-on: ubuntu-latest
@@ -625,7 +618,6 @@ jobs:
             build_windows,
             build_asan,
             build_tsan,
-            build_tsan_free_threading,
             '
             || ''
           }}
index 269f479849f21e5cae0eb8bf528d5f3cd818918f..1d2548565d50efd24c6dbca3b37f641dc261c098 100644 (file)
@@ -6,17 +6,11 @@ on:
       config_hash:
         required: true
         type: string
-      options:
-        required: true
-        type: string
-      suppressions_path:
-        description: 'A repo relative path to the suppressions file'
-        required: true
-        type: string
-      tsan_logs_artifact_name:
-        description: 'Name of the TSAN logs artifact. Must be unique for each job.'
-        required: true
-        type: string
+      free-threading:
+        description: Whether to use free-threaded mode
+        required: false
+        type: boolean
+        default: false
 
 env:
   FORCE_COLOR: 1
@@ -26,9 +20,6 @@ jobs:
     name: 'Thread sanitizer'
     runs-on: ubuntu-24.04
     timeout-minutes: 60
-    env:
-      OPTIONS: ${{ inputs.options }}
-      SUPPRESSIONS_PATH: ${{ inputs.suppressions_path }}
     steps:
     - uses: actions/checkout@v4
       with:
@@ -55,7 +46,11 @@ jobs:
         sudo sysctl -w vm.mmap_rnd_bits=28
     - name: TSAN Option Setup
       run: |
-        echo "TSAN_OPTIONS=log_path=${GITHUB_WORKSPACE}/tsan_log suppressions=${GITHUB_WORKSPACE}/${SUPPRESSIONS_PATH} handle_segv=0" >> "$GITHUB_ENV"
+        echo "TSAN_OPTIONS=log_path=${GITHUB_WORKSPACE}/tsan_log suppressions=${GITHUB_WORKSPACE}/Tools/tsan/suppressions${{
+            fromJSON(inputs.free-threading)
+            && '_free_threading'
+            || ''
+          }}.txt handle_segv=0" >> "$GITHUB_ENV"
         echo "CC=clang" >> "$GITHUB_ENV"
         echo "CXX=clang++" >> "$GITHUB_ENV"
     - name: Add ccache to PATH
@@ -67,7 +62,12 @@ jobs:
         save: ${{ github.event_name == 'push' }}
         max-size: "200M"
     - name: Configure CPython
-      run: "${OPTIONS}"
+      run: >-
+        ./configure
+        --config-cache
+        --with-thread-sanitizer
+        --with-pydebug
+        ${{ fromJSON(inputs.free-threading) && '--disable-gil' || '' }}
     - name: Build CPython
       run: make -j4
     - name: Display build info
@@ -81,6 +81,11 @@ jobs:
       if: always()
       uses: actions/upload-artifact@v4
       with:
-        name: ${{ inputs.tsan_logs_artifact_name }}
+        name: >-
+          tsan-logs-${{
+            fromJSON(inputs.free-threading)
+            && 'free-threading'
+            || 'default'
+          }}
         path: tsan_log.*
         if-no-files-found: ignore