Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Check for broken links in the CI test job #369

Open
wants to merge 12 commits into
base: main
Choose a base branch
from

Conversation

natikgadzhi
Copy link
Contributor

@natikgadzhi natikgadzhi commented Aug 26, 2023

Adds htmlproofer check to make sure there are no broken links in the built website.

Motivation:

Modifications:

  • Uses gem html-proofer alongside Jekyll. Since the website is already using Ruby, it's probably the easiest way to add broken links check.
  • Plugs into CI test job defined in docker-compose.yml, so hopefully this would just work with the existing CI setup.
  • Ignores links to twitter.com profiles because they now arbitrarily return HTTP429 to unauthenticated clients.

Review and concerns

There are 408 reported errors

  • Most of them are because we have a bunch of //domain.tld links that use the page protocol without enforcing https:// specifically. We should probably just ignore them, or check if the fix is in some sort of a link_tag in a template so we can fix it quickly.
  • There are many errors where a page links to another page#heading, but heading is invalid because the target page content change. We should probably fix those, but there's quite a lot of them.
  • There are also legit failures with 404 on internal links. These are top priority I think?

htmlproof configuration

Below are options we can consider tinkering with — defualts are more or less okay, I think. here's what I'm using:

  • htmlproof enforces https by default and complaints about a lot of links, --no-ensure-https did not remove those from output.
  • --only-4xx to only surface HTTP 4xx errors.
  • --ignore-urls set to ignore twitter and github links. Github rate limits us, and Twitter just plain does not work anymore without authentication headers.
  • --ignore-missing-alt checks img tags and verifies they have alt. It's on by default.

TODOs

  • Verify that the CI setup is compatible with this change. Do we want to extract html-proofer in a separate job definition?
  • Figure out how to throttle the check requests, or ignore HTTP 429 altogether?
  • Fix missing alt attributes
  • Fix links to Swift Evolution with swift version filters
  • Fixed swift mailing lists links #400
  • Fix broken downloads links
  • Fix the rest of the links

@natikgadzhi
Copy link
Contributor Author

The most common error I see is linking to a page that exists internally in swift.org, but the specific heading does not.

One specifically annoying scenario is when a blog post has heading links to parts of that post in excerpt. The excerpt is rendered in the blog index page, so we will render those links, but the headings only exist in the specific article page.

For example: https://www.swift.org/blog/ has a link to #swift-package-manager in the excerpt of Swift 5.8 article. Those links are valid on the post page, but broken on the blog index page.

To fix those, we will need to fix them in the source markdown, just prepend #swift-package-manager with the post slug. Hypothetically, perhaps we could search and replace with a regex for all .md files in blog.

@natikgadzhi
Copy link
Contributor Author

natikgadzhi commented Aug 26, 2023

408 link failures

Running 3 checks (Images, Links, Scripts) in ["/output"] on *.html files ...


Checking 1973 external links
Checking 513 internal links
Checking internal link hashes in 50 files
Ran on 189 files!


For the Links check, the following failures were found:

* At /output/404.html:310:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/404.html:311:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/500.html:309:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/500.html:310:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/CONTRIBUTORS.html:993:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/CONTRIBUTORS.html:994:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/about/index.html:414:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/about/index.html:415:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog-post-contributions/index.html:356:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog-post-contributions/index.html:357:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/4.2-release-process/index.html:571:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/4.2-release-process/index.html:572:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/5.0-release-process/index.html:584:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/5.0-release-process/index.html:585:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/5.1-release-process/index.html:610:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/5.1-release-process/index.html:611:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/5.2-release-process/index.html:548:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/5.2-release-process/index.html:549:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/5.3-release-process/index.html:565:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/5.3-release-process/index.html:566:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/AWS-lambda-runtime/index.html:493:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/AWS-lambda-runtime/index.html:494:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/abi-stability-and-apple/index.html:411:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/abi-stability-and-apple/index.html:412:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/abi-stability-and-more/index.html:431:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/abi-stability-and-more/index.html:432:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/accessibility-and-inclusion/index.html:375:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/accessibility-and-inclusion/index.html:376:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/additional-linux-distros/index.html:418:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/additional-linux-distros/index.html:419:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/argument-parser/index.html:602:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/argument-parser/index.html:603:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/behind-SE-0200/index.html:527:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/behind-SE-0200/index.html:528:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/black-history-month/index.html:400:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/black-history-month/index.html:401:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/bridging-pch/index.html:393:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/bridging-pch/index.html:394:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/conditional-conformance/index.html:685:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/conditional-conformance/index.html:686:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/crypto/index.html:553:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/crypto/index.html:554:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/dictionary-and-set-improvements/index.html:694:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/dictionary-and-set-improvements/index.html:695:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/distributed-actors/index.html:665:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/distributed-actors/index.html:666:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/diversity-in-swift/index.html:391:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/diversity-in-swift/index.html:392:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/documentation-workgroup/index.html:406:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/documentation-workgroup/index.html:407:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/evolving-swift-project-workgroups/index.html:481:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/evolving-swift-project-workgroups/index.html:482:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/focus-areas-2023/index.html:569:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/focus-areas-2023/index.html:570:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/forums/index.html:398:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/forums/index.html:399:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/foundation-preview-now-available/index.html:437:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/foundation-preview-now-available/index.html:438:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/future-of-foundation/index.html:390:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/future-of-foundation/index.html:391:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/graphing-calculator/index.html:426:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/graphing-calculator/index.html:427:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/how-mirror-works/index.html:1072:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/how-mirror-works/index.html:1073:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/index.html:1805:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/index.html:1806:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/introducing-swift-http-types/index.html:548:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/introducing-swift-http-types/index.html:549:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/introducing-swift-openapi-generator/index.html:605:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/introducing-swift-openapi-generator/index.html:606:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/iuo/index.html:632:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/iuo/index.html:633:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/language-workgroup/index.html:430:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/language-workgroup/index.html:431:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/library-evolution/index.html:892:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/library-evolution/index.html:893:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/mentorship-2022/index.html:401:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/mentorship-2022/index.html:402:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/new-diagnostic-arch-overview/index.html:908:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/new-diagnostic-arch-overview/index.html:909:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/numerics/index.html:701:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/numerics/index.html:702:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/osize/index.html:409:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/osize/index.html:410:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/package-collections/index.html:500:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/package-collections/index.html:501:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/preview-package/index.html:448:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/preview-package/index.html:449:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/property-wrappers/index.html:404:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/property-wrappers/index.html:405:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/related-projects/index.html:382:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/related-projects/index.html:383:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/server-api-workgroup/index.html:369:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/server-api-workgroup/index.html:370:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/sourcekitd-stress-tester/index.html:602:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/sourcekitd-stress-tester/index.html:603:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/sswg-server-guides/index.html:375:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/sswg-server-guides/index.html:376:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/sswg-update-2019/index.html:576:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/sswg-update-2019/index.html:577:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/sswg-update-2023/index.html:516:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/sswg-update-2023/index.html:517:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/sswg-update/index.html:477:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/sswg-update/index.html:478:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-2.2-new-features/index.html:636:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-2.2-new-features/index.html:637:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-2.2-release-process/index.html:536:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-2.2-release-process/index.html:537:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-2.2-released/index.html:412:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-2.2-released/index.html:413:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-2.3/index.html:383:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-2.3/index.html:384:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-3-api-design/index.html:432:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-3-api-design/index.html:433:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-3.0-preview-1-released/index.html:442:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-3.0-preview-1-released/index.html:443:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-3.0-release-process/index.html:572:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-3.0-release-process/index.html:573:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-3.0-released/index.html:505:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-3.0-released/index.html:506:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-3.1-release-process/index.html:511:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-3.1-release-process/index.html:512:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-3.1-released/index.html:477:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-3.1-released/index.html:478:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-4.0-release-process/index.html:533:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-4.0-release-process/index.html:534:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-4.0-released/index.html:506:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-4.0-released/index.html:507:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-4.1-release-process/index.html:503:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-4.1-release-process/index.html:504:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-4.1-released/index.html:486:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-4.1-released/index.html:487:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-4.2-released/index.html:500:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-4.2-released/index.html:501:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-5-exclusivity/index.html:787:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-5-exclusivity/index.html:788:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-5-released/index.html:489:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-5-released/index.html:490:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-5.1-released/index.html:486:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-5.1-released/index.html:487:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-5.2-released/index.html:638:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-5.2-released/index.html:639:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-5.3-released/index.html:616:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-5.3-released/index.html:617:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-5.4-released/index.html:529:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-5.4-released/index.html:530:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-5.5-released/index.html:393:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-5.5-released/index.html:394:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-5.6-released/index.html:515:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-5.6-released/index.html:516:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-5.7-released/index.html:531:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-5.7-released/index.html:532:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-5.8-released/index.html:507:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-5.8-released/index.html:508:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-CI/index.html:383:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-CI/index.html:384:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-algorithms/index.html:459:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-algorithms/index.html:460:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-api-transformation/index.html:453:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-api-transformation/index.html:454:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-async-algorithms/index.html:493:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-async-algorithms/index.html:494:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-atomics/index.html:499:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-atomics/index.html:500:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-benchmark-suite/index.html:405:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-benchmark-suite/index.html:406:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-certificates-and-asn1/index.html:414:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-certificates-and-asn1/index.html:415:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-cluster-membership/index.html:489:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-cluster-membership/index.html:490:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-collections/index.html:617:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-collections/index.html:618:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-commit-access/index.html:361:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-commit-access/index.html:362:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-community-hosted-CI/index.html:386:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-community-hosted-CI/index.html:387:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-docc/index.html:520:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-docc/index.html:521:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-evolution-status-page/index.html:365:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-evolution-status-page/index.html:366:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-language-updates-from-wwdc22/index.html:585:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-language-updates-from-wwdc22/index.html:586:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-linux-port/index.html:447:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-linux-port/index.html:448:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-local-refactoring/index.html:718:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-local-refactoring/index.html:719:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-mentorship-program/index.html:369:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-mentorship-program/index.html:370:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-nio-imap/index.html:509:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-nio-imap/index.html:510:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-on-windows/index.html:436:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-on-windows/index.html:437:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-package-index-developer-spotlight/index.html:410:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-package-index-developer-spotlight/index.html:411:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-package-manager-manifest-api-redesign/index.html:621:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-package-manager-manifest-api-redesign/index.html:622:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-service-discovery/index.html:463:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-service-discovery/index.html:464:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-service-lifecycle/index.html:433:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-service-lifecycle/index.html:434:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-source-compatibility-test-suite/index.html:384:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-source-compatibility-test-suite/index.html:385:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-summer-of-code-2022-summary/index.html:541:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-summer-of-code-2022-summary/index.html:542:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-system/index.html:477:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-system/index.html:478:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-xcode-playground-support/index.html:374:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swift-xcode-playground-support/index.html:375:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swiftnio-ssh/index.html:475:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swiftnio-ssh/index.html:476:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swiftpm-repl-support/index.html:499:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/swiftpm-repl-support/index.html:500:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/tsan-support-on-linux/index.html:482:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/tsan-support-on-linux/index.html:483:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/tspl-on-docc/index.html:378:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/tspl-on-docc/index.html:379:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/using-upcoming-feature-flags/index.html:546:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/using-upcoming-feature-flags/index.html:547:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/utf8-string/index.html:523:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/utf8-string/index.html:524:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/vscode-extension/index.html:415:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/vscode-extension/index.html:416:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/website-open-source/index.html:443:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/website-open-source/index.html:444:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/welcome/index.html:376:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/welcome/index.html:377:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/whole-module-optimizations/index.html:467:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/whole-module-optimizations/index.html:468:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/womens-history-month/index.html:394:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/womens-history-month/index.html:395:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/xcode-9.1-improves-display-of-fatal-errors/index.html:396:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/blog/xcode-9.1-improves-display-of-fatal-errors/index.html:397:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/code-of-conduct/index.html:353:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/code-of-conduct/index.html:354:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/community/index.html:499:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/community/index.html:500:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/continuous-integration/index.html:380:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/continuous-integration/index.html:381:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/contributing/index.html:420:

  'a' tag is missing a reference

* At /output/contributing/index.html:688:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/contributing/index.html:689:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/contributor-experience-workgroup/index.html:368:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/contributor-experience-workgroup/index.html:369:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/core-libraries/index.html:388:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/core-libraries/index.html:389:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/cxx-interop-workgroup/index.html:356:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/cxx-interop-workgroup/index.html:357:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/diversity/index.html:384:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/diversity/index.html:385:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/documentation-workgroup/index.html:428:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/documentation-workgroup/index.html:429:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/documentation/api-design-guidelines/index.html:1416:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/documentation/api-design-guidelines/index.html:1417:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/documentation/cxx-interop/index.html:2372:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/documentation/cxx-interop/index.html:2373:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/documentation/cxx-interop/project-build-setup/index.html:618:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/documentation/cxx-interop/project-build-setup/index.html:619:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/documentation/cxx-interop/status/index.html:866:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/documentation/cxx-interop/status/index.html:867:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/documentation/index.html:427:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/documentation/index.html:428:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/download/index.html:12487:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/download/index.html:12488:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/getting-started/index.html:1146:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/getting-started/index.html:1147:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/gsoc2019/index.html:467:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/gsoc2019/index.html:468:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/gsoc2020/index.html:549:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/gsoc2020/index.html:550:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/gsoc2021/index.html:522:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/gsoc2021/index.html:523:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/gsoc2022/index.html:759:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/gsoc2022/index.html:760:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/gsoc2023/index.html:512:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/gsoc2023/index.html:513:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/index.html:316:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/index.html:317:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/language-steering-group/index.html:427:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/language-steering-group/index.html:428:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/legal/license.html:341:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/legal/license.html:342:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/lldb/index.html:416:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/lldb/index.html:417:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/mentorship-interest-survey/index.html:314:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/mentorship-interest-survey/index.html:315:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/mentorship-tos/index.html:371:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/mentorship-tos/index.html:372:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/mentorship/index.html:456:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/mentorship/index.html:457:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/migration-guide-swift3/index.html:702:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/migration-guide-swift3/index.html:703:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/migration-guide-swift3/se-0107-migrate.html:635:

  unsafeRawPointer.bindMemory(to:capacity:) is an invalid URL

* At /output/migration-guide-swift3/se-0107-migrate.html:1295:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/migration-guide-swift3/se-0107-migrate.html:1296:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/migration-guide-swift4.2/index.html:439:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/migration-guide-swift4.2/index.html:440:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/migration-guide-swift4/index.html:440:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/migration-guide-swift4/index.html:441:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/migration-guide-swift5/index.html:421:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/migration-guide-swift5/index.html:422:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/package-manager/index.html:670:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/package-manager/index.html:671:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/platform-support/index.html:578:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/platform-support/index.html:579:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/project-ideas/index.html:566:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/project-ideas/index.html:567:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/quickstart-contribution/index.html:615:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/quickstart-contribution/index.html:616:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/allocations.html:651:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/allocations.html:652:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/building.html:358:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/building.html:359:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/deploying/aws-copilot-fargate-vapor-mongo.html:881:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/deploying/aws-copilot-fargate-vapor-mongo.html:882:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/deploying/aws-sam-lambda.html:711:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/deploying/aws-sam-lambda.html:712:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/deploying/aws.html:431:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/deploying/aws.html:432:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/deploying/digital-ocean.html:372:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/deploying/digital-ocean.html:373:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/deploying/gcp.html:523:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/deploying/gcp.html:524:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/deploying/heroku.html:412:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/deploying/heroku.html:413:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/deploying/ubuntu.html:497:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/deploying/ubuntu.html:498:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/deployment.html:342:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/deployment.html:343:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/index.html:337:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/index.html:338:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/libraries/concurrency-adoption-guidelines.html:508:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/libraries/concurrency-adoption-guidelines.html:509:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/libraries/log-levels.html:554:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/libraries/log-levels.html:555:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/linux-perf.html:450:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/linux-perf.html:451:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/llvm-sanitizers.html:339:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/llvm-sanitizers.html:340:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/memory-leaks-and-usage.html:543:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/memory-leaks-and-usage.html:544:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/packaging.html:456:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/packaging.html:457:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/performance.html:452:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/performance.html:453:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/setup-and-ide-alternatives.html:348:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/setup-and-ide-alternatives.html:349:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/testing.html:345:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/guides/testing.html:346:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/index.html:366:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/server/index.html:367:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/source-code/index.html:423:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/source-code/index.html:424:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/source-compatibility/index.html:805:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/source-compatibility/index.html:806:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/sswg/incubation-process.html:567:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/sswg/incubation-process.html:568:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/sswg/index.html:586:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/sswg/index.html:587:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/sswg/security/contributor-found-vulnerability.html:318:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/sswg/security/contributor-found-vulnerability.html:319:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/sswg/security/index.html:328:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/sswg/security/index.html:329:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/sswg/security/package-maintainer-received-vulnerability-report.html:334:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/sswg/security/package-maintainer-received-vulnerability-report.html:335:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/sswg/security/package-requirements.html:336:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/sswg/security/package-requirements.html:337:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/standard-library/index.html:392:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/standard-library/index.html:393:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/support/security.html:464:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/support/security.html:465:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/swift-compiler/index.html:402:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/swift-compiler/index.html:403:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/swift-evolution/index.html:343:

  'a' tag is missing a reference

* At /output/swift-evolution/index.html:373:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/swift-evolution/index.html:374:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/website-governance/index.html:360:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/website-governance/index.html:361:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/website-workgroup/index.html:379:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/website-workgroup/index.html:380:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

* At /output/website/index.html:386:

  //www.apple.com/privacy/privacy-policy/ is a protocol-relative URL, use explicit https:// instead

* At /output/website/index.html:387:

  //www.apple.com/legal/privacy/en-ww/cookies/ is a protocol-relative URL, use explicit https:// instead

For the Links > External check, the following failures were found:

* At /output/404.html:27:

  External link https://swift.org/404.html failed: Not Found (status code 404)

* At /output/CONTRIBUTORS.html:27:

  External link https://swift.org/CONTRIBUTORS failed: Not Found (status code 404)

* At /output/blog/black-history-month/index.html:359:

  External link https://devchat.tv/iphreaks/ips-296-swift-on-raspberry-pi-with-marc-aupont/ failed: Not Found (status code 404)

* At /output/blog/bridging-pch/index.html:364:

  External link https://lists.swift.org/mailman/listinfo/swift-users failed (status code 404)

* At /output/blog/focus-areas-2023/index.html:343:

  External link https://www.swift.org/language-workgroup/ failed: Forbidden (status code 403)

* At /output/blog/forums/index.html:330:

  External link https://lists.swift.org/mailman/listinfo failed (status code 404)

* At /output/blog/index.html:1358:

  External link https://lists.swift.org/mailman/listinfo failed (status code 404)

* At /output/blog/index.html:1534:

  External link https://apple.github.io/swift-evolution/ failed (status code 404)

* At /output/blog/iuo/index.html:399:

  External link https://developer.apple.com/documentation/swift/array/2908681-map failed: Not Found (status code 404)

* At /output/blog/iuo/index.html:401:

  External link https://developer.apple.com/documentation/swift/optional/1539476-map failed: Not Found (status code 404)

* At /output/blog/library-evolution/index.html:796:

  External link https://en.wikipedia.org/wiki/Object_type_(object-oriented_programming%5C)#Boxing failed (status code 404)

* At /output/blog/sswg-update-2023/index.html:411:

  External link https://swiftpackageindex.com/swift-server/RediStack/1.5.1/documentation/redistack failed (status code 404)

* At /output/blog/swift-2.2-release-process/index.html:436:

  External link https://lists.swift.org/mailman/listinfo/swift-dev failed (status code 404)

* At /output/blog/swift-2.2-release-process/index.html:464:

  External link https://lists.swift.org/mailman/listinfo/swift-dev failed (status code 404)

* At /output/blog/swift-2.2-released/index.html:366:

  External link https://developer.apple.com/xcode/download/ failed: Not Found (status code 404)

* At /output/blog/swift-2.3/index.html:347:

  External link https://developer.apple.com/xcode/download failed: Not Found (status code 404)

* At /output/blog/swift-3.0-preview-1-released/index.html:393:

  External link https://developer.apple.com/xcode/download failed: Not Found (status code 404)

* At /output/blog/swift-3.0-preview-1-released/index.html:401:

  External link https://itunes.apple.com/us/book/the-swift-programming-language/id1002622538?mt=11 failed (status code 404)

* At /output/blog/swift-3.0-release-process/index.html:439:

  External link https://lists.swift.org/mailman/listinfo/swift-dev failed (status code 404)

* At /output/blog/swift-3.0-release-process/index.html:504:

  External link https://lists.swift.org/mailman/listinfo/swift-dev failed (status code 404)

* At /output/blog/swift-3.1-release-process/index.html:343:

  External link https://lists.swift.org/mailman/listinfo/swift-evolution failed (status code 404)

* At /output/blog/swift-3.1-release-process/index.html:444:

  External link https://lists.swift.org/mailman/listinfo/swift-dev failed (status code 404)

* At /output/blog/swift-4.0-release-process/index.html:370:

  External link https://lists.swift.org/mailman/listinfo/swift-evolution failed (status code 404)

* At /output/blog/swift-4.0-release-process/index.html:466:

  External link https://lists.swift.org/mailman/listinfo/swift-dev failed (status code 404)

* At /output/blog/swift-4.1-release-process/index.html:438:

  External link https://lists.swift.org/mailman/listinfo/swift-dev failed (status code 404)

* At /output/blog/swift-5.7-released/index.html:400:

  External link https://apple.github.io/swift-evolution/#?version=5.7 failed (status code 404)

* At /output/blog/swift-5.7-released/index.html:446:

  External link https://apple.github.io/swift-evolution/#?version=5.7 failed (status code 404)

* At /output/blog/swift-5.8-released/index.html:455:

  External link https://apple.github.io/swift-evolution/#?version=5.8 failed (status code 404)

* At /output/blog/swift-evolution-status-page/index.html:330:

  External link https://apple.github.io/swift-evolution/ failed (status code 404)

* At /output/blog/swift-language-updates-from-wwdc22/index.html:376:

  External link https://apple.github.io/swift-evolution/#?version=5.7 failed (status code 404)

* At /output/blog/swift-language-updates-from-wwdc22/index.html:376:

  External link https://apple.github.io/swift-evolution/#?version=5.6 failed (status code 404)

* At /output/blog/swift-local-refactoring/index.html:688:

  External link https://lists.swift.org/mailman/listinfo/swift-dev failed (status code 404)

* At /output/blog/swiftnio-ssh/index.html:338:

  External link https://twistedmatrix.com/trac/wiki/TwistedConch failed (status code 404)

* At /output/blog/tsan-support-on-linux/index.html:332:

  External link https://developer.apple.com/documentation/code_diagnostics/thread_sanitizer failed: Not Found (status code 404)

* At /output/blog/womens-history-month/index.html:361:

  External link https://tanaschita.com/20190715-ios-interview-questions-and-answers-for-senior-developers-part-1 failed (status code 404)

* At /output/download/index.html:7520:

  External link https://developer.apple.com/xcode/download/ failed: Not Found (status code 404)

* At /output/download/index.html:7573:

  External link https://developer.apple.com/xcode/download/ failed: Not Found (status code 404)

* At /output/quickstart-contribution/index.html:435:

  External link https://download.swift.org/development/xcode/swift-DEVELOPMENT-SNAPSHOT-2019-06-06-a/swift-DEVELOPMENT-SNAPSHOT-2019-06-06-a-osx.pkg failed: Not Found (status code 404)

* At /output/server/guides/linux-perf.html:431:

  External link https://kb.vmware.com/s/article/81623 failed (status code 403)

For the Links > Internal check, the following failures were found:

* At /output/blog/4.2-release-process/index.html:344:

  internally linking to /abi-stability/, which does not exist

* At /output/blog/5.0-release-process/index.html:341:

  internally linking to /abi-stability/, which does not exist

* At /output/blog/distributed-actors/index.html:340:

  internally linking to /downloads, which does not exist

* At /output/blog/index.html:384:

  internally linking to #language-and-standard-library; the file exists, but the hash 'language-and-standard-library' does not

* At /output/blog/index.html:384:

  internally linking to #developer-experience; the file exists, but the hash 'developer-experience' does not

* At /output/blog/index.html:384:

  internally linking to #swift-docc; the file exists, but the hash 'swift-docc' does not

* At /output/blog/index.html:384:

  internally linking to #swift-package-manager; the file exists, but the hash 'swift-package-manager' does not

* At /output/blog/index.html:384:

  internally linking to #swiftsyntax; the file exists, but the hash 'swiftsyntax' does not

* At /output/blog/index.html:384:

  internally linking to #windows-platform; the file exists, but the hash 'windows-platform' does not

* At /output/blog/index.html:1655:

  internally linking to /contributing/#participating-in-the-swift-evolution-process; the file exists, but the hash 'participating-in-the-swift-evolution-process' does not

* At /output/blog/swift-2.2-new-features/index.html:332:

  internally linking to /contributing/#participating-in-the-swift-evolution-process; the file exists, but the hash 'participating-in-the-swift-evolution-process' does not

* At /output/blog/swift-2.2-new-features/index.html:607:

  internally linking to /blog/swift-2-2-released/, which does not exist

* At /output/blog/swift-2.2-released/index.html:336:

  internally linking to /contributing/#participating-in-the-swift-evolution-process; the file exists, but the hash 'participating-in-the-swift-evolution-process' does not

* At /output/blog/swift-2.2-released/index.html:354:

  internally linking to /documentation/#the-swift-programming-language; the file exists, but the hash 'the-swift-programming-language' does not

* At /output/blog/swift-2.2-released/index.html:382:

  internally linking to /blog/swift-2-2-release-process/, which does not exist

* At /output/blog/swift-3.0-preview-1-released/index.html:334:

  internally linking to /blog/swift-3-0-release-process/, which does not exist

* At /output/blog/swift-3.0-preview-1-released/index.html:401:

  internally linking to /documentation/#the-swift-programming-language; the file exists, but the hash 'the-swift-programming-language' does not

* At /output/blog/swift-3.0-preview-1-released/index.html:412:

  internally linking to /migration-guide/, which does not exist

* At /output/blog/swift-3.0-released/index.html:339:

  internally linking to /contributing/#participating-in-the-swift-evolution-process; the file exists, but the hash 'participating-in-the-swift-evolution-process' does not

* At /output/blog/swift-3.0-released/index.html:438:

  internally linking to /migration-guide/, which does not exist

* At /output/blog/swift-3.0-released/index.html:442:

  internally linking to /documentation/#the-swift-programming-language; the file exists, but the hash 'the-swift-programming-language' does not

* At /output/blog/swift-3.0-released/index.html:475:

  internally linking to /blog/swift-3-0-release-process/, which does not exist

* At /output/blog/swift-3.1-released/index.html:319:

  internally linking to /contributing/#participating-in-the-swift-evolution-process; the file exists, but the hash 'participating-in-the-swift-evolution-process' does not

* At /output/blog/swift-3.1-released/index.html:413:

  internally linking to /migration-guide/, which does not exist

* At /output/blog/swift-3.1-released/index.html:416:

  internally linking to /documentation/#the-swift-programming-language; the file exists, but the hash 'the-swift-programming-language' does not

* At /output/blog/swift-3.1-released/index.html:447:

  internally linking to /blog/swift-3-0-release-process/, which does not exist

* At /output/blog/swift-4.0-released/index.html:439:

  internally linking to /documentation/#the-swift-programming-language; the file exists, but the hash 'the-swift-programming-language' does not

* At /output/blog/swift-4.1-release-process/index.html:336:

  internally linking to /abi-stability/, which does not exist

* At /output/blog/swift-4.1-released/index.html:338:

  internally linking to /contributing/#participating-in-the-swift-evolution-process; the file exists, but the hash 'participating-in-the-swift-evolution-process' does not

* At /output/blog/swift-4.1-released/index.html:408:

  internally linking to /abi-stability/, which does not exist

* At /output/blog/swift-4.1-released/index.html:419:

  internally linking to /migration-guide/, which does not exist

* At /output/blog/swift-4.1-released/index.html:423:

  internally linking to /documentation/#the-swift-programming-language; the file exists, but the hash 'the-swift-programming-language' does not

* At /output/blog/swift-4.1-released/index.html:456:

  internally linking to /blog/swift-3-0-release-process/, which does not exist

* At /output/blog/swift-4.2-released/index.html:367:

  internally linking to /abi-stability/, which does not exist

* At /output/blog/swift-api-transformation/index.html:384:

  internally linking to /community/#mailing-lists; the file exists, but the hash 'mailing-lists' does not

* At /output/blog/swift-api-transformation/index.html:416:

  internally linking to /contributing/#participating-in-the-swift-evolution-process; the file exists, but the hash 'participating-in-the-swift-evolution-process' does not

* At /output/blog/swift-docc/index.html:472:

  internally linking to /documentation/docc, which does not exist

* At /output/blog/swift-language-updates-from-wwdc22/index.html:376:

  internally linking to /download/#swift-57-development; the file exists, but the hash 'swift-57-development' does not

* At /output/blog/swift-linux-port/index.html:349:

  internally linking to /compiler-stdlib/, which does not exist

* At /output/blog/welcome/index.html:341:

  internally linking to /community/#mailing-lists; the file exists, but the hash 'mailing-lists' does not

* At /output/community/index.html:204:

  internally linking to /community/#license; the file exists, but the hash 'license' does not

* At /output/continuous-integration/index.html:312:

  internally linking to ../contributing/#contributing_code; the file exists, but the hash 'contributing_code' does not

* At /output/contributing/index.html:378:

  internally linking to #participating-in-the-swift-evolution-process; the file exists, but the hash 'participating-in-the-swift-evolution-process' does not

* At /output/contributing/index.html:478:

  internally linking to /community/#swift-development; the file exists, but the hash 'swift-development' does not

* At /output/contributing/index.html:674:

  internally linking to /community/#license; the file exists, but the hash 'license' does not

* At /output/documentation/cxx-interop/status/index.html:804:

  internally linking to project-build-setup#vending-packages-that-enable-c-interoperability, which does not exist

* At /output/documentation/index.html:376:

  internally linking to /documentation/docc, which does not exist

* At /output/server/guides/deploying/aws.html:365:

  internally linking to /download/#releasess; the file exists, but the hash 'releasess' does not

* At /output/sswg/incubation-process.html:432:

  internally linking to /server/#projects; the file exists, but the hash 'projects' does not

* At /output/sswg/incubation-process.html:458:

  internally linking to /community/#code-of-conduct; the file exists, but the hash 'code-of-conduct' does not

* At /output/sswg/index.html:237:

  internally linking to /sswg/#governance; the file exists, but the hash 'governance' does not

* At /output/sswg/index.html:239:

  internally linking to /sswg/#website-workgroup; the file exists, but the hash 'website-workgroup' does not

* At /output/sswg/security/package-maintainer-received-vulnerability-report.html:304:

  internally linking to /server/#projects; the file exists, but the hash 'projects' does not

* At /output/sswg/security/package-requirements.html:308:

  internally linking to server/#projects, which does not exist


HTML-Proofer found 474 failures!

@natikgadzhi natikgadzhi force-pushed the internal/ci-htmlproofer branch from d7f9503 to 5884f9a Compare August 26, 2023 03:52
@natikgadzhi natikgadzhi requested a review from tkremenek as a code owner August 26, 2023 05:00
Copy link
Contributor Author

@natikgadzhi natikgadzhi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added an example of how we can resolve one "family" of issues — if the general direction of this seems useful, I will work to isolate the actual links leading to 404 and fix those first.

docker-compose.yaml Outdated Show resolved Hide resolved
@@ -6,7 +6,7 @@ title: Swift 5.8 Released!
author: [alexandersandberg]
---

Swift 5.8 is now officially released! 🎉 This release includes major additions to the [language and standard library](#language-and-standard-library), including `hasFeature` to support piecemeal adoption of upcoming features, an improved [developer experience](#developer-experience), improvements to tools in the Swift ecosystem including [Swift-DocC](#swift-docc), [Swift Package Manager](#swift-package-manager), and [SwiftSyntax](#swiftsyntax), refined [Windows support](#windows-platform), and more.
Swift 5.8 is now officially released! 🎉 This release includes major additions to the [language and standard library]({% link _posts/2023-03-30-swift-5.8-released.md%}#language-and-standard-library), including `hasFeature` to support piecemeal adoption of upcoming features, an improved [developer experience](#developer-experience), improvements to tools in the Swift ecosystem including [Swift-DocC](#swift-docc), [Swift Package Manager](#swift-package-manager), and [SwiftSyntax](#swiftsyntax), refined [Windows support](#windows-platform), and more.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is an example of how we can use a liquid helper to build a link, achieving two things:

  1. Since this link includes relative path to this article, when excerpt gets rendered on /blog/ page, the link would still be valid.
  2. {% link %} performs a validation when it's rendering. If the resulting link is invalid, it won't render, and the generation will fail.

The amount of work to change all links lime that would be colossal, though.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if we can add a custom tag, something like anchor_url(to_post=post.slug, anchor) and then just search and replace links in posts where <a href="#{whatever}".

That way, it would be easier to convert them all in one pass.

@alexandersandberg
Copy link
Member

cc: @shahmishal

@natikgadzhi natikgadzhi force-pushed the internal/ci-htmlproofer branch from ed90a60 to 10145c3 Compare August 26, 2023 19:10
@natikgadzhi
Copy link
Contributor Author

With the footer links fixed in 61807b7, we're down to 95 errors:

Here they are

For the Links check, the following failures were found:

* At /output/contributing/index.html:420:

  'a' tag is missing a reference

* At /output/migration-guide-swift3/se-0107-migrate.html:635:

  unsafeRawPointer.bindMemory(to:capacity:) is an invalid URL

* At /output/swift-evolution/index.html:343:

  'a' tag is missing a reference

For the Links > External check, the following failures were found:

* At /output/404.html:27:

  External link https://swift.org/404.html failed: Not Found (status code 404)

* At /output/CONTRIBUTORS.html:27:

  External link https://swift.org/CONTRIBUTORS failed: Not Found (status code 404)

* At /output/blog/black-history-month/index.html:359:

  External link https://devchat.tv/iphreaks/ips-296-swift-on-raspberry-pi-with-marc-aupont/ failed: Not Found (status code 404)

* At /output/blog/bridging-pch/index.html:364:

  External link https://lists.swift.org/mailman/listinfo/swift-users failed (status code 404)

* At /output/blog/focus-areas-2023/index.html:343:

  External link https://www.swift.org/language-workgroup/ failed: Forbidden (status code 403)

* At /output/blog/forums/index.html:330:

  External link https://lists.swift.org/mailman/listinfo failed (status code 404)

* At /output/blog/index.html:1358:

  External link https://lists.swift.org/mailman/listinfo failed (status code 404)

* At /output/blog/index.html:1534:

  External link https://apple.github.io/swift-evolution/ failed (status code 404)

* At /output/blog/iuo/index.html:399:

  External link https://developer.apple.com/documentation/swift/array/2908681-map failed: Not Found (status code 404)

* At /output/blog/iuo/index.html:401:

  External link https://developer.apple.com/documentation/swift/optional/1539476-map failed: Not Found (status code 404)

* At /output/blog/library-evolution/index.html:796:

  External link https://en.wikipedia.org/wiki/Object_type_(object-oriented_programming%5C)#Boxing failed (status code 404)

* At /output/blog/sswg-update-2023/index.html:411:

  External link https://swiftpackageindex.com/swift-server/RediStack/1.5.1/documentation/redistack failed (status code 404)

* At /output/blog/swift-2.2-release-process/index.html:436:

  External link https://lists.swift.org/mailman/listinfo/swift-dev failed (status code 404)

* At /output/blog/swift-2.2-release-process/index.html:464:

  External link https://lists.swift.org/mailman/listinfo/swift-dev failed (status code 404)

* At /output/blog/swift-2.2-released/index.html:366:

  External link https://developer.apple.com/xcode/download/ failed: Not Found (status code 404)

* At /output/blog/swift-2.3/index.html:347:

  External link https://developer.apple.com/xcode/download failed: Not Found (status code 404)

* At /output/blog/swift-3.0-preview-1-released/index.html:393:

  External link https://developer.apple.com/xcode/download failed: Not Found (status code 404)

* At /output/blog/swift-3.0-preview-1-released/index.html:401:

  External link https://itunes.apple.com/us/book/the-swift-programming-language/id1002622538?mt=11 failed (status code 404)

* At /output/blog/swift-3.0-release-process/index.html:439:

  External link https://lists.swift.org/mailman/listinfo/swift-dev failed (status code 404)

* At /output/blog/swift-3.0-release-process/index.html:504:

  External link https://lists.swift.org/mailman/listinfo/swift-dev failed (status code 404)

* At /output/blog/swift-3.1-release-process/index.html:343:

  External link https://lists.swift.org/mailman/listinfo/swift-evolution failed (status code 404)

* At /output/blog/swift-3.1-release-process/index.html:444:

  External link https://lists.swift.org/mailman/listinfo/swift-dev failed (status code 404)

* At /output/blog/swift-4.0-release-process/index.html:370:

  External link https://lists.swift.org/mailman/listinfo/swift-evolution failed (status code 404)

* At /output/blog/swift-4.0-release-process/index.html:466:

  External link https://lists.swift.org/mailman/listinfo/swift-dev failed (status code 404)

* At /output/blog/swift-4.1-release-process/index.html:438:

  External link https://lists.swift.org/mailman/listinfo/swift-dev failed (status code 404)

* At /output/blog/swift-5.7-released/index.html:400:

  External link https://apple.github.io/swift-evolution/#?version=5.7 failed (status code 404)

* At /output/blog/swift-5.7-released/index.html:446:

  External link https://apple.github.io/swift-evolution/#?version=5.7 failed (status code 404)

* At /output/blog/swift-5.8-released/index.html:455:

  External link https://apple.github.io/swift-evolution/#?version=5.8 failed (status code 404)

* At /output/blog/swift-evolution-status-page/index.html:330:

  External link https://apple.github.io/swift-evolution/ failed (status code 404)

* At /output/blog/swift-language-updates-from-wwdc22/index.html:376:

  External link https://apple.github.io/swift-evolution/#?version=5.7 failed (status code 404)

* At /output/blog/swift-language-updates-from-wwdc22/index.html:376:

  External link https://apple.github.io/swift-evolution/#?version=5.6 failed (status code 404)

* At /output/blog/swift-local-refactoring/index.html:688:

  External link https://lists.swift.org/mailman/listinfo/swift-dev failed (status code 404)

* At /output/blog/swiftnio-ssh/index.html:338:

  External link https://twistedmatrix.com/trac/wiki/TwistedConch failed (status code 404)

* At /output/blog/tsan-support-on-linux/index.html:332:

  External link https://developer.apple.com/documentation/code_diagnostics/thread_sanitizer failed: Forbidden (status code 403)

* At /output/blog/womens-history-month/index.html:361:

  External link https://tanaschita.com/20190715-ios-interview-questions-and-answers-for-senior-developers-part-1 failed (status code 404)

* At /output/download/index.html:7520:

  External link https://developer.apple.com/xcode/download/ failed: Not Found (status code 404)

* At /output/download/index.html:7573:

  External link https://developer.apple.com/xcode/download/ failed: Not Found (status code 404)

* At /output/quickstart-contribution/index.html:435:

  External link https://download.swift.org/development/xcode/swift-DEVELOPMENT-SNAPSHOT-2019-06-06-a/swift-DEVELOPMENT-SNAPSHOT-2019-06-06-a-osx.pkg failed: Not Found (status code 404)

* At /output/server/guides/linux-perf.html:431:

  External link https://kb.vmware.com/s/article/81623 failed (status code 403)

For the Links > Internal check, the following failures were found:

* At /output/blog/4.2-release-process/index.html:344:

  internally linking to /abi-stability/, which does not exist

* At /output/blog/5.0-release-process/index.html:341:

  internally linking to /abi-stability/, which does not exist

* At /output/blog/distributed-actors/index.html:340:

  internally linking to /downloads, which does not exist

* At /output/blog/index.html:384:

  internally linking to #developer-experience; the file exists, but the hash 'developer-experience' does not

* At /output/blog/index.html:384:

  internally linking to #swift-docc; the file exists, but the hash 'swift-docc' does not

* At /output/blog/index.html:384:

  internally linking to #swift-package-manager; the file exists, but the hash 'swift-package-manager' does not

* At /output/blog/index.html:384:

  internally linking to #swiftsyntax; the file exists, but the hash 'swiftsyntax' does not

* At /output/blog/index.html:384:

  internally linking to #windows-platform; the file exists, but the hash 'windows-platform' does not

* At /output/blog/index.html:1655:

  internally linking to /contributing/#participating-in-the-swift-evolution-process; the file exists, but the hash 'participating-in-the-swift-evolution-process' does not

* At /output/blog/swift-2.2-new-features/index.html:332:

  internally linking to /contributing/#participating-in-the-swift-evolution-process; the file exists, but the hash 'participating-in-the-swift-evolution-process' does not

* At /output/blog/swift-2.2-new-features/index.html:607:

  internally linking to /blog/swift-2-2-released/, which does not exist

* At /output/blog/swift-2.2-released/index.html:336:

  internally linking to /contributing/#participating-in-the-swift-evolution-process; the file exists, but the hash 'participating-in-the-swift-evolution-process' does not

* At /output/blog/swift-2.2-released/index.html:354:

  internally linking to /documentation/#the-swift-programming-language; the file exists, but the hash 'the-swift-programming-language' does not

* At /output/blog/swift-2.2-released/index.html:382:

  internally linking to /blog/swift-2-2-release-process/, which does not exist

* At /output/blog/swift-3.0-preview-1-released/index.html:334:

  internally linking to /blog/swift-3-0-release-process/, which does not exist

* At /output/blog/swift-3.0-preview-1-released/index.html:401:

  internally linking to /documentation/#the-swift-programming-language; the file exists, but the hash 'the-swift-programming-language' does not

* At /output/blog/swift-3.0-preview-1-released/index.html:412:

  internally linking to /migration-guide/, which does not exist

* At /output/blog/swift-3.0-released/index.html:339:

  internally linking to /contributing/#participating-in-the-swift-evolution-process; the file exists, but the hash 'participating-in-the-swift-evolution-process' does not

* At /output/blog/swift-3.0-released/index.html:438:

  internally linking to /migration-guide/, which does not exist

* At /output/blog/swift-3.0-released/index.html:442:

  internally linking to /documentation/#the-swift-programming-language; the file exists, but the hash 'the-swift-programming-language' does not

* At /output/blog/swift-3.0-released/index.html:475:

  internally linking to /blog/swift-3-0-release-process/, which does not exist

* At /output/blog/swift-3.1-released/index.html:319:

  internally linking to /contributing/#participating-in-the-swift-evolution-process; the file exists, but the hash 'participating-in-the-swift-evolution-process' does not

* At /output/blog/swift-3.1-released/index.html:413:

  internally linking to /migration-guide/, which does not exist

* At /output/blog/swift-3.1-released/index.html:416:

  internally linking to /documentation/#the-swift-programming-language; the file exists, but the hash 'the-swift-programming-language' does not

* At /output/blog/swift-3.1-released/index.html:447:

  internally linking to /blog/swift-3-0-release-process/, which does not exist

* At /output/blog/swift-4.0-released/index.html:439:

  internally linking to /documentation/#the-swift-programming-language; the file exists, but the hash 'the-swift-programming-language' does not

* At /output/blog/swift-4.1-release-process/index.html:336:

  internally linking to /abi-stability/, which does not exist

* At /output/blog/swift-4.1-released/index.html:338:

  internally linking to /contributing/#participating-in-the-swift-evolution-process; the file exists, but the hash 'participating-in-the-swift-evolution-process' does not

* At /output/blog/swift-4.1-released/index.html:408:

  internally linking to /abi-stability/, which does not exist

* At /output/blog/swift-4.1-released/index.html:419:

  internally linking to /migration-guide/, which does not exist

* At /output/blog/swift-4.1-released/index.html:423:

  internally linking to /documentation/#the-swift-programming-language; the file exists, but the hash 'the-swift-programming-language' does not

* At /output/blog/swift-4.1-released/index.html:456:

  internally linking to /blog/swift-3-0-release-process/, which does not exist

* At /output/blog/swift-4.2-released/index.html:367:

  internally linking to /abi-stability/, which does not exist

* At /output/blog/swift-api-transformation/index.html:384:

  internally linking to /community/#mailing-lists; the file exists, but the hash 'mailing-lists' does not

* At /output/blog/swift-api-transformation/index.html:416:

  internally linking to /contributing/#participating-in-the-swift-evolution-process; the file exists, but the hash 'participating-in-the-swift-evolution-process' does not

* At /output/blog/swift-docc/index.html:472:

  internally linking to /documentation/docc, which does not exist

* At /output/blog/swift-language-updates-from-wwdc22/index.html:376:

  internally linking to /download/#swift-57-development; the file exists, but the hash 'swift-57-development' does not

* At /output/blog/swift-linux-port/index.html:349:

  internally linking to /compiler-stdlib/, which does not exist

* At /output/blog/welcome/index.html:341:

  internally linking to /community/#mailing-lists; the file exists, but the hash 'mailing-lists' does not

* At /output/community/index.html:204:

  internally linking to /community/#license; the file exists, but the hash 'license' does not

* At /output/continuous-integration/index.html:312:

  internally linking to ../contributing/#contributing_code; the file exists, but the hash 'contributing_code' does not

* At /output/contributing/index.html:378:

  internally linking to #participating-in-the-swift-evolution-process; the file exists, but the hash 'participating-in-the-swift-evolution-process' does not

* At /output/contributing/index.html:478:

  internally linking to /community/#swift-development; the file exists, but the hash 'swift-development' does not

* At /output/contributing/index.html:674:

  internally linking to /community/#license; the file exists, but the hash 'license' does not

* At /output/documentation/cxx-interop/status/index.html:804:

  internally linking to project-build-setup#vending-packages-that-enable-c-interoperability, which does not exist

* At /output/documentation/index.html:376:

  internally linking to /documentation/docc, which does not exist

* At /output/server/guides/deploying/aws.html:365:

  internally linking to /download/#releasess; the file exists, but the hash 'releasess' does not

* At /output/sswg/incubation-process.html:432:

  internally linking to /server/#projects; the file exists, but the hash 'projects' does not

* At /output/sswg/incubation-process.html:458:

  internally linking to /community/#code-of-conduct; the file exists, but the hash 'code-of-conduct' does not

* At /output/sswg/index.html:237:

  internally linking to /sswg/#governance; the file exists, but the hash 'governance' does not

* At /output/sswg/index.html:239:

  internally linking to /sswg/#website-workgroup; the file exists, but the hash 'website-workgroup' does not

* At /output/sswg/security/package-maintainer-received-vulnerability-report.html:304:

  internally linking to /server/#projects; the file exists, but the hash 'projects' does not

* At /output/sswg/security/package-requirements.html:308:

  internally linking to server/#projects, which does not exist


HTML-Proofer found 95 failures!

This is manageable, I can power through them, so we start with a clean slate when we merge this (if we choose to merge this at all, no hard feelings if this is not the direction we would like to adopt).

@tomerd
Copy link
Contributor

tomerd commented Aug 28, 2023

thanks @natikgadzhi that would be very useful

@natikgadzhi natikgadzhi force-pushed the internal/ci-htmlproofer branch from 61807b7 to bd0325e Compare September 6, 2023 05:51
@shahmishal
Copy link
Member

@swift-ci test

@natikgadzhi natikgadzhi force-pushed the internal/ci-htmlproofer branch from bd0325e to 520f823 Compare September 10, 2023 05:12
@natikgadzhi
Copy link
Contributor Author

@shahmishal okay, good news / bad news:

  • I'm back at this ;) Rebased over the main after content-improvements merge.
    • Extracted the check into a separate docker-compose job.
  • Fixed a few missing alt attributes.
  • Started fixing links. There are a few. Some are easy, some require a bit of research to figure out where to link to.

I also tried to keep each individual commit meaningful, so I would suggest not squashing them in case we'll need to blame / review this later.

I think we can merge this and wire up the check into the CI and GitHub checks, and I can hunt down the rest of the broken links in batches. How do you feel about that approach?

natikgadzhi added a commit to natikgadzhi/swift-org-website that referenced this pull request Sep 15, 2023
- This commit is part of the work to clean up all our broken links in
  swiftlang#369. This can be shipped on it's own, so I'm separating it out to
  keep the main PR as small as possible.
- This commit replaces links to `https://lists.swift.org/mailman/listinfo`
  with `https://lists.swift.org/pipermail/`
- In cases where we guide users to submit feedback, I've also added a `>
  Note` that explains that mailing lists are now closed and archived,
  and they should use forums instead.
@natikgadzhi natikgadzhi force-pushed the internal/ci-htmlproofer branch from 67ed0a0 to cb037aa Compare September 15, 2023 18:06
@natikgadzhi
Copy link
Contributor Author

@shahmishal, this PR is in decent shape I think — we can merge this and I will work through the list in separate follow-up PRs. That way, you can wire up the CI check docker-compose run check-links, while I work on the links.

Until you have a moment to do this, I'll contribute more fixes in here. I'm separating fixes if they span multiple files, and keeping simple fixes in this PR, but in separate commits, so it's easy to review commit by commit.

This commit fixes 4 more broken links: the navigation menu item,
the reference-less link, and two other blog posts.

The `_navigation.yml` and several pages linked to
`/contributing/#evolution-process`, and we had an `<a>` tag with
`name="evolution-process"`, which is invalid in `htmlproofer`s eyes
because it's a link that does not have a reference.

Jekyll makes `id`s for every heading automatically, and we have
`/contributing/#swift-evolution` that we should link to instead.
The 404.html page renders with HTTP404 code, but that's valid. Hence, we
should ignore that page in `check_links.sh`
@shahmishal
Copy link
Member

@swift-ci test links

@shahmishal
Copy link
Member

+ /tmp/jenkins-92cb4e8f/workspace/pr-swift-org-website-check-links/docker-compose -f /tmp/jenkins-92cb4e8f/workspace/pr-swift-org-website-check-links/swift-org-website/docker-compose.yaml --ansi never run -T -e http_proxy=http://proxy.config.pcp.local:3128/ -e https_proxy=http://proxy.config.pcp.local:3128/ check-links
 Network swift-org-website_default  Creating
 Network swift-org-website_default  Created
 Container swift-org-website-docker-setup-1  Creating
 Container swift-org-website-docker-setup-1  Created
 Container swift-org-website-docker-setup-1  Starting
 Container swift-org-website-docker-setup-1  Started
Resolving dependencies...
The Gemfile's dependencies are satisfied
Configuration file: /srv/jekyll/_config.yml
            Source: /srv/jekyll
       Destination: /output
 Incremental build: disabled. Enable with --incremental
      Generating... 
                    done in 3.612 seconds.
 Auto-regeneration: disabled. Use --watch to enable.
bundler: failed to load command: htmlproofer (/usr/local/bundle/bin/htmlproofer)
/usr/local/bundle/gems/html-proofer-5.0.8/lib/html_proofer/configuration.rb:68:in `parse_cli_options': invalid option: --allow-empty-href (OptionParser::InvalidOption)
Did you mean?  allow-missing-href

Let me know if I got something wrong in the setup.

We have just one link without the `href` attribute, which is a button in
the Swift Evolutions browser. We know it's valid, and the case where `<a>`
tags won't have `href`s is rare, so we can safely ignore them in the
check.
In 0317303, I've added `htmlproofer` to
`Gemfile`, but did not commit the changes to `Gemfile.lock`. This commit
adds it back.
@natikgadzhi natikgadzhi force-pushed the internal/ci-htmlproofer branch from 51de20d to 42a8209 Compare September 17, 2023 18:42
@natikgadzhi
Copy link
Contributor Author

@shahmishal, thank you for setting it up! That was my mistake, just pushed a fix.

@shahmishal
Copy link
Member

@swift-ci test links

1 similar comment
@shahmishal
Copy link
Member

@swift-ci test links

@natikgadzhi
Copy link
Contributor Author

It's alive! The check works correctly now, 101 failures sounds about right. I'm slowly making my way through that list.

shahmishal pushed a commit that referenced this pull request Sep 18, 2023
- This commit is part of the work to clean up all our broken links in
  #369. This can be shipped on it's own, so I'm separating it out to
  keep the main PR as small as possible.
- This commit replaces links to `https://lists.swift.org/mailman/listinfo`
  with `https://lists.swift.org/pipermail/`
- In cases where we guide users to submit feedback, I've also added a `>
  Note` that explains that mailing lists are now closed and archived,
  and they should use forums instead.
@dempseyatgithub
Copy link
Contributor

@natikgadzhi First, thank you for all the work you are doing on this!

Your previous comments regarding twitter.com links inspired me to have us prefer GitHub profiles to Twitter/X profiles in PR #408 and #409.

I believe once #409 is merged, it should be possible to tighten up the exclusion for twitter.com links and only need to exclude:

Hopefully that will help us to avoid adding new links to profiles that require a sign-in.

@shahmishal
Copy link
Member

@swift-ci test links

@natikgadzhi
Copy link
Contributor Author

Upd: this is still in progress, and I fully intend to get this to fully clean state with zero broken links per linter.

But, this and last week were pretty full for me, hence the slowdown. I'll be back to work (on this) on Friday!

@mrcnski

This comment was marked as resolved.

@parispittman
Copy link
Member

@natikgadzhi - hey out there, are you still interested in working on this? Thanks!

@natikgadzhi
Copy link
Contributor Author

@parispittman I have not looked at this in a while. I'm happy to help dust this off and rebase over master and make a loom overview, and perhaps we can figure out a good path forward? It looked like everyone wants this, but it's becomming a big PR that is challenging to manage. We should probably chunk it up into a series of smaller ones.

Does that sound about right?

@shahmishal
Copy link
Member

@natikgadzhi, please let me know if I can help with anything to get this merged. It would be a great addition to the testing suite. Also, @sahilshahdesign is interested in contributing to the website, so if you have a few tasks he can help with on this PR, please let us know. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add automation to discover broken links
8 participants