From 1f282ccd96d536ed59e7f3f10d824579ef6bd51a Mon Sep 17 00:00:00 2001 From: Christian Eltzschig Date: Thu, 17 Mar 2022 13:34:27 +0100 Subject: [PATCH 01/19] iox-#1294 add markdown link verification script Signed-off-by: Christian Eltzschig --- tools/ci/markdownLinkVerificator.sh | 102 ++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100755 tools/ci/markdownLinkVerificator.sh diff --git a/tools/ci/markdownLinkVerificator.sh b/tools/ci/markdownLinkVerificator.sh new file mode 100755 index 0000000000..3fe08c18bd --- /dev/null +++ b/tools/ci/markdownLinkVerificator.sh @@ -0,0 +1,102 @@ +#!/usr/bin/env bash + +ICEORYX_ROOT_PATH=$(git rev-parse --show-toplevel) + +setupTerminalColors() +{ + if [[ -t 1 ]] + then + COLOR_BLACK="\e[30m" + COLOR_RED="\e[31m" + COLOR_GREEN="\e[32m" + COLOR_YELLOW="\e[33m" + COLOR_BLUE="\e[34m" + COLOR_MAGENTA="\e[35m" + COLOR_CYAN="\e[36m" + COLOR_LIGHT_GRAY="\e[37m" + COLOR_GRAY="\e[90m" + COLOR_LIGHT_RED="\e[91m" + COLOR_LIGHT_GREEN="\e[92m" + COLOR_LIGHT_YELLOW="\e[93m" + COLOR_LIGHT_BLUE="\e[94m" + COLOR_LIGHT_MAGENTA="\e[95m" + COLOR_LIGHT_MAGENTA="\e[96m" + COLOR_WHITE="\e[97m" + COLOR_RESET="\e[0m" + else + COLOR_BLACK="" + COLOR_RED="" + COLOR_GREEN="" + COLOR_YELLOW="" + COLOR_BLUE="" + COLOR_MAGENTA="" + COLOR_CYAN="" + COLOR_LIGHT_GRAY="" + COLOR_GRAY="" + COLOR_LIGHT_RED="" + COLOR_LIGHT_GREEN="" + COLOR_LIGHT_YELLOW="" + COLOR_LIGHT_BLUE="" + COLOR_LIGHT_MAGENTA="" + COLOR_LIGHT_MAGENTA="" + COLOR_WHITE="" + COLOR_RESET="" + fi +} + +setupTerminalFormat() +{ + if [[ -t 1 ]] + then + STATUS_MSG_SPACING=" " + STATUS_MSG_POSITION="\r" + else + STATUS_MSG_SPACING="" + STATUS_MSG_POSITION="" + fi +} + +doesWebURLExist() +{ + if curl --head --silent --fail $1 2> /dev/null 1>/dev/null ; + then + echo 1 + else + echo 0 + fi +} + +isWebLink() +{ + local RESULT + RESULT=${RESULT}$(echo $1 | sed -n "s/^https:\/\/.*//p" | wc -l) + RESULT=${RESULT}$(echo $1 | sed -n "s/^http:\/\/.*//p" | wc -l) + echo $RESULT | grep 1 | wc -l +} + +setupTerminalColors +setupTerminalFormat + +for file in $(find $ICEORYX_ROOT_PATH -type f -iname "*.md" | grep -v ${ICEORYX_ROOT_PATH}/build | grep -v ${ICEORYX_ROOT_PATH}/.github) +do + FILE_DIRECTORY=$(dirname $file) + for link in $(cat $file | sed -n "s/.*\[\(.*\)](\([^)]*\)).*/\1[\2/p" | tr ' ' _) + do + LINK_NAME=$(echo $link | cut -f 1 -d '[') + LINK_VALUE=$(echo $link | cut -f 2 -d '[') + + echo -en " ${STATUS_MSG_SPACING}${COLOR_RESET}[ ${COLOR_LIGHT_BLUE}$LINK_NAME${COLOR_RESET} ] " + if [[ $(isWebLink $LINK_VALUE) == "1" ]] + then + echo -en "Verify WebLink : ${COLOR_LIGHT_BLUE}$LINK_VALUE${COLOR_RESET} " + if [[ $(doesWebURLExist $LINK_VALUE) == "1" ]] + then + echo -e "${STATUS_MSG_POSITION}<${COLOR_LIGHT_GREEN} success${COLOR_RESET} >" + else + echo -e "${STATUS_MSG_POSITION}<${COLOR_LIGHT_RED} failed${COLOR_RESET} >" + fi + else + echo bla + fi + done +done From 03431f883b0333ff83eca0733305bdc44026a897 Mon Sep 17 00:00:00 2001 From: Christian Eltzschig Date: Thu, 17 Mar 2022 20:06:55 +0100 Subject: [PATCH 02/19] iox-#1294 Add optional url link verification, handle code env Signed-off-by: Christian Eltzschig --- tools/ci/markdownLinkVerificator.sh | 160 ++++++++++++++++++++++++---- 1 file changed, 139 insertions(+), 21 deletions(-) diff --git a/tools/ci/markdownLinkVerificator.sh b/tools/ci/markdownLinkVerificator.sh index 3fe08c18bd..f25f063be9 100755 --- a/tools/ci/markdownLinkVerificator.sh +++ b/tools/ci/markdownLinkVerificator.sh @@ -1,6 +1,8 @@ #!/usr/bin/env bash ICEORYX_ROOT_PATH=$(git rev-parse --show-toplevel) +EXIT_CODE=0 +ENABLE_URL_CHECK=0 setupTerminalColors() { @@ -48,7 +50,7 @@ setupTerminalFormat() { if [[ -t 1 ]] then - STATUS_MSG_SPACING=" " + STATUS_MSG_SPACING=" " STATUS_MSG_POSITION="\r" else STATUS_MSG_SPACING="" @@ -58,7 +60,7 @@ setupTerminalFormat() doesWebURLExist() { - if curl --head --silent --fail $1 2> /dev/null 1>/dev/null ; + if curl --connect-timeout 10 --retry 5 --retry-delay 0 --retry-max-time 30 --head --silent --fail $1 2> /dev/null 1>/dev/null ; then echo 1 else @@ -74,29 +76,145 @@ isWebLink() echo $RESULT | grep 1 | wc -l } -setupTerminalColors -setupTerminalFormat +isMailLink() +{ + echo $1 | grep -E "^mailto:" | wc -l +} -for file in $(find $ICEORYX_ROOT_PATH -type f -iname "*.md" | grep -v ${ICEORYX_ROOT_PATH}/build | grep -v ${ICEORYX_ROOT_PATH}/.github) -do - FILE_DIRECTORY=$(dirname $file) - for link in $(cat $file | sed -n "s/.*\[\(.*\)](\([^)]*\)).*/\1[\2/p" | tr ' ' _) - do - LINK_NAME=$(echo $link | cut -f 1 -d '[') - LINK_VALUE=$(echo $link | cut -f 2 -d '[') +isLinkToSection() +{ + echo $1 | grep -E "^#" | wc -l +} + +isAbsolutePath() +{ + echo $1 | grep -E "^/" | wc -l +} + +printLinkFailureSource() +{ + echo -e " name: ${COLOR_LIGHT_YELLOW} $LINK_NAME ${COLOR_RESET}" + echo -e " link: ${COLOR_LIGHT_RED} $LINK${COLOR_RESET}" + echo + + EXIT_CODE=1 +} - echo -en " ${STATUS_MSG_SPACING}${COLOR_RESET}[ ${COLOR_LIGHT_BLUE}$LINK_NAME${COLOR_RESET} ] " - if [[ $(isWebLink $LINK_VALUE) == "1" ]] +checkLinkToSection() +{ + local LOCAL_LINK_VALUE=$1 + local LOCAL_FILE=$2 + + LINK=$(echo $LOCAL_LINK_VALUE | sed -n "s/^#\(.*\)/#\1/p" | tr - '.') + local LOCAL_LINK=$(echo $LINK | cut -f 2 -d '#') + if ! [[ $(cat $LOCAL_FILE | grep -iE "# $LOCAL_LINK\$" | wc -l ) == 1 ]] + then + printLinkFailureSource + fi +} + +checkLinkToUrl() +{ + if [[ $ENABLE_URL_CHECK == "1" ]] + then + LINK=$1 + if ! [[ $(doesWebURLExist $LINK) == "1" ]] then - echo -en "Verify WebLink : ${COLOR_LIGHT_BLUE}$LINK_VALUE${COLOR_RESET} " - if [[ $(doesWebURLExist $LINK_VALUE) == "1" ]] + printLinkFailureSource + fi + fi +} + +performLinkCheck() +{ + NUMBER_OF_FILES=$(find $ICEORYX_ROOT_PATH -type f -iname "*.md" | grep -v ${ICEORYX_ROOT_PATH}/build | grep -v ${ICEORYX_ROOT_PATH}/.github | wc -l) + + CURRENT_FILE=0 + for FILE in $(find $ICEORYX_ROOT_PATH -type f -iname "*.md" | grep -v ${ICEORYX_ROOT_PATH}/build | grep -v ${ICEORYX_ROOT_PATH}/.github) + do + let CURRENT_FILE=$CURRENT_FILE+1 + FILE_DIRECTORY=$(dirname $FILE) + echo [$CURRENT_FILE/$NUMBER_OF_FILES] $FILE + + OLD_IFS=$IFS + IFS=$'\n' + IS_IN_CODE_ENV="0" + + for LINE in $(cat $FILE) + do + if [[ $(echo $LINE | grep -E "^[ ]*\`\`\`" | wc -l) == "1" ]] + then + if [[ $IS_IN_CODE_ENV == "1" ]] + then + IS_IN_CODE_ENV="0" + else + IS_IN_CODE_ENV="1" + fi + fi + + if [[ $IS_IN_CODE_ENV == "1" ]] + then + continue + fi + + ## sed -e 's/[^[]`[^`]*`//g' + ## remove inline code env like `auto bla = [blubb](auto i) ..` which could be mistaken as + ## a markdown link like [linkName](linkValue) + ## + ## sed -n "s/.*\[\(.*\)](\([^)]*\)).*/\1[\2/p" + ## extract markdown links + link=$(echo $LINE | sed -e 's/[^[]`[^`]*`//g' | sed -n "s/.*\[\(.*\)](\([^)]*\)).*/\1[\2/p" | tr ' ' _) + if [[ $link == "" ]] + then + continue + fi + + LINK_NAME=$(echo $link | cut -f 1 -d '[') + LINK_VALUE=$(echo $link | cut -f 2 -d '[') + + if [[ $(isMailLink $LINK_VALUE) == "1" ]] then - echo -e "${STATUS_MSG_POSITION}<${COLOR_LIGHT_GREEN} success${COLOR_RESET} >" + continue + elif [[ $(isWebLink $LINK_VALUE) == "1" ]] + then + checkLinkToUrl $LINK_VALUE + elif [[ $(isLinkToSection $LINK_VALUE) == "1" ]] + then + checkLinkToSection $LINK_VALUE $FILE else - echo -e "${STATUS_MSG_POSITION}<${COLOR_LIGHT_RED} failed${COLOR_RESET} >" + if [[ ${isAbsolutePath} == "1" ]] + then + LINK=$LINK + else + LINK=${FILE_DIRECTORY}/${LINK_VALUE} + fi + + if [[ $(echo $LINK | grep '#' | wc -l) == "1" ]] + then + SECTION_IN_FILE=$(echo $LINK | cut -f 2 -d '#') + LINK=$(echo $LINK | cut -f 1 -d '#') + fi + + if ! [ -f $LINK ] && ! [ -d $LINK ] + then + printLinkFailureSource + continue + fi + + if ! [[ $SECTION_IN_FILE == "" ]] + then + checkLinkToSection "#$SECTION_IN_FILE" $LINK + fi + + SECTION_IN_FILE="" fi - else - echo bla - fi + done done -done +} + +setupTerminalColors +setupTerminalFormat + +performLinkCheck + +exit $EXIT_CODE From 2543ac90d8de49396f1614818abc9879fbc9c9ee Mon Sep 17 00:00:00 2001 From: Christian Eltzschig Date: Thu, 17 Mar 2022 20:41:32 +0100 Subject: [PATCH 03/19] iox-#1294 Add single file check feature Signed-off-by: Christian Eltzschig --- tools/ci/markdownLinkVerificator.sh | 153 +++++++++++++++------------- 1 file changed, 85 insertions(+), 68 deletions(-) diff --git a/tools/ci/markdownLinkVerificator.sh b/tools/ci/markdownLinkVerificator.sh index f25f063be9..df176cb1d3 100755 --- a/tools/ci/markdownLinkVerificator.sh +++ b/tools/ci/markdownLinkVerificator.sh @@ -4,6 +4,8 @@ ICEORYX_ROOT_PATH=$(git rev-parse --show-toplevel) EXIT_CODE=0 ENABLE_URL_CHECK=0 +FILE_TO_SCAN=$1 + setupTerminalColors() { if [[ -t 1 ]] @@ -94,6 +96,7 @@ isAbsolutePath() printLinkFailureSource() { echo -e " name: ${COLOR_LIGHT_YELLOW} $LINK_NAME ${COLOR_RESET}" + echo -e " line: ${COLOR_LIGHT_YELLOW} $LINE_NR ${COLOR_RESET}" echo -e " link: ${COLOR_LIGHT_RED} $LINK${COLOR_RESET}" echo @@ -125,96 +128,110 @@ checkLinkToUrl() fi } -performLinkCheck() +checkLinksInFile() { - NUMBER_OF_FILES=$(find $ICEORYX_ROOT_PATH -type f -iname "*.md" | grep -v ${ICEORYX_ROOT_PATH}/build | grep -v ${ICEORYX_ROOT_PATH}/.github | wc -l) + FILE=$1 - CURRENT_FILE=0 - for FILE in $(find $ICEORYX_ROOT_PATH -type f -iname "*.md" | grep -v ${ICEORYX_ROOT_PATH}/build | grep -v ${ICEORYX_ROOT_PATH}/.github) - do - let CURRENT_FILE=$CURRENT_FILE+1 - FILE_DIRECTORY=$(dirname $FILE) - echo [$CURRENT_FILE/$NUMBER_OF_FILES] $FILE + FILE_DIRECTORY=$(dirname $FILE) + IS_IN_CODE_ENV="0" - OLD_IFS=$IFS - IFS=$'\n' - IS_IN_CODE_ENV="0" + readarray FILE_CONTENT < $FILE + LINE_NR=0 + for LINE in "${FILE_CONTENT[@]}" + do + let LINE_NR=$LINE_NR+1 - for LINE in $(cat $FILE) - do - if [[ $(echo $LINE | grep -E "^[ ]*\`\`\`" | wc -l) == "1" ]] + if [[ $(echo $LINE | grep -E "^[ ]*\`\`\`" | wc -l) == "1" ]] + then + if [[ $IS_IN_CODE_ENV == "1" ]] then - if [[ $IS_IN_CODE_ENV == "1" ]] - then - IS_IN_CODE_ENV="0" - else - IS_IN_CODE_ENV="1" - fi + IS_IN_CODE_ENV="0" + else + IS_IN_CODE_ENV="1" fi + fi - if [[ $IS_IN_CODE_ENV == "1" ]] + if [[ $IS_IN_CODE_ENV == "1" ]] + then + continue + fi + + ## sed -e 's/[^[]`[^`]*`//g' + ## remove inline code env like `auto bla = [blubb](auto i) ..` which could be mistaken as + ## a markdown link like [linkName](linkValue) + ## + ## sed -n "s/.*\[\(.*\)](\([^)]*\)).*/\1[\2/p" + ## extract markdown links + link=$(echo $LINE | sed -e 's/[^[]`[^`]*`//g' | sed -n "s/.*\[\(.*\)](\([^)]*\)).*/\1[\2/p" | tr ' ' _) + if [[ $link == "" ]] + then + continue + fi + + LINK_NAME=$(echo $link | cut -f 1 -d '[') + LINK_VALUE=$(echo $link | cut -f 2 -d '[') + + if [[ $(isMailLink $LINK_VALUE) == "1" ]] + then + continue + elif [[ $(isWebLink $LINK_VALUE) == "1" ]] + then + checkLinkToUrl $LINK_VALUE + elif [[ $(isLinkToSection $LINK_VALUE) == "1" ]] + then + checkLinkToSection $LINK_VALUE $FILE + else + if [[ ${isAbsolutePath} == "1" ]] then - continue + LINK=$LINK + else + LINK=${FILE_DIRECTORY}/${LINK_VALUE} fi - ## sed -e 's/[^[]`[^`]*`//g' - ## remove inline code env like `auto bla = [blubb](auto i) ..` which could be mistaken as - ## a markdown link like [linkName](linkValue) - ## - ## sed -n "s/.*\[\(.*\)](\([^)]*\)).*/\1[\2/p" - ## extract markdown links - link=$(echo $LINE | sed -e 's/[^[]`[^`]*`//g' | sed -n "s/.*\[\(.*\)](\([^)]*\)).*/\1[\2/p" | tr ' ' _) - if [[ $link == "" ]] + if [[ $(echo $LINK | grep '#' | wc -l) == "1" ]] then - continue + SECTION_IN_FILE=$(echo $LINK | cut -f 2 -d '#') + LINK=$(echo $LINK | cut -f 1 -d '#') fi - LINK_NAME=$(echo $link | cut -f 1 -d '[') - LINK_VALUE=$(echo $link | cut -f 2 -d '[') - - if [[ $(isMailLink $LINK_VALUE) == "1" ]] + if ! [ -f $LINK ] && ! [ -d $LINK ] then + printLinkFailureSource continue - elif [[ $(isWebLink $LINK_VALUE) == "1" ]] - then - checkLinkToUrl $LINK_VALUE - elif [[ $(isLinkToSection $LINK_VALUE) == "1" ]] + fi + + if ! [[ $SECTION_IN_FILE == "" ]] then - checkLinkToSection $LINK_VALUE $FILE - else - if [[ ${isAbsolutePath} == "1" ]] - then - LINK=$LINK - else - LINK=${FILE_DIRECTORY}/${LINK_VALUE} - fi - - if [[ $(echo $LINK | grep '#' | wc -l) == "1" ]] - then - SECTION_IN_FILE=$(echo $LINK | cut -f 2 -d '#') - LINK=$(echo $LINK | cut -f 1 -d '#') - fi - - if ! [ -f $LINK ] && ! [ -d $LINK ] - then - printLinkFailureSource - continue - fi - - if ! [[ $SECTION_IN_FILE == "" ]] - then - checkLinkToSection "#$SECTION_IN_FILE" $LINK - fi - - SECTION_IN_FILE="" + checkLinkToSection "#$SECTION_IN_FILE" $LINK fi - done + + SECTION_IN_FILE="" + fi + done +} + +performLinkCheck() +{ + NUMBER_OF_FILES=$(find $ICEORYX_ROOT_PATH -type f -iname "*.md" | grep -v ${ICEORYX_ROOT_PATH}/build | grep -v ${ICEORYX_ROOT_PATH}/.github | wc -l) + + CURRENT_FILE=0 + for FILE in $(find $ICEORYX_ROOT_PATH -type f -iname "*.md" | grep -v ${ICEORYX_ROOT_PATH}/build | grep -v ${ICEORYX_ROOT_PATH}/.github) + do + let CURRENT_FILE=$CURRENT_FILE+1 + echo -e "[$CURRENT_FILE/$NUMBER_OF_FILES] ${COLOR_LIGHT_GREEN}$FILE${COLOR_RESET}" + + checkLinksInFile $FILE done } setupTerminalColors setupTerminalFormat -performLinkCheck +if ! [ -z $1 ] +then + checkLinksInFile $FILE_TO_SCAN +else + performLinkCheck +fi exit $EXIT_CODE From 9bf984a9187406208ded5c0951ce6dbc86196ca5 Mon Sep 17 00:00:00 2001 From: Christian Eltzschig Date: Thu, 17 Mar 2022 20:41:58 +0100 Subject: [PATCH 04/19] iox-#1294 Remove symbols for website so that links to sections are working Signed-off-by: Christian Eltzschig --- doc/website/advanced/configuration-guide.md | 6 +++--- .../installation-guide-for-contributors.md | 6 +++--- doc/website/getting-started/installation.md | 16 ++++++++-------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/doc/website/advanced/configuration-guide.md b/doc/website/advanced/configuration-guide.md index 957485fa75..ba7c61a625 100644 --- a/doc/website/advanced/configuration-guide.md +++ b/doc/website/advanced/configuration-guide.md @@ -1,6 +1,6 @@ # Configuration guide -## :material-cog: CMake switches for configuring iceoryx_posh build +## CMake switches for configuring iceoryx_posh build There are several configuration options set by default when iceoryx_posh is build. These options adjust the global maximum amount of resources like Publisher and @@ -37,7 +37,7 @@ With that change, the footprint of the management segment is reduced to ~52.7 MB For larger use cases you can increase the value to avoid that samples are dropped on the subscriber side (see also [#615](https://github.com/eclipse-iceoryx/iceoryx/issues/615)). -## :material-memory: Configuring Mempools for RouDi +## Configuring Mempools for RouDi RouDi supports several shared memory segments with different access rights, to limit the read and write access between different applications. Memory pools @@ -66,7 +66,7 @@ provides you an API for compiling your own RouDi application and is part of `ice The value for the alignment is set to 8. -### :material-file-cog: Dynamic configuration +### Dynamic configuration One way is to read a configuration dynamically during the startup of RouDi. Using the TOML Config in RouDi is not mandatory for configuring segments and diff --git a/doc/website/advanced/installation-guide-for-contributors.md b/doc/website/advanced/installation-guide-for-contributors.md index 715d61196a..e9f062afb1 100644 --- a/doc/website/advanced/installation-guide-for-contributors.md +++ b/doc/website/advanced/installation-guide-for-contributors.md @@ -1,6 +1,6 @@ # Installation guide for contributors -## :material-test-tube: Build and run tests +## Build and run tests While developing on iceoryx, you may want to know if your changes will break existing functionality or if your newly written tests will pass. For that purpose, we generate CMake targets that execute the tests. First, @@ -55,7 +55,7 @@ Let's assume you want to execute only `ServiceDescription_test` from posh_module While writing code on iceoryx you should use git hooks that automatically ensure that you follow the coding and style guidelines. See [`git-hooks`](https://github.com/eclipse-iceoryx/iceoryx/blob/master/tools/git-hooks/Readme.md). -## :fontawesome-solid-pump-soap: Use Sanitizer Scan +## Use Sanitizer Scan Due to the fact that iceoryx works a lot with system memory, it should be ensured that errors like memory leaks are not introduced. To prevent this, we use the clang toolchain which offers several tools for scanning the codebase. One of them is the @@ -97,7 +97,7 @@ This should be used only rarely and only in coordination with an iceoryx maintai the script. If you want to use the ${ICEORYX_WARNINGS} then you have to call `find_package(iceoryx_hoofs)` and `include(IceoryxPlatform)` to make use of the ${ICEORYX_SANITIZER_FLAGS}. -## :material-library: iceoryx library build +## iceoryx library build The iceoryx build consists of several libraries which have dependencies on each other. The goal is to have encapsulated library packages available so that the end-user can easily find them with the CMake command `find_package(...)`. diff --git a/doc/website/getting-started/installation.md b/doc/website/getting-started/installation.md index f1c84d4dc5..42944471ae 100644 --- a/doc/website/getting-started/installation.md +++ b/doc/website/getting-started/installation.md @@ -4,7 +4,7 @@ All iceoryx libraries are deployed as independent CMake packages. Posh is using ## Prerequisites -### :octicons-package-dependencies-16: Dependencies +### Dependencies - 64-bit hardware (e.g. x86_64 or aarch64; 32-bit hardware might work, but is not supported) - [CMake](https://cmake.org), 3.16 or later @@ -23,7 +23,7 @@ Furthermore, you have to install: - [GNU Bison](https://www.gnu.org/software/bison/manual/), 3.0.4 or later -### :material-apple: Mac OS +### Mac OS Before installing iceoryx you need to install XCode and git. Optionally, ncurses library is required for the introspection client. To install ncurses locally into your build folder follow these steps @@ -41,7 +41,7 @@ make -j12 make install ``` -### :fontawesome-brands-linux: Linux +### Linux Although we strive to be fully POSIX-compliant, we recommend using Ubuntu 18.04 and at least GCC 7.5.0 for development. @@ -53,7 +53,7 @@ sudo apt install gcc g++ cmake libacl1-dev libncurses5-dev pkg-config Additionally, there is an optional dependency to the [cpptoml](https://github.com/skystrife/cpptoml) library, which is used to parse the RouDi config file containing mempool configuration. -### :fontawesome-brands-blackberry: QNX +### QNX QNX SDP 7.0 and 7.1 are supported (shipping with gcc 5.4 and gcc 8.3 respectively). @@ -75,7 +75,7 @@ X86_64: !!! attention Please ensure that the folder `/var/lock` exist and the filesystem supports file locking. -### :fontawesome-brands-windows: Windows +### Windows In case you do not have a Windows installation, Microsoft provides free developer images from [here](https://developer.microsoft.com/en-us/windows/downloads/virtual-machines/). @@ -89,7 +89,7 @@ Either `VS Code` or `Developer Command Prompt` can be used to build iceoryx with Alternatively, `C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat` can be executed in any shell to setup all the paths for compilation. -## :material-triangle: Build with CMake +## Build with CMake !!! note Building with CMake is the preferred way, for more complex actions like a coverage scan @@ -151,7 +151,7 @@ The `CMakeLists.txt` from `iceoryx_meta` can be used to easily develop iceoryx w Please take a look at the CMake file [build_options.cmake](https://github.com/eclipse-iceoryx/iceoryx/blob/master/iceoryx_meta/build_options.cmake) to get an overview of the available build options for enabling additional features. -## :material-powershell: Build with script +## Build with script As an alternative, we provide a build-test script which we use to integrate iceoryx into our infrastructure. The intention of the script goes beyond building iceoryx, it is also used for the code coverage scan or the address-sanitizer runs on the CI. @@ -182,7 +182,7 @@ You can use the `help` argument for getting an overview of the available options !!! tip The examples can be built with `-DEXAMPLES=ON` with iceoryx_meta or by providing the `examples` argument to the build script. -## :material-robot: Build with colcon +## Build with colcon Alternatively, iceoryx can be built with [colcon](https://colcon.readthedocs.io/en/released/user/installation.html#using-debian-packages) to provide a smooth integration for ROS 2 developers. To build the iceoryx_integrationtest package one requires a minimal [ROS 2 installation](https://docs.ros.org/en/foxy/Installation/Linux-Install-Debians.html). From 6a1578293f696b6ea04aea2c01a42b6f05a0cd50 Mon Sep 17 00:00:00 2001 From: Christian Eltzschig Date: Thu, 17 Mar 2022 20:47:40 +0100 Subject: [PATCH 05/19] iox-#1294 Add hint to correct link Signed-off-by: Christian Eltzschig --- tools/ci/markdownLinkVerificator.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/ci/markdownLinkVerificator.sh b/tools/ci/markdownLinkVerificator.sh index df176cb1d3..645c8f7a8d 100755 --- a/tools/ci/markdownLinkVerificator.sh +++ b/tools/ci/markdownLinkVerificator.sh @@ -197,6 +197,10 @@ checkLinksInFile() if ! [ -f $LINK ] && ! [ -d $LINK ] then printLinkFailureSource + + POSSIBLE_ALTERNATIVE=$(find $ICEORYX_ROOT_PATH -type f -iname $(basename $LINK)) + echo -e "Is this the file you are looking for: ${COLOR_LIGHT_BLUE}$POSSIBLE_ALTERNATIVE${COLOR_RESET}" + echo continue fi From 61717b224c547a62e2650850320bafff9e146b83 Mon Sep 17 00:00:00 2001 From: Christian Eltzschig Date: Fri, 18 Mar 2022 01:35:41 +0100 Subject: [PATCH 06/19] iox-#1264 Script cleanup, exclude .git directory from markdown checks Signed-off-by: Christian Eltzschig --- ...icator.sh => markdown-link-verificator.sh} | 113 +++++++++--------- 1 file changed, 54 insertions(+), 59 deletions(-) rename tools/ci/{markdownLinkVerificator.sh => markdown-link-verificator.sh} (69%) diff --git a/tools/ci/markdownLinkVerificator.sh b/tools/ci/markdown-link-verificator.sh similarity index 69% rename from tools/ci/markdownLinkVerificator.sh rename to tools/ci/markdown-link-verificator.sh index 645c8f7a8d..ab076367a2 100755 --- a/tools/ci/markdownLinkVerificator.sh +++ b/tools/ci/markdown-link-verificator.sh @@ -2,13 +2,13 @@ ICEORYX_ROOT_PATH=$(git rev-parse --show-toplevel) EXIT_CODE=0 -ENABLE_URL_CHECK=0 +ENABLE_URL_CHECK=1 FILE_TO_SCAN=$1 setupTerminalColors() { - if [[ -t 1 ]] + if [[ -t 1 ]] ## output to console, we want colors! then COLOR_BLACK="\e[30m" COLOR_RED="\e[31m" @@ -27,7 +27,7 @@ setupTerminalColors() COLOR_LIGHT_MAGENTA="\e[96m" COLOR_WHITE="\e[97m" COLOR_RESET="\e[0m" - else + else ## output into file, no colors and escape codes! COLOR_BLACK="" COLOR_RED="" COLOR_GREEN="" @@ -48,18 +48,6 @@ setupTerminalColors() fi } -setupTerminalFormat() -{ - if [[ -t 1 ]] - then - STATUS_MSG_SPACING=" " - STATUS_MSG_POSITION="\r" - else - STATUS_MSG_SPACING="" - STATUS_MSG_POSITION="" - fi -} - doesWebURLExist() { if curl --connect-timeout 10 --retry 5 --retry-delay 0 --retry-max-time 30 --head --silent --fail $1 2> /dev/null 1>/dev/null ; @@ -95,20 +83,20 @@ isAbsolutePath() printLinkFailureSource() { - echo -e " name: ${COLOR_LIGHT_YELLOW} $LINK_NAME ${COLOR_RESET}" - echo -e " line: ${COLOR_LIGHT_YELLOW} $LINE_NR ${COLOR_RESET}" - echo -e " link: ${COLOR_LIGHT_RED} $LINK${COLOR_RESET}" + echo -e " name: ${COLOR_LIGHT_YELLOW} $LINK_NAME ${COLOR_RESET}" + echo -e " line: ${COLOR_LIGHT_YELLOW} $LINE_NR ${COLOR_RESET}" + echo -e " link: ${COLOR_LIGHT_RED} $LINK${COLOR_RESET}" echo EXIT_CODE=1 } -checkLinkToSection() +verifyLinkToSection() { local LOCAL_LINK_VALUE=$1 local LOCAL_FILE=$2 - LINK=$(echo $LOCAL_LINK_VALUE | sed -n "s/^#\(.*\)/#\1/p" | tr - '.') + LINK=$(echo $LOCAL_LINK_VALUE | sed -n "s/^#\(.*\)/#\1/p" | sed "s/\./\\\./g" | tr - '.') local LOCAL_LINK=$(echo $LINK | cut -f 2 -d '#') if ! [[ $(cat $LOCAL_FILE | grep -iE "# $LOCAL_LINK\$" | wc -l ) == 1 ]] then @@ -116,7 +104,7 @@ checkLinkToSection() fi } -checkLinkToUrl() +verifyLinkToUrl() { if [[ $ENABLE_URL_CHECK == "1" ]] then @@ -128,6 +116,42 @@ checkLinkToUrl() fi } +verifyLinkToFile() +{ + LINK_VALUE=$1 + + if [[ $(isAbsolutePath $LINK_VALUE) == "1" ]] + then + LINK=${ICEORYX_ROOT_PATH}/${LINK_VALUE} + else + LINK=${FILE_DIRECTORY}/${LINK_VALUE} + fi + + if [[ $(echo $LINK | grep '#' | wc -l) == "1" ]] + then + SECTION_IN_FILE=$(echo $LINK | cut -f 2 -d '#') + LINK=$(echo $LINK | cut -f 1 -d '#') + fi + + if ! [ -f $LINK ] && ! [ -d $LINK ] + then + printLinkFailureSource + + POSSIBLE_ALTERNATIVE=$(find $ICEORYX_ROOT_PATH -type f -iname $(basename $LINK)) + echo -e "Is this the file you are looking for: ${COLOR_LIGHT_BLUE}$POSSIBLE_ALTERNATIVE${COLOR_RESET}" + echo + SECTION_IN_FILE="" + continue + fi + + if ! [[ $SECTION_IN_FILE == "" ]] + then + verifyLinkToSection "#$SECTION_IN_FILE" $LINK + fi + + SECTION_IN_FILE="" +} + checkLinksInFile() { FILE=$1 @@ -162,64 +186,36 @@ checkLinksInFile() ## ## sed -n "s/.*\[\(.*\)](\([^)]*\)).*/\1[\2/p" ## extract markdown links - link=$(echo $LINE | sed -e 's/[^[]`[^`]*`//g' | sed -n "s/.*\[\(.*\)](\([^)]*\)).*/\1[\2/p" | tr ' ' _) - if [[ $link == "" ]] + MARKDOWN_LINK=$(echo $LINE | sed -e 's/[^[]`[^`]*`//g' | sed -n "s/.*\[\(.*\)](\([^)]*\)).*/\1[\2/p" | tr ' ' _) + if [[ $MARKDOWN_LINK == "" ]] then continue fi - LINK_NAME=$(echo $link | cut -f 1 -d '[') - LINK_VALUE=$(echo $link | cut -f 2 -d '[') + LINK_NAME=$(echo $MARKDOWN_LINK | cut -f 1 -d '[') + LINK_VALUE=$(echo $MARKDOWN_LINK | cut -f 2 -d '[') if [[ $(isMailLink $LINK_VALUE) == "1" ]] then continue elif [[ $(isWebLink $LINK_VALUE) == "1" ]] then - checkLinkToUrl $LINK_VALUE + verifyLinkToUrl $LINK_VALUE elif [[ $(isLinkToSection $LINK_VALUE) == "1" ]] then - checkLinkToSection $LINK_VALUE $FILE + verifyLinkToSection $LINK_VALUE $FILE else - if [[ ${isAbsolutePath} == "1" ]] - then - LINK=$LINK - else - LINK=${FILE_DIRECTORY}/${LINK_VALUE} - fi - - if [[ $(echo $LINK | grep '#' | wc -l) == "1" ]] - then - SECTION_IN_FILE=$(echo $LINK | cut -f 2 -d '#') - LINK=$(echo $LINK | cut -f 1 -d '#') - fi - - if ! [ -f $LINK ] && ! [ -d $LINK ] - then - printLinkFailureSource - - POSSIBLE_ALTERNATIVE=$(find $ICEORYX_ROOT_PATH -type f -iname $(basename $LINK)) - echo -e "Is this the file you are looking for: ${COLOR_LIGHT_BLUE}$POSSIBLE_ALTERNATIVE${COLOR_RESET}" - echo - continue - fi - - if ! [[ $SECTION_IN_FILE == "" ]] - then - checkLinkToSection "#$SECTION_IN_FILE" $LINK - fi - - SECTION_IN_FILE="" + verifyLinkToFile $LINK_VALUE fi done } performLinkCheck() { - NUMBER_OF_FILES=$(find $ICEORYX_ROOT_PATH -type f -iname "*.md" | grep -v ${ICEORYX_ROOT_PATH}/build | grep -v ${ICEORYX_ROOT_PATH}/.github | wc -l) + NUMBER_OF_FILES=$(find $ICEORYX_ROOT_PATH -type f -iname "*.md" | grep -v ${ICEORYX_ROOT_PATH}/build | grep -v ${ICEORYX_ROOT_PATH}/.github | grep -v ${ICEORYX_ROOT_PATH}/.git | wc -l) CURRENT_FILE=0 - for FILE in $(find $ICEORYX_ROOT_PATH -type f -iname "*.md" | grep -v ${ICEORYX_ROOT_PATH}/build | grep -v ${ICEORYX_ROOT_PATH}/.github) + for FILE in $(find $ICEORYX_ROOT_PATH -type f -iname "*.md" | grep -v ${ICEORYX_ROOT_PATH}/build | grep -v ${ICEORYX_ROOT_PATH}/.github | grep -v ${ICEORYX_ROOT_PATH}/.git) do let CURRENT_FILE=$CURRENT_FILE+1 echo -e "[$CURRENT_FILE/$NUMBER_OF_FILES] ${COLOR_LIGHT_GREEN}$FILE${COLOR_RESET}" @@ -229,7 +225,6 @@ performLinkCheck() } setupTerminalColors -setupTerminalFormat if ! [ -z $1 ] then From 80c5a7e2992bc3c1941f2267160e7d03c43c48d6 Mon Sep 17 00:00:00 2001 From: Christian Eltzschig Date: Fri, 18 Mar 2022 01:35:59 +0100 Subject: [PATCH 07/19] iox-#1264 Adjust local links Signed-off-by: Christian Eltzschig --- CONTRIBUTING.md | 2 +- doc/design/draft/service-discovery.md | 4 ++-- doc/website/concepts/qos-policies.md | 2 +- doc/website/getting-started/overview.md | 13 ++++++------- doc/website/getting-started/what-is-iceoryx.md | 10 +++++----- iceoryx_examples/callbacks/README.md | 2 +- iceoryx_examples/callbacks_in_c/README.md | 2 +- 7 files changed, 17 insertions(+), 18 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c27af212dd..3bb8bf5698 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -184,7 +184,7 @@ All new code should follow the folder structure. We use [Google test](https://github.com/google/googletest) for our unit and integration tests. We require compatibility with the version 1.10.0. -Have a look at our [best practice guidelines](./doc/website/advanced/best-practice-for-testing.md) for writing tests and +Have a look at our [best practice guidelines](./doc/website/concepts/best-practice-for-testing.md) for writing tests and [installation guide for contributors](./doc/website/advanced/installation-guide-for-contributors.md#build-and-run-tests) for building them. ### Unit tests (aka module tests) diff --git a/doc/design/draft/service-discovery.md b/doc/design/draft/service-discovery.md index 97a774fcc1..a3f36dc603 100644 --- a/doc/design/draft/service-discovery.md +++ b/doc/design/draft/service-discovery.md @@ -74,9 +74,9 @@ Create a new publisher in RouDi which sends a `ServiceRegistryTopic`. This publi change in the service registry and to transmit the service discovery registry. The complete old service registry (saved locally) would be compared to the new service registry in a new class, extending the public user API. -![overview diagram](../website/images/overview-alternative-d.svg) +![overview diagram](../../website/images/overview-alternative-d.svg) -![sequence diagram](../website/images/sequence-diagram-alternative-d.svg) +![sequence diagram](../../website/images/sequence-diagram-alternative-d.svg) Pro: diff --git a/doc/website/concepts/qos-policies.md b/doc/website/concepts/qos-policies.md index 3dfe1a5f9e..e741465f24 100644 --- a/doc/website/concepts/qos-policies.md +++ b/doc/website/concepts/qos-policies.md @@ -54,7 +54,7 @@ The three most important settings are: 2. Multiple publishers after the publisher called `stopOffer()` or is removed The last n samples will never be received since they vanished. An arbitrary number of samples or nothing is received. - For more information about the options see the corresponding example [`iceoptions`](iceoptions.md). + For more information about the options see the corresponding example [`iceoptions`](../examples/iceoptions.md). !!! info If the `PublisherOptions::historyCapacity` is larger than `SubscriberOptions::queueCapacity` and blocking behaviour diff --git a/doc/website/getting-started/overview.md b/doc/website/getting-started/overview.md index d235f329ce..a9d2364378 100644 --- a/doc/website/getting-started/overview.md +++ b/doc/website/getting-started/overview.md @@ -58,8 +58,7 @@ and exhaust memory. We have to handle this potential error since the expected cl attached. This means we get a warning (or an error when build in strict mode) when we don't handle it. We could also explicitly discard it with `IOX_DISCARD_RESULT` which is discouraged. If you want to know more about `expected`, take a look at -[How optional and error values are returned in iceoryx](how-optional-and-error-values-are-returned-in-iceoryx.md). - +[How optional and error values are returned in iceoryx](../concepts/how-optional-and-error-values-are-returned-in-iceoryx.md). Let's create a corresponding subscriber. ```cpp @@ -67,8 +66,8 @@ iox::popo::Subscriber subscriber({"Group", "Instance", "CounterTop ``` Now we can use the subscriber to receive data. For simplicity, we assume that we periodically check for new data. It -is also possible to explicitly wait for data using the [WaitSet](waitset.md) or the [Listener](callbacks.md). The -code to receive the data is the same, the only difference is the way we wake up before checking for data. +is also possible to explicitly wait for data using the [WaitSet](../waitset.md) or +the [Listener](../callbacks.md). The code to receive the data is the same, the only difference is the way we wake up before checking for data. ```cpp while (keepRunning) @@ -325,12 +324,12 @@ For more information about the Listener see our ## API The API is offered in two languages, C++ and C. Detailed information can be found in the -[C++ example](https://github.com/eclipse-iceoryx/iceoryx/blob/master/iceoryx_examples/icedelivery) and -[C example](https://github.com/eclipse-iceoryx/iceoryx/blob/master/iceoryx_examples/icedelivery_in_c). +[C++ example](../examples/icedelivery.md) and +[C example](../examples/icedelivery_in_c.md). Many parts of the C++ API follow a functional programming approach which is less error-prone. This requires using the monadic types `cxx::expected` and `cxx::optional` which are introduced -[here](how-optional-and-error-values-are-returned-in-iceoryx.md). +[here](../concepts/how-optional-and-error-values-are-returned-in-iceoryx.md). With the C++ API, we distinguish between the `typed API` and the `untyped API`. In the typed API, the underlying data type is made apparent by typed pointers or references to some data type T (often a template parameter). This allows diff --git a/doc/website/getting-started/what-is-iceoryx.md b/doc/website/getting-started/what-is-iceoryx.md index cec488d31f..59b194ee6d 100644 --- a/doc/website/getting-started/what-is-iceoryx.md +++ b/doc/website/getting-started/what-is-iceoryx.md @@ -25,7 +25,7 @@ APIs in [ROS 2](https://www.ros.org/) and [AUTOSAR Adaptive](https://www.autosar On modern processors iceoryx has a latency of less than 1 ยตs for transferring a message. And the best message is that this latency is constant as size doesn't matter. Want to give it a try? Then have a look at our -[iceperf example](iceperf.md) after having made the first steps. +[iceperf example](../examples/iceperf.md) after having made the first steps. ## Flexible @@ -34,8 +34,8 @@ are the next ones on the list. The typed C++ API is the most comfortable when yo on the user side. The untyped C++ API and the C API provide a data agnostic interface that is often preferred when integrating iceoryx as shared memory backbone into a bigger framework. -The APIs support polling access and event-driven interactions with the [WaitSet](../overview/#waitset) and -[Listener](../overview/#listener). Applications can be started and stopped flexibly as there is a service discovery +The APIs support polling access and event-driven interactions with the [WaitSet](overview.md#waitset) and +[Listener](overview.md#listener). Applications can be started and stopped flexibly as there is a service discovery behind the scenes that dynamically connects matching communication entities. That iceoryx has the right set of features can be seen from the already existing integrations in middleware and @@ -52,7 +52,7 @@ design and implementation of features. The usage of heap, exceptions and any und to increase the predictability. Instead a custom memory allocation is being used, based on static memory pools. Additionally, the handling of return values and error cases was inspired by upcoming C++ features and other languages like Rust (details can be found -[here](how-optional-and-error-values-are-returned-in-iceoryx.md)). +[here](../concepts/how-optional-and-error-values-are-returned-in-iceoryx.md)). As different processes are operating on shared data structures, avoiding deadlocks is becoming all the more important. iceoryx uses lock-free data structures like the multi-producer multi-consumer (MPMC) queue that was written portably @@ -61,4 +61,4 @@ thanks to modern C++. The tools available for automotive-compliant software development are always one or two releases behind the latest C++ standard. This fact, combined with our already mentioned constraints, led to a bunch of STL like C++ classes that have the goal to combine modern C++ with the reliability needed for the domains iceoryx is used in. They can be found in -the iceoryx hoofs which are introduced [here](iceoryx_hoofs.md). +the iceoryx hoofs which are introduced [here](../advanced/iceoryx_hoofs.md). diff --git a/iceoryx_examples/callbacks/README.md b/iceoryx_examples/callbacks/README.md index 8093f65c67..1c75e6f8d5 100644 --- a/iceoryx_examples/callbacks/README.md +++ b/iceoryx_examples/callbacks/README.md @@ -220,7 +220,7 @@ You just have to provide a reference to a value as additional argument in the `a which is then provided as argument in your callback. One of the use cases is to get access to members and methods of an object inside a static method which we demonstrate here. -This example is identical to the [ice_callbacks_subscriber.cpp](#ice_callbacks_subscribercpp) +This example is identical to the [ice_callbacks_subscriber.cpp](#ice_callbacks_subscriber.cpp) one, except that we left out the cyclic heartbeat trigger. The key difference is that the listener is now a class member and in every callback we would like to change some member variables. For this we require an additional pointer to the object diff --git a/iceoryx_examples/callbacks_in_c/README.md b/iceoryx_examples/callbacks_in_c/README.md index b1b8b712c5..a70aeeb191 100644 --- a/iceoryx_examples/callbacks_in_c/README.md +++ b/iceoryx_examples/callbacks_in_c/README.md @@ -218,7 +218,7 @@ within the callback. To facilitate this we provide the functions called additional void pointer for the callback as second argument. The following example is a simplified version of the -[ice_c_callbacks_subscriber.c](#ice_c_callbacks_subscriberc) example where we +[ice_c_callbacks_subscriber.c](#ice_c_callbacks_subscriber.c) example where we removed the cyclic heartbeat trigger. The key difference is that we have a local variable called `counterService` in which we store the `leftCache` and `rightCache` and we let the callback update that variable directly. From f684d70fffbdf3209940b861ac1764cccfb9b72f Mon Sep 17 00:00:00 2001 From: Christian Eltzschig Date: Fri, 18 Mar 2022 02:47:38 +0100 Subject: [PATCH 08/19] iox-#1294 Skip certain github links since they tend to fail sporadically, prefer relative/local links over github url Signed-off-by: Christian Eltzschig --- tools/ci/markdown-link-verificator.sh | 31 ++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/tools/ci/markdown-link-verificator.sh b/tools/ci/markdown-link-verificator.sh index ab076367a2..919a52c79e 100755 --- a/tools/ci/markdown-link-verificator.sh +++ b/tools/ci/markdown-link-verificator.sh @@ -1,9 +1,18 @@ #!/usr/bin/env bash +## IMPORTANT +# when an URL contains ( ) please replace them with the code %28 %29 otherwise +# the parser will deliver a false positive + ICEORYX_ROOT_PATH=$(git rev-parse --show-toplevel) EXIT_CODE=0 + ENABLE_URL_CHECK=1 +# skips github issue and compare links since they tend to fail quiet often +# without reason +SKIP_GITHUB_URL_CHECK=1 + FILE_TO_SCAN=$1 setupTerminalColors() @@ -109,6 +118,26 @@ verifyLinkToUrl() if [[ $ENABLE_URL_CHECK == "1" ]] then LINK=$1 + + if [[ $SKIP_GITHUB_URL_CHECK == "1" ]] + then + if [[ $(echo $LINK | grep "https://github.com/eclipse-iceoryx/iceoryx/compare" | wc -l) == "1" ]] || + [[ $(echo $LINK | grep "https://github.com/eclipse-iceoryx/iceoryx/issue" | wc -l) == "1" ]] + then + return + fi + fi + + #### [[ $(echo $LINK | grep "https://github.com/eclipse-iceoryx/iceoryx/tree" | wc -l) == "1" ]] || + + if [[ $(echo $LINK | grep "https://github.com/eclipse-iceoryx/iceoryx/blob" | wc -l) == "1" ]] + then + echo -e "${COLOR_LIGHT_RED}Please do not use a github url when also a relative path works!${COLOR_RESET}" + echo -e "${COLOR_LIGHT_RED}Relative paths ensure that the tag/branch of link source and destination is equal.${COLOR_RESET}" + printLinkFailureSource + return + fi + if ! [[ $(doesWebURLExist $LINK) == "1" ]] then printLinkFailureSource @@ -141,7 +170,7 @@ verifyLinkToFile() echo -e "Is this the file you are looking for: ${COLOR_LIGHT_BLUE}$POSSIBLE_ALTERNATIVE${COLOR_RESET}" echo SECTION_IN_FILE="" - continue + return fi if ! [[ $SECTION_IN_FILE == "" ]] From 0ce6547afc09e545b4b550a6fc78eb2b47202e45 Mon Sep 17 00:00:00 2001 From: Christian Eltzschig Date: Fri, 18 Mar 2022 02:47:52 +0100 Subject: [PATCH 09/19] iox-#1294 Correct links Signed-off-by: Christian Eltzschig --- CONTRIBUTING.md | 9 ++--- QUALITY_DECLARATION.md | 40 +++++++++---------- doc/aspice_swe3_4/swe_docu_guidelines.md | 2 +- doc/design/README.md | 2 +- doc/design/listener.md | 2 +- doc/shared-memory-communication.md | 2 +- doc/website/FAQ.md | 4 +- doc/website/advanced/configuration-guide.md | 8 ++-- .../installation-guide-for-contributors.md | 2 +- doc/website/concepts/architecture.md | 4 +- .../concepts/best-practice-for-testing.md | 2 +- ...nd-error-values-are-returned-in-iceoryx.md | 10 ++--- doc/website/getting-started/installation.md | 2 +- doc/website/getting-started/overview.md | 8 ++-- doc/website/release-notes/iceoryx-v1-0-0.md | 2 +- iceoryx_examples/complexdata/README.md | 2 +- iceoryx_examples/ice_access_control/README.md | 2 +- iceoryx_examples/icedelivery_in_c/README.md | 6 +-- iceoryx_examples/icediscovery/README.md | 2 +- iceoryx_examples/request_response/README.md | 2 +- .../request_response_in_c/README.md | 4 +- iceoryx_hoofs/README.md | 4 +- 22 files changed, 58 insertions(+), 63 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3bb8bf5698..54b899e6f3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -58,7 +58,7 @@ Please make sure you have: 7. You open your pull request towards the base branch `master` 8. Link the pull request to the according GitHub issue and set the label accordingly -**NOTE:** For support while developing you can use little helper scripts, see [git-hooks](https://github.com/eclipse-iceoryx/iceoryx/blob/master/tools/git-hooks/Readme.md). +**NOTE:** For support while developing you can use little helper scripts, see [git-hooks](./tools/git-hooks/Readme.md). ## Branching strategy @@ -105,7 +105,7 @@ codebase follows these rules, things are work in progress. 2) **No exceptions are allowed**, all function and methods need to have `noexcept` in their signature 3) **No undefined behavior**, zero-cost abstract is not feasible in high safety environments 4) **Use C++14** -5) **[Rule of Five](https://en.wikipedia.org/wiki/Rule_of_three_(C%2B%2B_programming))**, if there is a non-default +5) **[Rule of Five](https://en.cppreference.com/w/cpp/language/rule_of_three)**, if there is a non-default destructor needed, the rule of five has to be applied 6) **[STL](https://en.wikipedia.org/wiki/Standard_Template_Library)**, we aim to be compatible towards the STL, but our code may contain additions which are not compatible with the STL (e.g. `iox::cxx::vector::emplace_back()` @@ -115,7 +115,7 @@ codebase follows these rules, things are work in progress. shall not be propagated via an `iox::cxx::expected` 9) **Not more than two-level nested namespaces**, three-level nested namespace can be used sparsely -See [error-handling.md](https://github.com/eclipse-iceoryx/iceoryx/blob/master/doc/design/error-handling.md) for additional +See [error-handling.md](./doc/design/error-handling.md) for additional information about logging and error handling. ### Naming conventions @@ -295,9 +295,6 @@ contact one of the maintainers, if you're interested in getting access. Don't be afraid if you don't have Axivion available. As we want to make it easy for developers to contribute, please raise a pull request and one of the maintainers will provided you access to the [dashboard](https://iceoryx-axivion.apex.ai/). -As an alternative it is also possible to use Perforce's -[Helix QAC++](https://www.perforce.com/products/helix-qac) to perform a static-code analysis. - ### Header Each source file needs to have this header: diff --git a/QUALITY_DECLARATION.md b/QUALITY_DECLARATION.md index 141726d85f..df31fabf11 100644 --- a/QUALITY_DECLARATION.md +++ b/QUALITY_DECLARATION.md @@ -6,7 +6,7 @@ The packages `iceoryx_hoofs`, `iceoryx_posh` and `iceoryx_binding_c` claim to be Below are the rationales, notes, and caveats for this claim, organized by each requirement listed in the [Package Requirements for Quality Level 2 in REP-2004](https://www.ros.org/reps/rep-2004.html). -See the [Readme](https://github.com/eclipse-iceoryx/iceoryx#quality-levels--platforms) for a full list of the quality levels of iceoryx components and [Contributing Guide](https://github.com/eclipse-iceoryx/iceoryx/blob/master/CONTRIBUTING.md#quality-levels) for a description of the quality levels. +See the [Readme](README.md#quality-levels--platforms) for a full list of the quality levels of iceoryx components and [Contributing Guide](./CONTRIBUTING.md#quality-levels) for a description of the quality levels. ## Version Policy [1] @@ -17,7 +17,7 @@ Changes for MINOR releases are API compatible and ideally ABI stable if not clea A similar format is prescribed by the Eclipse Foundation in the [Release Handbook](https://www.eclipse.org/projects/handbook/#release). -On Git, the tags have a `v` prefix before the version numbers. A [release script](https://github.com/eclipse-iceoryx/iceoryx/blob/master/tools/scripts/iceoryx_release.sh) shall ensure that version numbers are kept consistent for all packages. +On Git, the tags have a `v` prefix before the version numbers. A [release script](./tools/scripts/iceoryx_release.sh) shall ensure that version numbers are kept consistent for all packages. ### Version Stability [1.ii] @@ -55,8 +55,8 @@ It is planned to build and test the changes on the ROS CI for early detection of ### Change Requests [2.i] -All changes in the codebase require a Pull-Request. It is mandatory to link the Pull-Request to a corresponding [issue ticket](https://github.com/eclipse-iceoryx/iceoryx/blob/master/CONTRIBUTING.md#feature-request-and-bugs) on GitHub to ensure traceability. -The contributor and reviewer are required to fill out a [Pull-Request Template](https://github.com/eclipse-iceoryx/iceoryx/blob/master/.github/PULL_REQUEST_TEMPLATE.md) before merging. +All changes in the codebase require a Pull-Request. It is mandatory to link the Pull-Request to a corresponding [issue ticket](./CONTRIBUTING.md#feature-request-and-bugs) on GitHub to ensure traceability. +The contributor and reviewer are required to fill out a [Pull-Request Template](./.github/PULL_REQUEST_TEMPLATE.md) before merging. ### Contributor Origin [2.ii] @@ -89,13 +89,13 @@ It is required to create/modify the Doxygen/design and user documentation within ### Feature Documentation [3.i] -The documentation of the main iceoryx features (sending, receiving data) can be found in the [overview](https://iceoryx.io/latest/getting-started/overview/) and [iceoryx examples](https://iceoryx.io/latest/getting-started/examples/) including a user-friendly description on how to use the iceoryx API. -The [configuration guide](https://iceoryx.io/latest/advanced/configuration-guide/) completes the documentation on how to use iceoryx. +The documentation of the main iceoryx features (sending, receiving data) can be found in the [overview](./doc/website/getting-started/overview.md) and [iceoryx examples](./iceoryx_examples) including a user-friendly description on how to use the iceoryx API. +The [configuration guide](./doc/website/advanced/configuration-guide.md) completes the documentation on how to use iceoryx. -Detailed technical documentation about iceoryx features can be found in the [design document](https://github.com/eclipse-iceoryx/iceoryx/tree/master/doc/design) section with descriptions and diagrams about internal mechanisms of iceoryx. +Detailed technical documentation about iceoryx features can be found in the [design document](./doc/design) section with descriptions and diagrams about internal mechanisms of iceoryx. -For new features, it is recommended to first create a design document, see the [Contribution Guidelines](https://github.com/eclipse-iceoryx/iceoryx/blob/master/CONTRIBUTING.md#feature-request-and-bugs) for more information. -Diagrams in feature descriptions need to be consistently generated with [PlantUML](https://github.com/eclipse-iceoryx/iceoryx/tree/master/doc/design#design-documents). +For new features, it is recommended to first create a design document, see the [Contribution Guidelines](./CONTRIBUTING.md#feature-request-and-bugs) for more information. +Diagrams in feature descriptions need to be consistently generated with [PlantUML](./doc/design/README.md#add-diagrams-using-plantuml). Currently there is ongoing work to complete the documentation of existing features to reach quality level 1. @@ -106,32 +106,32 @@ The public API is documented in form of Doxygen comments and available as API re ### License [3.iii] The license for Eclipse iceoryx is the Apache License 2.0, and each code file includes a license statement. -The full license text is available in the [`LICENSE`](https://github.com/eclipse-iceoryx/iceoryx/blob/master/LICENSE) file. -The project includes a [`NOTICE`](https://github.com/eclipse-iceoryx/iceoryx/blob/master/NOTICE.md) with links to more information about these licenses. +The full license text is available in the [`LICENSE`](./LICENSE) file. +The project includes a [`NOTICE`](./NOTICE.md) with links to more information about these licenses. There is some third-party content included with Eclipse iceoryx which is licensed as MIT or New BSD. -Details can also be found in the included [`NOTICE`](https://github.com/eclipse-iceoryx/iceoryx/blob/master/NOTICE.md#third-party-dependencies) document. +Details can also be found in the included [`NOTICE`](./NOTICE.md#third-party-dependencies) document. ### Copyright Statement [3.iv] -Each source code file in Eclipse iceoryx has a copyright header that needs to follow this [style](https://github.com/eclipse-iceoryx/iceoryx/blob/master/CONTRIBUTING.md#header). +Each source code file in Eclipse iceoryx has a copyright header that needs to follow this [style](./CONTRIBUTING.md#header). A CI job ensures by checking with `ament_copyright` that all files comply with this rule. ## Testing [4] -Every iceoryx package has a `test` folder that contains subfolders for [module- and/or integrationtests](https://github.com/eclipse-iceoryx/iceoryx/blob/master/CONTRIBUTING.md#testing) written based on the Google test framework. All tests are running on the CI for every Pull-Request for all supported platforms and are contained in the master branch. +Every iceoryx package has a `test` folder that contains subfolders for [module- and/or integrationtests](./CONTRIBUTING.md#testing) written based on the Google test framework. All tests are running on the CI for every Pull-Request for all supported platforms and are contained in the master branch. Currently, due to limited support on Windows, there are some exclusions for testing on the CI. ### Feature Testing [4.i] -The features of iceoryx are tested in the [iceoryx_integrationtest](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_integrationtest) package. Using `launch_test`, tests are executed on system-level to ensure that the iceoryx packages are functional and the Public API works according to specification. +The features of iceoryx are tested in the [iceoryx_integrationtest](./iceoryx_integrationtest) package. Using `launch_test`, tests are executed on system-level to ensure that the iceoryx packages are functional and the Public API works according to specification. There is continuous effort to cover the corner cases in the usage of iceoryx in test-cases. ### Public API Testing [4.ii] All tests are executed for every major feature. New features must provide unit and integration tests that cover the code changes in the Pull-Request. The tests reside in separated folders for every package following a defined structure and naming convention. -The features are tested at module(unit) -integration and system test level. The [guidelines](https://iceoryx.io/latest/advanced/best-practice-for-testing/) for Contributors ensure a high quality of test development. +The features are tested at module(unit) -integration and system test level. The [guidelines](./doc/website/concepts/best-practice-for-testing.md) for Contributors ensure a high quality of test development. ### Coverage [4.iii] @@ -142,14 +142,14 @@ The Eclipse iceoryx project use [gcov](https://gcc.gnu.org/onlinedocs/gcc/Gcov.h - Branch Coverage The coverage results of every Pull-Request and master branch are publicly available on [codecov.io](https://app.codecov.io/gh/eclipse-iceoryx/iceoryx). -A detailed report (e.g. the coverage in different packages) can be obtained by following [this](https://github.com/eclipse-iceoryx/iceoryx/blob/master/CONTRIBUTING.md#coverage-scan) guide. +A detailed report (e.g. the coverage in different packages) can be obtained by following [this](./CONTRIBUTING.md#coverage-scan) guide. ### Performance [4.iv] The most important measurement units for performance testing on iceoryx are the data transfer latency and the CPU load incurred by passing data. They can be obtained in two ways: -1. [iceperf](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/iceperf#iceperf) +1. [iceperf](./iceoryx_examples/iceperf/README.md) This performance test uses the iceoryx API directly without any indirections to compare different IPC mechanisms on increasing payload sizes. The output is a table showing various payload sizes with their corresponding latency in microseconds. @@ -162,10 +162,10 @@ Currently, there are no automatic regression tests in the CI running. The work t ### Linters and Static Analysis [4.v] -The code formatting is enforced through the CI using `clang-format` and can be used by following this [guide](https://github.com/eclipse-iceoryx/iceoryx/blob/master/CONTRIBUTING.md#coding-style) +The code formatting is enforced through the CI using `clang-format` and can be used by following this [guide](./CONTRIBUTING.md#coding-style) The codebase is checked with `clang-tidy` to enforce naming conventions and basic coding rules and checked in the Pull-Requests by review. -A [static code analysis](https://github.com/eclipse-iceoryx/iceoryx/blob/master/CONTRIBUTING.md#static-code-analysis) is done regularly with the Axivion Suite, but the results are not publicly accessible due to licensing. +A [static code analysis](./CONTRIBUTING.md#static-code-analysis) is done regularly with the Axivion Suite, but the results are not publicly accessible due to licensing. ## Dependencies [5] diff --git a/doc/aspice_swe3_4/swe_docu_guidelines.md b/doc/aspice_swe3_4/swe_docu_guidelines.md index 2e101d5d9d..0bf049d0a3 100644 --- a/doc/aspice_swe3_4/swe_docu_guidelines.md +++ b/doc/aspice_swe3_4/swe_docu_guidelines.md @@ -93,7 +93,7 @@ Generally, you will not find any Doxygen file in our repo because we let CMake g In [Cmake](CMakeLists.txt) is the command `doxygen_add_docs` which does the job. There, we are also setting some parameters and the aliases for the custom tags. Aliases with an `xrefitem` create a page where all occurrences of the corresponding tag are collected. ### file header -Please see [Header](https://github.com/eclipse-iceoryx/iceoryx/blob/master/CONTRIBUTING.md#header). +Please see [Header](../../CONTRIBUTING.md#header). ### Include guards Every header and inl file needs to have an include guard. Pragma once is not allowed. diff --git a/doc/design/README.md b/doc/design/README.md index b7517db956..40cd2daf6c 100644 --- a/doc/design/README.md +++ b/doc/design/README.md @@ -19,7 +19,7 @@ A good online-editor with cheat-sheet can be found at [https://plantuml-editor.k Alternatively you can use extensions in your IDE. The integration of the generated PlantUML into your design documents is done via *.svg files. -You need to create a .puml file and export it to .svg afterwards for linking it with the markdown. In the `tools` folder is a [helper script](https://github.com/eclipse-iceoryx/iceoryx/blob/master/tools/scripts/generate_plantuml_svg.sh) provided which downloads a defined version of PlantUML to export the vector graphics. +You need to create a .puml file and export it to .svg afterwards for linking it with the markdown. In the `tools` folder is a [helper script](../../tools/scripts/generate_plantuml_svg.sh) provided which downloads a defined version of PlantUML to export the vector graphics. These steps are necessary due to the current support of PlantUML in [Github](https://github.community/t/support-uml-diagrams-in-markdown-with-plantuml-syntax/626). **NOTE:** Don't set parameter for theming (like background color) directly in individual puml files but use the central `doc/iceoryx-plantuml-config.puml` which is shared with all diagrams. diff --git a/doc/design/listener.md b/doc/design/listener.md index fb6fcd795c..f7e0974954 100644 --- a/doc/design/listener.md +++ b/doc/design/listener.md @@ -15,7 +15,7 @@ to the WaitSet where the user has to call the event-callbacks explicitly. ## Terminology -- [Condition Variable](https://en.wikipedia.org/wiki/Monitor_(synchronization)#Condition_variables_2) +- [Condition Variable](https://en.cppreference.com/w/cpp/thread/condition_variable) Used by an attached object to inform the Listener/WaitSet that an event has occurred. - **event** is changing the state of an object. diff --git a/doc/shared-memory-communication.md b/doc/shared-memory-communication.md index db93d340e9..5afd717264 100644 --- a/doc/shared-memory-communication.md +++ b/doc/shared-memory-communication.md @@ -48,7 +48,7 @@ The number of segments used by an iceoryx system, along with the configuration o provided to the system via configuration. The configuration can be provided at compile time (as a header) or at runtime (as a toml-formatted text file). -See the [configuration guide](https://github.com/eclipse-iceoryx/iceoryx/blob/master/doc/website/advanced/configuration-guide.md#configuring-mempools-for-roudi) for more details. +See the [configuration guide](./website/advanced/configuration-guide.md#configuring-mempools-for-roudi) for more details. ## Zero-copy communication diff --git a/doc/website/FAQ.md b/doc/website/FAQ.md index dac5e0fabb..63de070446 100644 --- a/doc/website/FAQ.md +++ b/doc/website/FAQ.md @@ -4,7 +4,7 @@ In this document are tips and hints documented which can help for troubleshootin ## Does iceoryx run in a docker environment -Yes. Take a look at the [icedocker example](https://github.com/eclipse-iceoryx/iceoryx/blob/master/iceoryx_examples/icedocker) +Yes. Take a look at the [icedocker example](../../iceoryx_examples/icedocker/) ## iox-roudi fails on startup @@ -99,4 +99,4 @@ docker run -it --shm-size="2g" ubuntu To avoid undefined behavior of iceoryx posh it is recommended to terminate RouDi and the corresponding middleware processes with SIGINT or SIGTERM. In RouDi, we have integrated a sighandler that catches the signals and gives RouDi the chance to exit and clean-up everything. This also applies for processes. Therefore, we recommend adding a signalhandler -to your process (see [this example](https://github.com/eclipse-iceoryx/iceoryx/blob/master/iceoryx_examples/icedelivery/iox_publisher_untyped.cpp)). +to your process (see [this example](../../iceoryx_examples/icedelivery/iox_publisher_untyped.cpp)). diff --git a/doc/website/advanced/configuration-guide.md b/doc/website/advanced/configuration-guide.md index ba7c61a625..81b1a68702 100644 --- a/doc/website/advanced/configuration-guide.md +++ b/doc/website/advanced/configuration-guide.md @@ -18,9 +18,7 @@ in the shared memory segment called `iceoryx_mgmt` when RouDi is started. | `IOX_MAX_CHUNKS_HELD_PER_SUBSCRIBER_SIMULTANEOUSLY` | Maximum number of chunks a subscriber can take in parallel| | `IOX_MAX_INTERFACE_NUMBER` | Maximum number of interface ports which are used by gateways | -Have a look at -[IceoryxPoshDeployment.cmake](https://github.com/eclipse-iceoryx/iceoryx/blob/master/iceoryx_posh/cmake/IceoryxPoshDeployment.cmake) -for the default values of the constants. +Have a look at [IceoryxPoshDeployment.cmake](../../../iceoryx_posh/cmake/IceoryxPoshDeployment.cmake) for the default values of the constants. !!! hint With the default values set, the size of `iceoryx_mgmt` is ~64.5 MByte. You @@ -170,7 +168,7 @@ count = 100 ``` When no configuration file is specified a hard-coded version similar to the -[default config](https://github.com/eclipse-iceoryx/iceoryx/blob/master/iceoryx_posh/etc/iceoryx/roudi_config_example.toml) +[default config](../../../iceoryx_posh/etc/iceoryx/roudi_config_example.toml) will be used. ### Static configuration @@ -184,4 +182,4 @@ In the cmake file entry of the custom RouDi executable you need to ensure that i is **not** linking against `iceoryx_posh_config` to ensure using the static configuration. An example of a static config can be found -[here](https://github.com/eclipse-iceoryx/iceoryx/blob/master/iceoryx_examples/iceperf/roudi_main_static_config.cpp). +[here](../../../iceoryx_examples/iceperf/roudi_main_static_config.cpp). diff --git a/doc/website/advanced/installation-guide-for-contributors.md b/doc/website/advanced/installation-guide-for-contributors.md index e9f062afb1..3a74efb0f5 100644 --- a/doc/website/advanced/installation-guide-for-contributors.md +++ b/doc/website/advanced/installation-guide-for-contributors.md @@ -53,7 +53,7 @@ Let's assume you want to execute only `ServiceDescription_test` from posh_module !!! hint While writing code on iceoryx you should use git hooks that automatically ensure that you follow the coding and style guidelines. - See [`git-hooks`](https://github.com/eclipse-iceoryx/iceoryx/blob/master/tools/git-hooks/Readme.md). + See [`git-hooks`](../../../tools/git-hooks/Readme.md). ## Use Sanitizer Scan diff --git a/doc/website/concepts/architecture.md b/doc/website/concepts/architecture.md index 730c253932..d70bb3f9f8 100644 --- a/doc/website/concepts/architecture.md +++ b/doc/website/concepts/architecture.md @@ -21,7 +21,7 @@ The different libraries and their namespaces are depicted below. Handy Objects Optimized For Safety (hoofs) is a library and contains various building blocks like fixed size containers, concurrency classes and modern, next-gen C++ constructs from upcoming C++ standard releases. -For more information about the components, refer to its [detailed description](https://github.com/eclipse-iceoryx/iceoryx/blob/master/iceoryx_hoofs/README.md). +For more information about the components, refer to its [detailed description](../../../iceoryx_hoofs/README.md). ### iceoryx posh @@ -55,7 +55,7 @@ The module `iceoryx_binding_c` makes the inter-process communication features of The package `iceoryx_dds` provides a bi-directional DDS gateway using [Eclipse Cyclone DDS](https://cyclonedds.io/). The gateway can be used to send data over a network e.g. via Ethernet. -For more information, refer to the [Readme](https://github.com/eclipse-iceoryx/iceoryx/blob/master/iceoryx_dds/README.md). +For more information, refer to the [Readme](../../../iceoryx_dds/README.md). ### iceoryx introspection diff --git a/doc/website/concepts/best-practice-for-testing.md b/doc/website/concepts/best-practice-for-testing.md index 6b4af0be58..7b78cfe249 100644 --- a/doc/website/concepts/best-practice-for-testing.md +++ b/doc/website/concepts/best-practice-for-testing.md @@ -34,7 +34,7 @@ The latter overlaps with a case from the **ZOM** part, which illustrates that th **Exercise Exceptional Behavior** means to not only test the happy path, but also the negative one. Basically, you should test silly inputs and check for a graceful behavior like the previous example with division by 0. -The linked blog post explains [negative testing](https://www.softwaretestinghelp.com/what-is-negative-testing/) in a more thorough way. +The linked blog post explains [negative testing](https://www.softwaretestinghelp.com/what-is-negative-testing) in a more thorough way. The catchwords can be used to draw simple scenarios which nicely fits to the AAA pattern. A non-exhaustive list of these scenarios are diff --git a/doc/website/concepts/how-optional-and-error-values-are-returned-in-iceoryx.md b/doc/website/concepts/how-optional-and-error-values-are-returned-in-iceoryx.md index 2b97d3cbca..dfbfcaf9f3 100644 --- a/doc/website/concepts/how-optional-and-error-values-are-returned-in-iceoryx.md +++ b/doc/website/concepts/how-optional-and-error-values-are-returned-in-iceoryx.md @@ -9,7 +9,7 @@ introduce in the following sections. ## Optional The type `iox::cxx::optional` is used to indicate that there may or may not be a value of a specific type `T` -available. This is essentially the 'maybe [monad](https://en.wikipedia.org/wiki/Monad_(functional_programming))' in +available. This is essentially the 'maybe [monad](https://en.wikipedia.org/wiki/Monad_%28functional_programming%29)' in functional programming. Assuming we have some optional (usually the result of some computation) ```cpp @@ -47,7 +47,7 @@ result.and_then([](int& value) { /*do something with the value*/ }) ``` Notice that we get the value by reference, so if a copy is desired it has to be created explicitly in the -[lambda expression](https://en.wikipedia.org/wiki/Anonymous_function#C++_(since_C++11)) or function we pass. +[lambda expression](https://en.wikipedia.org/wiki/Anonymous_function#C++_%28since_C++11%29) or function we pass. The optional can be initialized from a value directly @@ -64,7 +64,7 @@ result = iox::cxx::nullopt; ``` For a complete list of available functions see -[`optional.hpp`](https://github.com/eclipse-iceoryx/iceoryx/blob/master/iceoryx_hoofs/include/iceoryx_hoofs/cxx/optional.hpp). +[`optional.hpp`](../../../iceoryx_hoofs/include/iceoryx_hoofs/cxx/optional.hpp). The `iox::cxx::optional` behaves like the [`std::optional`](https://en.cppreference.com/w/cpp/utility/optional) except that it does not throw exceptions and has no undefined behavior. @@ -76,7 +76,7 @@ the 'either monad'. It is usually used to pass a value of type `T` or an error t error type. For more information on how it is used for error handling see -[error-handling.md](https://github.com/eclipse-iceoryx/iceoryx/blob/master/doc/design/error-handling.md). +[error-handling.md](../../design/error-handling.md). Assume we have `E` as an error type, then we can create a value @@ -117,7 +117,7 @@ result.and_then(handleValue).or_else(handleError); There are more convenience functions such as `value_or` which provides the value or an alternative specified by the user. These can be found in -[`expected.hpp`](https://github.com/eclipse-iceoryx/iceoryx/blob/master/iceoryx_hoofs/include/iceoryx_hoofs/cxx/expected.hpp). +[`expected.hpp`](../../../iceoryx_hoofs/include/iceoryx_hoofs/cxx/expected.hpp). Note that when we move an `expected`, the origin contains a moved `T` or `E`, depending on the content before the move. This reflects the behavior of moving the content out of the `iox::cxx::expected` as in diff --git a/doc/website/getting-started/installation.md b/doc/website/getting-started/installation.md index 42944471ae..fb0a949bfa 100644 --- a/doc/website/getting-started/installation.md +++ b/doc/website/getting-started/installation.md @@ -148,7 +148,7 @@ The `CMakeLists.txt` from `iceoryx_meta` can be used to easily develop iceoryx w ### Build options -Please take a look at the CMake file [build_options.cmake](https://github.com/eclipse-iceoryx/iceoryx/blob/master/iceoryx_meta/build_options.cmake) +Please take a look at the CMake file [build_options.cmake](../../../iceoryx_meta/build_options.cmake) to get an overview of the available build options for enabling additional features. ## Build with script diff --git a/doc/website/getting-started/overview.md b/doc/website/getting-started/overview.md index a9d2364378..642e1e0b8f 100644 --- a/doc/website/getting-started/overview.md +++ b/doc/website/getting-started/overview.md @@ -94,7 +94,7 @@ while (keepRunning) By calling `take` we get an `expected` and hence we have to handle the potential error. And that's it. We have created our first simple iceoryx example. -[Here](https://github.com/eclipse-iceoryx/iceoryx/blob/master/iceoryx_examples/README.md) you can find further examples +[Here](../../../iceoryx_examples/README.md) you can find further examples which demonstrate how iceoryx can be used and describe our API in more detail. Now that we have applications capable of sending and receiving data, we can run the complete iceoryx system. @@ -148,7 +148,7 @@ Shared memory is physical memory that is made accessible to multiple processes v virtual address spaces. For further information have a look at our -[shared memory concept article](https://github.com/eclipse-iceoryx/iceoryx/blob/master/doc/shared-memory-communication.md). +[shared memory concept article](../../shared-memory-communication.md). ### Runtime @@ -297,7 +297,7 @@ The WaitSet uses the [reactor pattern](https://en.wikipedia.org/wiki/Reactor_pat strategy that one of the attached events occured at which it informs the user. For more information on how to use the WaitSet see our -[WaitSet examples](https://github.com/eclipse-iceoryx/iceoryx/blob/master/iceoryx_examples/waitset). +[WaitSet examples](../../../iceoryx_examples/waitset). ### Listener @@ -319,7 +319,7 @@ connected callback that creates and sends a response, is executed. Like the WaitSet, the Listener uses the reactor pattern. For more information about the Listener see our -[callbacks examples](https://github.com/eclipse-iceoryx/iceoryx/blob/master/iceoryx_examples/callbacks). +[callbacks example](../../../iceoryx_examples/callbacks). ## API diff --git a/doc/website/release-notes/iceoryx-v1-0-0.md b/doc/website/release-notes/iceoryx-v1-0-0.md index c66009096f..b4b8ca054e 100644 --- a/doc/website/release-notes/iceoryx-v1-0-0.md +++ b/doc/website/release-notes/iceoryx-v1-0-0.md @@ -145,7 +145,7 @@ We will give the API draft some weeks for finalizing the features and to incorpo - Incorrect usage of strncpy [\#374](https://github.com/eclipse-iceoryx/iceoryx/issues/374) - Global Instantiation of Publisher/Subscriber created core dump [\#327](https://github.com/eclipse-iceoryx/iceoryx/issues/327) -## [v0.17.0](https://github.com/eclipse-iceoryx/iceoryx/tree/ICEORYX_0.17.0) (2020-08-27) +## [v0.17.0](https://github.com/eclipse-iceoryx/iceoryx/tree/v0.17.0) (2020-08-27) [Full Changelog](https://github.com/eclipse-iceoryx/iceoryx/compare/ICEORYX_0.17.0_RC6...v0.17.0)\ MacOS support and preparations for new API diff --git a/iceoryx_examples/complexdata/README.md b/iceoryx_examples/complexdata/README.md index 63891fd60a..affc423736 100644 --- a/iceoryx_examples/complexdata/README.md +++ b/iceoryx_examples/complexdata/README.md @@ -116,7 +116,7 @@ handleInsertionReturnVal(sample->optionalList.push_front(nullopt)); !!! note If you're not familiar with `optional`, please have a look at - [How optional and error values are returned in iceoryx](https://github.com/eclipse-iceoryx/iceoryx/blob/master/doc/website/concepts/how-optional-and-error-values-are-returned-in-iceoryx.md/#optional). + [How optional and error values are returned in iceoryx](../../doc/website/concepts/how-optional-and-error-values-are-returned-in-iceoryx.md#optional). Now we fill the stack diff --git a/iceoryx_examples/ice_access_control/README.md b/iceoryx_examples/ice_access_control/README.md index 76bfb70ada..c8de4ab960 100644 --- a/iceoryx_examples/ice_access_control/README.md +++ b/iceoryx_examples/ice_access_control/README.md @@ -101,7 +101,7 @@ to read, but don't have write access. Users in the writer group have both read a !!! tip Shared memory segment can also be configured via a - [TOML config](https://github.com/eclipse-iceoryx/iceoryx/blob/master/doc/website/advanced/configuration-guide.md#dynamic-configuration) file. + [TOML config](../../doc/website/advanced/configuration-guide.md#dynamic-configuration) file. The radar app is started with the user _perception_, which is in the group _privileged_. Therefore it has write access to the _privileged_ segment and is sending data into the _privileged_ shared memory segment. diff --git a/iceoryx_examples/icedelivery_in_c/README.md b/iceoryx_examples/icedelivery_in_c/README.md index d0644728cd..e81e96059c 100644 --- a/iceoryx_examples/icedelivery_in_c/README.md +++ b/iceoryx_examples/icedelivery_in_c/README.md @@ -1,12 +1,12 @@ # icedelivery in C You can find a more detailed description of the C API in the -[iceoryx_binding_c README.md](https://github.com/eclipse-iceoryx/iceoryx/blob/master/iceoryx_binding_c/README.md). +[iceoryx_binding_c README.md](../../iceoryx_binding_c/README.md). ## Introduction The behavior and structure is identical to the -[icedelivery C++ example](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icedelivery) +[icedelivery C++ example](../icedelivery) so that we explain here only the C API differences and not the underlying mechanisms. ## Expected Output @@ -18,7 +18,7 @@ so that we explain here only the C API differences and not the underlying mechan ### Subscriber As in the -[icedelivery C++ example](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icedelivery), +[icedelivery C++ example](../icedelivery), we perform the following steps: 1. Create a runtime instance. diff --git a/iceoryx_examples/icediscovery/README.md b/iceoryx_examples/icediscovery/README.md index 4811d4d219..ca5c68e0f1 100644 --- a/iceoryx_examples/icediscovery/README.md +++ b/iceoryx_examples/icediscovery/README.md @@ -45,7 +45,7 @@ It is included via: ``` On that object we can call the method `findService` which expects the three -service [string identifiers](https://github.com/eclipse-iceoryx/iceoryx/blob/master/doc/website/getting-started/overview.md#creating-service-descriptions-for-topics) +service [string identifiers](../../doc/website/getting-started/overview.md#creating-service-descriptions-for-topics) and a callable which will be applied to all matching services. In addition we have to specify whether we want to search for publishers (`MessagingPattern::PUB_SUB`) used in publish-subscribe communication or servers (`MessagingPattern::REQ_RES`) used in diff --git a/iceoryx_examples/request_response/README.md b/iceoryx_examples/request_response/README.md index 25bfc3be12..d913206236 100644 --- a/iceoryx_examples/request_response/README.md +++ b/iceoryx_examples/request_response/README.md @@ -63,7 +63,7 @@ iox::runtime::PoshRuntime::initRuntime(APP_NAME); ``` After creating the runtime, the client is created and attached to the WaitSet. -The [options](https://iceoryx.io/latest/getting-started/examples/iceoptions/) can be used to alter the behavior of the client, like setting the response +The [options](../iceoptions/) can be used to alter the behavior of the client, like setting the response queue capacity or blocking behavior when the response queue is full or the server is too slow. The `ClientOptions` are similar to `PublisherOptions`/`SubscriberOptions`. diff --git a/iceoryx_examples/request_response_in_c/README.md b/iceoryx_examples/request_response_in_c/README.md index 1344f1d5e9..830ff11ac8 100644 --- a/iceoryx_examples/request_response_in_c/README.md +++ b/iceoryx_examples/request_response_in_c/README.md @@ -1,12 +1,12 @@ # Request response in C You can find a more detailed description of the C API in the -[iceoryx_binding_c README.md](https://github.com/eclipse-iceoryx/iceoryx/blob/master/iceoryx_binding_c/README.md). +[iceoryx_binding_c README.md](../../iceoryx_binding_c/README.md). ## Introduction The behavior and structure is very close to the -[request response C++ example](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/request_response) +[request response C++ example](../request_response) so that we explain here only the C API differences and not the underlying mechanisms. The rough idea is that the client sends two fibonacci numbers to the server which diff --git a/iceoryx_hoofs/README.md b/iceoryx_hoofs/README.md index 729cad5f29..b94b79bbb1 100644 --- a/iceoryx_hoofs/README.md +++ b/iceoryx_hoofs/README.md @@ -115,7 +115,7 @@ attribute overview of the available Queues: ### Error handling -The error handler is a central instance for collecting all errors and react to them. The `error-handling.hpp` contains a list of all error enum values. The error handler has different error levels, for more information see [error-handling.md](https://github.com/eclipse-iceoryx/iceoryx/blob/master/doc/design/error-handling.md) +The error handler is a central instance for collecting all errors and react to them. The `error-handling.hpp` contains a list of all error enum values. The error handler has different error levels, for more information see [error-handling.md](../doc/design/error-handling.md) | class | internal | maybe obsolete | description | |:-----------------------:|:--------:|:--------------:|:------------| @@ -124,7 +124,7 @@ The error handler is a central instance for collecting all errors and react to t ### Log -For information about how to use the logger API see [error-handling.md](https://github.com/eclipse-iceoryx/iceoryx/blob/master/doc/design/error-handling.md) +For information about how to use the logger API see [error-handling.md](../doc/design/error-handling.md) | class | internal | maybe obsolete | description | |:-----------------------:|:--------:|:--------------:|:------------| From 22ac02ce68d464cea357cbe2fe3d8a413b13f922 Mon Sep 17 00:00:00 2001 From: Christian Eltzschig Date: Fri, 18 Mar 2022 03:00:22 +0100 Subject: [PATCH 10/19] iox-#1294 Add NOLINT feature, do not skip compare and tree Signed-off-by: Christian Eltzschig --- doc/website/concepts/best-practice-for-testing.md | 2 +- doc/website/release-notes/iceoryx-unreleased.md | 6 +++--- doc/website/release-notes/iceoryx-v1-0-0.md | 2 +- tools/ci/markdown-link-verificator.sh | 15 ++++++++++----- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/doc/website/concepts/best-practice-for-testing.md b/doc/website/concepts/best-practice-for-testing.md index 7b78cfe249..b63361e39d 100644 --- a/doc/website/concepts/best-practice-for-testing.md +++ b/doc/website/concepts/best-practice-for-testing.md @@ -34,7 +34,7 @@ The latter overlaps with a case from the **ZOM** part, which illustrates that th **Exercise Exceptional Behavior** means to not only test the happy path, but also the negative one. Basically, you should test silly inputs and check for a graceful behavior like the previous example with division by 0. -The linked blog post explains [negative testing](https://www.softwaretestinghelp.com/what-is-negative-testing) in a more thorough way. +The linked blog post explains [negative testing](https://www.softwaretestinghelp.com/what-is-negative-testing) in a more thorough way. The catchwords can be used to draw simple scenarios which nicely fits to the AAA pattern. A non-exhaustive list of these scenarios are diff --git a/doc/website/release-notes/iceoryx-unreleased.md b/doc/website/release-notes/iceoryx-unreleased.md index ab295ff03e..0dd44dfa9c 100644 --- a/doc/website/release-notes/iceoryx-unreleased.md +++ b/doc/website/release-notes/iceoryx-unreleased.md @@ -1,8 +1,8 @@ # iceoryx vx.x.x -## [vx.x.x](https://github.com/eclipse-iceoryx/iceoryx/tree/vx.x.x) (xxxx-xx-xx) +## [vx.x.x](https://github.com/eclipse-iceoryx/iceoryx/tree/vx.x.x) (xxxx-xx-xx) -[Full Changelog](https://github.com/eclipse-iceoryx/iceoryx/compare/vx.x.x...vx.x.x) +[Full Changelog](https://github.com/eclipse-iceoryx/iceoryx/compare/vx.x.x...vx.x.x) **Features:** @@ -26,4 +26,4 @@ // after #include "new/include.hpp" - ``` \ No newline at end of file + ``` diff --git a/doc/website/release-notes/iceoryx-v1-0-0.md b/doc/website/release-notes/iceoryx-v1-0-0.md index b4b8ca054e..ca326ee1c6 100644 --- a/doc/website/release-notes/iceoryx-v1-0-0.md +++ b/doc/website/release-notes/iceoryx-v1-0-0.md @@ -2,7 +2,7 @@ ## [v1.0.0](https://github.com/eclipse-iceoryx/iceoryx/tree/v1.0.0) (2021-04-15) -[Full Changelog](https://github.com/eclipse-iceoryx/iceoryx/compare/v0.90.7...v1.0.0) +[Full Changelog](https://github.com/eclipse-iceoryx/iceoryx/compare/v0.90.0...v1.0.0) Description: This is the first major release for Eclipse iceoryx. That means it is the first release with long-term support and the adopters of iceoryx can rely on a stable API. The release called Almond allows for true zero-copy inter-process-communication on Linux, QNX and MacOS and provides C and modern C++ user APIs. This release is supported until 2022-04-01. diff --git a/tools/ci/markdown-link-verificator.sh b/tools/ci/markdown-link-verificator.sh index 919a52c79e..7bb9f5cf0a 100755 --- a/tools/ci/markdown-link-verificator.sh +++ b/tools/ci/markdown-link-verificator.sh @@ -9,7 +9,7 @@ EXIT_CODE=0 ENABLE_URL_CHECK=1 -# skips github issue and compare links since they tend to fail quiet often +# skips github issue urls since they tend to fail quiet often # without reason SKIP_GITHUB_URL_CHECK=1 @@ -59,7 +59,7 @@ setupTerminalColors() doesWebURLExist() { - if curl --connect-timeout 10 --retry 5 --retry-delay 0 --retry-max-time 30 --head --silent --fail $1 2> /dev/null 1>/dev/null ; + if curl --insecure --head --silent --fail $1 2> /dev/null 1>/dev/null ; then echo 1 else @@ -121,13 +121,11 @@ verifyLinkToUrl() if [[ $SKIP_GITHUB_URL_CHECK == "1" ]] then - if [[ $(echo $LINK | grep "https://github.com/eclipse-iceoryx/iceoryx/compare" | wc -l) == "1" ]] || - [[ $(echo $LINK | grep "https://github.com/eclipse-iceoryx/iceoryx/issue" | wc -l) == "1" ]] + if [[ $(echo $LINK | grep "https://github.com/eclipse-iceoryx/iceoryx/issue" | wc -l) == "1" ]] then return fi fi - #### [[ $(echo $LINK | grep "https://github.com/eclipse-iceoryx/iceoryx/tree" | wc -l) == "1" ]] || if [[ $(echo $LINK | grep "https://github.com/eclipse-iceoryx/iceoryx/blob" | wc -l) == "1" ]] @@ -194,6 +192,7 @@ checkLinksInFile() do let LINE_NR=$LINE_NR+1 + # detect code environments, see ``` and skip them if [[ $(echo $LINE | grep -E "^[ ]*\`\`\`" | wc -l) == "1" ]] then if [[ $IS_IN_CODE_ENV == "1" ]] @@ -209,6 +208,12 @@ checkLinksInFile() continue fi + # detect NOLINT and skip those lines + if [[ $(echo $LINE | grep -E "" | wc -l) == "1" ]] + then + continue + fi + ## sed -e 's/[^[]`[^`]*`//g' ## remove inline code env like `auto bla = [blubb](auto i) ..` which could be mistaken as ## a markdown link like [linkName](linkValue) From 160368a86007fdc1184cfccab459b5809a936bd5 Mon Sep 17 00:00:00 2001 From: Christian Eltzschig Date: Fri, 18 Mar 2022 03:48:14 +0100 Subject: [PATCH 11/19] iox-#1294 Link error when linking to github tree Signed-off-by: Christian Eltzschig --- tools/ci/markdown-link-verificator.sh | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/tools/ci/markdown-link-verificator.sh b/tools/ci/markdown-link-verificator.sh index 7bb9f5cf0a..98b2336870 100755 --- a/tools/ci/markdown-link-verificator.sh +++ b/tools/ci/markdown-link-verificator.sh @@ -1,8 +1,11 @@ #!/usr/bin/env bash -## IMPORTANT -# when an URL contains ( ) please replace them with the code %28 %29 otherwise -# the parser will deliver a false positive +## usage hints +# * when an URL contains ( ) please replace them with the code %28 %29 otherwise +# the parser will deliver a false positive +# +# * when a link should not be tested add the comment +# in the same line ICEORYX_ROOT_PATH=$(git rev-parse --show-toplevel) EXIT_CODE=0 @@ -126,8 +129,21 @@ verifyLinkToUrl() return fi fi - #### [[ $(echo $LINK | grep "https://github.com/eclipse-iceoryx/iceoryx/tree" | wc -l) == "1" ]] || + # verify that no link to a specific github tree is used in the documentation + if [[ $(echo $LINK | grep "https://github.com/eclipse-iceoryx/iceoryx/tree/" | wc -l ) == "1" ]] + then + local PATH_AFTER_TREE=$(echo $LINK | sed -n "s/https:\/\/github.com\/eclipse-iceoryx\/iceoryx\/tree\/\(.*\)/\1/p") + if [[ $(echo $PATH_AFTER_TREE | grep "/" | wc -l ) == "1" ]] + then + echo -e "${COLOR_LIGHT_RED}Please do not use a github url when also a relative path works!${COLOR_RESET}" + echo -e "${COLOR_LIGHT_RED}Relative paths ensure that the tag/branch of link source and destination is equal.${COLOR_RESET}" + printLinkFailureSource + return + fi + fi + + # verify that no link to a specific github branch is used in the documentation if [[ $(echo $LINK | grep "https://github.com/eclipse-iceoryx/iceoryx/blob" | wc -l) == "1" ]] then echo -e "${COLOR_LIGHT_RED}Please do not use a github url when also a relative path works!${COLOR_RESET}" From c6691a3e1516f13e011e69f22b23cb15032c34cc Mon Sep 17 00:00:00 2001 From: Christian Eltzschig Date: Fri, 18 Mar 2022 03:48:29 +0100 Subject: [PATCH 12/19] iox-#1294 Fix links which are pointing to github trees Signed-off-by: Christian Eltzschig --- doc/website/getting-started/installation.md | 2 +- doc/website/getting-started/overview.md | 4 ++-- iceoryx_examples/callbacks/README.md | 6 +++--- iceoryx_examples/callbacks_in_c/README.md | 8 ++++---- iceoryx_examples/complexdata/README.md | 10 +++++----- iceoryx_examples/ice_access_control/README.md | 2 +- iceoryx_examples/icecrystal/Readme.md | 2 +- iceoryx_examples/icedelivery/README.md | 2 +- iceoryx_examples/icedelivery_in_c/README.md | 4 ++-- iceoryx_examples/icediscovery/README.md | 16 +++++++++++++++- iceoryx_examples/icediscovery_in_c/README.md | 6 +++--- iceoryx_examples/icedocker/README.md | 10 +++++----- iceoryx_examples/iceensemble/README.md | 2 +- iceoryx_examples/icehello/README.md | 6 +++--- iceoryx_examples/iceoptions/README.md | 4 ++-- iceoryx_examples/iceperf/README.md | 2 +- iceoryx_examples/request_response/README.md | 6 +++--- iceoryx_examples/request_response_in_c/README.md | 10 +++++----- iceoryx_examples/singleprocess/README.md | 4 ++-- iceoryx_examples/waitset/README.md | 8 ++++---- iceoryx_examples/waitset_in_c/README.md | 8 ++++---- iceoryx_hoofs/README.md | 2 +- 22 files changed, 69 insertions(+), 55 deletions(-) diff --git a/doc/website/getting-started/installation.md b/doc/website/getting-started/installation.md index fb0a949bfa..ae153282fa 100644 --- a/doc/website/getting-started/installation.md +++ b/doc/website/getting-started/installation.md @@ -58,7 +58,7 @@ Additionally, there is an optional dependency to the [cpptoml](https://github.co QNX SDP 7.0 and 7.1 are supported (shipping with gcc 5.4 and gcc 8.3 respectively). The easiest way to build iceoryx on QNX is by using the build script and providing a toolchain file. -We provide generic QNX SDP 7.0 toolchain files for ARM_64 and X86_64 in `./tools/toolchains/qnx` ([Direct Link](https://github.com/eclipse-iceoryx/iceoryx/tree/master/tools/toolchains/qnx)). +We provide generic QNX SDP 7.0 toolchain files for ARM_64 and X86_64 in `./tools/toolchains/qnx` ([Direct Link](../../../tools/toolchains/qnx)). ARM_64: diff --git a/doc/website/getting-started/overview.md b/doc/website/getting-started/overview.md index 642e1e0b8f..8f28a8736a 100644 --- a/doc/website/getting-started/overview.md +++ b/doc/website/getting-started/overview.md @@ -190,7 +190,7 @@ The following table gives an overview of the different terminologies and the cur |-----------------------------------------------------------------------------------|---------|------------------|------------------------| | [rmw_iceoryx](https://github.com/ros2/rmw_iceoryx/) | Type | Namespace/Topic | - | | AUTOSAR | Service | Instance | Event | -| [DDS Gateway](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_dds) | - | - | /Group/Instance/Topic | +| [DDS Gateway](../../../iceoryx_dds) | - | - | /Group/Instance/Topic | | [Cyclone DDS](https://github.com/ros2/rmw_cyclonedds) | - | Type Name | Topic Name | Service is related to instance like classes are related to objects in C++. A service describes an abstract topic and an @@ -228,7 +228,7 @@ to process local constructs, no dynamic allocators !!! note Most of the STL types cannot be used, but we reimplemented some of them so that they meet the conditions above. - You can find an overview [here](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_hoofs#cxx). + You can find an overview [here](../../../iceoryx_hoofs/README.md#cxx). ### Publisher diff --git a/iceoryx_examples/callbacks/README.md b/iceoryx_examples/callbacks/README.md index 1c75e6f8d5..c36ea150f8 100644 --- a/iceoryx_examples/callbacks/README.md +++ b/iceoryx_examples/callbacks/README.md @@ -11,7 +11,7 @@ one accessing it or that it is accessed with a guard like a `std::mutex`. ## Introduction For an introduction into the terminology please read the Glossary in the -[WaitSet C++ example](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/waitset). +[WaitSet C++ example](../waitset). The Listener is a completely thread-safe construct that reacts to events by executing registered callbacks in a background thread. Events can be emitted by @@ -42,7 +42,7 @@ we store it until we received the other side. The publisher of this example does not contain any new features but if you have some questions take a look at the -[icedelivery example](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icedelivery). +[icedelivery example](../icedelivery). ### ice_callbacks_subscriber.cpp @@ -333,5 +333,5 @@ static void onSampleReceivedCallback(iox::popo::Subscriber* subscr ```
-[Check out callbacks on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/callbacks){ .md-button } +[Check out callbacks on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/callbacks){ .md-button }
diff --git a/iceoryx_examples/callbacks_in_c/README.md b/iceoryx_examples/callbacks_in_c/README.md index a70aeeb191..6f73daac3e 100644 --- a/iceoryx_examples/callbacks_in_c/README.md +++ b/iceoryx_examples/callbacks_in_c/README.md @@ -12,9 +12,9 @@ one accessing it or that it is accessed with a guard like a `mutex`. For a general introduction into the Listener concept please take a look at the first part of the -[Listener C++ example](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/callbacks) +[Listener C++ example](../callbacks) and at the Glossary of the -[WaitSet C++ example](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/waitset). +[WaitSet C++ example](../waitset). ## Expected Output @@ -35,7 +35,7 @@ received a sample from each service we calculate the sum of it. The publisher contains only already known iceoryx features. If some of them are not known to you please take a look at the -[icedelivery in C example](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icedelivery_in_c). +[icedelivery in C example](../icedelivery_in_c). ### ice_c_callbacks_subscriber.c @@ -267,5 +267,5 @@ iox_listener_attach_subscriber_event_with_context_data( ```
-[Check out callbacks_in_c on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/callbacks_in_c){ .md-button } +[Check out callbacks_in_c on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/callbacks_in_c){ .md-button }
diff --git a/iceoryx_examples/complexdata/README.md b/iceoryx_examples/complexdata/README.md index affc423736..38c344609e 100644 --- a/iceoryx_examples/complexdata/README.md +++ b/iceoryx_examples/complexdata/README.md @@ -4,8 +4,8 @@ To implement zero-copy data transfer we use a shared memory approach. This requires that every data structure needs to be entirely contained in the shared memory and must not internally use pointers or references. The complete list of restrictions can be found -[here](https://iceoryx.io/latest/getting-started/overview/#restrictions). Therefore, most of the STL types cannot be used, but we -reimplemented some [constructs](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_hoofs#cxx). This example shows how +[here](../../doc/website/getting-started/overview.md#restrictions). Therefore, most of the STL types cannot be used, but we +reimplemented some [constructs](../../iceoryx_hoofs/README.md#cxx). This example shows how to send/receive a iox::cxx::vector and how to send/receive a complex data structure containing some of our STL container surrogates. ## Expected Output @@ -28,7 +28,7 @@ iox::popo::Publisher> publisher({"Radar", "FrontRigh ``` We use a while-loop similar to the one described in the -[icedelivery example](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icedelivery) to send the +[icedelivery example](../icedelivery) to send the vector to the subscriber. After successfully loaning memory we append elements to the vector until it's full. @@ -63,7 +63,7 @@ for (const auto& entry : *sample) In this example our publisher will send a more complex data structure. It contains some of the STL containers that are reimplemented in iceoryx. A list of all reimplemented containers can be found -[here](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_hoofs#cxx). +[here](../../iceoryx_hoofs/README.md#cxx). ```cpp @@ -209,5 +209,5 @@ for (const auto& i : sample->variantVector) ```
-[Check out complexdata on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/complexdata){ .md-button } +[Check out complexdata on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/complexdata){ .md-button }
diff --git a/iceoryx_examples/ice_access_control/README.md b/iceoryx_examples/ice_access_control/README.md index c8de4ab960..6345f3de06 100644 --- a/iceoryx_examples/ice_access_control/README.md +++ b/iceoryx_examples/ice_access_control/README.md @@ -172,5 +172,5 @@ iox::popo::Publisher publisher({"Radar", "FrontLeft", "Object"}); ```
-[Check out ice_access_control on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/ice_access_control){ .md-button } +[Check out ice_access_control on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/ice_access_control){ .md-button }
diff --git a/iceoryx_examples/icecrystal/Readme.md b/iceoryx_examples/icecrystal/Readme.md index c909fb3c8c..55425c5e57 100644 --- a/iceoryx_examples/icecrystal/Readme.md +++ b/iceoryx_examples/icecrystal/Readme.md @@ -10,7 +10,7 @@ memory. ## Expected Output We re-use the binaries from -[icedelivery](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icedelivery). +[icedelivery](../icedelivery). [![asciicast](https://asciinema.org/a/476669.svg)](https://asciinema.org/a/476669) diff --git a/iceoryx_examples/icedelivery/README.md b/iceoryx_examples/icedelivery/README.md index dcb9484ff2..67168db30b 100644 --- a/iceoryx_examples/icedelivery/README.md +++ b/iceoryx_examples/icedelivery/README.md @@ -349,5 +349,5 @@ In case of the typed `Subscriber`, `auto` is deduced to `iox::popo::Sample -[Check out icedelivery on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icedelivery){ .md-button } +[Check out icedelivery on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icedelivery){ .md-button } diff --git a/iceoryx_examples/icedelivery_in_c/README.md b/iceoryx_examples/icedelivery_in_c/README.md index e81e96059c..7087f53978 100644 --- a/iceoryx_examples/icedelivery_in_c/README.md +++ b/iceoryx_examples/icedelivery_in_c/README.md @@ -100,7 +100,7 @@ iox_sub_deinit(subscriber); ### Publisher The publisher is implemented in a similar way like in the -[icedelivery C++ example](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icedelivery): +[icedelivery C++ example](../icedelivery): 1. Create a runtime instance. 2. Create a publisher with some options. @@ -175,5 +175,5 @@ iox_pub_deinit(publisher); ```
-[Check out icedelivery_in_c on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icedelivery_in_c){ .md-button } +[Check out icedelivery_in_c on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icedelivery_in_c){ .md-button }
diff --git a/iceoryx_examples/icediscovery/README.md b/iceoryx_examples/icediscovery/README.md index ca5c68e0f1..a6f3715c81 100644 --- a/iceoryx_examples/icediscovery/README.md +++ b/iceoryx_examples/icediscovery/README.md @@ -23,9 +23,15 @@ the availability of services respectively. We create several publishers which offer their services on construction by default. For more dynamism the `cameraPublishers` offer/stop their services periodically. If you want more information on how to create a publisher, have a +<<<<<<< HEAD look at the [icehello](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icehello), [icedelivery](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icedelivery), and [iceoptions](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/iceoptions) +======= +look at the [icehello](../icehello), +[icedelivery](../icedelivery), +and [iceoptions](../iceoptions) +>>>>>>> f6c02a05a (iox-#1294 Fix links which are pointing to github trees) examples. ### Find services @@ -181,7 +187,11 @@ if (discoveryPtr) ### Monitor service availability If we want to continously monitor the availability of some service or check some discovery condition we can do so by +<<<<<<< HEAD using e.g. a listener to conditionally execute [callbacks](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/callbacks). +======= +using e.g. a listener to conditionally execute [callbacks](../callbacks). +>>>>>>> f6c02a05a (iox-#1294 Fix links which are pointing to github trees) To do so, we start the applications `iox-discovery-monitor` and `iox-offer-service` (again in any order, but for demonstration purposes `iox-offer-service` should be started last). @@ -369,7 +379,11 @@ The benefit is that this way we can choose containers which do not necessrily re ### Implementation of Discovery monitoring To implement a `Discovery` where we actively monitor availability of services we employ a +<<<<<<< HEAD [listener](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/callbacks). +======= +[listener](../callbacks). +>>>>>>> f6c02a05a (iox-#1294 Fix links which are pointing to github trees) Contrary to the blocking solution this does not block the user threads and executes any callback in a background thread created by the listener. The callback will be executed on any change of the available services. @@ -432,5 +446,5 @@ which detaches the callback from the listener. As before we built on an `iox::runtime::ServiceDiscovery` by composition and define a custom`findService` function which returns a `std::vector`.
-[Check out icediscovery on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icediscovery){ .md-button } +[Check out icediscovery on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icediscovery){ .md-button }
diff --git a/iceoryx_examples/icediscovery_in_c/README.md b/iceoryx_examples/icediscovery_in_c/README.md index 62de133000..0bb0e662b5 100644 --- a/iceoryx_examples/icediscovery_in_c/README.md +++ b/iceoryx_examples/icediscovery_in_c/README.md @@ -5,7 +5,7 @@ This example demonstrates how to search for specific services using iceoryx's service discovery. It provides two applications - one offering different services and one searching for those with different search queries. The -behavior and structure is quite similar to the [icediscovery C++ example](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icediscovery). +behavior and structure is quite similar to the [icediscovery C++ example](../icediscovery). ## Expected Output @@ -18,7 +18,7 @@ behavior and structure is quite similar to the [icediscovery C++ example](https: We create several publishers which offer their services on construction by default. For more dynamism the `cameraPublishers` offer/stop their services periodically. If you want more information on how to create publishers, -have a look at the [icedelivery C example](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icedelivery_in_c). +have a look at the [icedelivery C example](../icedelivery_in_c). ### Find services @@ -129,5 +129,5 @@ void searchFrontDevices(const iox_service_description_t service, void* count) ```
-[Check out icediscovery on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icediscovery_in_c){ .md-button } +[Check out icediscovery on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icediscovery_in_c){ .md-button }
diff --git a/iceoryx_examples/icedocker/README.md b/iceoryx_examples/icedocker/README.md index 6432c4b78a..3c729621d0 100644 --- a/iceoryx_examples/icedocker/README.md +++ b/iceoryx_examples/icedocker/README.md @@ -7,8 +7,8 @@ environment and it should orchestrate two applications which are running again in two different docker containers so that we end up with a system of 3 different docker containers. -To demonstrate the setup we use the -[icedelivery C++ example](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icedelivery). +To demonstrate the setup we use the +[icedelivery C++ example](../icedelivery). ``` +-----------+ @@ -75,9 +75,9 @@ into every docker container. We start in 3 separate terminals 3 docker instances. In this example we use `archlinux:latest` but one is free to choose any other linux distribution. The iceoryx repository which contains an already built iceoryx can be found at -`/home/user/iceoryx` which is bound to `/iceoryx`. The usage is -explained in detail in the -[icedelivery C++ example](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icedelivery). +`/home/user/iceoryx` which is bound to `/iceoryx`. The usage is +explained in detail in the +[icedelivery C++ example](../icedelivery). #### Terminal 1 (iox-roudi) ``` diff --git a/iceoryx_examples/iceensemble/README.md b/iceoryx_examples/iceensemble/README.md index 39e2a81f20..c032c79dd5 100644 --- a/iceoryx_examples/iceensemble/README.md +++ b/iceoryx_examples/iceensemble/README.md @@ -43,5 +43,5 @@ Alternatively, you can use the provided [tmux](https://en.wikipedia.org/wiki/Tmu [![asciicast](https://asciinema.org/a/407432.svg)](https://asciinema.org/a/407432)
-[Check out iceensemble on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/iceensemble){ .md-button } +[Check out iceensemble on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/iceensemble){ .md-button }
diff --git a/iceoryx_examples/icehello/README.md b/iceoryx_examples/icehello/README.md index 4ec5106fd8..269023f32d 100644 --- a/iceoryx_examples/icehello/README.md +++ b/iceoryx_examples/icehello/README.md @@ -182,11 +182,11 @@ std::this_thread::sleep_for(std::chrono::milliseconds(100)); ``` Increasing the polling rate is just one approach for reliable communication. -[iceoptions](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/iceoptions) explains how to +[iceoptions](../iceoptions) explains how to configure the history size of a subscriber. In the -[WaitSet](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/waitset) example you learn how to +[WaitSet](../waitset) example you learn how to avoid polling altogether.
-[Check out icehello on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icehello){ .md-button } +[Check out icehello on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icehello){ .md-button }
diff --git a/iceoryx_examples/iceoptions/README.md b/iceoryx_examples/iceoptions/README.md index ba41c1f0ef..b7c00012b7 100644 --- a/iceoryx_examples/iceoptions/README.md +++ b/iceoryx_examples/iceoptions/README.md @@ -97,7 +97,7 @@ By default this is set to `false` and best-effort behavior is used. !!! warning In case of n:m communication, the history feature will **not** provide the overall last n samples based on delivery point in time! - For more information about this limitation see the [QoS article](https://iceoryx.io/latest/concepts/qos-policies/). + For more information about this limitation see the [QoS article](../../doc/website/concepts/qos-policies.md). ```cpp @@ -136,5 +136,5 @@ subscriberOptions.queueFullPolicy = iox::popo::QueueFullPolicy::BLOCK_PRODUCER; ```
-[Check out iceoptions on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/iceoptions){ .md-button } +[Check out iceoptions on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/iceoptions){ .md-button }
diff --git a/iceoryx_examples/iceperf/README.md b/iceoryx_examples/iceperf/README.md index 12e1ae7cac..18bc4da682 100644 --- a/iceoryx_examples/iceperf/README.md +++ b/iceoryx_examples/iceperf/README.md @@ -409,5 +409,5 @@ void IcePerfFollower::doMeasurement(IcePerfBase& ipcTechnology) noexcept ```
-[Check out iceperf on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/iceperf){ .md-button } +[Check out iceperf on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/iceperf){ .md-button }
diff --git a/iceoryx_examples/request_response/README.md b/iceoryx_examples/request_response/README.md index d913206236..9f459985a1 100644 --- a/iceoryx_examples/request_response/README.md +++ b/iceoryx_examples/request_response/README.md @@ -22,8 +22,8 @@ one. In the following scenario the client (client_cxx_waitset.cpp) uses the WaitSet to wait for a response from the server (server_cxx_listener.cpp). The server uses the Listener API to take and process the requests from the client. -The client is inspired by the `iox-cpp-waitset-basic` example from the [WaitSet](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/waitset) -example and the server from the `iox-cpp-callbacks-subscriber` in the [Listener](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/callbacks) +The client is inspired by the `iox-cpp-waitset-basic` example from the [WaitSet](../waitset) +example and the server from the `iox-cpp-callbacks-subscriber` in the [Listener](../callbacks) example. This is the most recommended way to create an efficient client-server combination with iceoryx. @@ -253,5 +253,5 @@ listener.detachEvent(server, iox::popo::ServerEvent::REQUEST_RECEIVED); ```
-[Check out request_response on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/request_response){ .md-button } +[Check out request_response on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/request_response){ .md-button }
diff --git a/iceoryx_examples/request_response_in_c/README.md b/iceoryx_examples/request_response_in_c/README.md index 830ff11ac8..9f0f98544a 100644 --- a/iceoryx_examples/request_response_in_c/README.md +++ b/iceoryx_examples/request_response_in_c/README.md @@ -149,9 +149,9 @@ The server and client or both attachable to either a listener or a waitset. In this example we demonstrate how one can implement the client basic example with a waitset. For deeper insights into the WaitSet take a look at the -[WaitSet C++ example](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/waitset) +[WaitSet C++ example](../waitset) or when you would like to know more about the listener, see the -[Callbacks C++ example](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/callbacks). +[Callbacks C++ example](../callbacks). The startup phase is identical to the client basic version, we register the signal handlers, initialize the runtime, create a client and initialize our variables. @@ -307,9 +307,9 @@ The server and client or both attachable to either a listener or a waitset. In this example we demonstrate how one can implement the server basic example with a listener. For deeper insights into the WaitSet take a look at the -[WaitSet C++ example](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/waitset) +[WaitSet C++ example](../waitset) or when you would like to know more about the listener, see the -[Callbacks C++ example](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/callbacks). +[Callbacks C++ example](../callbacks). The listener example starts like the basic example by registering the signal handler, initializing the runtime and creating a server. @@ -390,5 +390,5 @@ iox_server_deinit(server); ```
-[Check out request response in c on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/request_response_in_c){ .md-button } +[Check out request response in c on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/request_response_in_c){ .md-button }
diff --git a/iceoryx_examples/singleprocess/README.md b/iceoryx_examples/singleprocess/README.md index 9d67d7ff72..9ea7aba7ad 100644 --- a/iceoryx_examples/singleprocess/README.md +++ b/iceoryx_examples/singleprocess/README.md @@ -83,7 +83,7 @@ std::cout << "Finished" << std::endl; ### Implementation of Publisher and Subscriber Since there are no differences to the inter-process ports you can take a look at the -[icedelivery example](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icedelivery) +[icedelivery example](../icedelivery) for a detailed documentation. We only provide here a short overview. #### Publisher @@ -161,5 +161,5 @@ while (!iox::posix::hasTerminationRequested()) ```
-[Check out singleprocess on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/singleprocess){ .md-button } +[Check out singleprocess on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/singleprocess){ .md-button }
diff --git a/iceoryx_examples/waitset/README.md b/iceoryx_examples/waitset/README.md index c23b49b72b..e46527248d 100644 --- a/iceoryx_examples/waitset/README.md +++ b/iceoryx_examples/waitset/README.md @@ -147,7 +147,7 @@ This example consists of 6 use cases. All our examples require a running `iox-roudi` and some data to receive which will be send by `iox-cpp-waitset-publisher`. The publisher does not contain any _WaitSet_ specific logic and is explained in detail in the -[icedelivery example](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icedelivery). +[icedelivery example](../icedelivery). ### Basic @@ -713,7 +713,7 @@ while (keepRunning.load()) In this example we describe how you would implement a _Triggerable_ class which can be attached to a _WaitSet_ or a -[Listener](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/callbacks). +[Listener](../callbacks). Our class in this example will be called `MyTriggerClass` and it can signal the _WaitSet_ the two states `HAS_PERFORMED_ACTION` and `IS_ACTIVATED`. Furthermore, we can also attach the two corresponding events `PERFORM_ACTION_CALLED` and `ACTIVATE_CALLED`. The @@ -766,7 +766,7 @@ enum class MyTriggerClassStates : iox::popo::StateEnumIdentifier ##### Attaching Events Events can be attached to _WaitSets_ and -[Listeners](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/callbacks). +[Listeners](../callbacks). For this to work the class has to implement the following methods. 1. `void enableEvent(iox::popo::TriggerHandle&&, const UserDefinedEventEnum)` @@ -1113,5 +1113,5 @@ std::thread triggerThread([&] { ```
-[Check out waitset on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/waitset){ .md-button } +[Check out waitset on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/waitset){ .md-button }
diff --git a/iceoryx_examples/waitset_in_c/README.md b/iceoryx_examples/waitset_in_c/README.md index db6421d7a7..460684489f 100644 --- a/iceoryx_examples/waitset_in_c/README.md +++ b/iceoryx_examples/waitset_in_c/README.md @@ -16,10 +16,10 @@ trigger the _TriggerHandle_. ## Introduction A detailed introduction into the WaitSet nomenclature and topic can be found in the -[waitset C++ example](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/waitset). +[waitset C++ example](../waitset). Here we will only introduce the C API and not the WaitSet in general. For this, we will take a look at the same use case as the -[waitset C++ example](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/waitset). +[waitset C++ example](../waitset). The examples are structured in the same way as the C++ ones. ## Expected Output @@ -34,7 +34,7 @@ The examples are structured in the same way as the C++ ones. To run an example you need a running `iox-roudi` and the waitset publisher `iox-c-waitset-publisher`. They are identical to the ones introduced in the -[icedelivery C example](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icedelivery_in_c). +[icedelivery C example](../icedelivery_in_c). ### Gateway @@ -572,5 +572,5 @@ iox_user_trigger_deinit(shutdownTrigger); ```
-[Check out waitset_in_c on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/waitset_in_c){ .md-button } +[Check out waitset_in_c on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/waitset_in_c){ .md-button }
diff --git a/iceoryx_hoofs/README.md b/iceoryx_hoofs/README.md index b94b79bbb1..163dd72fcf 100644 --- a/iceoryx_hoofs/README.md +++ b/iceoryx_hoofs/README.md @@ -193,5 +193,5 @@ setTimeout(5_ms); // 5 milliseconds |`FileReader` | i | X | Wrapper for opening files and reading them. |
-[Check out iceoryx_hoofs on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_hoofs/){ .md-button } +[Check out iceoryx_hoofs on GitHub](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_hoofs/){ .md-button }
From bec31426b9827b6ccf47d68516260d3867182cf5 Mon Sep 17 00:00:00 2001 From: Christian Eltzschig Date: Fri, 18 Mar 2022 03:58:10 +0100 Subject: [PATCH 13/19] iox-#1294 Hint when the iceoryx.io website is linked for documentation Signed-off-by: Christian Eltzschig --- QUALITY_DECLARATION.md | 6 +++--- README.md | 2 +- tools/ci/markdown-link-verificator.sh | 8 ++++++++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/QUALITY_DECLARATION.md b/QUALITY_DECLARATION.md index df31fabf11..0251607fb6 100644 --- a/QUALITY_DECLARATION.md +++ b/QUALITY_DECLARATION.md @@ -23,7 +23,7 @@ On Git, the tags have a `v` prefix before the version numbers. A [release script Since release `1.0.0` iceoryx is at a stable version, i.e. `>= 1.0.0`. The latest valid release can be found on the [release page](https://github.com/eclipse-iceoryx/iceoryx/releases) of iceoryx. -The change history can be found in the [release notes section](https://iceoryx.io/latest/release-notes). +The change history can be found in the [release notes section](./doc/website/release-notes). ### Public API Declaration [1.iii] @@ -101,7 +101,7 @@ Currently there is ongoing work to complete the documentation of existing featur ### Public API Documentation [3.ii] -The public API is documented in form of Doxygen comments and available as API reference on [iceoryx.io](https://iceoryx.io/). +The public API is documented in form of Doxygen comments and available as API reference on [iceoryx.io](https://iceoryx.io/). ### License [3.iii] @@ -194,4 +194,4 @@ Every release that is integrated with ROS will be build with the ROS CI to ensur This package conforms to the Vulnerability Disclosure Policy in REP-2006. The Eclipse Project Handbook states the project's [vulnerability disclosure policy](https://www.eclipse.org/projects/handbook/#vulnerability-disclosure) in detail. -The [iceoryx website](https://iceoryx.io) provides a link to report a security vulnerability. +The [iceoryx website](https://iceoryx.io) provides a link to report a security vulnerability. diff --git a/README.md b/README.md index cf9b12fe35..511006f8d6 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ instead the typed C++ API. The normal use case is that iceoryx is integrated as a bigger framework with additional API layers. An example for such a "porcelain" API would be [ROS 2](https://www.ros.org/). Others are listed in the next section. -You can find the full API documentation on ๐ŸŒ [https://iceoryx.io](https://iceoryx.io). +You can find the full API documentation on ๐ŸŒ [https://iceoryx.io](https://iceoryx.io). ### Supported Platforms diff --git a/tools/ci/markdown-link-verificator.sh b/tools/ci/markdown-link-verificator.sh index 98b2336870..94bb947cfc 100755 --- a/tools/ci/markdown-link-verificator.sh +++ b/tools/ci/markdown-link-verificator.sh @@ -152,6 +152,14 @@ verifyLinkToUrl() return fi + if [[ $(echo $LINK | grep "https://iceoryx.io" | wc -l ) == "1" ]] + then + echo -e "${COLOR_LIGHT_RED}Please try to avoid to link directly to the documentation on https://iceoryx.io!${COLOR_RESET}" + echo -e "${COLOR_LIGHT_RED}This causes switching between multiple sources of the same material.${COLOR_RESET}" + printLinkFailureSource + return + fi + if ! [[ $(doesWebURLExist $LINK) == "1" ]] then printLinkFailureSource From ef9e66e678d8c9e9441cce6b3947f8bfb412f9fd Mon Sep 17 00:00:00 2001 From: Christian Eltzschig Date: Fri, 18 Mar 2022 04:03:20 +0100 Subject: [PATCH 14/19] iox-#1294 Add CI job for markdown link verification Signed-off-by: Christian Eltzschig --- .github/workflows/build-test.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index dcd32cc2d2..b4421c938d 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -16,6 +16,12 @@ jobs: - uses: actions/checkout@v2 - run: ./tools/scripts/clang_format.sh check + verify-links-in-markdown-documentation: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v2 + - run: ./tools/ci/markdown-link-verificator.sh + build-test-ubuntu: runs-on: ubuntu-20.04 needs: pre-flight-check From 42fd8ee9fb4df10b1c48dae540bcbdbd927c6e2f Mon Sep 17 00:00:00 2001 From: Christian Eltzschig Date: Fri, 18 Mar 2022 04:34:24 +0100 Subject: [PATCH 15/19] iox-#1294 Add timeout for URL checking Signed-off-by: Christian Eltzschig --- tools/ci/markdown-link-verificator.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/ci/markdown-link-verificator.sh b/tools/ci/markdown-link-verificator.sh index 94bb947cfc..86efc314c0 100755 --- a/tools/ci/markdown-link-verificator.sh +++ b/tools/ci/markdown-link-verificator.sh @@ -62,7 +62,7 @@ setupTerminalColors() doesWebURLExist() { - if curl --insecure --head --silent --fail $1 2> /dev/null 1>/dev/null ; + if curl --max-time 10 --insecure --head --silent --fail $1 2> /dev/null 1>/dev/null ; then echo 1 else From 6334b90f780f2442a20ba27cd342aa68c785e02d Mon Sep 17 00:00:00 2001 From: Christian Eltzschig Date: Fri, 18 Mar 2022 04:34:38 +0100 Subject: [PATCH 16/19] iox-#1294 Rebase with master and correct some links Signed-off-by: Christian Eltzschig --- README.md | 2 +- doc/website/advanced/configuration-guide.md | 2 +- doc/website/getting-started/overview.md | 4 ++-- iceoryx_examples/icecrystal/Readme.md | 2 +- iceoryx_examples/icediscovery/README.md | 14 -------------- iceoryx_examples/user_header/README.md | 2 +- 6 files changed, 6 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 511006f8d6..d94ec61b68 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ In general unix platforms should work with iceoryx but we only test FreeBSD on o | [ROS 2](https://github.com/ros2/rmw_iceoryx) | Eclipse iceoryx can be used inside the [Robot Operating System](https://www.ros.org/) with [rmw_iceoryx](https://github.com/ros2/rmw_iceoryx.git) | | [eCAL](https://github.com/continental/ecal) | Open-source framework from [Continental AG](https://www.continental.com/) supporting pub/sub and various message protocols | | [RTA-VRTE](https://www.etas.com/en/products/rta-vrte.php) | [AUTOSAR Adaptive Platform](https://www.autosar.org/standards/adaptive-platform/) software framework for vehicle computer from [ETAS GmbH](https://www.etas.com) | -| [Cyclone DDS](https://github.com/eclipse-cyclonedds/cyclonedds) | Performant and robust open-source DDS implementation maintained by [ADLINK Technology Inc.](https://www.adlinktech.com/) | +| [Cyclone DDS](https://github.com/eclipse-cyclonedds/cyclonedds) | Performant and robust open-source DDS implementation maintained by [ADLINK Technology Inc.](https://www.adlinktech.com/en/index.aspx) | | [Apex.Middleware](https://www.apex.ai/apex-middleware) | Safe and certified middleware for autonomous mobility systems from [Apex.AI](https://www.apex.ai/) | | [AVIN AP](https://www.avinsystems.com/products/autosar_ap_solutions/) | AUTOSAR Adaptive Platform Product from AVIN Systems | diff --git a/doc/website/advanced/configuration-guide.md b/doc/website/advanced/configuration-guide.md index 81b1a68702..8c8faac14c 100644 --- a/doc/website/advanced/configuration-guide.md +++ b/doc/website/advanced/configuration-guide.md @@ -49,7 +49,7 @@ for communication. user-payload will be smaller than the configured chunk-payload since some space is needed for the other functionality. Please have a look at the - [chunk_header.md](https://github.com/eclipse-iceoryx/iceoryx/blob/master/doc/design/chunk_header.md) + [chunk_header.md](../../design/chunk_header.md) design document for a formula how to determine the necessary chunk-payload size with user-header and extended user-payload alignment. diff --git a/doc/website/getting-started/overview.md b/doc/website/getting-started/overview.md index 8f28a8736a..f60a285fd9 100644 --- a/doc/website/getting-started/overview.md +++ b/doc/website/getting-started/overview.md @@ -66,8 +66,8 @@ iox::popo::Subscriber subscriber({"Group", "Instance", "CounterTop ``` Now we can use the subscriber to receive data. For simplicity, we assume that we periodically check for new data. It -is also possible to explicitly wait for data using the [WaitSet](../waitset.md) or -the [Listener](../callbacks.md). The code to receive the data is the same, the only difference is the way we wake up before checking for data. +is also possible to explicitly wait for data using the [WaitSet](../../../iceoryx_examples/waitset/README.md) or +the [Listener](../../../iceoryx_examples/callbacks/README.md). The code to receive the data is the same, the only difference is the way we wake up before checking for data. ```cpp while (keepRunning) diff --git a/iceoryx_examples/icecrystal/Readme.md b/iceoryx_examples/icecrystal/Readme.md index 55425c5e57..e318c0b272 100644 --- a/iceoryx_examples/icecrystal/Readme.md +++ b/iceoryx_examples/icecrystal/Readme.md @@ -17,7 +17,7 @@ We re-use the binaries from ## Feature walkthrough This example does not contain any additional code. The code of the `iceoryx_introspection_client` can be found under -[tools/introspection/](https://github.com/eclipse-iceoryx/iceoryx/tree/master/tools/introspection). +[tools/introspection/](../../tools/introspection). The introspection can be started with several command line arguments. diff --git a/iceoryx_examples/icediscovery/README.md b/iceoryx_examples/icediscovery/README.md index a6f3715c81..651870bd6a 100644 --- a/iceoryx_examples/icediscovery/README.md +++ b/iceoryx_examples/icediscovery/README.md @@ -23,15 +23,9 @@ the availability of services respectively. We create several publishers which offer their services on construction by default. For more dynamism the `cameraPublishers` offer/stop their services periodically. If you want more information on how to create a publisher, have a -<<<<<<< HEAD -look at the [icehello](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icehello), -[icedelivery](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/icedelivery), -and [iceoptions](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/iceoptions) -======= look at the [icehello](../icehello), [icedelivery](../icedelivery), and [iceoptions](../iceoptions) ->>>>>>> f6c02a05a (iox-#1294 Fix links which are pointing to github trees) examples. ### Find services @@ -187,11 +181,7 @@ if (discoveryPtr) ### Monitor service availability If we want to continously monitor the availability of some service or check some discovery condition we can do so by -<<<<<<< HEAD -using e.g. a listener to conditionally execute [callbacks](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/callbacks). -======= using e.g. a listener to conditionally execute [callbacks](../callbacks). ->>>>>>> f6c02a05a (iox-#1294 Fix links which are pointing to github trees) To do so, we start the applications `iox-discovery-monitor` and `iox-offer-service` (again in any order, but for demonstration purposes `iox-offer-service` should be started last). @@ -379,11 +369,7 @@ The benefit is that this way we can choose containers which do not necessrily re ### Implementation of Discovery monitoring To implement a `Discovery` where we actively monitor availability of services we employ a -<<<<<<< HEAD -[listener](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/callbacks). -======= [listener](../callbacks). ->>>>>>> f6c02a05a (iox-#1294 Fix links which are pointing to github trees) Contrary to the blocking solution this does not block the user threads and executes any callback in a background thread created by the listener. The callback will be executed on any change of the available services. diff --git a/iceoryx_examples/user_header/README.md b/iceoryx_examples/user_header/README.md index ecd47e5702..fc4bff6558 100644 --- a/iceoryx_examples/user_header/README.md +++ b/iceoryx_examples/user_header/README.md @@ -296,5 +296,5 @@ if (iox_sub_take_chunk(subscriber, &userPayload) == ChunkReceiveResult_SUCCESS) } ```
-[Check out User-Header on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/user_header){ .md-button } +[Check out User-Header on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_examples/user_header){ .md-button }
From 8680123661b62d7709510f3f6db2e6d85e1de4aa Mon Sep 17 00:00:00 2001 From: Christian Eltzschig Date: Fri, 18 Mar 2022 12:33:51 +0100 Subject: [PATCH 17/19] iox-#1294 Add copyright header and make links more consistent Signed-off-by: Christian Eltzschig --- CONTRIBUTING.md | 4 ++-- doc/website/concepts/qos-policies.md | 2 +- doc/website/getting-started/overview.md | 4 ++-- iceoryx_examples/icedocker/README.md | 3 +-- iceoryx_hoofs/README.md | 2 +- tools/ci/markdown-link-verificator.sh | 20 +++++++++++++++++++- 6 files changed, 26 insertions(+), 9 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 54b899e6f3..2eb155734d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -289,11 +289,11 @@ Or with a comment one line above (the number after the warning number indicates *mynullptr = foo; ``` -Scan results of the `master` branch are available on a [Axivion dashboard](https://iceoryx-axivion.apex.ai/). Please +Scan results of the `master` branch are available on a [Axivion dashboard](https://iceoryx-axivion.apex.ai/). Please contact one of the maintainers, if you're interested in getting access. Don't be afraid if you don't have Axivion available. As we want to make it easy for developers to contribute, -please raise a pull request and one of the maintainers will provided you access to the [dashboard](https://iceoryx-axivion.apex.ai/). +please raise a pull request and one of the maintainers will provided you access to the [dashboard](https://iceoryx-axivion.apex.ai/). ### Header diff --git a/doc/website/concepts/qos-policies.md b/doc/website/concepts/qos-policies.md index e741465f24..3ddaaac011 100644 --- a/doc/website/concepts/qos-policies.md +++ b/doc/website/concepts/qos-policies.md @@ -54,7 +54,7 @@ The three most important settings are: 2. Multiple publishers after the publisher called `stopOffer()` or is removed The last n samples will never be received since they vanished. An arbitrary number of samples or nothing is received. - For more information about the options see the corresponding example [`iceoptions`](../examples/iceoptions.md). + For more information about the options see the corresponding example [`iceoptions`](../../../iceoryx_examples/iceoptions/README.md). !!! info If the `PublisherOptions::historyCapacity` is larger than `SubscriberOptions::queueCapacity` and blocking behaviour diff --git a/doc/website/getting-started/overview.md b/doc/website/getting-started/overview.md index f60a285fd9..6bca207f2d 100644 --- a/doc/website/getting-started/overview.md +++ b/doc/website/getting-started/overview.md @@ -324,8 +324,8 @@ For more information about the Listener see our ## API The API is offered in two languages, C++ and C. Detailed information can be found in the -[C++ example](../examples/icedelivery.md) and -[C example](../examples/icedelivery_in_c.md). +[C++ example](../../../iceoryx_examples/icedelivery) and +[C example](../../../iceoryx_examples/icedelivery_in_c). Many parts of the C++ API follow a functional programming approach which is less error-prone. This requires using the monadic types `cxx::expected` and `cxx::optional` which are introduced diff --git a/iceoryx_examples/icedocker/README.md b/iceoryx_examples/icedocker/README.md index 3c729621d0..cb48c10ffb 100644 --- a/iceoryx_examples/icedocker/README.md +++ b/iceoryx_examples/icedocker/README.md @@ -7,8 +7,7 @@ environment and it should orchestrate two applications which are running again in two different docker containers so that we end up with a system of 3 different docker containers. -To demonstrate the setup we use the -[icedelivery C++ example](../icedelivery). +To demonstrate the setup we use the [icedelivery C++ example](../icedelivery). ``` +-----------+ diff --git a/iceoryx_hoofs/README.md b/iceoryx_hoofs/README.md index 163dd72fcf..c15b13e2fd 100644 --- a/iceoryx_hoofs/README.md +++ b/iceoryx_hoofs/README.md @@ -193,5 +193,5 @@ setTimeout(5_ms); // 5 milliseconds |`FileReader` | i | X | Wrapper for opening files and reading them. |
-[Check out iceoryx_hoofs on GitHub](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_hoofs/){ .md-button } +[Check out iceoryx_hoofs on GitHub :fontawesome-brands-github:](https://github.com/eclipse-iceoryx/iceoryx/tree/master/iceoryx_hoofs/){ .md-button }
diff --git a/tools/ci/markdown-link-verificator.sh b/tools/ci/markdown-link-verificator.sh index 86efc314c0..70e4522391 100755 --- a/tools/ci/markdown-link-verificator.sh +++ b/tools/ci/markdown-link-verificator.sh @@ -1,6 +1,24 @@ #!/usr/bin/env bash -## usage hints +# Copyright (c) 2022 by Apex.AI Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 + +################# +## usage hints ## +################# # * when an URL contains ( ) please replace them with the code %28 %29 otherwise # the parser will deliver a false positive # From 818b6c44488641ee0c4627cd00b02b4e7f146ce6 Mon Sep 17 00:00:00 2001 From: Christian Eltzschig Date: Fri, 18 Mar 2022 13:38:49 +0100 Subject: [PATCH 18/19] iox-#1294 Remove spaces Signed-off-by: Christian Eltzschig --- iceoryx_examples/icedocker/README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/iceoryx_examples/icedocker/README.md b/iceoryx_examples/icedocker/README.md index cb48c10ffb..39eb1b8fd5 100644 --- a/iceoryx_examples/icedocker/README.md +++ b/iceoryx_examples/icedocker/README.md @@ -74,9 +74,8 @@ into every docker container. We start in 3 separate terminals 3 docker instances. In this example we use `archlinux:latest` but one is free to choose any other linux distribution. The iceoryx repository which contains an already built iceoryx can be found at -`/home/user/iceoryx` which is bound to `/iceoryx`. The usage is -explained in detail in the -[icedelivery C++ example](../icedelivery). +`/home/user/iceoryx` which is bound to `/iceoryx`. The usage is +explained in detail in the [icedelivery C++ example](../icedelivery). #### Terminal 1 (iox-roudi) ``` From 329ce71cf733b965db6253aa0131d5cc7a316825 Mon Sep 17 00:00:00 2001 From: Christian Eltzschig Date: Fri, 18 Mar 2022 15:52:23 +0100 Subject: [PATCH 19/19] iox-#1294 Print warning for unsupported code environment starting with 4 `, NOLINT comment directly after links Signed-off-by: Christian Eltzschig --- CONTRIBUTING.md | 4 ++-- QUALITY_DECLARATION.md | 2 +- tools/ci/markdown-link-verificator.sh | 14 ++++++++++++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2eb155734d..eea0a37f60 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -289,11 +289,11 @@ Or with a comment one line above (the number after the warning number indicates *mynullptr = foo; ``` -Scan results of the `master` branch are available on a [Axivion dashboard](https://iceoryx-axivion.apex.ai/). Please +Scan results of the `master` branch are available on a [Axivion dashboard](https://iceoryx-axivion.apex.ai/). Please contact one of the maintainers, if you're interested in getting access. Don't be afraid if you don't have Axivion available. As we want to make it easy for developers to contribute, -please raise a pull request and one of the maintainers will provided you access to the [dashboard](https://iceoryx-axivion.apex.ai/). +please raise a pull request and one of the maintainers will provided you access to the [dashboard](https://iceoryx-axivion.apex.ai/). ### Header diff --git a/QUALITY_DECLARATION.md b/QUALITY_DECLARATION.md index 0251607fb6..f215e6c84e 100644 --- a/QUALITY_DECLARATION.md +++ b/QUALITY_DECLARATION.md @@ -194,4 +194,4 @@ Every release that is integrated with ROS will be build with the ROS CI to ensur This package conforms to the Vulnerability Disclosure Policy in REP-2006. The Eclipse Project Handbook states the project's [vulnerability disclosure policy](https://www.eclipse.org/projects/handbook/#vulnerability-disclosure) in detail. -The [iceoryx website](https://iceoryx.io) provides a link to report a security vulnerability. +The [iceoryx website](https://iceoryx.io) provides a link to report a security vulnerability. diff --git a/tools/ci/markdown-link-verificator.sh b/tools/ci/markdown-link-verificator.sh index 70e4522391..ac6d147c41 100755 --- a/tools/ci/markdown-link-verificator.sh +++ b/tools/ci/markdown-link-verificator.sh @@ -234,6 +234,20 @@ checkLinksInFile() do let LINE_NR=$LINE_NR+1 + # it is possible to have code environments like + # ```` + # ``` + # hello world + # ``` + # ```` + # this is at the moment not supported, only ``` so we print a warning when we + # encounter such a line + if [[ $(echo $LINE | grep -E "^[ ]*\`\`\`\`" | wc -l) == "1" ]] + then + echo -e ${COLOR_LIGHT_RED}File: $FILE, markdown code environment with more than 3 \` are not supported. You may encounter false positives.${COLOR_RESET} + continue + fi + # detect code environments, see ``` and skip them if [[ $(echo $LINE | grep -E "^[ ]*\`\`\`" | wc -l) == "1" ]] then