This script parses all markdown files in the repository, extracts all links and verifies that they work. It makes sure to only check the URLs once, even if used in multiple links. There is a whitelist for URLs we deem unnecessary to check. It uses curl to do the checks. As a bonus, this makes it easy to run this check locally. Closes #15742
156 lines
5.1 KiB
YAML
156 lines
5.1 KiB
YAML
# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
#
|
|
# SPDX-License-Identifier: curl
|
|
|
|
# This workflow contains tests that operate on documentation files only. Some
|
|
# checks modify the source so they cannot be combined into a single job.
|
|
|
|
name: Docs
|
|
|
|
'on':
|
|
push:
|
|
branches:
|
|
- master
|
|
- '*/ci'
|
|
paths:
|
|
- '.github/workflows/checkdocs.yml'
|
|
- '.github/scripts/**'
|
|
- '**.md'
|
|
- 'docs/*'
|
|
pull_request:
|
|
branches:
|
|
- master
|
|
paths:
|
|
- '.github/workflows/checkdocs.yml'
|
|
- '.github/scripts/**'
|
|
- '**.md'
|
|
- 'docs/*'
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
|
|
cancel-in-progress: true
|
|
|
|
permissions: {}
|
|
|
|
jobs:
|
|
# proselint:
|
|
# runs-on: ubuntu-latest
|
|
# steps:
|
|
# - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4
|
|
# name: checkout
|
|
#
|
|
# - name: install prereqs
|
|
# run: |
|
|
# sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list
|
|
# sudo apt-get update -y
|
|
# sudo apt-get install -y --no-install-suggests --no-install-recommends \
|
|
# python3-proselint
|
|
#
|
|
# # config file help: https://github.com/amperser/proselint/
|
|
# - name: create proselint config
|
|
# run: |
|
|
# cat <<JSON > $HOME/.proselintrc.json
|
|
# {
|
|
# "checks": {
|
|
# "typography.diacritical_marks": false,
|
|
# "typography.symbols": false,
|
|
# "annotations.misc": false,
|
|
# "security.password": false,
|
|
# "misc.annotations": false
|
|
# }
|
|
# }
|
|
# JSON
|
|
#
|
|
# - name: trim headers off all *.md files
|
|
# run: git ls-files -z '*.md' | xargs -0 -n1 .github/scripts/trimmarkdownheader.pl
|
|
#
|
|
# - name: check prose
|
|
# run: git ls-files -z '*.md' | grep -Evz 'CHECKSRC.md|DISTROS.md|curl_mprintf.md|CURLOPT_INTERFACE.md|interface.md' | xargs -0 proselint README
|
|
#
|
|
# # This is for CHECKSRC and files with aggressive exclamation mark needs
|
|
# - name: create second proselint config
|
|
# run: |
|
|
# cat <<JSON > $HOME/.proselintrc.json
|
|
# {
|
|
# "checks": {
|
|
# "typography.diacritical_marks": false,
|
|
# "typography.symbols": false,
|
|
# "typography.exclamation": false,
|
|
# "lexical_illusions.misc": false,
|
|
# "annotations.misc": false
|
|
# }
|
|
# }
|
|
# JSON
|
|
#
|
|
# - name: check special prose
|
|
# run: proselint docs/internals/CHECKSRC.md docs/libcurl/curl_mprintf.md docs/libcurl/opts/CURLOPT_INTERFACE.md docs/cmdline-opts/interface.md
|
|
|
|
linkcheck:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
name: checkout
|
|
|
|
- name: Run mdlinkcheck
|
|
run: ./scripts/mdlinkcheck
|
|
|
|
spellcheck:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
name: checkout
|
|
|
|
- name: trim all man page *.md files
|
|
run: find docs -name "*.md" ! -name "_*" -print0 | xargs -0 -n1 .github/scripts/cleancmd.pl
|
|
|
|
- name: trim libcurl man page *.md files
|
|
run: find docs/libcurl \( -name "curl_*.md" -o -name "libcurl*.md" \) -print0 | xargs -0 -n1 .github/scripts/cleanspell.pl
|
|
|
|
- name: trim libcurl option man page *.md files
|
|
run: find docs/libcurl/opts -name "CURL*.md" -print0 | xargs -0 -n1 .github/scripts/cleanspell.pl
|
|
|
|
- name: trim cmdline docs markdown _*.md files
|
|
run: find docs/cmdline-opts -name "_*.md" -print0 | xargs -0 -n1 .github/scripts/cleancmd.pl --no-header
|
|
|
|
- name: setup the custom wordlist
|
|
run: grep -v '^#' .github/scripts/spellcheck.words > wordlist.txt
|
|
|
|
- name: Check Spelling
|
|
uses: rojopolis/spellcheck-github-actions@403efe0642148e94ecb3515e89c767b85a32371a # v0
|
|
with:
|
|
config_path: .github/scripts/spellcheck.yaml
|
|
|
|
badwords-synopsis:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
name: checkout
|
|
|
|
- name: badwords
|
|
run: .github/scripts/badwords.pl < .github/scripts/badwords.txt docs/*.md docs/libcurl/*.md docs/libcurl/opts/*.md docs/cmdline-opts/*.md docs/TODO docs/KNOWN_BUGS tests/*.md
|
|
|
|
- name: verify-synopsis
|
|
run: .github/scripts/verify-synopsis.pl docs/libcurl/curl*.md
|
|
|
|
man-examples:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
name: checkout
|
|
|
|
- name: render nroff versions
|
|
run: autoreconf -fi && ./configure --without-ssl --without-libpsl && make -C docs
|
|
|
|
- name: verify examples
|
|
run: .github/scripts/verify-examples.pl docs/libcurl/curl*.3 docs/libcurl/opts/*.3
|
|
|
|
miscchecks:
|
|
runs-on: ubuntu-24.04
|
|
timeout-minutes: 5
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
name: checkout
|
|
|
|
- name: spacecheck
|
|
run: .github/scripts/spacecheck.pl
|