Skip to content

Commit ba4675b

Browse files
Add CI workflow to check Markdown files for problems
On every push and pull request that affects relevant files, and periodically, check the repository's Markdown files for problems: - Use markdownlint to check for common problems and formatting. - Use markdown-link-check to check for broken links. The Arduino tooling Markdown style is defined by the file. In the event the repository contains externally maintained Markdown files, markdownlint can be configured to ignore them via a file: https://github.com/igorshubovych/markdownlint-cli#ignoring-files markdown-link-check is configured via the file: https://github.com/tcort/markdown-link-check#config-file-format
1 parent 24cb630 commit ba4675b

8 files changed

+1450
-14
lines changed
+112
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
# Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/check-markdown-task.md
2+
name: Check Markdown
3+
4+
env:
5+
# See: https://github.com/actions/setup-node/#readme
6+
NODE_VERSION: 16.x
7+
8+
# See: https://docs.github.com/actions/using-workflows/events-that-trigger-workflows
9+
on:
10+
create:
11+
push:
12+
paths:
13+
- ".github/workflows/check-markdown-task.ya?ml"
14+
- ".markdown-link-check.json"
15+
- "package.json"
16+
- "package-lock.json"
17+
- "Taskfile.ya?ml"
18+
- "**/.markdownlint*"
19+
- "**.mdx?"
20+
- "**.mkdn"
21+
- "**.mdown"
22+
- "**.markdown"
23+
pull_request:
24+
paths:
25+
- ".github/workflows/check-markdown-task.ya?ml"
26+
- ".markdown-link-check.json"
27+
- "package.json"
28+
- "package-lock.json"
29+
- "Taskfile.ya?ml"
30+
- "**/.markdownlint*"
31+
- "**.mdx?"
32+
- "**.mkdn"
33+
- "**.mdown"
34+
- "**.markdown"
35+
schedule:
36+
# Run every Tuesday at 8 AM UTC to catch breakage caused by external changes.
37+
- cron: "0 8 * * TUE"
38+
workflow_dispatch:
39+
repository_dispatch:
40+
41+
jobs:
42+
run-determination:
43+
runs-on: ubuntu-latest
44+
outputs:
45+
result: ${{ steps.determination.outputs.result }}
46+
steps:
47+
- name: Determine if the rest of the workflow should run
48+
id: determination
49+
run: |
50+
RELEASE_BRANCH_REGEX="refs/heads/[0-9]+.[0-9]+.x"
51+
# The `create` event trigger doesn't support `branches` filters, so it's necessary to use Bash instead.
52+
if [[
53+
"${{ github.event_name }}" != "create" ||
54+
"${{ github.ref }}" =~ $RELEASE_BRANCH_REGEX
55+
]]; then
56+
# Run the other jobs.
57+
RESULT="true"
58+
else
59+
# There is no need to run the other jobs.
60+
RESULT="false"
61+
fi
62+
63+
echo "::set-output name=result::$RESULT"
64+
65+
lint:
66+
needs: run-determination
67+
if: needs.run-determination.outputs.result == 'true'
68+
runs-on: ubuntu-latest
69+
70+
steps:
71+
- name: Checkout repository
72+
uses: actions/checkout@v3
73+
74+
- name: Setup Node.js
75+
uses: actions/setup-node@v3
76+
with:
77+
node-version: ${{ env.NODE_VERSION }}
78+
79+
- name: Initialize markdownlint-cli problem matcher
80+
uses: xt0rted/markdownlint-problem-matcher@v1
81+
82+
- name: Install Task
83+
uses: arduino/setup-task@v1
84+
with:
85+
repo-token: ${{ secrets.GITHUB_TOKEN }}
86+
version: 3.x
87+
88+
- name: Lint
89+
run: task markdown:lint
90+
91+
links:
92+
needs: run-determination
93+
if: needs.run-determination.outputs.result == 'true'
94+
runs-on: ubuntu-latest
95+
96+
steps:
97+
- name: Checkout repository
98+
uses: actions/checkout@v3
99+
100+
- name: Setup Node.js
101+
uses: actions/setup-node@v3
102+
with:
103+
node-version: ${{ env.NODE_VERSION }}
104+
105+
- name: Install Task
106+
uses: arduino/setup-task@v1
107+
with:
108+
repo-token: ${{ secrets.GITHUB_TOKEN }}
109+
version: 3.x
110+
111+
- name: Check links
112+
run: task --silent markdown:check-links

.markdown-link-check.json

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"httpHeaders": [
3+
{
4+
"urls": ["https://docs.github.com/"],
5+
"headers": {
6+
"Accept-Encoding": "gzip, deflate, br"
7+
}
8+
}
9+
],
10+
"retryOn429": true,
11+
"retryCount": 3,
12+
"aliveStatusCodes": [200, 206]
13+
}

.markdownlint.yml

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/check-markdown/.markdownlint.yml
2+
# See: https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md
3+
# The code style defined in this file is the official standardized style to be used in all Arduino projects and should
4+
# not be modified.
5+
# Note: Rules disabled solely because they are redundant to Prettier are marked with a "Prettier" comment.
6+
7+
default: false
8+
MD001: false
9+
MD002: false
10+
MD003: false # Prettier
11+
MD004: false # Prettier
12+
MD005: false # Prettier
13+
MD006: false # Prettier
14+
MD007: false # Prettier
15+
MD008: false # Prettier
16+
MD009:
17+
br_spaces: 0
18+
strict: true
19+
list_item_empty_lines: false # Prettier
20+
MD010: false # Prettier
21+
MD011: true
22+
MD012: false # Prettier
23+
MD013: false
24+
MD014: false
25+
MD018: true
26+
MD019: false # Prettier
27+
MD020: true
28+
MD021: false # Prettier
29+
MD022: false # Prettier
30+
MD023: false # Prettier
31+
MD024: false
32+
MD025:
33+
level: 1
34+
front_matter_title: '^\s*"?title"?\s*[:=]'
35+
MD026: false
36+
MD027: false # Prettier
37+
MD028: false
38+
MD029:
39+
style: one
40+
MD030:
41+
ul_single: 1
42+
ol_single: 1
43+
ul_multi: 1
44+
ol_multi: 1
45+
MD031: false # Prettier
46+
MD032: false # Prettier
47+
MD033: false
48+
MD034: false
49+
MD035: false # Prettier
50+
MD036: false
51+
MD037: true
52+
MD038: true
53+
MD039: true
54+
MD040: false
55+
MD041: false
56+
MD042: true
57+
MD043: false
58+
MD044: false
59+
MD045: true
60+
MD046:
61+
style: fenced
62+
MD047: false # Prettier

.markdownlintignore

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/check-markdown/.markdownlintignore
2+
.licenses/
3+
__pycache__/
4+
node_modules/

README.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
[![Check Taskfiles status](https://github.com/arduino/arduino-language-server/actions/workflows/check-taskfiles.yml/badge.svg)](https://github.com/arduino/arduino-language-server/actions/workflows/check-taskfiles.yml)
66
[![Check Go status](https://github.com/arduino/arduino-language-server/actions/workflows/check-go-task.yml/badge.svg)](https://github.com/arduino/arduino-language-server/actions/workflows/check-go-task.yml)
7+
[![Check Markdown status](https://github.com/arduino/arduino-language-server/actions/workflows/check-markdown-task.yml/badge.svg)](https://github.com/arduino/arduino-language-server/actions/workflows/check-markdown-task.yml)
78

89
The **Arduino Language Server** is the tool that powers the autocompletion of the new [Arduino IDE 2][arduino-ide-repo]. It implements the standard [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) so it can be used with other IDEs as well.
910

@@ -63,6 +64,7 @@ To run tests:
6364
```
6465
go test -v ./...
6566
```
67+
6668
## Usage
6769

6870
The language server it's not intended for direct usage by humans via the command line terminal.
@@ -87,6 +89,7 @@ The -fqbn flag represents the board you're actually working on (different boards
8789
The support for the board must be installed with the `arduino-cli core install ...` command before starting the language server.
8890

8991
If you do not have an Arduino CLI config file, you can create one by running:
92+
9093
```
9194
arduino-cli config init
9295
```
@@ -99,6 +102,5 @@ This open source code was written by the Arduino team and is maintained on a dai
99102

100103
The code contained in this repository is licensed under the terms of the Apache 2.0 license. If you have questions about licensing please contact us at [[email protected]](mailto:[email protected]).
101104

102-
103105
[arduino-ide-repo]: https://github.com/arduino/arduino-ide
104106
[go-install]: https://golang.org/doc/install

Taskfile.yml

+27-2
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ tasks:
162162
desc: Check for broken links
163163
deps:
164164
- task: docs:generate
165+
- task: npm:install-deps
165166
cmds:
166167
- |
167168
if [[ "{{.OS}}" == "Windows_NT" ]]; then
@@ -178,7 +179,14 @@ tasks:
178179
# Using -regex instead of -name to avoid Task's behavior of globbing even when quoted on Windows
179180
# The odd method for escaping . in the regex is required for windows compatibility because mvdan.cc/sh gives
180181
# \ characters special treatment on Windows in an attempt to support them as path separators.
181-
for file in $(find . -regex ".*[.]md"); do
182+
for file in $(
183+
find . \
184+
-type d -name '.git' -prune -o \
185+
-type d -name '.licenses' -prune -o \
186+
-type d -name '__pycache__' -prune -o \
187+
-type d -name 'node_modules' -prune -o \
188+
-regex ".*[.]md" -print
189+
); do
182190
markdown-link-check \
183191
--quiet \
184192
--config "./.markdown-link-check.json" \
@@ -189,7 +197,14 @@ tasks:
189197
else
190198
npx --package=markdown-link-check --call='
191199
STATUS=0
192-
for file in $(find . -regex ".*[.]md"); do
200+
for file in $(
201+
find . \
202+
-type d -name '.git' -prune -o \
203+
-type d -name '.licenses' -prune -o \
204+
-type d -name '__pycache__' -prune -o \
205+
-type d -name 'node_modules' -prune -o \
206+
-regex ".*[.]md" -print
207+
); do
193208
markdown-link-check \
194209
--quiet \
195210
--config "./.markdown-link-check.json" \
@@ -203,15 +218,25 @@ tasks:
203218
# Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/check-markdown-task/Taskfile.yml
204219
markdown:fix:
205220
desc: Automatically correct linting violations in Markdown files where possible
221+
deps:
222+
- task: npm:install-deps
206223
cmds:
207224
- npx markdownlint-cli --fix "**/*.md"
208225

209226
# Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/check-markdown-task/Taskfile.yml
210227
markdown:lint:
211228
desc: Check for problems in Markdown files
229+
deps:
230+
- task: npm:install-deps
212231
cmds:
213232
- npx markdownlint-cli "**/*.md"
214233

234+
# Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/npm-task/Taskfile.yml
235+
npm:install-deps:
236+
desc: Install dependencies managed by npm
237+
cmds:
238+
- npm install
239+
215240
# Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/poetry-task/Taskfile.yml
216241
poetry:install-deps:
217242
desc: Install dependencies managed by Poetry

0 commit comments

Comments
 (0)