Skip to content
Open
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
9ec5b35
fix(updater): ensure full changelog includes only release notes up to…
AbdulrhmanGoni Feb 8, 2026
1bb204b
add error handling with default fallback for new logic if latest vers…
mmaietta Feb 8, 2026
1014d99
Merge branch 'electron-userland:master' into fix/fullChangelog-notes-…
AbdulrhmanGoni Feb 9, 2026
7d79c7c
fix the semver validation logic for release versions
AbdulrhmanGoni Feb 9, 2026
2c8f301
Merge branch 'master' into fix/fullChangelog-notes-range
AbdulrhmanGoni Feb 9, 2026
6262a77
ensure notes of pre-releases will be included in the full changelog
AbdulrhmanGoni Feb 9, 2026
a1cee41
Merge branch 'master' into fix/fullChangelog-notes-range
AbdulrhmanGoni Feb 12, 2026
b1916c1
add tests for semver and fix bug in `semver.gt`
mmaietta Feb 12, 2026
5822a68
Merge branch 'master' into fix/fullChangelog-notes-range
mmaietta Feb 12, 2026
df6fb86
Merge branch 'master' into fix/fullChangelog-notes-range
mmaietta Feb 13, 2026
256a58e
Merge branch 'master' into fix/fullChangelog-notes-range
AbdulrhmanGoni Feb 16, 2026
37ede11
Merge branch 'electron-userland:master' into fix/fullChangelog-notes-…
AbdulrhmanGoni Feb 24, 2026
5d90818
ensure releases versions in full changelog are returned without "v" p…
AbdulrhmanGoni Feb 24, 2026
08d63c4
Merge branch 'master' into fix/fullChangelog-notes-range
mmaietta Mar 5, 2026
30f65b0
fix the tests of `computeReleaseNotes` function
AbdulrhmanGoni Mar 7, 2026
8c3a38e
Merge branch 'master' into fix/fullChangelog-notes-range
AbdulrhmanGoni Mar 10, 2026
10027f3
update import style to a consistent one with other test files
AbdulrhmanGoni Mar 10, 2026
99f1e1c
Merge branch 'master' into fix/fullChangelog-notes-range
AbdulrhmanGoni Mar 10, 2026
3878f7d
Merge branch 'master' into fix/fullChangelog-notes-range
AbdulrhmanGoni Mar 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/clever-candles-cut.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"electron-updater": patch
---

fix(updater): ensure full changelog includes only release notes up to the latest release

33 changes: 29 additions & 4 deletions packages/electron-updater/src/providers/GitHubProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,10 @@ export class GitHubProvider extends BaseGitHubProvider<GithubUpdateInfo> {

// This Release's Tag
const hrefTag = hrefElement[1]
if (!semver.valid(hrefTag)) {
continue
}

//Get Channel from this release's tag
const hrefChannel = (semver.prerelease(hrefTag)?.[0] as string) || null

Expand All @@ -97,12 +101,14 @@ export class GitHubProvider extends BaseGitHubProvider<GithubUpdateInfo> {

if (shouldFetchVersion && !isCustomChannel && !channelMismatch) {
tag = hrefTag
latestRelease = element
break
}

const isNextPreRelease = hrefChannel && hrefChannel === currentChannel
if (isNextPreRelease) {
tag = hrefTag
latestRelease = element
break
}
}
Expand Down Expand Up @@ -215,16 +221,35 @@ function getNoteValue(parent: XElement): string {
return result === "No content." ? "" : result
}

export function computeReleaseNotes(currentVersion: semver.SemVer, isFullChangelog: boolean, feed: XElement, latestRelease: any): string | Array<ReleaseNoteInfo> | null {
export function computeReleaseNotes(currentVersion: semver.SemVer, isFullChangelog: boolean, feed: XElement, latestRelease: XElement): string | Array<ReleaseNoteInfo> | null {
if (!isFullChangelog) {
return getNoteValue(latestRelease)
}
const tagVersionRegex = /\/tag\/v?([^/]+)$/

let latestVersion: string | undefined
try {
latestVersion = tagVersionRegex.exec(latestRelease.element("link").attribute("href"))![1]
} catch (e: any) {
latestVersion = undefined
Comment thread
AbdulrhmanGoni marked this conversation as resolved.
Outdated
}
Comment thread
mmaietta marked this conversation as resolved.
Outdated

const releaseNotes: Array<ReleaseNoteInfo> = []
for (const release of feed.getElements("entry")) {
// noinspection TypeScriptValidateJSTypes
const versionRelease = /\/tag\/v?([^/]+)$/.exec(release.element("link").attribute("href"))![1]
if (semver.valid(versionRelease) && semver.lt(currentVersion, versionRelease)) {
let versionRelease: string | undefined
try {
versionRelease = tagVersionRegex.exec(release.element("link").attribute("href"))![1]
} catch (e: any) {
continue
}
// check `semver.valid` to validate if an electron release, because some repositories can contain also non-electron releases (for example, with documentation or website updates)
if (!semver.valid(versionRelease) || !semver.valid(latestVersion)) {
continue
}

const isGreaterThanCurrent = semver.gt(versionRelease, currentVersion)
const isLessOrEqualThanLatest = semver.lte(versionRelease, latestVersion!)
if (isGreaterThanCurrent && isLessOrEqualThanLatest) {
releaseNotes.push({
version: versionRelease,
note: getNoteValue(release),
Comment thread
mmaietta marked this conversation as resolved.
Expand Down
Loading