Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion .github/workflows/promote-develop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ jobs:
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git tag -f develop
git push origin develop --force
git push origin refs/tags/develop:refs/tags/develop --force

- name: Delete existing develop release (if any)
env:
Expand Down
14 changes: 12 additions & 2 deletions packages/service/src/update-checker.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -134,15 +134,25 @@ describe('UpdateChecker.check()', () => {
expect(result.available).toBe(false);
});

it('returns available=false for non-semver tag names (parseSemver returns null)', async () => {
stubGithubOk({ tag_name: 'not-a-version', html_url: '', prerelease: false });
it('returns available=false for non-semver tag names with no version in name', async () => {
stubGithubOk({ tag_name: 'not-a-version', name: '', html_url: '', prerelease: false });

checker.start('0.1.5', 'latest');
const result = await checker.check();

expect(result.available).toBe(false);
});

it('extracts version from release name for rolling channels (develop/stable)', async () => {
stubGithubOk({ tag_name: 'develop', name: 'Routerly 0.3.0 (develop channel)', html_url: 'https://example.com', prerelease: true });

checker.start('0.2.0', 'develop');
const result = await checker.check();

expect(result.available).toBe(true);
expect(result.latestVersion).toBe('0.3.0');
});

it('keeps existing cached result when a subsequent check fails', async () => {
// First successful check populates the cache
stubGithubOk({ tag_name: 'v1.0.0', html_url: 'https://example.com', prerelease: false });
Expand Down
10 changes: 7 additions & 3 deletions packages/service/src/update-checker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ function isNewer(candidate: string, current: string): boolean {

interface GithubRelease {
tag_name: string;
name: string;
html_url: string;
prerelease: boolean;
draft: boolean;
Expand Down Expand Up @@ -150,9 +151,12 @@ export class UpdateChecker {
const channel = this._channel;
try {
const release = await fetchRelease(channel);
const latestVersion = release.tag_name.startsWith('v')
? release.tag_name.slice(1)
: release.tag_name;
const rawTag = release.tag_name.startsWith('v') ? release.tag_name.slice(1) : release.tag_name;
// For rolling channels (develop, stable) the tag_name is not semver.
// Extract version from the release title, e.g. "Routerly 0.3.0 (develop channel)".
const latestVersion = parseSemver(rawTag)
? rawTag
: (release.name?.match(/(\d+\.\d+\.\d+)/)?.[1] ?? rawTag);

const result: UpdateInfo = {
available: isNewer(latestVersion, this._currentVersion),
Expand Down
Loading