diff --git a/.github/workflows/buildAndRunTests.yml b/.github/workflows/buildAndRunTests.yml index d8730fb..1ee5d02 100644 --- a/.github/workflows/buildAndRunTests.yml +++ b/.github/workflows/buildAndRunTests.yml @@ -1,11 +1,11 @@ -name: ci/action verbose ctest script - +name: ci/action ctest Ubuntu v3 on: push: paths-ignore: - docs/** - '**.md' - '**.markdown' + - '**.yml' branches: [ master ] pull_request: paths-ignore: @@ -20,7 +20,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Print env run: | diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 6c1eac7..1bee4e4 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -17,6 +17,7 @@ on: - docs/** - '**.md' - '**.markdown' + - '**.yml' branches: [ master ] pull_request: paths-ignore: @@ -43,11 +44,11 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -58,7 +59,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v2 + uses: github/codeql-action/autobuild@v3 # ℹ️ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -72,4 +73,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 + uses: github/codeql-action/analyze@v3 diff --git a/.github/workflows/ctest.yml b/.github/workflows/ctest.yml index 878e26e..ffd374d 100644 --- a/.github/workflows/ctest.yml +++ b/.github/workflows/ctest.yml @@ -1,90 +1,88 @@ -name: ci/action 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" + - '**.yml' + 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: 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: 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: 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: 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: 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: 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/.github/workflows/docs.yml b/.github/workflows/docs.yml deleted file mode 100644 index e6d94a6..0000000 --- a/.github/workflows/docs.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: Publish docs via GitHub Pages to https://kjellkod.github.io/g3log/ -on: - push: - branches: - - master - - main - paths: - - "**.md" - - "mkdocs.yml" - - -jobs: - deploy: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 - with: - python-version: 3.x - - run: pip install mkdocs-material - - name: Build site - run: mkdocs build - - name: Deploy - run: mkdocs gh-deploy --force diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml new file mode 100644 index 0000000..d9c1832 --- /dev/null +++ b/.github/workflows/documentation.yml @@ -0,0 +1,31 @@ +# Locally you can try this out also with `mkdocs serve` +# Remember if doing changes that github pages, need to deploy branch gh_pages +# which points to root. +name: Dockumentation Publish v2 +on: + push: + branches: + - master +permissions: + contents: write +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Configure Git Credentials + run: | + git config user.name github-actions[bot] + git config user.email 41898282+github-actions[bot]@users.noreply.github.com + - uses: actions/setup-python@v5 + with: + python-version: 3.x + - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV + - uses: actions/cache@v4 + with: + key: mkdocs-material-${{ env.cache_id }} + path: .cache + restore-keys: | + mkdocs-material- + - run: pip install mkdocs-material + - run: mkdocs gh-deploy --force diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3834879..9456f9e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,13 +1,13 @@ -# New Code: +# New Code 1. Please support all changed functionality with unit testing. A TDD approach usually leaves a cleaner end result than writing test afterwards -# Issues: +# Issues 1. Please explain your environment in the ticket. Frequently initialization issues due to not following best practices or the documentation are the causes. Check the documentation and search previous issues before opening up a new one. 1. Don't be afraid of adding additional contexst of an old issue in case you think this will improve things for the community going forward. -# Community Driven: -G3log is community driven. Be respectful. G3log is developed and maintained without financial support, being helpful and polite will move your request and input along faster. \ No newline at end of file +# Community Driven +G3log is community driven. Be respectful. G3log is developed and maintained without financial support, being helpful and polite will move your request and input along faster. diff --git a/README.md b/README.md index 61f3403..c0cc067 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ # Welcome to g3log -### Use [kjellkod.github.io/g3log/](https://kjellkod.github.io/g3log/) for best reading / searching / navigating of g3log's documentation. +### Use [kjellkod.github.io/g3log/](https://kjellkod.github.io/g3log/) for best reading / searching / navigating of g3log's documentation G3log is an asynchronous logger with three main features: 1. Intuitive `LOG(...)` API @@ -13,7 +13,7 @@ G3log is an asynchronous logger with three main features: The super quick introduction to g3log can be seen in the steps 1 - 9 below. -For more in-depth information please see the full usage description in [g3log_usage.md](docs/g3log_usage.md).If you want to understand better the internals of g3log, then plase look at the [API.md](docs/API.md) for both high-level and deep-dive insights. +For more in-depth information please see the full usage description in [g3log_usage.md](docs/g3log_usage.md). If you want to understand better the internals of g3log, then plase look at the [API.md](docs/API.md) for both high-level and deep-dive insights. ## Experiment and try-out g3log in Github Codespaces @@ -21,14 +21,14 @@ ref: [codespaces.md](docs/codespaces.md) ## 1. Easy usage in files -Avoid deep dependency injection complexity and instead get access to the logger as easy as +Avoid deep dependency injection complexity and instead get access to the logger as easy as: ``` #include ``` ## 2. Access to streaming and print_f log call syntax -Both streaming syntax `LOG` and print_f `LOGF` syntax are available. +Both streaming syntax `LOG` and print_f `LOGF` syntax are available: ``` LOGF(INFO, "Hi log %d", 123); diff --git a/_config.yml b/_config.yml deleted file mode 100644 index c419263..0000000 --- a/_config.yml +++ /dev/null @@ -1 +0,0 @@ -theme: jekyll-theme-cayman \ No newline at end of file diff --git a/docs/API.md b/docs/API.md index 0534323..a0fceeb 100644 --- a/docs/API.md +++ b/docs/API.md @@ -1,7 +1,7 @@ [introduction](index.md) | [detailed information](g3log_usage.md) | [Configure & Build](building.md) | [**API description**](API.md) | [Custom log formatting](API_custom_formatting.md) # High Level Description of g3log -The `g3log` logger is an asynchronous, crash-safe logging library designed for C++ applications. It allows for logging messages to various sinks without blocking the main application thread. Below is a high-level overview of how the `g3log` logger works: +The `g3log` logger is an asynchronous, crash-safe logging library designed for C++ applications. It allows for logging messages to various sinks without blocking the main application thread. Below is a high-level overview of how the `g3log` logger works. ## Asynchronous Logging The logger operates on a separate thread, ensuring that the main application thread is not blocked by I/O operations when logging messages. This is achieved by using a background worker ([`LogWorker`](../src/g3log/logworker.hpp)) that queues log messages and processes them asynchronously. diff --git a/docs/index.md b/docs/index.md index 8deed8a..b8ac556 100644 --- a/docs/index.md +++ b/docs/index.md @@ -6,7 +6,7 @@ G3log is an asynchronous logger with three main features: 1. Intuitive `LOG(...)` API 2. `Design-by-contract` `CHECK(...)` functionality -3. Fatal crash handling for graceful shutdown of the logged process without loosing any log details up to the point of the crash. +3. Fatal crash handling for graceful shutdown of the logged process without loosing any log details up to the point of the crash The super quick introduction to g3log can be seen in the steps 1 - 9 below. diff --git a/example/main_sigsegv.cpp b/example/main_sigsegv.cpp index 044b747..6d3e91a 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"); } diff --git a/mkdocs.yml b/mkdocs.yml index a1d14cc..03730ec 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,8 +1,11 @@ -site_name: G3log, an asynchronous "crash-safe" logger -site_author: 'Kjell Hedström' -docs_dir: docs/ -theme: +site_name: TEST G3log, an asynchronous "crash-safe" logger +site_author: 'Kjell Hedstrom' +site_url: https://kjellkod.github.io/g3log/ +theme: name: material + +docs_dir: docs/ + nav: - Introduction to G3log: index.md - G3log usage: g3log.md