diff --git a/.cspell.json b/.cspell.json index 4812f66dc5..6de99c14ff 100644 --- a/.cspell.json +++ b/.cspell.json @@ -244,6 +244,7 @@ "logissue", "longrunning", "Loukides", + "lycheeverse", "makedirs", "Margit", "markdig", diff --git a/.github/workflows/mega-linter.yml b/.github/workflows/mega-linter.yml index 59f3fd6e06..c6a356d33a 100644 --- a/.github/workflows/mega-linter.yml +++ b/.github/workflows/mega-linter.yml @@ -30,7 +30,7 @@ jobs: steps: # Git Checkout - name: Checkout Code - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: token: ${{ secrets.GITHUB_TOKEN }} fetch-depth: 0 @@ -39,8 +39,8 @@ jobs: - name: MegaLinter id: ml # You can override MegaLinter flavor used to have faster performances - # More info at https://oxsecurity.github.io/megalinter/flavors/ - uses: oxsecurity/megalinter@v7.1.0 + # More info at https://megalinter.io/latest/flavors/ + uses: oxsecurity/megalinter@v8.1.0 env: # All available variables are described in documentation # https://megalinter.io/latest/config-file/ diff --git a/.gitignore b/.gitignore index 21e64b1619..8b0acb5a80 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,9 @@ ## ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore +# Lychee link checker +.lycheecache + # User-specific files *.suo *.user diff --git a/.markdown-link-check.json b/.markdown-link-check.json deleted file mode 100644 index 2dca5cbce2..0000000000 --- a/.markdown-link-check.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "ignorePatterns": [], - "httpHeaders": [ - { - "urls": [ - "https://docs.github.com/", - "https://help.github.com/", - "https://github.com/", - "https://blog.cloudflare.com/"], - "headers": { - "Accept-Encoding": "zstd, br, gzip, deflate" - } - } - ], - "retryOn429": true, - "aliveStatusCodes": [200, 206, 302, 0] - } diff --git a/.mega-linter.yml b/.mega-linter.yml index 268b096e4d..6bf22fe3f2 100644 --- a/.mega-linter.yml +++ b/.mega-linter.yml @@ -12,17 +12,13 @@ ENABLE_LINTERS: - SPELL_CSPELL - YAML_PRETTIER - YAML_YAMLLINT - - MDLINKCHECK_LINKCHECK + - SPELL_LYCHEE SPELL_CSPELL_DISABLE_ERRORS: true -MARKDOWN_MARKDOWN_LINK_CHECK_DISABLE_ERRORS: true SHOW_ELAPSED_TIME: true FILEIO_REPORTER: false PARALLEL: true GITHUB_STATUS_REPORTER: true LOG_LEVEL: WARNING -MARKDOWN_MARKDOWN_LINK_CHECK_ARGUMENTS: "-q" MARKDOWN_MARKDOWN_TABLE_FORMATTER_ARGUMENTS: "-c" # DISABLE_ERRORS: true # Uncomment if you want MegaLinter to detect errors but not block CI to pass -PLUGINS: - - https://raw.githubusercontent.com/shiranr/linkcheck/v2.0.20.changed_files/mega-linter-plugin-linkcheck/linkcheck.megalinter-descriptor.yml diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index afe4943a08..e9a6b395c0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -78,7 +78,7 @@ When this occurs, do the following 1. Verify that the link is OK, if it redirects, change the path to be the final link. 1. If the link is not ok, fix the link (even if it is not in your document) if you find a good equivalent link. If you can't find a good equivalent link, contact one of the [maintainers](#maintainers) for a solution. 1. Re-run the job, or ask to have the job re-run (if you are a first time contributor). Sometimes the link checker fails due to temporary connectivity issues. -1. If the link checker still fails, and you have confirmed that the link is ok, exclude the link from checking, in the `.markdownlinkcheck.json` file in the root of the repository. +1. If the link checker still fails, and you have confirmed that the link is ok, exclude the link from checking in the [lychee.toml](./lychee.toml) file. ## Running Locally (*Remotely*) @@ -96,7 +96,7 @@ For any questions or concerns, please contact [Tess Ferrandez](https://github.co ## Legal Notices -Microsoft and any contributors grant you a license to the Microsoft documentation and other content in this repository under the [Creative Commons Attribution 4.0 International Public License](https://creativecommons.org/licenses/by/4.0/legalcode), see the [LICENSE](LICENSE) file, and grant you a license to any code in the repository under the [MIT License](https://opensource.org/licenses/MIT), see the [LICENSE-CODE](LICENSE-CODE) file. +Microsoft and any contributors grant you a license to the Microsoft documentation and other content in this repository under the [Creative Commons Attribution 4.0 International Public License](https://creativecommons.org/licenses/by/4.0/legalcode), see the [LICENSE](LICENSE) file, and grant you a license to any code in the repository under the [MIT License](https://opensource.org/license/MIT), see the [LICENSE-CODE](LICENSE-CODE) file. Microsoft, Windows, Microsoft Azure and/or other Microsoft products and services referenced in the documentation may be either trademarks or registered trademarks of Microsoft in the United States and/or other countries. The licenses for this project do not grant you rights to use any Microsoft names, logos, or trademarks. Microsoft's general trademark guidelines can be found at . diff --git a/docs/CI-CD/continuous-integration.md b/docs/CI-CD/continuous-integration.md index 1a291434b1..6d80d491a8 100644 --- a/docs/CI-CD/continuous-integration.md +++ b/docs/CI-CD/continuous-integration.md @@ -171,12 +171,12 @@ Implementing schema validation is divided in two - the generation of the schemas There are two options to generate a schema: -- [From code](https://json-schema.org/implementations.html#from-code) - we can leverage the existing models and objects in the code and generate a customized schema. -- [From data](https://json-schema.org/implementations.html#from-data) - we can take yaml/json samples which reflect the configuration in general and use the various online tools to generate a schema. +- [From code](https://json-schema.org/tools?query=#code-to-schema) - we can leverage the existing models and objects in the code and generate a customized schema. +- [From data](https://json-schema.org/tools?query=#data-to-schema) - we can take yaml/json samples which reflect the configuration in general and use the various online tools to generate a schema. ### Validation -The schema has 30+ [validators](https://json-schema.org/implementations.html#validators) for different languages, including 10+ for JavaScript, so no need to code it yourself. +The schema has 30+ [validators](https://json-schema.org/tools?query=#validator) for different languages, including 10+ for JavaScript, so no need to code it yourself. ## Integration Validation diff --git a/docs/CI-CD/recipes/ci-pipeline-for-better-documentation.md b/docs/CI-CD/recipes/ci-pipeline-for-better-documentation.md index 90fd1e1360..0e9cdd23ad 100644 --- a/docs/CI-CD/recipes/ci-pipeline-for-better-documentation.md +++ b/docs/CI-CD/recipes/ci-pipeline-for-better-documentation.md @@ -13,8 +13,7 @@ This pipeline helps address that! The pipeline uses the following `npm` modules: - [markdownlint](https://github.com/DavidAnson/markdownlint): add standardization using [rules](https://github.com/DavidAnson/markdownlint#rules--aliases) -- [markdown-link-check](https://github.com/tcort/markdown-link-check): check the links in the documentation and report broken -ones +- [lychee](https://github.com/lycheeverse/lychee): check the links in the documentation and report broken ones - [write-good](https://github.com/btford/write-good): linter for English prose We have been using this pipeline for more than one year in different engagements and always received great feedback from the diff --git a/docs/UI-UX/recommended-technologies.md b/docs/UI-UX/recommended-technologies.md index 82480804fb..b537c116be 100644 --- a/docs/UI-UX/recommended-technologies.md +++ b/docs/UI-UX/recommended-technologies.md @@ -37,7 +37,7 @@ The purpose of this page is to review the commonly selected technology options w > Keep in mind that like all software, there is no "right way" to build a user interface application. Leverage and trust your team's or your customer's experience and expertise for the best development experience. -Additionally, while some of these technologies are presented as alternate options, many can be combined together. For example, you can use React in a basic HTML/CSS/JS workflow by inline-importing React along with Babel. See the [Add React to a Website](https://reactjs.org/docs/add-react-to-a-website.html) for more details. Similarly, any [Fast](https://www.fast.design/) web component can be [integrated into any existing React application](https://www.fast.design/docs/integrations/react). And of course, every JavaScript technology can also be used with TypeScript! +Additionally, while some of these technologies are presented as alternate options, many can be combined together. For example, you can use React in a basic HTML/CSS/JS workflow by inline-importing React along with Babel. See the [Add React to a Website](https://reactjs.org/docs/add-react-to-a-website.html) for more details. Similarly, any [Fast](https://www.fast.design/) web component can be [integrated into any existing React application](https://fast.design/docs/integrations#react). And of course, every JavaScript technology can also be used with TypeScript! ## TypeScript diff --git a/docs/automated-testing/integration-testing/README.md b/docs/automated-testing/integration-testing/README.md index e3698a4098..423647eb89 100644 --- a/docs/automated-testing/integration-testing/README.md +++ b/docs/automated-testing/integration-testing/README.md @@ -67,9 +67,7 @@ Integration testing demonstrates how one module of a system, or external system, ## Resources - - [Integration testing approaches](https://www.softwaretestinghelp.com/what-is-integration-testing/) - - [Integration testing pros and cons](https://www.geeksforgeeks.org/software-engineering-integration-testing/) - [Integration tests mocks and stubs](https://circleci.com/blog/how-to-test-software-part-i-mocking-stubbing-and-contract-testing/) - [Software Testing: Principles and Practices](https://www.goodreads.com/book/show/21278464-software-testing) diff --git a/docs/code-reviews/recipes/markdown.md b/docs/code-reviews/recipes/markdown.md index d586ae3c2b..6af308426d 100644 --- a/docs/code-reviews/recipes/markdown.md +++ b/docs/code-reviews/recipes/markdown.md @@ -115,17 +115,19 @@ jobs: ### Checking Links -To automate link check in your markdown files add `markdown-link-check` action to your validation pipeline: +To automate link check in your markdown files add `lycheeverse/lychee-action` action to your validation pipeline: ```yaml markdown-link-check: runs-on: ubuntu-latest steps: - - uses: actions/checkout@master - - uses: gaurav-nelson/github-action-markdown-link-check@v1 + - uses: actions/checkout@v4 + - name: Link Checker + id: lychee + uses: lycheeverse/lychee-action@v2 ``` -More information about `markdown-link-check` action options can be found at [`markdown-link-check` home page](https://github.com/gaurav-nelson/github-action-markdown-link-check) +More information about this action options can be found at [`lychee-action` home page](https://github.com/lycheeverse/lychee-action). ## Code Review Checklist diff --git a/docs/documentation/tools/automation.md b/docs/documentation/tools/automation.md index afca787fec..7f9740abd5 100644 --- a/docs/documentation/tools/automation.md +++ b/docs/documentation/tools/automation.md @@ -4,7 +4,7 @@ If you want to automate some checks on your Markdown documents, there are severa - Code Analysis / Linting - [markdownlint](../../code-reviews/recipes/markdown.md#markdownlint) to verify Markdown syntax and enforce rules that make the text more readable. - - [markdown-link-check](https://github.com/tcort/markdown-link-check) to extract links from markdown texts and check whether each link is alive (200 OK) or dead. + - [lychee](https://github.com/lycheeverse/lychee) to extract links from markdown texts and check whether each link is alive (200 OK) or dead. - [write-good](../../code-reviews/recipes/markdown.md#write-good) to check English prose. - [Docker image for node-markdown-spellcheck](https://github.com/tmaier/docker-markdown-spellcheck), a lightweight docker image to spellcheck markdown files. - [static code analysis](../../CI-CD/dev-sec-ops/secrets-management/static-code-analysis.md) @@ -16,7 +16,7 @@ If you want to automate some checks on your Markdown documents, there are severa - Automation - [pre-commit](https://pre-commit.com/) to use Git hook scripts to identify simple issues before submitting our code or documentation for review. - Check [Build validation](../../code-reviews/recipes/markdown.md#build-validation) to automate linting for PRs. - - Check [CI Pipeline for better documentation](../../CI-CD/recipes/ci-pipeline-for-better-documentation.md) for a sample pipeline with `markdownlint`, `markdown-link-check` and `write-good`. + - Check [CI Pipeline for better documentation](../../CI-CD/recipes/ci-pipeline-for-better-documentation.md) for a sample pipeline with `markdownlint`, `lychee` and `write-good`. Sample output: diff --git a/docs/observability/log-vs-metric-vs-trace.md b/docs/observability/log-vs-metric-vs-trace.md index 279b34b451..2b646fb829 100644 --- a/docs/observability/log-vs-metric-vs-trace.md +++ b/docs/observability/log-vs-metric-vs-trace.md @@ -6,17 +6,17 @@ ### Metrics -The purpose of metrics is to inform observers about the health & operations regarding a component or system. A metric represents a point in time measure of a particular source, and data-wise tends to be very small. The compact size allows for efficient collection even at scale in large systems. Metrics also lend themselves very well to pre-aggregation within the component before collection, reducing computation cost for processing & storing large numbers of metric time series in a central system. Due to how efficiently metrics are processed & stored, it lends itself very well for use in automated alerting, as metrics are an excellent source for the health data for all components in the system. +The purpose of metrics is to inform observers about the health & operations regarding a component or system. A metric represents a point in time measurement of a particular source, and data-wise it tends to be very small. The compact size allows for efficient collection even at scale in large systems. Metrics also lend themselves very well to pre-aggregation within the component before collection, reducing computation cost for processing & storing large numbers of metric time series in a central system. Due to how efficiently metrics are processed & stored, it lends itself very well for use in automated alerting, as metrics are an excellent source for the health data for all components in the system. ### Logs -Log data inform observers about the discrete events that occurred within a component or a set of components. Just about every software component log information about its activities over time. This rich data tends to be much larger than metric data and can cause processing issues, especially if components are logging too verbosely. Therefore, using log data to understand the health of an extensive system tends to be avoided and depends on metrics for that data. Once metric telemetry highlights potential problem sources, filtered log data for those sources can be used to understand what occurred. +Log data inform observers about the discrete events that occurred within a component or a set of components. Just about every software component logs information about its activities over time. This rich data tends to be much larger than metric data and can cause processing issues, especially if components are logging too verbosely. Therefore, using log data to understand the health of an extensive system tends to be avoided and depends on metrics for that data. Once metric telemetry highlights potential problem sources, filtered log data for those sources can be used to understand what occurred. ### Traces -Where logging provides an overview to a discrete, event-triggered log, tracing encompasses a much wider, continuous view of an application. The goal of tracing is to following a program’s flow and data progression. +Whereas logging provides an overview to a discrete, event-triggered log, tracing encompasses a much wider, continuous view of an application. The goal of tracing is to following a program’s flow and data progression. -In many instances, tracing represents a single user’s journey through an entire app stack. Its purpose isn’t reactive, but instead focused on optimization. By tracing through a stack, developers can identify bottlenecks and focus on improving performance. +In many instances, tracing represents a single user’s journey through an entire app stack. Its purpose isn’t reactive, but is instead focused on optimization. By tracing through a stack, developers can identify bottlenecks and focus on improving performance. A distributed trace is defined as a collection of spans. A span is the smallest unit in a trace and represents a piece of the workflow in a distributed landscape. It can be an HTTP request, call to a database, or execution of a message from a queue. diff --git a/docs/observability/tools/Prometheus.md b/docs/observability/tools/Prometheus.md index ac6563b1ca..0211e64927 100644 --- a/docs/observability/tools/Prometheus.md +++ b/docs/observability/tools/Prometheus.md @@ -28,7 +28,7 @@ Prometheus' metrics format is supported by a wide array of tools and services in - [New Relic](https://docs.newrelic.com/docs/integrations/prometheus-integrations/get-started/send-prometheus-metric-data-new-relic/) - [Flagger](https://docs.flagger.app/tutorials/prometheus-operator) - [Grafana](https://grafana.com/docs/grafana/latest/getting-started/getting-started-prometheus/) -- [GitLab](https://docs.gitlab.com/ee/user/project/integrations/prometheus.html) +- [GitLab](https://docs.gitlab.com/ee/administration/monitoring/prometheus/) - [etc...](https://prometheus.io/docs/operating/integrations/) There are numerous [exporters](https://prometheus.io/docs/instrumenting/exporters/) which are used in exporting existing metrics from third-party databases, hardware, CI/CD tools, messaging systems, APIs and other monitoring systems. In addition to client libraries and exporters, there is a significant number of [integration points](https://prometheus.io/docs/operating/integrations/) for service discovery, remote storage, alerts and management. diff --git a/docs/source-control/README.md b/docs/source-control/README.md index 26ca35e681..ff7c362be1 100644 --- a/docs/source-control/README.md +++ b/docs/source-control/README.md @@ -44,4 +44,4 @@ For most engagements having a single hosted DevOps environment (i.e. Azure DevOp * [ISE Git details](git-guidance/README.md)details on how to use Git as part of a [ISE](../ISE.md) project. * [GitHub - Removing sensitive data from a repository](https://help.github.com/articles/removing-sensitive-data-from-a-repository/) * [How Git Works Pluralsight course](https://www.pluralsight.com/courses/how-git-works) -* [Mastering Git Pluralsight course](https://www.pluralsight.com/courses/master-git) +* [Mastering Git Pluralsight course](https://www.pluralsight.com/courses/mastering-git) diff --git a/linkcheck.json b/linkcheck.json deleted file mode 100755 index fda8c05f1b..0000000000 --- a/linkcheck.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "exclude_links": [ - "http://127.0.0.1:10000", - "http://127.0.0.1:10001", - "http://127.0.0.1:10000/devstoreaccount1", - "http://link-to-feature-or-story-work-item", - "https://servicename.net", - "https://ghcr.io/", - "http://link-to-work-item", - "./link-to-the-work-item", - "http://link-to-story-work-item", - "ftp://ftp.software.ibm.com/software/rational/info/do-more/RAW14109USEN.pdf", - "http://link-to-task-work-item", - "https://fast.design", - "https://www.linkedin.com/pulse", - "https://www.linkedin.com/pulse", - "https://xref.learn.microsoft.com/query?uid=", - "http://www.techoism.com/how-to-install-git-bash-on-windows/", - "https://github.com/koalaman/shellcheck/releases/", - "https://plainenglish.co.uk/how-to-write-in-plain-english.html", - "https://github.com/wata727/tflint", - "https://www.softwaretestinghelp.com/what-is-integration-testing/", - "https://blog.cloudflare.com/cloudflare-outage/", - "https://www.researchgate.net/publication/301839557_The_landscape_of_software_failure_cause_models", - "https://static1.smartbear.co/smartbear/media/pdfs/best-kept-secrets-of-peer-code-review_redirected.pdf", - "https://opensource.org/licenses/MIT", - "https://datasciencevademecum.com/2015/11/10/agile-data-science-iteration-0-the-hypothesis-driven-analysis", - "https://pkg-containers.githubusercontent.com/", - "https://github.com/username/repo-name", - "https://machinelearningmastery.com/how-to-get-baseline-results-and-why-they-matter/", - "https://www.perfecto.io/", - "https://learn.microsoft.com/something/somethingelse", - "https://thenewstack.io/which-programming-languages-use-the-least-electricity/", - "https://www.mend.io/", - "https://github.com/dotnet/runtime/blob/main/src/libraries/System.Text.Json/src/System/Text/Json/Serialization/JsonSerializer.Read.String.cs", - "https://aka.ms/presidio-demo", - "https://code.visualstudio.com/docs/remote/codespaces", - "https://code.visualstudio.com/learn/collaboration/live-share", - "https://code.visualstudio.com/docs/devcontainers/create-dev-container", - "https://www.inverse.com/innovation/how-companies-have-optimized-the-humble-office-water-cooler", - "https://www.inverse.com/", - "https://www.dynatrace.com/platform/synthetic-monitoring/", - "https://interpret.ml/", - "https://greenlab.di.uminho.pt/wp-content/uploads/2017/10/sleFinal.pdf", - "https://blog.prototypr.io/software-documentation-types-and-best-practices-1726ca595c7f", - "https://towardsdatascience.com/", - "https://medium.com/", - "https://github.com/", - "https://docs.github.com/", - "https://behave.readthedocs.io/", - "https://blog.insightdatascience.com", - "https://hub.docker.com/_/microsoft-dotnet", - "https://www.w3.org/", - "https://mtirion.medium.com/", - "https://chrieke.medium.com/", - "https://eclipse.dev/mat/", - "https://cloud.google.com/blog/products/gcp/cre-life-lessons-what-is-a-dark-launch-and-what-does-it-do-for-me", - "https://miro.com/guides/retrospectives/ideas-games", - "https://interpret.ml/", - "https://dash.harvard.edu/bitstream/handle/1/38323292/4_Wood_Final.pdf?sequence=1&isAllowed=y", - "https://hub.docker.com/_/microsoft-dotnet", - "https://lldb.llvm.org/", - "https://www.microsoft.com/", - "https://aka.ms/opensource/security/", - "https://www.pluralsight.com/courses/", - "https://www.gartner.com/en/information-technology/glossary/citizen-developer", - "https://www.onetrust.com/blog/principles-of-privacy-by-design/", - "https://docs.github.com/en/rest/commits/statuses", - "https://blog.twitter.com/engineering/en_us/a/2015/diffy-testing-services-without-writing-tests.html", - "https://blog.github.com/2012-09-17-contributing-guidelines/", - "https://www.fast.design/docs/integrations/react", - "http://unitycontainer.org/articles/introduction.html" - ], - "only_errors": true, - "cache_duration": "24h", - "cache_output_path": "/github/workspace/megalinter-reports/linkcheck-cache" - } \ No newline at end of file diff --git a/lychee.toml b/lychee.toml new file mode 100644 index 0000000000..2cdf5c0d5e --- /dev/null +++ b/lychee.toml @@ -0,0 +1,122 @@ +############################# Display ############################# + +# Verbose program output +# Accepts log level: "error", "warn", "info", "debug", "trace" +verbose = "info" + +# Don't show interactive progress bar while checking links. +no_progress = false + +############################# Cache ############################### + +# Enable link caching. This can be helpful to avoid checking the same links on +# multiple runs. +cache = false + +# Discard all cached requests older than this duration. +max_cache_age = "2d" + +############################# Runtime ############################# + +# Number of threads to utilize. +# Defaults to number of cores available to the system if omitted. +threads = 2 + +# Maximum number of allowed redirects. +max_redirects = 10 + +# Maximum number of allowed retries before a link is declared dead. +max_retries = 2 + +# Maximum number of concurrent link checks. +max_concurrency = 50 + +############################# Requests ############################ + +# User agent to send with each request. +user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:132.0) Gecko/20100101 Firefox/132.0" + +# Website timeout from connect to response finished. +timeout = 40 + +# Minimum wait time in seconds between retries of failed requests. +retry_wait_time = 2 + +# Comma-separated list of accepted status codes for valid links. +# Supported values are: +# +# accept = ["200..=204", "429"] +# accept = "200..=204, 429" +# accept = ["200", "429"] +# accept = "200, 429" +accept = ["200"] + +# Proceed for server connections considered insecure (invalid TLS). +insecure = false + +# When links are available using HTTPS, treat HTTP links as errors. +require_https = false + +# Request method +method = "get" + +# Custom request headers +header = ["name=value", "other=value"] + +# Remap URI matching pattern to different URI. +remap = [] + +# HTTP basic auth support. This will be the username and password passed to the +# authorization HTTP header. See +# +basic_auth = [] + +############################# Exclusions ########################## + +# Skip missing input files (default is to error if they don't exist). +skip_missing = false + +# Check links inside `` and `
` blocks as well as Markdown code
+# blocks.
+include_verbatim = false
+
+# Ignore case of paths when matching glob patterns.
+glob_ignore_case = false
+
+# Exclude URLs and mail addresses from checking (supports regex).
+exclude = [
+  # "Example" urls used in some docs:
+  "^http://link-to.*-work-item/",
+  # Websites that block programmatic access:
+  "^https://www.gartner.com",
+  "^https://www.softwaretestinghelp.com",
+  "^https://www.perfecto.io",
+  "^https://machinelearningmastery.com",
+  "^https://www.researchgate.net",
+  "^https://github.com/marketplace/?$",
+  # Other:
+  "^https://opensource.org/license/",  # works locally but fails with 403 on Github CI.
+]
+
+# Exclude these filesystem paths from getting checked.
+exclude_path = []
+
+# URLs to check (supports regex). Has preference over all excludes.
+include = []
+
+# Exclude all private IPs from checking.
+# Equivalent to setting `exclude_private`, `exclude_link_local`, and
+# `exclude_loopback` to true.
+exclude_all_private = true
+
+# Exclude private IP address ranges from checking.
+exclude_private = true
+
+# Exclude link-local IP address range from checking.
+exclude_link_local = true
+
+# Exclude loopback IP address range and localhost from checking.
+exclude_loopback = true
+
+# Check mail addresses
+include_mail = true
diff --git a/package-lock.json b/package-lock.json
index 0e16e3c4e7..452ca561fb 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1026,9 +1026,9 @@
       "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
     },
     "node_modules/cross-spawn": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+      "version": "7.0.6",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+      "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
       "dependencies": {
         "path-key": "^3.1.0",
         "shebang-command": "^2.0.0",
@@ -5377,9 +5377,9 @@
       "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
     },
     "cross-spawn": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+      "version": "7.0.6",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+      "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
       "requires": {
         "path-key": "^3.1.0",
         "shebang-command": "^2.0.0",