From d2a1f5326c362d12ca0f8a9d6939a4a4ef49ba4c Mon Sep 17 00:00:00 2001 From: William Woodruff Date: Tue, 31 Jan 2023 16:38:10 -0500 Subject: [PATCH] lint: WIP markdown support (#12) * lint: WIP markdown support Signed-off-by: William Woodruff * configs: mostly default markdownlint config Signed-off-by: William Woodruff * lint: hack the markdownlint config into place Signed-off-by: William Woodruff * workflows/lint: hackety hack Signed-off-by: William Woodruff * lint: hackety hack Signed-off-by: William Woodruff * lint: hackety hack Signed-off-by: William Woodruff * checkout org repo * fix env syntax * fix path * hardcode ref * fix repo * try workflow_sha again * default to main * mv org repo * markdownlint: remove MD043 settings Signed-off-by: William Woodruff * lint: avoid a mv Signed-off-by: William Woodruff * lint: avoid a full checkout Just grab the file from GH's CDN. Signed-off-by: William Woodruff --------- Signed-off-by: William Woodruff Co-authored-by: James Olds --- .github/workflows/lint.yml | 25 ++++ configs/default.markdownlint.jsonc | 231 +++++++++++++++++++++++++++++ 2 files changed, 256 insertions(+) create mode 100644 configs/default.markdownlint.jsonc diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 4708110..37cf5cb 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -40,6 +40,11 @@ on: default: false required: false type: boolean + org-repo-ref: + description: "the ref: branch or commit to use of the org repo" + default: "main" + required: false + type: string env: # Rust: GitHub Actions supports color codes, so always enable them. @@ -52,6 +57,9 @@ env: # the subset of development dependencies installed. INSTALL_EXTRA: lint + ORG_REPO: trailofbits/.github + ORG_REPO_REF: ${{ inputs.org-repo-ref }} + jobs: lint: runs-on: ubuntu-latest @@ -123,6 +131,23 @@ jobs: version: "${{ inputs.golangci-lint-version }}" working-directory: "${{ inputs.directory }}" + # Markdown + - name: download markdownlint config + if: inputs.language == 'markdown' + run: | + curl \ + https://raw.githubusercontent.com/${{ env.ORG_REPO }}/${{ env.ORG_REPO_REF }}/configs/default.markdownlint.jsonc \ + > /tmp/default.markdownlint.jsonc + + - name: run markdownlint-cli2 + if: inputs.language == 'markdown' + uses: DavidAnson/markdownlint-cli2-action@v9 + with: + command: config + globs: | + /tmp/default.markdownlint.jsonc + **/*.md + # Make - name: run lint (make) if: (inputs.language == 'python' && inputs.type == '') || inputs.type == 'make' diff --git a/configs/default.markdownlint.jsonc b/configs/default.markdownlint.jsonc new file mode 100644 index 0000000..dbe8814 --- /dev/null +++ b/configs/default.markdownlint.jsonc @@ -0,0 +1,231 @@ +{ + // Default state for all rules + "default": true, + // 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": "atx" + }, + // MD004/ul-style - Unordered list style + "MD004": { + // List style + "style": "asterisk" + }, + // 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": 2, + // Whether to indent the first level of the list + "start_indented": false, + // Spaces for first level indent (when start_indented is set) + "start_indent": 2 + }, + // 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, + // Fenced code languages to ignore + "ignore_code_languages": [ + "make", + "makefile" + ], + // Number of spaces for each hard tab + "spaces_per_tab": 1 + }, + // 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": 80, + // Number of characters for headings + "heading_line_length": 80, + // Number of characters for code blocks + "code_block_line_length": 80, + // Include code blocks + "code_blocks": true, + // Include tables + "tables": true, + // 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": true, + // 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": false + }, + // 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 not allowed at end of headings + "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": { + // List of languages + "allowed_languages": [], + // Require language only + "language_only": false + }, + // 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, + // MD044/proper-names - Proper names should have the correct capitalization + "MD044": { + // List of proper names + "names": [], + // Include code blocks + "code_blocks": true, + // Include HTML elements + "html_elements": true + }, + // MD045/no-alt-text - Images should have alternate text (alt text) + "MD045": true, + // MD046/code-block-style - Code block style + "MD046": { + // Block style + "style": "consistent" + }, + // MD047/single-trailing-newline - Files should end with a single newline character + "MD047": true, + // MD048/code-fence-style - Code fence style + "MD048": { + // Code fence style + "style": "consistent" + }, + // MD049/emphasis-style - Emphasis style should be consistent + "MD049": { + // Emphasis style should be consistent + "style": "consistent" + }, + // MD050/strong-style - Strong style should be consistent + "MD050": { + // Strong style should be consistent + "style": "consistent" + }, + // MD051/link-fragments - Link fragments should be valid + "MD051": true, + // MD052/reference-links-images - Reference links and images should use a label that is defined + "MD052": true, + // MD053/link-image-reference-definitions - Link and image reference definitions should be needed + "MD053": { + // Ignored definitions + "ignored_definitions": [ + "//" + ] + } +}