name: Check clang sanitizers on: pull_request: merge_group: #push: # branches: [ main ] workflow_dispatch: jobs: pre_job: runs-on: ubuntu-latest outputs: should_skip: ${{ steps.set_output.outputs.should_skip }} steps: - id: skip_check if: ${{ github.event_name != 'merge_group' }} uses: fkirc/skip-duplicate-actions@v5 with: # don't run on documentation changes paths_ignore: '["**/README.md", "docs/**", "guidelines/**"]' # cancel previous builds if a new commit is pushed # but never cancel main cancel_others: ${{ github.ref != 'refs/heads/main' }} - id: set_output run: | if [ "${{ github.event_name }}" = "merge_group" ]; then echo "should_skip=false" >> $GITHUB_OUTPUT else echo "should_skip=${{ steps.skip_check.outputs.should_skip }}" >> $GITHUB_OUTPUT fi run_san: name: Build and run tests runs-on: ${{ matrix.os }} needs: pre_job if: (github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch') && needs.pre_job.outputs.should_skip != 'true' env: CC: clang ASAN_OPTIONS: halt_on_error=1 UBSAN_OPTIONS: halt_on_error=1 strategy: matrix: os: [ubuntu-latest, macos-latest] sanitizer: ['undefined,address'] fail-fast: false steps: - name: Checkout Yosys uses: actions/checkout@v4 with: submodules: true persist-credentials: false - name: Setup environment uses: ./.github/actions/setup-build-env with: runs-on: ${{ matrix.os }} get-build-deps: true get-test-deps: true get-iverilog: true - name: Build shell: bash run: | make config-$CC echo 'SANITIZER = ${{ matrix.sanitizer }}' >> Makefile.conf make -j$procs - name: Log yosys-config output run: | ./yosys-config || true - name: Run tests shell: bash run: | make -j$procs vanilla-test TARGETS= EXTRA_TARGETS= - name: Report errors if: ${{ failure() }} shell: bash run: | find tests/**/*.err -print -exec cat {} \; test-sanitizers-result: runs-on: ubuntu-latest needs: - run_san if: always() && !contains(join(needs.*.result, ','), 'failure') && !contains(join(needs.*.result, ','), 'cancelled') steps: - run: echo "All good"