squashed many small commit messages for documentation and matrix/ci improvements

This commit is contained in:
Kjell 2024-05-23 13:18:22 -07:00
parent 095ed1cdf6
commit e3d85a58c2
12 changed files with 125 additions and 117 deletions

View File

@ -1,11 +1,11 @@
name: ci/action verbose ctest script name: ci/action ctest Ubuntu v3
on: on:
push: push:
paths-ignore: paths-ignore:
- docs/** - docs/**
- '**.md' - '**.md'
- '**.markdown' - '**.markdown'
- '**.yml'
branches: [ master ] branches: [ master ]
pull_request: pull_request:
paths-ignore: paths-ignore:
@ -20,7 +20,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v4
- name: Print env - name: Print env
run: | run: |

View File

@ -17,6 +17,7 @@ on:
- docs/** - docs/**
- '**.md' - '**.md'
- '**.markdown' - '**.markdown'
- '**.yml'
branches: [ master ] branches: [ master ]
pull_request: pull_request:
paths-ignore: paths-ignore:
@ -43,11 +44,11 @@ jobs:
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v2 uses: actions/checkout@v3
# Initializes the CodeQL tools for scanning. # Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL - name: Initialize CodeQL
uses: github/codeql-action/init@v2 uses: github/codeql-action/init@v3
with: with:
languages: ${{ matrix.language }} languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file. # 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). # 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) # If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild - name: Autobuild
uses: github/codeql-action/autobuild@v2 uses: github/codeql-action/autobuild@v3
# Command-line programs to run using the OS shell. # Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl # 📚 https://git.io/JvXDl
@ -72,4 +73,4 @@ jobs:
# make release # make release
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2 uses: github/codeql-action/analyze@v3

View File

@ -1,90 +1,88 @@
name: ci/action ctest name: matrix (ubuntu, macos, windows) ctes
on: on:
push: push:
paths-ignore: paths-ignore:
- docs/** - docs/**
- '**.md' - "**.md"
- '**.markdown' - "**.markdown"
branches: [ master ] branches:
- master
pull_request: pull_request:
paths-ignore: paths-ignore:
- docs/** - docs/**
- '**.md' - "**.md"
- '**.markdown' - "**.markdown"
branches: [ master ] - '**.yml'
branches:
- master
env: env:
# Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
BUILD_TYPE: Release 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: concurrency:
group: ${{ github.workflow }}-${{ github.ref }} group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true cancel-in-progress: true
jobs: jobs:
build: build:
strategy: strategy:
matrix: matrix:
os: [ubuntu-latest, macos-latest, windows-latest] os:
- ubuntu-latest
- macos-latest
- windows-latest
runs-on: ${{ matrix.os }} 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: steps:
- uses: actions/checkout@v3 # checkout full depth of history.
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Run Linux Build - name: Run Linux Build
if: matrix.os == 'ubuntu-latest' if: matrix.os == 'ubuntu-latest'
run: echo "Ubuntu Latest" > release_ubuntu run: echo "Ubuntu Latest" > release_ubuntu
- name: Run Mac Build - name: Run Mac Build
if: matrix.os == 'macos-latest' if: matrix.os == 'macos-latest'
run: echo "MacOS Latest" > release_mac run: echo "MacOS Latest" > release_mac
- name: Run Windows Build - name: Run Windows Build
if: matrix.os == 'windows-latest' if: matrix.os == 'windows-latest'
run: echo "Windows Latest" > release_windows run: echo "Windows Latest" > release_windows
- name: Create Build Environment - name: Create Build Environment
# Some projects don't allow in-source building, so create a separate build directory run: cmake -E make_directory ${{github.workspace}}/build
# We'll use this as our working directory for all subsequent commands
run: cmake -E make_directory ${{github.workspace}}/build
- name: Configure CMake - name: Configure Linux/OSX CMake
# Use a bash shell so we can use the same syntax for environment variable if: matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest'
# access regardless of the host operating system shell: bash
shell: bash working-directory: ${{github.workspace}}/build
working-directory: ${{github.workspace}}/build run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE
# Note the current convention is to use the -S and -B options here to specify source -DADD_G3LOG_UNIT_TEST=ON
# 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 - name: Configure Windows CMake
working-directory: ${{github.workspace}}/build if: matrix.os == 'windows-latest'
shell: bash shell: cmd
# Execute the build. You can specify a specific target with "--target <NAME>" working-directory: ${{github.workspace}}/build
run: cmake --build . --config $BUILD_TYPE run: ls && cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DADD_G3LOG_UNIT_TEST=ON ..
- name: Test - name: Build Linux/OSx
working-directory: ${{github.workspace}}/build working-directory: ${{github.workspace}}/build
shell: bash shell: bash
# Execute tests defined by the CMake configuration. run: cmake --build . --config $BUILD_TYPE
# See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
run: ctest -C $BUILD_TYP
- name: Fatal Exit Example - name: Test
working-directory: ${{github.workspace}}/build working-directory: ${{github.workspace}}/build
if: matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest' || matrix.os == 'windows-latest' shell: bash
shell: bash run: ctest -C $BUILD_TYP
# 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: 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"

View File

@ -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

31
.github/workflows/documentation.yml vendored Normal file
View File

@ -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

View File

@ -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 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. 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. 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 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. this will improve things for the community going forward.
# Community Driven: # 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. 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.

View File

@ -4,7 +4,7 @@
# Welcome to g3log # 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: G3log is an asynchronous logger with three main features:
1. Intuitive `LOG(...)` API 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. 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 ## Experiment and try-out g3log in Github Codespaces
@ -21,14 +21,14 @@ ref: [codespaces.md](docs/codespaces.md)
## 1. Easy usage in files ## 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 <g3log/g3log.hpp> #include <g3log/g3log.hpp>
``` ```
## 2. Access to streaming and print_f log call syntax ## 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); LOGF(INFO, "Hi log %d", 123);

View File

@ -1 +0,0 @@
theme: jekyll-theme-cayman

View File

@ -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) [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 # 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 ## 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. 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.

View File

@ -6,7 +6,7 @@
G3log is an asynchronous logger with three main features: G3log is an asynchronous logger with three main features:
1. Intuitive `LOG(...)` API 1. Intuitive `LOG(...)` API
2. `Design-by-contract` `CHECK(...)` functionality 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. The super quick introduction to g3log can be seen in the steps 1 - 9 below.

View File

@ -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()); 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" // fault as expected by the illegal printf-format usage. just in case we exit by zero division"
void killByZeroDivision(int value) { void killByZeroDivision(int value) {
int zero = 0; // trying to fool the compiler to automatically warn int zero = 0; // trying to fool the compiler to automatically warn
@ -45,7 +45,7 @@ namespace example_fatal {
void tryToKillWithAccessingIllegalPointer(std::unique_ptr<std::string> badStringPtr) { void tryToKillWithAccessingIllegalPointer(std::unique_ptr<std::string> badStringPtr) {
auto badPtr = std::move(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"); badStringPtr->append("crashing");
} }

View File

@ -1,8 +1,11 @@
site_name: G3log, an asynchronous "crash-safe" logger site_name: TEST G3log, an asynchronous "crash-safe" logger
site_author: 'Kjell Hedström' site_author: 'Kjell Hedstrom'
docs_dir: docs/ site_url: https://kjellkod.github.io/g3log/
theme: theme:
name: material name: material
docs_dir: docs/
nav: nav:
- Introduction to G3log: index.md - Introduction to G3log: index.md
- G3log usage: g3log.md - G3log usage: g3log.md