diff --git a/frontend-modern/src/components/ReleaseAnnouncementBanner.tsx b/frontend-modern/src/components/ReleaseAnnouncementBanner.tsx index 2202a7690..bcec4f7aa 100644 --- a/frontend-modern/src/components/ReleaseAnnouncementBanner.tsx +++ b/frontend-modern/src/components/ReleaseAnnouncementBanner.tsx @@ -4,11 +4,11 @@ import { useLocation } from '@solidjs/router'; import type { VersionInfo } from '@/api/updates'; import type { SecurityStatus } from '@/types/config'; import { - V6_RC_ANNOUNCEMENT, - shouldShowV6RcAnnouncement, + V6_GA_ANNOUNCEMENT, + shouldShowV6Announcement, } from '@/constants/releaseAnnouncements'; import { createLocalStorageStringSignal, STORAGE_KEYS } from '@/utils/localStorage'; -import FlaskConicalIcon from 'lucide-solid/icons/flask-conical'; +import InfoIcon from 'lucide-solid/icons/info'; import ExternalLinkIcon from 'lucide-solid/icons/external-link'; import XIcon from 'lucide-solid/icons/x'; @@ -23,7 +23,7 @@ export function ReleaseAnnouncementBanner(props: ReleaseAnnouncementBannerProps) createLocalStorageStringSignal(STORAGE_KEYS.RELEASE_ANNOUNCEMENT_DISMISSED, ''); const isDismissed = createMemo( - () => dismissedAnnouncementId() === V6_RC_ANNOUNCEMENT.id, + () => dismissedAnnouncementId() === V6_GA_ANNOUNCEMENT.id, ); const shouldShow = createMemo(() => { @@ -31,7 +31,7 @@ export function ReleaseAnnouncementBanner(props: ReleaseAnnouncementBannerProps) return false; } - return shouldShowV6RcAnnouncement({ + return shouldShowV6Announcement({ version: props.versionInfo()?.version, pathname: location.pathname, securityStatus: props.securityStatus(), @@ -39,7 +39,7 @@ export function ReleaseAnnouncementBanner(props: ReleaseAnnouncementBannerProps) }); const dismiss = () => { - setDismissedAnnouncementId(V6_RC_ANNOUNCEMENT.id); + setDismissedAnnouncementId(V6_GA_ANNOUNCEMENT.id); }; return ( @@ -49,50 +49,38 @@ export function ReleaseAnnouncementBanner(props: ReleaseAnnouncementBannerProps)
- +
- Pulse v6 RC testing - - {V6_RC_ANNOUNCEMENT.tag} - + Pulse v6 is available

+ Pulse v6 is a new major version with a rebuilt interface and support for + more platforms. Installs on the{' '} 5.1.x {' '} - remains the current stable line. Pulse v6 changes the runtime, - upgrade path, navigation, and product model substantially. If you rely on - Pulse today, test v6 in a staging or non-production environment and report - any issues before the stable cut. + line do not update to v6 automatically; upgrading is a manual step. See + the upgrade guide for what changes and how to move.

@@ -103,7 +91,7 @@ export function ReleaseAnnouncementBanner(props: ReleaseAnnouncementBannerProps) onClick={dismiss} class="rounded-md p-1 text-emerald-700 transition-colors hover:bg-emerald-100 hover:text-emerald-900 dark:text-emerald-300 dark:hover:bg-emerald-900/50 dark:hover:text-emerald-100" title="Dismiss" - aria-label="Dismiss v6 RC announcement" + aria-label="Dismiss v6 announcement" > diff --git a/frontend-modern/src/components/Settings/UpdatesSettingsPanel.tsx b/frontend-modern/src/components/Settings/UpdatesSettingsPanel.tsx index c6f808c17..7676c3efd 100644 --- a/frontend-modern/src/components/Settings/UpdatesSettingsPanel.tsx +++ b/frontend-modern/src/components/Settings/UpdatesSettingsPanel.tsx @@ -8,7 +8,7 @@ import Package from 'lucide-solid/icons/package'; import Download from 'lucide-solid/icons/download'; import type { UpdateInfo, VersionInfo, UpdatePlan } from '@/api/updates'; import { - V6_RC_ANNOUNCEMENT, + V6_GA_ANNOUNCEMENT, V5_MAINTENANCE_BRANCH, isV5ReleaseLine, } from '@/constants/releaseAnnouncements'; @@ -50,47 +50,36 @@ export const UpdatesSettingsPanel: Component = (props
- Pulse v6 RC testing - - - {V6_RC_ANNOUNCEMENT.tag} + Pulse v6 is available

+ Pulse v6 is a new major version with a rebuilt interface and support + for more platforms. Installs on the{' '} 5.1.x {' '} - remains the stable line. If you can, test v6 in a staging or - non-production environment and use the changelog before upgrading so the - move from v5 is deliberate rather than guesswork. + line do not update to v6 automatically; upgrading is a manual step + covered in the upgrade guide.

diff --git a/frontend-modern/src/constants/__tests__/releaseAnnouncements.test.ts b/frontend-modern/src/constants/__tests__/releaseAnnouncements.test.ts index f41e8bc7c..1ce762077 100644 --- a/frontend-modern/src/constants/__tests__/releaseAnnouncements.test.ts +++ b/frontend-modern/src/constants/__tests__/releaseAnnouncements.test.ts @@ -3,7 +3,7 @@ import type { SecurityStatus } from '@/types/config'; import { canSeeAdminReleaseAnnouncement, isV5ReleaseLine, - shouldShowV6RcAnnouncement, + shouldShowV6Announcement, } from '@/constants/releaseAnnouncements'; describe('releaseAnnouncements', () => { @@ -34,28 +34,28 @@ describe('releaseAnnouncements', () => { it('shows the announcement only on the supported v5 surfaces', () => { expect( - shouldShowV6RcAnnouncement({ + shouldShowV6Announcement({ version: 'v5.1.27', pathname: '/proxmox/overview', }), ).toBe(true); expect( - shouldShowV6RcAnnouncement({ + shouldShowV6Announcement({ version: 'v5.1.27', pathname: '/settings/updates', }), ).toBe(true); expect( - shouldShowV6RcAnnouncement({ + shouldShowV6Announcement({ version: 'v5.1.27', pathname: '/alerts/overview', }), ).toBe(false); expect( - shouldShowV6RcAnnouncement({ + shouldShowV6Announcement({ version: 'v6.0.0-rc.1', pathname: '/settings/updates', }), diff --git a/frontend-modern/src/constants/releaseAnnouncements.ts b/frontend-modern/src/constants/releaseAnnouncements.ts index ae7e24b32..a4656a565 100644 --- a/frontend-modern/src/constants/releaseAnnouncements.ts +++ b/frontend-modern/src/constants/releaseAnnouncements.ts @@ -2,12 +2,10 @@ import type { SecurityStatus } from '@/types/config'; export const V5_MAINTENANCE_BRANCH = 'release/5.1'; -export const V6_RC_ANNOUNCEMENT = { - id: 'v6-rc-testing-v6.0.0-rc.1', - tag: 'v6.0.0-rc.1', - releaseUrl: 'https://github.com/rcourtman/Pulse/releases/tag/v6.0.0-rc.1', - changelogUrl: 'https://github.com/rcourtman/Pulse/blob/pulse/v6-release/docs/releases/V6_CHANGELOG.md', - demoUrl: 'https://v6-demo.pulserelay.pro', +export const V6_GA_ANNOUNCEMENT = { + id: 'v6-ga-available', + upgradeGuideUrl: 'https://github.com/rcourtman/Pulse/blob/main/docs/UPGRADE_v6.md', + changelogUrl: 'https://github.com/rcourtman/Pulse/blob/main/docs/releases/V6_CHANGELOG.md', } as const; function parseMajorVersion(version?: string | null): number | null { @@ -38,7 +36,7 @@ export function canSeeAdminReleaseAnnouncement( return securityStatus.proxyAuthIsAdmin === true; } -export function shouldShowV6RcAnnouncement(opts: { +export function shouldShowV6Announcement(opts: { version?: string | null; pathname?: string | null; securityStatus?: SecurityStatus | null;