Register
Login
Resources
Docs Blog Datasets Glossary Case Studies Tutorials & Webinars
Product
Data Engine LLMs Platform Enterprise
Pricing Explore
Connect to our Discord channel

release-notes.js 3.5 KB

You have to be logged in to leave a comment. Sign In
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
  1. const semver = require('semver')
  2. const { all, latest, firstReleaseNote } = require('../../lib/enterprise-server-releases')
  3. const { sortReleasesByDate, sortPatchKeys, renderPatchNotes, getAllReleases } = require('../../lib/release-notes-utils')
  4. // Display all GHES release notes, regardless of deprecation status,
  5. // starting with the first release notes in 2.20
  6. const supported = all.filter(release => {
  7. return semver.gte(
  8. semver.coerce(release), semver.coerce(firstReleaseNote)
  9. ) && release !== '11.10.340'
  10. })
  11. module.exports = async function releaseNotesContext (req, res, next) {
  12. // The `/release-notes` sub-path
  13. if (!(req.pagePath.endsWith('/release-notes') || req.pagePath.endsWith('/admin'))) return next()
  14. const [requestedPlan, requestedRelease] = req.context.currentVersion.split('@')
  15. const releaseNotesPerPlan = req.context.site.data['release-notes'][requestedPlan]
  16. // Release notes handling differs if version has numbered releases (like GHES) or not (like GHAE)
  17. const hasNumberedReleases = !(requestedRelease === 'latest')
  18. // 404 if no release notes can be found or the requested release is not valid
  19. if (!releaseNotesPerPlan) return next()
  20. if (hasNumberedReleases && !all.includes(requestedRelease)) return next()
  21. // GHES gets handled here...
  22. if (hasNumberedReleases) {
  23. const currentReleaseNotes = releaseNotesPerPlan[`${requestedRelease.replace(/\./g, '-')}`]
  24. if (!currentReleaseNotes && req.pagePath.endsWith('/release-notes')) {
  25. // If the GHES version doesn't have any release notes, let's be helpful and redirect to `enterprise.github.com`
  26. return requestedPlan === 'enterprise-server'
  27. ? res.redirect(`https://enterprise.github.com/releases/${requestedRelease}.0/notes`)
  28. : next()
  29. }
  30. const patches = sortPatchKeys(currentReleaseNotes, requestedRelease, { semverSort: hasNumberedReleases })
  31. req.context.releaseNotes = await Promise.all(patches.map(async patch => renderPatchNotes(patch, req.context)))
  32. req.context.releases = getAllReleases(supported, releaseNotesPerPlan, hasNumberedReleases)
  33. // Add firstPreviousRelease and secondPreviousRelease convenience props for use in includes/product-releases.html
  34. req.context.releases.forEach(release => {
  35. release.firstPreviousRelease = all[all.findIndex(v => v === release.version) + 1]
  36. release.secondPreviousRelease = all[all.findIndex(v => v === release.firstPreviousRelease) + 1]
  37. })
  38. const releaseIndex = supported.findIndex(release => release === requestedRelease)
  39. req.context.nextRelease = supported[releaseIndex - 1]
  40. req.context.prevRelease = supported[releaseIndex + 1]
  41. req.context.latestPatch = patches[0].version
  42. req.context.latestRelease = latest
  43. }
  44. // GHAE gets handled here...
  45. if (!hasNumberedReleases) {
  46. const sortedReleases = sortReleasesByDate(releaseNotesPerPlan)
  47. const sortedNotes = sortedReleases.map(release => sortPatchKeys(releaseNotesPerPlan[release], release, { semverSort: false })).flat()
  48. req.context.releaseNotes = await Promise.all(sortedNotes.map(async patch => renderPatchNotes(patch, req.context)))
  49. req.context.releases = getAllReleases(sortedReleases, releaseNotesPerPlan, hasNumberedReleases)
  50. // do some date format massaging, since we want the friendly date to render as the "version"
  51. .map(r => {
  52. const d = r.patches[0].friendlyDate.split(' ')
  53. d.splice(1, 1)
  54. r.version = d.join(' ')
  55. return r
  56. })
  57. req.context.latestPatch = sortedNotes[0].date
  58. }
  59. return next()
  60. }
Tip!

Press p or to see the previous file or, n or to see the next file

Comments

Loading...