diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index fe0b71db..6ef5d814 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -67,7 +67,7 @@ jobs: - name: Install Packages run: | sudo apt-get update - sudo apt-get install ninja-build gcc-multilib g++-multilib libgtest-dev cmake cmake-data valgrind + sudo apt-get install ninja-build gcc-multilib g++-multilib libgtest-dev cmake cmake-data libasan5 valgrind sudo apt-get install curl jq sudo apt-get install software-properties-common sudo apt-get install python3-pip @@ -102,3 +102,16 @@ jobs: "${GITHUB_WORKSPACE}/.github/workflows/memcheck_valgrind.sh" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Build & Run memcheck Script(ASAN) + run: | + sudo rm -rf ./build + meson . build -Db_sanitize="address,undefined" -Dloaders="all" -Dsavers="tvg" -Dtests="true" -Dbindings="capi" + cd build + sudo ninja -C . install + export PATH=$PATH:~/.local/bin/ + chmod +x "${GITHUB_WORKSPACE}/.github/workflows/memcheck_asan.sh" + "${GITHUB_WORKSPACE}/.github/workflows/memcheck_asan.sh" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + diff --git a/.github/workflows/memcheck_asan.sh b/.github/workflows/memcheck_asan.sh new file mode 100755 index 00000000..b79146d0 --- /dev/null +++ b/.github/workflows/memcheck_asan.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +if [[ -z "$GITHUB_TOKEN" ]]; then + echo "The GITHUB_TOKEN is required." + exit 1 +fi + +if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then + echo "Run Address Sanitizer" + echo "meson -Db_sanitize=\"address,undefined\" -Dloaders=\"all\" -Dsavers=\"tvg\" -Dtests=\"true\" -Dbindings=\"capi\" . build" + pwd + cd ${GITHUB_WORKSPACE}/build/test + ./tvgUnitTests > memcheck_asan.txt 2>&1 + + + PAYLOAD_MEMCHECK=`cat memcheck_asan.txt` + COMMENTS_URL=$(cat $GITHUB_EVENT_PATH | jq -r .pull_request.comments_url) + + echo $COMMENTS_URL + echo "MEMCHECK errors:" + echo $PAYLOAD_MEMCHECK + + if [[ $PAYLOAD_MEMCHECK == *"runtime error:"* || $PAYLOAD_MEMCHECK == *"ERROR: AddressSanitizer:"* ]]; then + OUTPUT+=$'\n**MEMCHECK(ASAN) RESULT**:\n' + + OUTPUT+=$'\n`meson -Db_sanitize="address,undefined" -Dloaders="all" -Dsavers="tvg" -Dtests="true" -Dbindings="capi" . build`\n' + OUTPUT+=$'\n```\n' + OUTPUT+="$PAYLOAD_MEMCHECK" + OUTPUT+=$'\n```\n' + fi + + PAYLOAD=$(echo '{}' | jq --arg body "$OUTPUT" '.body = $body') + + curl -s -S -H "Authorization: token $GITHUB_TOKEN" --header "Content-Type: application/vnd.github.VERSION.text+json" --data "$PAYLOAD" "$COMMENTS_URL" +fi +