Skip to content

Commit 8592567

Browse files
hugovkwebknjaz
authored andcommitted
Merge reusable-tsan.yml and reusable-ubsan.yml
1 parent 0282e05 commit 8592567

File tree

3 files changed

+52
-102
lines changed

3 files changed

+52
-102
lines changed

.github/workflows/build.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -597,17 +597,19 @@ jobs:
597597
free-threading:
598598
- false
599599
- true
600-
uses: ./.github/workflows/reusable-tsan.yml
600+
uses: ./.github/workflows/reusable-san.yml
601601
with:
602+
sanitizer: TSan
602603
config_hash: ${{ needs.build-context.outputs.config-hash }}
603604
free-threading: ${{ matrix.free-threading }}
604605

605606
build-ubsan:
606607
name: Undefined behavior sanitizer
607608
needs: build-context
608609
if: needs.build-context.outputs.run-tests == 'true'
609-
uses: ./.github/workflows/reusable-ubsan.yml
610+
uses: ./.github/workflows/reusable-san.yml
610611
with:
612+
sanitizer: UBSan
611613
config_hash: ${{ needs.build-context.outputs.config-hash }}
612614

613615
cross-build-linux:
Lines changed: 48 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1-
name: Reusable Thread Sanitizer
1+
name: Reusable Sanitizer
22

33
on:
44
workflow_call:
55
inputs:
6+
sanitizer:
7+
required: true
8+
type: string
69
config_hash:
710
required: true
811
type: string
@@ -16,8 +19,8 @@ env:
1619
FORCE_COLOR: 1
1720

1821
jobs:
19-
build-tsan-reusable:
20-
name: 'Thread sanitizer'
22+
build-san-reusable:
23+
name: ${{ inputs.sanitizer }}
2124
runs-on: ubuntu-24.04
2225
timeout-minutes: 60
2326
steps:
@@ -30,29 +33,42 @@ jobs:
3033
uses: actions/cache@v4
3134
with:
3235
path: config.cache
33-
key: ${{ github.job }}-${{ env.IMAGE_OS_VERSION }}-${{ inputs.config_hash }}
36+
key: ${{ github.job }}-${{ env.IMAGE_OS_VERSION }}-${{ inputs.sanitizer }}-${{ inputs.config_hash }}
3437
- name: Install dependencies
3538
run: |
3639
sudo ./.github/workflows/posix-deps-apt.sh
37-
# Install clang-18
40+
# Install clang
3841
wget https://apt.llvm.org/llvm.sh
3942
chmod +x llvm.sh
40-
sudo ./llvm.sh 17 # gh-121946: llvm-18 package is temporarily broken
41-
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-17 100
42-
sudo update-alternatives --set clang /usr/bin/clang-17
43-
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-17 100
44-
sudo update-alternatives --set clang++ /usr/bin/clang++-17
45-
# Reduce ASLR to avoid TSAN crashing
46-
sudo sysctl -w vm.mmap_rnd_bits=28
47-
- name: TSAN option setup
43+
44+
if [ "${SANITIZER}" = "TSan" ]; then
45+
sudo ./llvm.sh 17 # gh-121946: llvm-18 package is temporarily broken
46+
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-17 100
47+
sudo update-alternatives --set clang /usr/bin/clang-17
48+
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-17 100
49+
sudo update-alternatives --set clang++ /usr/bin/clang++-17
50+
# Reduce ASLR to avoid TSan crashing
51+
sudo sysctl -w vm.mmap_rnd_bits=28
52+
else
53+
sudo ./llvm.sh 20
54+
fi
55+
56+
- name: Sanitizer option setup
4857
run: |
49-
echo "TSAN_OPTIONS=log_path=${GITHUB_WORKSPACE}/tsan_log suppressions=${GITHUB_WORKSPACE}/Tools/tsan/suppressions${{
50-
fromJSON(inputs.free-threading)
51-
&& '_free_threading'
52-
|| ''
53-
}}.txt handle_segv=0" >> "$GITHUB_ENV"
58+
if [ "${SANITIZER}" = "TSan" ]; then
59+
echo "TSAN_OPTIONS=${SAN_LOG_OPTION} suppressions=${GITHUB_WORKSPACE}/Tools/tsan/suppressions${{
60+
fromJSON(inputs.free-threading)
61+
&& '_free_threading'
62+
|| ''
63+
}}.txt handle_segv=0" >> "$GITHUB_ENV"
64+
else
65+
echo "UBSAN_OPTIONS=${SAN_LOG_OPTION}" >> "$GITHUB_ENV"
66+
fi
5467
echo "CC=clang" >> "$GITHUB_ENV"
5568
echo "CXX=clang++" >> "$GITHUB_ENV"
69+
env:
70+
SANITIZER: ${{ inputs.sanitizer }}
71+
SAN_LOG_OPTION: log_path=${{ github.workspace }}/san_log
5672
- name: Add ccache to PATH
5773
run: |
5874
echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV"
@@ -65,30 +81,36 @@ jobs:
6581
run: >-
6682
./configure
6783
--config-cache
68-
--with-thread-sanitizer
84+
${{
85+
inputs.sanitizer == 'TSan'
86+
&& '--with-thread-sanitizer'
87+
|| '--with-undefined-behavior-sanitizer'
88+
}}
6989
--with-pydebug
7090
${{ fromJSON(inputs.free-threading) && '--disable-gil' || '' }}
7191
- name: Build CPython
7292
run: make -j4
7393
- name: Display build info
7494
run: make pythoninfo
7595
- name: Tests
76-
run: ./python -m test --tsan -j4
96+
run: ./python -m test ${{ inputs.sanitizer == 'TSan' && '--tsan' || '' }} -j4
7797
- name: Parallel tests
78-
if: fromJSON(inputs.free-threading)
98+
if: >-
99+
inputs.sanitizer == 'TSan'
100+
&& fromJSON(inputs.free-threading)
79101
run: ./python -m test --tsan-parallel --parallel-threads=4 -j4
80-
- name: Display TSAN logs
102+
- name: Display logs
81103
if: always()
82-
run: find "${GITHUB_WORKSPACE}" -name 'tsan_log.*' | xargs head -n 1000
83-
- name: Archive TSAN logs
104+
run: find "${GITHUB_WORKSPACE}" -name 'san_log.*' | xargs head -n 1000
105+
- name: Archive logs
84106
if: always()
85107
uses: actions/upload-artifact@v4
86108
with:
87109
name: >-
88-
tsan-logs-${{
110+
${{ inputs.sanitizer }}-logs-${{
89111
fromJSON(inputs.free-threading)
90112
&& 'free-threading'
91113
|| 'default'
92114
}}
93-
path: tsan_log.*
115+
path: san_log.*
94116
if-no-files-found: ignore

.github/workflows/reusable-ubsan.yml

Lines changed: 0 additions & 74 deletions
This file was deleted.

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy