From 8a7101e2e10f78be0c141a4b88811a95fd84e4f8 Mon Sep 17 00:00:00 2001 From: Jaalah Ramos <125309814+jaalah-akamai@users.noreply.github.com> Date: Mon, 27 Oct 2025 11:52:58 -0400 Subject: [PATCH 1/4] hotfix: [M3-10688] - Add ability to enter migration queue (#13016) * hotfix: [M3-10688] - Add ability to enter migration queue * Bump version and changelog --------- Co-authored-by: Jaalah Ramos --- packages/manager/CHANGELOG.md | 5 + packages/manager/package.json | 2 +- .../LinodeMaintenanceBanner.tsx | 146 ++++++++++++++---- .../components/ExtraPresetMaintenance.tsx | 3 + 4 files changed, 121 insertions(+), 35 deletions(-) diff --git a/packages/manager/CHANGELOG.md b/packages/manager/CHANGELOG.md index 71f310cca27..bb0d886c86a 100644 --- a/packages/manager/CHANGELOG.md +++ b/packages/manager/CHANGELOG.md @@ -4,6 +4,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +## [2025-10-24] - v1.153.2 + +### Fixed: + +- Add self-service maintenance action in LinodeMaintenanceBanner for power_off_on and include all maintenance types in dev tools preset. ([#13016](https://github.com/linode/manager/pull/13016)) ## [2025-10-22] - v1.153.1 diff --git a/packages/manager/package.json b/packages/manager/package.json index 75b0d51f78d..80098dd7cfd 100644 --- a/packages/manager/package.json +++ b/packages/manager/package.json @@ -2,7 +2,7 @@ "name": "linode-manager", "author": "Linode", "description": "The Linode Manager website", - "version": "1.153.1", + "version": "1.153.2", "private": true, "type": "module", "bugs": { diff --git a/packages/manager/src/components/MaintenanceBanner/LinodeMaintenanceBanner.tsx b/packages/manager/src/components/MaintenanceBanner/LinodeMaintenanceBanner.tsx index 9240f0ddb50..ef7f180b378 100644 --- a/packages/manager/src/components/MaintenanceBanner/LinodeMaintenanceBanner.tsx +++ b/packages/manager/src/components/MaintenanceBanner/LinodeMaintenanceBanner.tsx @@ -1,10 +1,14 @@ +import { scheduleOrQueueMigration } from '@linode/api-v4/lib/linodes'; import { useAllAccountMaintenanceQuery } from '@linode/queries'; -import { Notice, Typography } from '@linode/ui'; +import { ActionsPanel, LinkButton, Notice, Typography } from '@linode/ui'; +import { useDialog } from '@linode/utilities'; +import { useSnackbar } from 'notistack'; import React from 'react'; import { PENDING_MAINTENANCE_FILTER } from 'src/features/Account/Maintenance/utilities'; import { isPlatformMaintenance } from 'src/hooks/usePlatformMaintenance'; +import { ConfirmationDialog } from '../ConfirmationDialog/ConfirmationDialog'; import { DateTimeDisplay } from '../DateTimeDisplay'; import { Link } from '../Link'; @@ -13,6 +17,7 @@ interface Props { } export const LinodeMaintenanceBanner = ({ linodeId }: Props) => { + const { enqueueSnackbar } = useSnackbar(); const { data: allMaintenance } = useAllAccountMaintenanceQuery( {}, PENDING_MAINTENANCE_FILTER, @@ -31,45 +36,118 @@ export const LinodeMaintenanceBanner = ({ linodeId }: Props) => { const maintenanceStartTime = linodeMaintenance?.start_time || linodeMaintenance?.when; + const { closeDialog, dialog, handleError, openDialog, submitDialog } = + useDialog((id: number) => scheduleOrQueueMigration(id)); + + const isScheduled = Boolean(maintenanceStartTime); + + const actionLabel = isScheduled + ? 'enter the migration queue' + : 'schedule your migration'; + const showMigrateAction = + linodeId !== undefined && linodeMaintenance?.type === 'power_off_on'; + + const onSubmit = () => { + if (!linodeId) { + return; + } + submitDialog(linodeId) + .then(() => { + const successMessage = isScheduled + ? 'Your Linode has been entered into the migration queue.' + : 'Your migration has been scheduled.'; + enqueueSnackbar(successMessage, { variant: 'success' }); + }) + .catch(() => { + const errorMessage = isScheduled + ? 'An error occurred entering the migration queue.' + : 'An error occurred scheduling your migration.'; + handleError(errorMessage); + }); + }; + + const actions = () => ( + + ); + if (!linodeMaintenance) return null; return ( - - - Linode {linodeMaintenance.entity.label} {linodeMaintenance.description}{' '} - maintenance {maintenanceTypeLabel} will begin{' '} - - {maintenanceStartTime ? ( + <> + + + Linode {linodeMaintenance.entity.label}{' '} + {linodeMaintenance.description} maintenance {maintenanceTypeLabel}{' '} + will begin{' '} + + {maintenanceStartTime ? ( + <> + ({ + font: theme.font.bold, + })} + value={maintenanceStartTime} + />{' '} + at{' '} + ({ + font: theme.font.bold, + })} + value={maintenanceStartTime} + /> + + ) : ( + 'soon' + )} + + . For more details, view{' '} + + Account Maintenance + + {showMigrateAction ? ( <> - ({ - font: theme.font.bold, - })} - value={maintenanceStartTime} - />{' '} - at{' '} - ({ - font: theme.font.bold, - })} - value={maintenanceStartTime} - /> + {' or '} + openDialog(linodeId)}> + {actionLabel} + + {' now.'} ) : ( - 'soon' + '.' )} - - . For more details, view{' '} - - Account Maintenance - - . - - + + + closeDialog()} + open={dialog.isOpen} + title="Confirm Migration" + > + + Are you sure you want to{' '} + {isScheduled + ? 'enter the migration queue now' + : 'schedule your migration now'} + ? + + + ); }; diff --git a/packages/manager/src/dev-tools/components/ExtraPresetMaintenance.tsx b/packages/manager/src/dev-tools/components/ExtraPresetMaintenance.tsx index d1266c97001..c257d22db49 100644 --- a/packages/manager/src/dev-tools/components/ExtraPresetMaintenance.tsx +++ b/packages/manager/src/dev-tools/components/ExtraPresetMaintenance.tsx @@ -109,6 +109,9 @@ const renderMaintenanceFields = ( + + + , From 4b2c5dddc082c7069c67ac96e6809d77949cb2f2 Mon Sep 17 00:00:00 2001 From: Purvesh Makode Date: Mon, 27 Oct 2025 22:50:07 +0530 Subject: [PATCH 2/4] hotfix: [UIE-9467] - Update Linode invoice US address (#13019) * Linode invoice US address update * Update changelog --------- Co-authored-by: Banks Nussman --- packages/manager/CHANGELOG.md | 20 +++++++++++------ .../Billing/PdfGenerator/utils.test.ts | 22 +++++++++---------- .../features/Billing/PdfGenerator/utils.ts | 9 +++----- 3 files changed, 27 insertions(+), 24 deletions(-) diff --git a/packages/manager/CHANGELOG.md b/packages/manager/CHANGELOG.md index bb0d886c86a..43b998882a2 100644 --- a/packages/manager/CHANGELOG.md +++ b/packages/manager/CHANGELOG.md @@ -4,11 +4,19 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). -## [2025-10-24] - v1.153.2 +## [2025-10-27] - v1.153.2 -### Fixed: +### Changed: + +- Linode invoice US address ([#13019](https://github.com/linode/manager/pull/13019)) + +### Added: -- Add self-service maintenance action in LinodeMaintenanceBanner for power_off_on and include all maintenance types in dev tools preset. ([#13016](https://github.com/linode/manager/pull/13016)) +- Self-service maintenance action in LinodeMaintenanceBanner for `power_off_on` ([#13016](https://github.com/linode/manager/pull/13016)) + +### Tech Stories: + +- Include all maintenance types in dev tools preset ([#13016](https://github.com/linode/manager/pull/13016)) ## [2025-10-22] - v1.153.1 @@ -20,12 +28,11 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this p ## [2025-10-21] - v1.153.0 - ### Added: - Volume attached to state ([#12903](https://github.com/linode/manager/pull/12903)) - Profile Update client side validation ([#12963](https://github.com/linode/manager/pull/12963)) -- IAM DX: useDelegationRole hook ([#12979](https://github.com/linode/manager/pull/12979)) +- IAM DX: useDelegationRole hook ([#12979](https://github.com/linode/manager/pull/12979)) ### Changed: @@ -74,7 +81,6 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this p ## [2025-10-07] - v1.152.0 - ### Added: - IAM RBAC: disable fields in the drawer ([#12892](https://github.com/linode/manager/pull/12892)) @@ -93,7 +99,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this p - Getting started link on the volume details page ([#12904](https://github.com/linode/manager/pull/12904)) - ACLP: update default `ACLP Time Range Picker Preset` to `1 hour` ([#12915](https://github.com/linode/manager/pull/12915)) - Check Region VPC availability for IPv6 prefix lengths instead of hardcoded prefix lengths ([#12919](https://github.com/linode/manager/pull/12919)) -- IAM Delegation: remove ProxyUserTable ([#12921](https://github.com/linode/manager/pull/12921)) +- IAM Delegation: remove ProxyUserTable ([#12921](https://github.com/linode/manager/pull/12921)) - Add padding inside the ManagedDashboardCard component ([#12923](https://github.com/linode/manager/pull/12923)) - Assorted VPC IPv4 and VPC IPv6 copy ([#12924](https://github.com/linode/manager/pull/12924)) - IAM RBAC: replace grants with usePermission hook in Linodes ([#12932](https://github.com/linode/manager/pull/12932)) diff --git a/packages/manager/src/features/Billing/PdfGenerator/utils.test.ts b/packages/manager/src/features/Billing/PdfGenerator/utils.test.ts index 943f8580518..577398df86e 100644 --- a/packages/manager/src/features/Billing/PdfGenerator/utils.test.ts +++ b/packages/manager/src/features/Billing/PdfGenerator/utils.test.ts @@ -74,20 +74,20 @@ describe('getRemitAddress', () => { expect(result.entity).toBe('Linode'); }); - it('should return Linode address with Akamai entity when country is US and using Akamai billing', () => { - const result = getRemitAddress('US', true); - expect(result).toEqual(ADDRESSES.linode); - expect(result.entity).toBe('Akamai Technologies, Inc.'); - }); + it('should return Akamai US address when country is CA or US and using Akamai billing', () => { + const result1 = getRemitAddress('CA', true); + expect(result1).toEqual(ADDRESSES.akamai.us); - it('should return Akamai US address when country is CA and using Akamai billing', () => { - const result = getRemitAddress('CA', true); - expect(result).toEqual(ADDRESSES.akamai.us); + const result2 = getRemitAddress('US', true); + expect(result2).toEqual(ADDRESSES.akamai.us); }); - it('should return Linode address when country is CA and not using Akamai billing', () => { - const result = getRemitAddress('CA', false); - expect(result).toEqual(ADDRESSES.linode); + it('should return Linode address when country is CA or US and not using Akamai billing', () => { + const result1 = getRemitAddress('CA', false); + expect(result1).toEqual(ADDRESSES.linode); + + const result2 = getRemitAddress('US', false); + expect(result2).toEqual(ADDRESSES.linode); }); it('should return Akamai international address for other countries when using Akamai billing', () => { diff --git a/packages/manager/src/features/Billing/PdfGenerator/utils.ts b/packages/manager/src/features/Billing/PdfGenerator/utils.ts index fac56e0a41b..c681bef212b 100644 --- a/packages/manager/src/features/Billing/PdfGenerator/utils.ts +++ b/packages/manager/src/features/Billing/PdfGenerator/utils.ts @@ -440,13 +440,10 @@ export const getRemitAddress = (country: string, isAkamaiBilling: boolean) => { if (!isAkamaiBilling) { return ADDRESSES.linode; } - // M3-6218: Temporarily change "Remit To" address for US customers back to the Philly address - if (country === 'US') { - ADDRESSES.linode.entity = 'Akamai Technologies, Inc.'; - return ADDRESSES.linode; - } - if (['CA'].includes(country)) { + + if (['CA', 'US'].includes(country)) { return ADDRESSES.akamai.us; } + return ADDRESSES.akamai.international; }; From 02a2a751664d37f7ae71d8d8bb2126721a4db5a7 Mon Sep 17 00:00:00 2001 From: Banks Nussman <115251059+bnussman-akamai@users.noreply.github.com> Date: Tue, 28 Oct 2025 09:24:51 -0400 Subject: [PATCH 3/4] Revert "hotfix: [M3-10688] - Add ability to enter migration queue" (#13023) * Revert "hotfix: [M3-10688] - Add ability to enter migration queue (#13016)" This reverts commit 8a7101e2e10f78be0c141a4b88811a95fd84e4f8. * version bump --- packages/manager/CHANGELOG.md | 8 - .../LinodeMaintenanceBanner.tsx | 146 ++++-------------- .../components/ExtraPresetMaintenance.tsx | 3 - 3 files changed, 34 insertions(+), 123 deletions(-) diff --git a/packages/manager/CHANGELOG.md b/packages/manager/CHANGELOG.md index 43b998882a2..e0ad73c516b 100644 --- a/packages/manager/CHANGELOG.md +++ b/packages/manager/CHANGELOG.md @@ -10,14 +10,6 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this p - Linode invoice US address ([#13019](https://github.com/linode/manager/pull/13019)) -### Added: - -- Self-service maintenance action in LinodeMaintenanceBanner for `power_off_on` ([#13016](https://github.com/linode/manager/pull/13016)) - -### Tech Stories: - -- Include all maintenance types in dev tools preset ([#13016](https://github.com/linode/manager/pull/13016)) - ## [2025-10-22] - v1.153.1 ### Fixed: diff --git a/packages/manager/src/components/MaintenanceBanner/LinodeMaintenanceBanner.tsx b/packages/manager/src/components/MaintenanceBanner/LinodeMaintenanceBanner.tsx index ef7f180b378..9240f0ddb50 100644 --- a/packages/manager/src/components/MaintenanceBanner/LinodeMaintenanceBanner.tsx +++ b/packages/manager/src/components/MaintenanceBanner/LinodeMaintenanceBanner.tsx @@ -1,14 +1,10 @@ -import { scheduleOrQueueMigration } from '@linode/api-v4/lib/linodes'; import { useAllAccountMaintenanceQuery } from '@linode/queries'; -import { ActionsPanel, LinkButton, Notice, Typography } from '@linode/ui'; -import { useDialog } from '@linode/utilities'; -import { useSnackbar } from 'notistack'; +import { Notice, Typography } from '@linode/ui'; import React from 'react'; import { PENDING_MAINTENANCE_FILTER } from 'src/features/Account/Maintenance/utilities'; import { isPlatformMaintenance } from 'src/hooks/usePlatformMaintenance'; -import { ConfirmationDialog } from '../ConfirmationDialog/ConfirmationDialog'; import { DateTimeDisplay } from '../DateTimeDisplay'; import { Link } from '../Link'; @@ -17,7 +13,6 @@ interface Props { } export const LinodeMaintenanceBanner = ({ linodeId }: Props) => { - const { enqueueSnackbar } = useSnackbar(); const { data: allMaintenance } = useAllAccountMaintenanceQuery( {}, PENDING_MAINTENANCE_FILTER, @@ -36,118 +31,45 @@ export const LinodeMaintenanceBanner = ({ linodeId }: Props) => { const maintenanceStartTime = linodeMaintenance?.start_time || linodeMaintenance?.when; - const { closeDialog, dialog, handleError, openDialog, submitDialog } = - useDialog((id: number) => scheduleOrQueueMigration(id)); - - const isScheduled = Boolean(maintenanceStartTime); - - const actionLabel = isScheduled - ? 'enter the migration queue' - : 'schedule your migration'; - const showMigrateAction = - linodeId !== undefined && linodeMaintenance?.type === 'power_off_on'; - - const onSubmit = () => { - if (!linodeId) { - return; - } - submitDialog(linodeId) - .then(() => { - const successMessage = isScheduled - ? 'Your Linode has been entered into the migration queue.' - : 'Your migration has been scheduled.'; - enqueueSnackbar(successMessage, { variant: 'success' }); - }) - .catch(() => { - const errorMessage = isScheduled - ? 'An error occurred entering the migration queue.' - : 'An error occurred scheduling your migration.'; - handleError(errorMessage); - }); - }; - - const actions = () => ( - - ); - if (!linodeMaintenance) return null; return ( - <> - - - Linode {linodeMaintenance.entity.label}{' '} - {linodeMaintenance.description} maintenance {maintenanceTypeLabel}{' '} - will begin{' '} - - {maintenanceStartTime ? ( - <> - ({ - font: theme.font.bold, - })} - value={maintenanceStartTime} - />{' '} - at{' '} - ({ - font: theme.font.bold, - })} - value={maintenanceStartTime} - /> - - ) : ( - 'soon' - )} - - . For more details, view{' '} - - Account Maintenance - - {showMigrateAction ? ( + + + Linode {linodeMaintenance.entity.label} {linodeMaintenance.description}{' '} + maintenance {maintenanceTypeLabel} will begin{' '} + + {maintenanceStartTime ? ( <> - {' or '} - openDialog(linodeId)}> - {actionLabel} - - {' now.'} + ({ + font: theme.font.bold, + })} + value={maintenanceStartTime} + />{' '} + at{' '} + ({ + font: theme.font.bold, + })} + value={maintenanceStartTime} + /> ) : ( - '.' + 'soon' )} - - - closeDialog()} - open={dialog.isOpen} - title="Confirm Migration" - > - - Are you sure you want to{' '} - {isScheduled - ? 'enter the migration queue now' - : 'schedule your migration now'} - ? - - - + + . For more details, view{' '} + + Account Maintenance + + . + + ); }; diff --git a/packages/manager/src/dev-tools/components/ExtraPresetMaintenance.tsx b/packages/manager/src/dev-tools/components/ExtraPresetMaintenance.tsx index c257d22db49..d1266c97001 100644 --- a/packages/manager/src/dev-tools/components/ExtraPresetMaintenance.tsx +++ b/packages/manager/src/dev-tools/components/ExtraPresetMaintenance.tsx @@ -109,9 +109,6 @@ const renderMaintenanceFields = ( - - - , From ae97be6a371c5c79f1808ecd81dd74741b3845bd Mon Sep 17 00:00:00 2001 From: Banks Nussman <115251059+bnussman-akamai@users.noreply.github.com> Date: Tue, 28 Oct 2025 11:11:20 -0400 Subject: [PATCH 4/4] Update packages/manager/CHANGELOG.md Co-authored-by: Dajahi Wiley <114682940+dwiley-akamai@users.noreply.github.com> --- packages/manager/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/manager/CHANGELOG.md b/packages/manager/CHANGELOG.md index e0ad73c516b..3331204a547 100644 --- a/packages/manager/CHANGELOG.md +++ b/packages/manager/CHANGELOG.md @@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). -## [2025-10-27] - v1.153.2 +## [2025-10-28] - v1.153.2 ### Changed: