Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
30c2181
refactor: [UIE-9323] - Replace Formik with React Hook Form in Databas…
hana-akamai Oct 30, 2025
7f451c9
upcoming: [DPS-34191] - logs delivery pendo tags (#13022)
kagora-akamai Oct 31, 2025
72a3e63
feat: [UIE-9154] - IAM: clean up nodebalancer permissions (#13017)
aaleksee-akamai Oct 31, 2025
1d18a03
fix: [UIE-9456 & UIE-9457] - Typo + expose search filters on /iam/rol…
abailly-akamai Nov 3, 2025
502c4de
feat: [UIE-9481] - IAM: add perm check for the drawer (#13043)
aaleksee-akamai Nov 3, 2025
576ee8b
feat: [UIE-9503] - add empty state to Default Roles/Entities tab (#13…
mpolotsk-akamai Nov 4, 2025
a6636bd
fix: [UIE-9478] - IAM: disable tag edit (#13046)
mpolotsk-akamai Nov 4, 2025
86c874c
Merge branch 'master' into develop
DevDW Nov 4, 2025
67f8ca0
fix: [UIE-9520] - IAM Child Account - user not found error handling (…
abailly-akamai Nov 5, 2025
2a4799b
fix: [UIE-9477] - IAM: disable delete and detach popups for Volumes w…
mpolotsk-akamai Nov 5, 2025
8e1efcf
upcoming: [UIE-9434] - Create feature flag for generational compute p…
grevanak-akamai Nov 5, 2025
cfdac60
test: [DPS-34825] Add cypress tests for Create/Edit Stream forms and …
mduda-akamai Nov 5, 2025
23e4858
refactor: [DI-27807] - Change status of edit & delete button in alert…
nikhagra-akamai Nov 6, 2025
5254642
upcoming: [UIE-9368] - Create a firewall Rulesets & Preflixlists feat…
pmakode-akamai Nov 6, 2025
6d4337d
feat: [UIE-9341, UIE-9342, UIE-9521] - IAM: fix perm for vpcs (#13050)
aaleksee-akamai Nov 6, 2025
fa3304b
refactor: [UIE-9325] - Replace Formik with React Hook Form in AddAcce…
hana-akamai Nov 6, 2025
c38b951
[UIE-9533] -Hopeful fix: Race condition with Preferences overrides in…
abailly-akamai Nov 7, 2025
1682014
feat: [UIE-9393] - IAM Parent/Child: delegate permissions for child a…
aaleksee-akamai Nov 7, 2025
8a1bd09
feat: [UIE-9534] - IAM: fix perm for nodebalancer (#13058)
aaleksee-akamai Nov 7, 2025
8685c35
change:[UIE-9541] Add MSW crud support for types API (#13067)
grevanak-akamai Nov 7, 2025
caabbdf
fix: [UIE-9500] - oAuth issue with IAM OAuthCallback (#13037)
abailly-akamai Nov 7, 2025
69d27cc
upcoming: [UIE-9508] - Add new API endpoints, types and queries for F…
pmakode-akamai Nov 10, 2025
f7649cd
new: [STORIF-142] Volume metrics tab added. (#13027)
dchyrva-akamai Nov 10, 2025
ba8e70d
upcoming: [DPS-35488] Limit Logs feature based on Account Capability …
mduda-akamai Nov 10, 2025
e22b2e1
change: [UIE-9452] - Add MSW crud support for Images (#13025)
harsh-akamai Nov 11, 2025
208bf81
upcoming: [DPS-34191] - Logs Pendo tags - fix inputs (#13069)
kagora-akamai Nov 12, 2025
31fc451
upcoming: [DPS-35271] clean up not needed fields from types (#13038)
kagora-akamai Nov 12, 2025
aaeabe8
fix: [UIE-9495, UIE-9595] - Permissions fixes for admin users on user…
abailly-akamai Nov 12, 2025
7eb591a
fix: [UIE-9555] - IAM: clone Volume permission fix (#13065)
mpolotsk-akamai Nov 12, 2025
1c4902e
feat: [UIE-9392] - IAM Delegation: permissions check for Parent Accou…
mpolotsk-akamai Nov 12, 2025
35c64a3
upcoming: [UIE-9569] - New IAM getUserEntitiesByPermission (types, qu…
abailly-akamai Nov 12, 2025
5cb3c82
Add Jenkinsfile entrypoint, delete old region tests Jenkinsfile (#13071)
jdamore-linode Nov 12, 2025
b8e501c
Added: [DI-27819] - Add Notice banner for upcoming maintenance activi…
venkymano-akamai Nov 12, 2025
4319793
upcoming:[DI-28000] - Handle LKE integration in metrics (#13064)
ankita-akamai Nov 12, 2025
7ddaa00
test [UIE-9599]: Fix flakey create-database test (#13076)
dmcintyr-akamai Nov 12, 2025
a63d148
test [M3-10517]: Fix flaky "timerange-verification.spec.ts" test (#12…
dmcintyr-akamai Nov 12, 2025
aae562d
test [UIE-9584]: fix flakey stackscript tests (#13072)
dmcintyr-akamai Nov 12, 2025
9868d7c
feat: [UIE-9441] implemented pagination for Plans table (#13055)
tvijay-akamai Nov 12, 2025
8ef367e
upcoming: [DI-28003] - New contextual view - selectable dashboards fi…
ankita-akamai Nov 13, 2025
61c134d
fix: [DI-27818] - Updated preferences logic to clear child filter pre…
nikhagra-akamai Nov 13, 2025
42a6cd9
upcoming: [DI-27571] - Blockstorage onboarding for ACLP Alerts (#13048)
santoshp210-akamai Nov 13, 2025
1a1e18f
Cloud version 1.155.0, API v4 version 0.153.0, Utilities version 0.12…
abailly-akamai Nov 13, 2025
b1db6fe
Merge pull request #13085 from linode/release-v1.155.0
abailly-akamai Nov 17, 2025
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
3 changes: 3 additions & 0 deletions Jenkinsfile-playwright.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
library 'cloud-manager-ui-tests'

runTestsRelease()
3 changes: 0 additions & 3 deletions Jenkinsfile-region-tests.groovy

This file was deleted.

19 changes: 19 additions & 0 deletions packages/api-v4/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,22 @@
## [2025-11-18] - v0.153.0


### Added:

- IAM Parent/Child: delegate permissions ([#13033](https://github.com/linode/manager/pull/13033))
- Added `Akamai Cloud Pulse Logs ` to the `AccountCapability` type ([#13062](https://github.com/linode/manager/pull/13062))

### Changed:

- IAM: cleanup for nodebalancer permissions ([#13017](https://github.com/linode/manager/pull/13017))

### Upcoming Features:

- Clean up Delivery Stream and Destination interfaces ([#13038](https://github.com/linode/manager/pull/13038))
- Add new API endpoints, and types for Firewall RS & PL ([#13061](https://github.com/linode/manager/pull/13061))
- CloudPulse-Metrics: Update `CloudPulseServiceType` and `CapabilityServiceTypeMapping` at types.ts for new service - lke ([#13064](https://github.com/linode/manager/pull/13064))
- New IAM getUserEntitiesByPermission endpoint ([#13070](https://github.com/linode/manager/pull/13070))

## [2025-11-04] - v0.152.0


Expand Down
2 changes: 1 addition & 1 deletion packages/api-v4/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@linode/api-v4",
"version": "0.152.0",
"version": "0.153.0",
"homepage": "https://github.com/linode/manager/tree/develop/packages/api-v4",
"bugs": {
"url": "https://github.com/linode/manager/issues"
Expand Down
1 change: 1 addition & 0 deletions packages/api-v4/src/account/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ export type BillingSource = 'akamai' | 'linode';
export const accountCapabilities = [
'Akamai Cloud Load Balancer',
'Akamai Cloud Pulse',
'Akamai Cloud Pulse Logs',
'Block Storage',
'Block Storage Encryption',
'Cloud Firewall',
Expand Down
2 changes: 2 additions & 0 deletions packages/api-v4/src/cloudpulse/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ export type CloudPulseServiceType =
| 'dbaas'
| 'firewall'
| 'linode'
| 'lke'
| 'nodebalancer'
| 'objectstorage';
export type AlertClass = 'dedicated' | 'shared';
Expand Down Expand Up @@ -381,6 +382,7 @@ export const capabilityServiceTypeMapping: Record<
firewall: 'Cloud Firewall',
objectstorage: 'Object Storage',
blockstorage: 'Block Storage',
lke: 'Kubernetes',
};

/**
Expand Down
9 changes: 5 additions & 4 deletions packages/api-v4/src/delivery/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,11 @@ export interface AuditData {
}

export interface Stream extends AuditData {
destinations: Destination[];
destinations: DestinationCore[];
details: StreamDetailsType;
id: number;
label: string;
primary_destination_id: number;
status: StreamStatus;
stream_audit_id: number;
type: StreamType;
version: string;
}
Expand All @@ -46,11 +44,14 @@ export const destinationType = {
export type DestinationType =
(typeof destinationType)[keyof typeof destinationType];

export interface Destination extends AuditData {
export interface DestinationCore {
details: DestinationDetails;
id: number;
label: string;
type: DestinationType;
}

export interface Destination extends DestinationCore, AuditData {
version: string;
}

Expand Down
54 changes: 54 additions & 0 deletions packages/api-v4/src/firewalls/firewalls.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@ import type {
Firewall,
FirewallDevice,
FirewallDevicePayload,
FirewallPrefixList,
FirewallRules,
FirewallRuleSet,
FirewallSettings,
FirewallTemplate,
FirewallTemplateSlug,
Expand Down Expand Up @@ -305,3 +307,55 @@ export const getTemplate = (templateSlug: FirewallTemplateSlug) =>
)}`,
),
);

/**
* getFirewallRuleSets
*
* Returns a paginated list of all Cloud Firewall Rule Sets.
*/
export const getFirewallRuleSets = (params?: Params, filter?: Filter) =>
Request<Page<FirewallRuleSet>>(
setMethod('GET'),
setParams(params),
setXFilter(filter),
setURL(`${BETA_API_ROOT}/networking/firewalls/rulesets`),
);

/**
* getFirewallRuleSet
*
* Get a specific Firewall Rule Set by its ID.
*/
export const getFirewallRuleSet = (ruleSetID: number) =>
Request<FirewallRuleSet>(
setMethod('GET'),
setURL(
`${BETA_API_ROOT}/networking/firewalls/rulesets/${encodeURIComponent(ruleSetID)}`,
),
);

/**
* getFirewallPrefixLists
*
* Returns a paginated list of all Cloud Firewall Prefix Lists.
*/
export const getFirewallPrefixLists = (params?: Params, filter?: Filter) =>
Request<Page<FirewallPrefixList>>(
setMethod('GET'),
setParams(params),
setXFilter(filter),
setURL(`${BETA_API_ROOT}/networking/prefixlists`),
);

/**
* getFirewallPrefixList
*
* Get a specific Firewall Prefix List by its ID.
*/
export const getFirewallPrefixList = (prefixListID: number) =>
Request<FirewallPrefixList>(
setMethod('GET'),
setURL(
`${BETA_API_ROOT}/networking/prefixlists/${encodeURIComponent(prefixListID)}`,
),
);
27 changes: 27 additions & 0 deletions packages/api-v4/src/firewalls/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -106,3 +106,30 @@ export interface FirewallSettings {
export interface UpdateFirewallSettings {
default_firewall_ids: Partial<DefaultFirewallIDs>;
}

export interface FirewallRuleSet {
created: string;
deleted: null | string;
description: string;
id: number;
is_service_defined: boolean;
label: string;
rules: FirewallRuleType[];
type: string;
updated: string;
version: number;
}

export type FirewallPrefixListVisibility = 'private' | 'public' | 'restricted';

export interface FirewallPrefixList {
created: string;
description: string;
id: number;
ipv4?: null | string[];
ipv6?: null | string[];
name: string;
updated: string;
version: number;
visibility: FirewallPrefixListVisibility;
}
25 changes: 25 additions & 0 deletions packages/api-v4/src/iam/iam.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,12 @@ import Request, { setData, setMethod, setURL } from '../request';

import type {
AccessType,
EntityByPermission,
IamAccountRoles,
IamUserRoles,
PermissionType,
} from './types';
import type { EntityType } from 'src/entities/types';

/**
* getUserRoles
Expand Down Expand Up @@ -100,3 +102,26 @@ export const getUserEntityPermissions = (
),
setMethod('GET'),
);

/**
* getUserEntitiesByPermission
*
* Returns the available entities for a given permission.
*/
export interface GetEntitiesByPermissionParams {
entityType: EntityType;
permission: PermissionType;
username: string | undefined;
}

export const getUserEntitiesByPermission = ({
username,
entityType,
permission,
}: GetEntitiesByPermissionParams) =>
Request<EntityByPermission[]>(
setURL(
`${BETA_API_ROOT}/iam/users/${username}/entities/${entityType}?permission=${permission}`,
),
setMethod('GET'),
);
19 changes: 16 additions & 3 deletions packages/api-v4/src/iam/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ export type AccountAdmin =
| 'answer_profile_security_questions'
| 'cancel_account'
| 'cancel_service_transfer'
| 'create_child_account_token'
| 'create_profile_pat'
| 'create_profile_ssh_key'
| 'create_profile_tfa_secret'
Expand All @@ -91,17 +92,22 @@ export type AccountAdmin =
| 'is_account_admin'
| 'list_account_agreements'
| 'list_account_logins'
| 'list_all_child_accounts'
| 'list_available_services'
| 'list_default_firewalls'
| 'list_delegate_users'
| 'list_enrolled_beta_programs'
| 'list_service_transfers'
| 'list_user_delegate_accounts'
| 'list_user_grants'
| 'revoke_profile_app'
| 'revoke_profile_device'
| 'send_profile_phone_number_verification_code'
| 'update_account'
| 'update_account_settings'
| 'update_default_delegate_access'
| 'update_default_firewalls'
| 'update_delegate_users'
| 'update_profile'
| 'update_profile_pat'
| 'update_profile_ssh_key'
Expand All @@ -112,6 +118,7 @@ export type AccountAdmin =
| 'view_account'
| 'view_account_login'
| 'view_account_settings'
| 'view_child_account'
| 'view_enrolled_beta_program'
| 'view_network_usage'
| 'view_profile_security_question'
Expand Down Expand Up @@ -363,8 +370,8 @@ export type LinodeViewer =
| 'view_linode_stats';

/** Permissions associated with the "nodebalancer_admin" role. */
// TODO: UIE-9154 - verify mapping for Nodebalancer as this is not migrated yet
export type NodeBalancerAdmin =
| 'create_nodebalancer_config_node'
| 'delete_nodebalancer'
| 'delete_nodebalancer_config'
| 'delete_nodebalancer_config_node'
Expand All @@ -384,12 +391,13 @@ export type NodeBalancerContributor =
/** Permissions associated with the "nodebalancer_viewer" role. */
export type NodeBalancerViewer =
| 'list_nodebalancer_config_nodes'
| 'list_nodebalancer_configs'
| 'list_nodebalancer_firewalls'
| 'list_nodebalancer_vpc_configs'
| 'view_nodebalancer'
| 'view_nodebalancer_config'
| 'view_nodebalancer_config_node'
| 'view_nodebalancer_statistics';
| 'view_nodebalancer_statistics'
| 'view_nodebalancer_vpc_config';

/** Permissions associated with the "volume_admin" role. */
export type VolumeAdmin = 'delete_volume' | VolumeContributor;
Expand Down Expand Up @@ -448,6 +456,11 @@ export interface Roles {
name: RoleName;
permissions: PermissionType[];
}
export interface EntityByPermission {
id: number;
label: string;
type: EntityType;
}

export type IamAccessType = keyof IamAccountRoles;

Expand Down
57 changes: 57 additions & 0 deletions packages/manager/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,63 @@ 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-11-18] - v1.155.0


### Added:

- IAM Parent/Child: delegate permissions for child account ([#13033](https://github.com/linode/manager/pull/13033))
- IAM: add a permission check for delete nodebalancer drawer ([#13043](https://github.com/linode/manager/pull/13043))
- Implement pagination for Plans table ([#13055](https://github.com/linode/manager/pull/13055))
- A notice banner to inform the customers about the upcoming maintenance activity in longview and to download and use the new GPG key ([#13080](https://github.com/linode/manager/pull/13080))

### Changed:

- IAM: clean up in mapping for nodebalancer permissions ([#13017](https://github.com/linode/manager/pull/13017))
- IAM: fix permissiom's check for vpc for assigning/unassigning linodes ([#13050](https://github.com/linode/manager/pull/13050))
- ACLP Alert: control `edit & delete button` based on status using flag ([#13052](https://github.com/linode/manager/pull/13052))

### Fixed:

- Typo + expose search filters on /iam/roles route ([#13034](https://github.com/linode/manager/pull/13034))
- Address oAuth issue with IAM OAuthCallback ([#13037](https://github.com/linode/manager/pull/13037))
- IAM: tags editing was enabled for restricted users ([#13046](https://github.com/linode/manager/pull/13046))
- IAM Child Account - user not found error handling ([#13047](https://github.com/linode/manager/pull/13047))
- IAM: restricted users could access delete and detach popups without permissions ([#13049](https://github.com/linode/manager/pull/13049))
- Race condition with Preferences overrides in PrimaryNav ([#13056](https://github.com/linode/manager/pull/13056))
- IAM: add tooltips for disabled buttons for nodebalancers, remove notification banner ([#13058](https://github.com/linode/manager/pull/13058))
- IAM: incorrect permission check disabled Clone Volume for volume_admin role ([#13065](https://github.com/linode/manager/pull/13065))
- ACLP Metric: update preference logic to clear children filters ([#13066](https://github.com/linode/manager/pull/13066))
- Permissions fixes for admin users on users pages ([#13074](https://github.com/linode/manager/pull/13074))

### Tech Stories:

- Replace Formik with React Hook Form in DatabaseManageNetworkingDrawer ([#13002](https://github.com/linode/manager/pull/13002))
- Replace Formik with React Hook Form in ManageAccessControlDrawer ([#13044](https://github.com/linode/manager/pull/13044))
- Add MSW crud support for types API ([#13067](https://github.com/linode/manager/pull/13067))

### Tests:

- Fix flakey timerange test ([#12967](https://github.com/linode/manager/pull/12967))
- Add Streams Landing, Create Stream and Edit Stream tests ([#13008](https://github.com/linode/manager/pull/13008))
- Fix flakey stackscript tests ([#13072](https://github.com/linode/manager/pull/13072))
- Fix flakey create-database test ([#13076](https://github.com/linode/manager/pull/13076))

### Upcoming Features:

- Logs Delivery Stream/Destination Pendo tags ([#13022](https://github.com/linode/manager/pull/13022))
- Update Delivery Stream factory ([#13038](https://github.com/linode/manager/pull/13038))
- IAM: Empty state for the Default Roles and Default Entities Access tabs ([#13042](https://github.com/linode/manager/pull/13042))
- ACLP-Alerting: Onboarding Blockstorage service for ACLP Alerts ([#13048](https://github.com/linode/manager/pull/13048))
- Feature flag for Firewall Rulesets & Prefixlists ([#13051](https://github.com/linode/manager/pull/13051))
- Feature flag for new Generational Compute Plans ([#13054](https://github.com/linode/manager/pull/13054))
- Limit Logs feature based on `Akamai Cloud Pulse Logs` Account Capability ([#13062](https://github.com/linode/manager/pull/13062))
- IAM Parent/Child: delegate permissions for parent account ([#13063](https://github.com/linode/manager/pull/13063))
- CloudPulse-Metrics: Update `FilterConfig.ts`, add lke service and the associated filters ([#13064](https://github.com/linode/manager/pull/13064))
- Update data-pendo-id tags placemanet within Logs Delivery ([#13069](https://github.com/linode/manager/pull/13069))
- New IAM getUserEntitiesByPermission (types, queries, hooks, mocks) ([#13070](https://github.com/linode/manager/pull/13070))
- CloudPulse-Metrics: Enhance `CloudPulseDashboardWithFilters.tsx` and `CloudPulseDashboardSelect.tsx` to handle switching between dashboards in contextual view ([#13073](https://github.com/linode/manager/pull/13073))

## [2025-11-04] - v1.154.0

### Added:
Expand Down
2 changes: 2 additions & 0 deletions packages/manager/cypress.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { discardPassedTestRecordings } from './cypress/support/plugins/discard-p
import { featureFlagOverrides } from './cypress/support/plugins/feature-flag-override';
import { fetchAccount } from './cypress/support/plugins/fetch-account';
import { fetchLinodeClusters } from './cypress/support/plugins/fetch-linode-clusters';
import { fetchLinodeImages } from './cypress/support/plugins/fetch-linode-images';
import { fetchLinodeRegions } from './cypress/support/plugins/fetch-linode-regions';
import { generateTestWeights } from './cypress/support/plugins/generate-weights';
import { enableHtmlReport } from './cypress/support/plugins/html-report';
Expand Down Expand Up @@ -102,6 +103,7 @@ export default defineConfig({
fetchAccount,
fetchLinodeRegions,
fetchLinodeClusters,
fetchLinodeImages,
resetUserPreferences,
regionOverrideCheck,
clusterOverrideCheck,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,9 +101,7 @@ describe('ACLP Components UI varies according to ACLP support by region and user
.should('be.visible')
.should('be.enabled');
// UI displays mock error msg
cy.contains(
`Error while loading Dashboard with Id - ${this.mockDashboardId}`
);
cy.contains('Error loading dashboards');
});
});

Expand Down
Loading
Loading