From 9f3e2b601710663c9f9a21aba7de9ea070c1b60e Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Mon, 25 Jan 2021 16:35:15 -0500 Subject: [PATCH 1/2] handle edge case --- middleware/learning-track.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/middleware/learning-track.js b/middleware/learning-track.js index 758912378d..2dbb6c6c20 100644 --- a/middleware/learning-track.js +++ b/middleware/learning-track.js @@ -24,13 +24,22 @@ module.exports = async (req, res, next) => { if (guideIndex > 0) { const prevGuidePath = track.guides[guideIndex - 1] - const { href, title } = await getLinkData(prevGuidePath, req.context, { title: true, intro: false }) + const result = await getLinkData(prevGuidePath, req.context, { title: true, intro: false }) + if (!result) return noTrack() + + const href = result.href + const title = result.title currentLearningTrack.prevGuide = { href, title } } if (guideIndex < track.guides.length - 1) { const nextGuidePath = track.guides[guideIndex + 1] - const { href, title } = await getLinkData(nextGuidePath, req.context, { title: true, intro: false }) + const result = await getLinkData(nextGuidePath, req.context, { title: true, intro: false }) + if (!result) return noTrack() + + const href = result.href + const title = result.title + currentLearningTrack.nextGuide = { href, title } } From 65be8e0cff879f4a4f189693da5e2ed0e939c1bb Mon Sep 17 00:00:00 2001 From: Sarah Schneider Date: Mon, 25 Jan 2021 16:35:26 -0500 Subject: [PATCH 2/2] add some prompts --- script/check-internal-links.js | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/script/check-internal-links.js b/script/check-internal-links.js index 188897f4ef..f2dd680b4f 100755 --- a/script/check-internal-links.js +++ b/script/check-internal-links.js @@ -3,6 +3,7 @@ const linkinator = require('linkinator') const checker = new linkinator.LinkChecker() const { deprecated } = require('../lib/enterprise-server-releases') +const englishRoot = 'http://localhost:4002/en' // [start-readme] // @@ -10,17 +11,23 @@ const { deprecated } = require('../lib/enterprise-server-releases') // not including deprecated Enterprise Server content. This is different from script/check-english-links.js, // which checks *all* links in the site, both internal and external, and is much slower. // +// If you want to run it locally, you must have a local server running. You can use `npm run link-check`. +// // [end-readme] const config = { - path: 'http://localhost:4002/en', + path: englishRoot, // Use concurrency = 10 to optimize for Actions // See https://github.com/JustinBeckwith/linkinator/issues/135#issuecomment-623240879 concurrency: 10, recurse: true, linksToSkip: [ - // Skip any link that is not an internal link - '^((?!http://localhost:4002/en).)*$', + // Skip any link that is not an internal link. + // NOTE: If we want this test to check for broken asset paths in the future, + // we can remove `en` from the path below. This will increase the runtime, but that + // may be an acceptable tradeoff. For the record: `check-external-links`, which runs + // nightly, currently does check for broken asset paths. + `^((?!${englishRoot}).)*$`, // Skip dist files '/dist/index.*', // Skip deprecated Enterprise content @@ -37,6 +44,11 @@ async function main () { .filter(link => link.state === 'BROKEN') .map(link => { delete link.failureDetails; return link }) + if (brokenLinks.length === 1 && brokenLinks[0].url === englishRoot) { + console.log(`You must be running ${englishRoot}!\n\nTry instead: npm run link-check`) + process.exit(1) + } + // Exit successfully if no broken links! if (!brokenLinks.length) { console.log('All links are good!')