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)