run: xvfb-run make buildbottest TESTOPTS="-j4 -uall,-cpu"
build_tsan:
- name: 'Thread sanitizer'
+ 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
uses: ./.github/workflows/reusable-tsan.yml
with:
config_hash: ${{ needs.check_source.outputs.config_hash }}
- options: ./configure --config-cache --with-thread-sanitizer --with-pydebug
+ free-threading: ${{ matrix.free-threading }}
all-required-green: # This job does nothing and is only used for the branch protection
name: All required checks pass
config_hash:
required: true
type: string
- options:
- required: true
- type: string
+ free-threading:
+ description: Whether to use free-threaded mode
+ required: false
+ type: boolean
+ default: false
env:
FORCE_COLOR: 1
name: 'Thread sanitizer'
runs-on: ubuntu-24.04
timeout-minutes: 60
- env:
- OPTIONS: ${{ inputs.options }}
steps:
- uses: actions/checkout@v4
with:
sudo sysctl -w vm.mmap_rnd_bits=28
- name: TSAN Option Setup
run: |
- echo "TSAN_OPTIONS=suppressions=${GITHUB_WORKSPACE}/Tools/tsan/supressions.txt" >> $GITHUB_ENV
- echo "CC=clang" >> $GITHUB_ENV
- echo "CXX=clang++" >> $GITHUB_ENV
+ echo "TSAN_OPTIONS=log_path=${GITHUB_WORKSPACE}/tsan_log suppressions=${GITHUB_WORKSPACE}/Tools/tsan/suppressions${{
+ fromJSON(inputs.free-threading)
+ && '_free_threading'
+ || ''
+ }}.txt" >> "$GITHUB_ENV"
+ echo "CC=clang" >> "$GITHUB_ENV"
+ echo "CXX=clang++" >> "$GITHUB_ENV"
- name: Add ccache to PATH
run: |
echo "PATH=/usr/lib/ccache:$PATH" >> $GITHUB_ENV
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