diff --git a/.github/workflows/buildAndRunTests.yml b/.github/workflows/buildAndRunTests.yml index d8730fb2..2dcca229 100644 --- a/.github/workflows/buildAndRunTests.yml +++ b/.github/workflows/buildAndRunTests.yml @@ -1,5 +1,4 @@ -name: ci/action verbose ctest script - +name: ci/action ctest Ubuntu v3 on: push: paths-ignore: @@ -20,7 +19,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Print env run: | diff --git a/.github/workflows/ctest.yml b/.github/workflows/ctest.yml index faaaae4b..65111c9f 100644 --- a/.github/workflows/ctest.yml +++ b/.github/workflows/ctest.yml @@ -1,90 +1,87 @@ -name: matrix (ubuntu, macos, windows) ctest - +name: matrix (ubuntu, macos, windows) ctes on: push: paths-ignore: - docs/** - - '**.md' - - '**.markdown' - branches: [ master ] + - "**.md" + - "**.markdown" + branches: + - master pull_request: paths-ignore: - docs/** - - '**.md' - - '**.markdown' - branches: [ master ] - + - "**.md" + - "**.markdown" + branches: + - master env: - # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) BUILD_TYPE: Release - -# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#example-only-cancel-in-progress-jobs-or-runs-for-the-current-workflow -# if you have to do a quick fix and the CI is already running your new commit will kill already -# going processes before starting new ones concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true - jobs: build: strategy: matrix: - os: [ubuntu-latest, macos-latest, windows-latest] + os: + - ubuntu-latest + - macos-latest + - windows-latest runs-on: ${{ matrix.os }} - - # The CMake configure and build commands are platform agnostic and should work equally - # well on Windows or Mac. You can convert this to a matrix build if you need - # cross-platform coverage. - # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix - #runs-on: ubuntu-latest - #runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v3 - - - name: Run Linux Build - if: matrix.os == 'ubuntu-latest' - run: echo "Ubuntu Latest" > release_ubuntu - - - name: Run Mac Build - if: matrix.os == 'macos-latest' - run: echo "MacOS Latest" > release_mac - - - name: Run Windows Build - if: matrix.os == 'windows-latest' - run: echo "Windows Latest" > release_windows + # checkout full depth of history. + - uses: actions/checkout@v4 + with: + fetch-depth: 0 - - name: Create Build Environment - # Some projects don't allow in-source building, so create a separate build directory - # We'll use this as our working directory for all subsequent commands - run: cmake -E make_directory ${{github.workspace}}/build - - - name: Configure CMake - # Use a bash shell so we can use the same syntax for environment variable - # access regardless of the host operating system - shell: bash - working-directory: ${{github.workspace}}/build - # Note the current convention is to use the -S and -B options here to specify source - # and build directories, but this is only available with CMake 3.13 and higher. - # The CMake binaries on the Github Actions machines are (as of this writing) 3.12 - run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DADD_G3LOG_UNIT_TEST=ON - - - name: Build - working-directory: ${{github.workspace}}/build - shell: bash - # Execute the build. You can specify a specific target with "--target " - run: cmake --build . --config $BUILD_TYPE + - name: Run Linux Build + if: matrix.os == 'ubuntu-latest' + run: echo "Ubuntu Latest" > release_ubuntu + + - name: Run Mac Build + if: matrix.os == 'macos-latest' + run: echo "MacOS Latest" > release_mac + + - name: Run Windows Build + if: matrix.os == 'windows-latest' + run: echo "Windows Latest" > release_windows + + - name: Create Build Environment + run: cmake -E make_directory ${{github.workspace}}/build + + - name: Configure Linux/OSX CMake + if: matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest' + shell: bash + working-directory: ${{github.workspace}}/build + run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE + -DADD_G3LOG_UNIT_TEST=ON - - name: Test - working-directory: ${{github.workspace}}/build - shell: bash - # Execute tests defined by the CMake configuration. - # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail - run: ctest -C $BUILD_TYP + - name: Configure Windows CMake + if: matrix.os == 'windows-latest' + shell: cmd + working-directory: ${{github.workspace}}/build + run: ls && cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DADD_G3LOG_UNIT_TEST=ON .. + + - name: Build Linux/OSx + working-directory: ${{github.workspace}}/build + shell: bash + run: cmake --build . --config $BUILD_TYPE - - name: Fatal Exit Example - working-directory: ${{github.workspace}}/build - if: matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest' || matrix.os == 'windows-latest' - shell: bash - # hacky / crude and effective - run: ./g3log-FATAL-sigsegv || true && echo -e "\n\n=======================\n\nverifying SIGSEGV existed in stackdump\n\n\n\n" && cat /tmp/g3log*FATAL*.log | grep "SIGSEGV" + - name: Test + working-directory: ${{github.workspace}}/build + shell: bash + run: ctest -C $BUILD_TYP + + - name: Fatal Exit Example Linux/OSX + working-directory: ${{github.workspace}}/build + if: matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest' + shell: bash + run: ./g3log-FATAL-sigsegv || true && echo -e + "\n\nverifying SIGSEGV existed in stackdump\n\n\n\n" && cat /tmp/*3log*FATAL*.log && cat /tmp/g3log*FATAL*.log | grep "SIGSEGV" + + - name: Fatal Exit Example Windows + working-directory: ${{github.workspace}}/build + if: matrix.os == 'windows-latest' + shell: bash + run: ./Release/g3log-FATAL-sigsegv.exe || true && echo -e "\n\nverifying SIGSEGV - EXCEPTION_ACCESS_VIOLATION existed in + stackdump\n\n\n\n" && cat *3log*FATAL*.log && cat *3log*FATAL*.log | grep "EXCEPTION_ACCESS_VIOLATION" diff --git a/example/main_sigsegv.cpp b/example/main_sigsegv.cpp index 044b7479..6d3e91a2 100644 --- a/example/main_sigsegv.cpp +++ b/example/main_sigsegv.cpp @@ -36,7 +36,7 @@ namespace example_fatal { LOGF(G3LOG_DEBUG, "ILLEGAL PRINTF_SYNTAX EXAMPLE. WILL GENERATE compiler warning.\n\nbadly formatted message:[Printf-type %s is the number 1 for many %s]", logging.c_str()); } - // The function above 'tryToKillWithIllegalPrintout' IS system / compiler dependent. Older compilers sometimes did NOT generate a SIGSEGV + // The function above 'tryToKillWithIllegalPrintout' IS system / compiler dependent. Older compilers sometimes did NOT generate a segmentation // fault as expected by the illegal printf-format usage. just in case we exit by zero division" void killByZeroDivision(int value) { int zero = 0; // trying to fool the compiler to automatically warn @@ -45,7 +45,7 @@ namespace example_fatal { void tryToKillWithAccessingIllegalPointer(std::unique_ptr badStringPtr) { auto badPtr = std::move(badStringPtr); - LOG(INFO) << "Function calls through a nullptr object will trigger SIGSEGV"; + LOG(INFO) << "Function calls through a nullptr object will trigger segmentation fault"; badStringPtr->append("crashing"); }