Thanks to visit codestin.com
Credit goes to github.com

Skip to content

gh-111758: Run UBSan in GitHub Actions #135578

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Jun 19, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -527,6 +527,14 @@ jobs:
config_hash: ${{ needs.build-context.outputs.config-hash }}
free-threading: ${{ matrix.free-threading }}

build-ubsan:
name: Undefined behavior sanitizer
needs: build-context
if: needs.build-context.outputs.run-tests == 'true'
uses: ./.github/workflows/reusable-ubsan.yml
with:
config_hash: ${{ needs.build-context.outputs.config-hash }}

cross-build-linux:
name: Cross build Linux
runs-on: ubuntu-latest
Expand Down
74 changes: 74 additions & 0 deletions .github/workflows/reusable-ubsan.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
name: Reusable Undefined Behavior Sanitizer

on:
workflow_call:
inputs:
config_hash:
required: true
type: string

env:
FORCE_COLOR: 1

jobs:
build-ubsan-reusable:
name: 'Undefined behavior sanitizer'
runs-on: ubuntu-24.04
timeout-minutes: 60
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Runner image version
run: echo "IMAGE_OS_VERSION=${ImageOS}-${ImageVersion}" >> "$GITHUB_ENV"
- name: Restore config.cache
uses: actions/cache@v4
with:
path: config.cache
key: ${{ github.job }}-${{ env.IMAGE_OS_VERSION }}-${{ inputs.config_hash }}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the configure failure:

https://github.com/python/cpython/actions/runs/15706865183/job/44254688889?pr=135578

is because this key is identical to the one in reusable-tsan.yml, so let's add ubsan or something in here:

Suggested change
key: ${{ github.job }}-${{ env.IMAGE_OS_VERSION }}-${{ inputs.config_hash }}
key: ${{ github.job }}-ubsan-${{ env.IMAGE_OS_VERSION }}-${{ inputs.config_hash }}

Copy link
Member Author

@encukou encukou Jun 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ubsan is part of github.job. It's using a cache from before I added the latest commits.
I removed that cache and will restart the job. (GitHub will allow that after all the other ones finish).

- name: Install dependencies
run: |
sudo ./.github/workflows/posix-deps-apt.sh
# Install clang-20
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 20
- name: UBSAN option setup
run: |
echo "UBSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1" >> "$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"
- name: Configure ccache action
uses: hendrikmuhs/[email protected]
with:
save: ${{ github.event_name == 'push' }}
max-size: "200M"
- name: Configure CPython
run: >-
./configure
--config-cache
--with-undefined-behavior-sanitizer
--with-pydebug
- name: Set up UBSAN log after configuration
run: |
echo "UBSAN_OPTIONS=${UBSAN_OPTIONS}:log_path=${GITHUB_WORKSPACE}/ubsan_log" >> "$GITHUB_ENV"
- name: Build CPython
run: make -j4
- name: Display build info
run: make pythoninfo
- name: Tests
run: ./python -m test -j4
- name: Display UBSAN logs
if: always()
run: find "${GITHUB_WORKSPACE}" -name 'ubsan_log.*' | xargs head -n 1000
- name: Archive UBSAN logs
if: always()
uses: actions/upload-artifact@v4
with:
name: >-
ubsan-logs
path: ubsan_log.*
if-no-files-found: ignore
Loading