Skip to content

Commit

Permalink
iox-#921 Add markdownlint hook and ci script
Browse files Browse the repository at this point in the history
Signed-off-by: Ziad Mostafa <[email protected]>
  • Loading branch information
zmostafa committed May 3, 2023
1 parent 90996dc commit 403271d
Show file tree
Hide file tree
Showing 4 changed files with 325 additions and 0 deletions.
245 changes: 245 additions & 0 deletions .markdownlint.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,245 @@
# Default state for all rules
default: true

# Path to configuration file to extend
extends: null

# MD001/heading-increment/header-increment - Heading levels should only increment by one level at a time
MD001: true

# MD002/first-heading-h1/first-header-h1 - First heading should be a top-level heading
MD002:
# Heading level
level: 1

# MD003/heading-style/header-style - Heading style
MD003:
# Heading style
style: "consistent"

# MD004/ul-style - Unordered list style
MD004:
# List style
style: "consistent"

# MD005/list-indent - Inconsistent indentation for list items at the same level
MD005: true

# MD006/ul-start-left - Consider starting bulleted lists at the beginning of the line
MD006: true

# MD007/ul-indent - Unordered list indentation
MD007:
# Spaces for indent
indent: 4
# Whether to indent the first level of the list
start_indented: false

# MD009/no-trailing-spaces - Trailing spaces
MD009:
# Spaces for line break
br_spaces: 2
# Allow spaces for empty lines in list items
list_item_empty_lines: false
# Include unnecessary breaks
strict: false

# MD010/no-hard-tabs - Hard tabs
MD010:
# Include code blocks
code_blocks: true

# MD011/no-reversed-links - Reversed link syntax
MD011: true

# MD012/no-multiple-blanks - Multiple consecutive blank lines
MD012:
# Consecutive blank lines
maximum: 1

# MD013/line-length - Line length
MD013:
# Number of characters
line_length: 100
# Number of characters for headings
heading_line_length: 100
# Number of characters for code blocks
code_block_line_length: 100 # Ignored due to next option
# Include code blocks
code_blocks: false
# Include tables
tables: false
# Include headings
headings: true
# Include headings
headers: true
# Strict length checking
strict: false
# Stern length checking
stern: false

# MD014/commands-show-output - Dollar signs used before commands without showing output
MD014: false

# MD018/no-missing-space-atx - No space after hash on atx style heading
MD018: true

# MD019/no-multiple-space-atx - Multiple spaces after hash on atx style heading
MD019: true

# MD020/no-missing-space-closed-atx - No space inside hashes on closed atx style heading
MD020: true

# MD021/no-multiple-space-closed-atx - Multiple spaces inside hashes on closed atx style heading
MD021: true

# MD022/blanks-around-headings/blanks-around-headers - Headings should be surrounded by blank lines
MD022:
# Blank lines above heading
lines_above: 1
# Blank lines below heading
lines_below: 1

# MD023/heading-start-left/header-start-left - Headings must start at the beginning of the line
MD023: true

# MD024/no-duplicate-heading/no-duplicate-header - Multiple headings with the same content
MD024:
# Only check sibling headings
allow_different_nesting: false
# Only check sibling headings
siblings_only: true

# MD025/single-title/single-h1 - Multiple top-level headings in the same document
MD025:
# Heading level
level: 1
# RegExp for matching title in front matter
front_matter_title: "^\\s*title\\s*[:=]"

# MD026/no-trailing-punctuation - Trailing punctuation in heading
MD026:
# Punctuation characters
punctuation: ".,;:!。,;:!"

# MD027/no-multiple-space-blockquote - Multiple spaces after blockquote symbol
MD027: true

# MD028/no-blanks-blockquote - Blank line inside blockquote
MD028: true

# MD029/ol-prefix - Ordered list item prefix
MD029:
# List style
style: "one_or_ordered"

# MD030/list-marker-space - Spaces after list markers
MD030:
# Spaces for single-line unordered list items
ul_single: 1
# Spaces for single-line ordered list items
ol_single: 1
# Spaces for multi-line unordered list items
ul_multi: 1
# Spaces for multi-line ordered list items
ol_multi: 1

# MD031/blanks-around-fences - Fenced code blocks should be surrounded by blank lines
MD031:
# Include list items
list_items: true

# MD032/blanks-around-lists - Lists should be surrounded by blank lines
MD032: true

# MD033/no-inline-html - Inline HTML
MD033:
# Allowed elements
allowed_elements: []

# MD034/no-bare-urls - Bare URL used
MD034: true

# MD035/hr-style - Horizontal rule style
MD035:
# Horizontal rule style
style: "consistent"

# MD036/no-emphasis-as-heading/no-emphasis-as-header - Emphasis used instead of a heading
MD036:
# Punctuation characters
punctuation: ".,;:!?。,;:!?"

# MD037/no-space-in-emphasis - Spaces inside emphasis markers
MD037: true

# MD038/no-space-in-code - Spaces inside code span elements
MD038: true

# MD039/no-space-in-links - Spaces inside link text
MD039: true

# MD040/fenced-code-language - Fenced code blocks should have a language specified
MD040: true

# MD041/first-line-heading/first-line-h1 - First line in a file should be a top-level heading
MD041:
# Heading level
level: 1
# RegExp for matching title in front matter
front_matter_title: "^\\s*title\\s*[:=]"

# MD042/no-empty-links - No empty links
MD042: true

# MD043/required-headings/required-headers - Required heading structure
MD043:
# List of headings
headings: null
# List of headings
headers: null

# MD044/proper-names - Proper names should have the correct capitalization
MD044:
# List of proper names
names: [
'iceoryx',
'Cyclone DDS',
'CPU',
'CPUs',
'GUI',
'LiDAR',
'LiDARs',
'MISRA',
'MacOS X',
'RADAR',
'RADARs',
'ROS 2',
'RPi',
'Linux',
'Ubuntu',
'QOS',
'e.g.',
'i.e.',
'SOME/IP',
'UI',
'Bazel',
]
# Include code blocks
code_blocks: false

# MD045/no-alt-text - Images should have alternate text (alt text)
MD045: true

# MD046/code-block-style - Code block style
MD046:
# Block style
style: "fenced"

# MD047/single-trailing-newline - Files should end with a single newline character
MD047: true

# MD048/code-fence-style - Code fence style
MD048:
# Code fence syle
style: "consistent"
6 changes: 6 additions & 0 deletions tools/docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,12 @@ RUN apt-get update && apt-get install -y \
g++ \
wget

RUN curl -fsSL https://deb.nodesource.com/setup_16.x | bash -
RUN apt-get install -y \
nodejs

RUN npm install -g markdownlint-cli

ADD . /iceoryx
WORKDIR /iceoryx

Expand Down
6 changes: 6 additions & 0 deletions tools/git-hooks/pre-commit
Original file line number Diff line number Diff line change
Expand Up @@ -62,4 +62,10 @@ if ! tools/scripts/check_invalid_characters.sh; then
exit 1
fi

## check for md files change
if ! tools/scripts/markdownlint.sh hook; then
echo "Error executing markdownlint"
exit 1
fi

cd "${current_dir}" || exit
68 changes: 68 additions & 0 deletions tools/scripts/markdownlint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#!/bin/bash

# Copyright (c) 2023 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

set -e

SCOPE=${1:-full} # Can be either `full` for all files or `hook` for formatting with git hooks


fail() {
printf "\033[1;31merror: %s: %s\033[0m\n" ${FUNCNAME[1]} "${1:-"Unknown error"}"
exit 1
}

hash git || fail "git not found"

# Check if we have at least a specific markdownlint version installed
MARKDOWNLINT_VERSION=0.33.0
MARKDOWNLINT_CMD="markdownlint"
if ! command -v $MARKDOWNLINT_CMD &> /dev/null
then
MARKDOWNLINT_MAJOR_VERSION=$(markdownlint --version | sed -rn 's/.*([0-9][0-9])\.[0-9].*/\1/p')
if [[ $MARKDOWNLINT_MAJOR_VERSION -lt "$MARKDOWNLINT_VERSION" ]]; then
echo "Warning: markdownlint version $MARKDOWNLINT_VERSION or higher is not installed."
echo "Code will not be formatted."
exit 0
else
MARKDOWNLINT_CMD="markdownlint"
fi
fi

cd "$(git rev-parse --show-toplevel)"

if [[ "$SCOPE" == "hook"* ]]; then
md_files=$(git diff --cached --name-only --diff-filter=ACMRT | grep -E "\.md"| cat)
if [[ -n ${md_files} ]]; then

echo "Running markdownlint on the following file(s):"
echo "--------------------------------------------"
echo "${md_files}" | sed 's/^/\ -\ /g'
echo

for file in $md_files ; do
if [ -f "$file" ]; then
$MARKDOWNLINT_CMD --output ./markdownlint.log --config ./.markdownlint.yaml "${file}"
git add "${file}"
fi
done
fi
elif [[ "$SCOPE" == "full"* ]]; then
git ls-files | grep -E "\.md"| xargs markdownlint --output ./markdownlint.log --config ./.markdownlint.yaml
elif [[ "$SCOPE" == "check"* ]]; then
git ls-files | grep -E "\.md"| xargs markdownlint --output ./markdownlint.log --config ./.markdownlint.yaml
fi

0 comments on commit 403271d

Please sign in to comment.