Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
b067f0d
tech-stories - [M3-10109]: Reroute Profile (#12338)
abailly-akamai Jun 12, 2025
ff4463a
POC: [M3-10058] - Modal routing via query params (PGs) (#12294)
abailly-akamai Jun 12, 2025
7b03972
change: [M3-9816] - Streamline Linode Interface logic for Firewall La…
coliu-akamai Jun 12, 2025
fdbaeb9
Tech Stories - [M3-10021]: Reroute IAM (#12312)
abailly-akamai Jun 12, 2025
a28916f
change: [M3-9585] - Restricted users should not be allowed to add / u…
bill-akamai Jun 12, 2025
20a86d7
test: [M3-10115] - Fix test flake in `bucket-create-multicluster.spec…
dmcintyr-akamai Jun 12, 2025
c76dec1
chore: [M3-10116] - React 19 (#12342)
bnussman-akamai Jun 13, 2025
0d70ae8
refactor: [M3-9374] - Move iam queries (#12370)
cpathipa Jun 13, 2025
dec7372
feat: [UIE-8806, UIE-8881, UIE-8882, UIE-8931 ] - IAM RBAC: fix bugs …
aaleksee-akamai Jun 13, 2025
6a4e3ba
poc: [M3-9996, M3-10048] - Assigning alert definitions (`beta`) to a …
pmakode-akamai Jun 16, 2025
73ae31f
upcoming: [M3-10123, M3-10094] - Update ACLP region support logic for…
pmakode-akamai Jun 16, 2025
062e79b
test: [M3-9718] - Account for capability availability when choosing r…
jdamore-linode Jun 16, 2025
4282fd1
chore: [M3-10144, M3-10117] - Fix `Select.test.tsx` test flake and up…
bnussman-akamai Jun 16, 2025
d20182e
upcoming: [DI-25153] - Enable and integration of delete alert API (#1…
santoshp210-akamai Jun 17, 2025
93fd44e
test: [M3-10180] - Disable `nodebalancerVpc` flag in cypress tests (#…
harsh-akamai Jun 17, 2025
94f338c
upcoming: [M3-10125] - Add feature flag support for Cloud NAT (#12388)
hana-akamai Jun 17, 2025
b5b98c4
change: [M3-9939] - Akamai Design System: Switch (Toggle) Component (…
hasyed-akamai Jun 18, 2025
dc0f93f
upcoming: [M3-10192] - Add Beta "Alerts Assigned +n" Count to Linode …
pmakode-akamai Jun 18, 2025
2cec9ad
Merge branch 'master' into develop
abailly-akamai Jun 18, 2025
84e0a0e
fix: [M3-10208] - Legacy Alerts toggle incorrectly enabled on Create …
pmakode-akamai Jun 18, 2025
f768607
refactor: [M3-9379] - Move networktransfer queries (#12381)
cpathipa Jun 18, 2025
d597b15
upcoming: [DI-25385] - Added beta chip for ACLP beta service type (#1…
nikhagra-akamai Jun 19, 2025
46fdaac
chore: [M3-10181] - Improve and refactor LISH Console Settings page (…
bnussman-akamai Jun 20, 2025
134c296
upcoming: [M3-9502, M3-9504, M3-10103] - Maintenance Policy Selects (…
hkhalil-akamai Jun 20, 2025
d93d786
upcoming: [M3-10102] - VM Host Maintenance Copy Updates to Banners (#…
jaalah-akamai Jun 20, 2025
4f23340
change: [M3-9529] - Akamai Design System: inputAdornments (#12387)
hasyed-akamai Jun 23, 2025
8369944
feat: [UIE-8534, UIE-8888, UIE-8881] - IAM RBAC: add the links (#12410)
aaleksee-akamai Jun 23, 2025
6bdf6c7
feat: [UIE-8819] - IAM RBAC: User Email validation (#12395)
mpolotsk-akamai Jun 23, 2025
0b6b1c3
feat: [UIE-8946]: IAM RBAC - Permission Hook 1 (#12411)
corya-akamai Jun 23, 2025
9bf0fe4
fix: [M3-10236, M3-10235] - Linode Disk Action Menu and LKE Node Acti…
bnussman-akamai Jun 23, 2025
dfed52a
upcoming: [DI-25592] - Added EntityScopeSelect component for create a…
nikhagra-akamai Jun 24, 2025
d9c7377
fix: [M3-10084] - Checkbox Color Token (#12409)
hasyed-akamai Jun 24, 2025
9b546a5
test: [M3-10198] - Fix LKE update test failure against DevCloud (#12404)
cliu-akamai Jun 24, 2025
d194eb9
test: [M3-9860] - Fix Cypress Linode clone test (#12403)
cliu-akamai Jun 24, 2025
59bbd98
upcoming: [M3-10128] - Add types/endpoints/queries for Cloud NATs (#1…
bill-akamai Jun 24, 2025
18ffa2e
upcoming: [M3-9503] - Add New VM Host Maintenance Icons (#12398)
jaalah-akamai Jun 25, 2025
844fd95
fix: [DI-25709] - adjust padding and margins to align components (#12…
santoshp210-akamai Jun 25, 2025
6e91000
test: [M3-10241] - Increase failing VPC subnets table test timeout (#…
jdamore-linode Jun 25, 2025
a3e8892
tests - [M3-10074, M3-10075]: Linode beta metrics (#12357)
dmcintyr-akamai Jun 25, 2025
aefb18f
chore: [M3-10237] - Clean up Table Striping preference usage (#12412)
bnussman-akamai Jun 25, 2025
66428cf
upcoming: [M3-10174] - VM Host Maintenance API Updates (#12417)
jaalah-akamai Jun 25, 2025
f17ac37
upcoming: [M3-10247] - Make `monitors` property optional on API SDK `…
jdamore-linode Jun 25, 2025
39eeb81
chore: [M3-10110] - Update to Storybook v9 (#12416)
bnussman-akamai Jun 25, 2025
73f1f91
test: [M3-9950] - Allow Cypress test 'cy-test' prefix to be overridde…
jdamore-linode Jun 25, 2025
8c44e17
change: [M3-9765] - Use white icons for Marketplace dark mode (#12414)
hana-akamai Jun 26, 2025
9445add
upcoming: [M3-10101] - Display Maintenance information in Linode Deta…
jaalah-akamai Jun 26, 2025
6f67656
upcoming: VM Host fix for incorrect filter for in progress maintenanc…
rmcintosh Jun 26, 2025
bfd4a14
Cloud version 1.145.0, API v4 version 0.143.0, Validation version 0.6…
jaalah Jun 26, 2025
f9e3cd4
No need to bump /shared
jaalah Jun 26, 2025
a0b92b8
Revert version change
jaalah Jun 26, 2025
5fbaf41
Add /shared changeset
jaalah Jun 26, 2025
bb589b7
Add missing changset to /ui
jaalah Jun 26, 2025
01af55f
Merge pull request #12437 from linode/release-v1.145.0
jdamore-linode Jun 26, 2025
3b02f6a
bug: [DI-25992] - Set scope to optional in cloudpulse schema (#12441)
nikhagra-akamai Jun 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ lib
.vscode
.idea
**/*.iml
*.mdc

# misc
.DS_Store
Expand Down
2 changes: 1 addition & 1 deletion docs/development-guide/02-component-structure.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Here is a minimal code example demonstrating the basic structure of a component
```tsx
import { omittedProps } from "@linode/ui";
import { styled } from "@mui/material/styles";
import * as React from "react";
import * as React from 'react';

// If not exported, it can just be named `Props`
export interface SayHelloProps {
Expand Down
4 changes: 2 additions & 2 deletions docs/development-guide/05-fetching-data.md
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ export const useProfile = () =>
Loading and error states are managed by React Query. The earlier username display example becomes greatly simplified:

```tsx
import * as React from "react";
import * as React from 'react';
import { useProfile } from "src/queries/profile";

const UsernameDisplay = () => {
Expand Down Expand Up @@ -166,7 +166,7 @@ Before React Query, Redux was used to store API data, loading, and error states.
```tsx
// ---- OLD PATTERN, DON'T USE ---- //

import * as React from "react";
import * as React from 'react';
import profileContainer, {
Props as ProfileProps,
} from "src/containers/profile.container";
Expand Down
3 changes: 2 additions & 1 deletion docs/development-guide/08-testing.md
Original file line number Diff line number Diff line change
Expand Up @@ -210,12 +210,13 @@ Environment variables related to Cypress logging and reporting, as well as repor
|---------------------------------|----------------------------------------------------|------------------|----------------------------|
| `CY_TEST_USER_REPORT` | Log test account information when tests begin | `1` | Unset; disabled by default |
| `CY_TEST_JUNIT_REPORT` | Enable JUnit reporting | `1` | Unset; disabled by default |
| `CY_TEST_HTML_REPORT` | Generate html report containing E2E test results | `1` | Unset; disabled by default |
| `CY_TEST_HTML_REPORT` | Generate html report containing E2E test results | `1` | Unset; disabled by default |
| `CY_TEST_DISABLE_FILE_WATCHING` | Disable file watching in Cypress UI | `1` | Unset; disabled by default |
| `CY_TEST_DISABLE_RETRIES` | Disable test retries on failure in CI | `1` | Unset; disabled by default |
| `CY_TEST_FAIL_ON_MANAGED` | Fail affected tests when Managed is enabled | `1` | Unset; disabled by default |
| `CY_TEST_GENWEIGHTS` | Generate and output test weights to the given path | `./weights.json` | Unset; disabled by default |
| `CY_TEST_RESET_PREFERENCES` | Reset user preferences when test run begins | `1` | Unset; disabled by default |
| `CY_TEST_RESOURCE_PREFIX` | Prefix to apply to labels of created resources | `test-resource` | Unset; default `cy-test` |
###### Performance
Expand Down
4 changes: 2 additions & 2 deletions docs/development-guide/11-feature-flags.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ export interface Flags {
To consume a feature flag from a function component, use the `useFlags` hook:

```tsx
import * as React from "react";
import * as React from 'react';
import { useFlags } from "src/hooks/useFlags";

const ImagesPricingBanner = () => {
Expand All @@ -62,7 +62,7 @@ const ImagesPricingBanner = () => {
For (older) class components, use the `withFeatureFlagConsumer` HOC:

```tsx
import * as React from "react";
import * as React from 'react';
import withFeatureFlags, {
FeatureFlagConsumerProps,
} from "src/containers/withFeatureFlagConsumer.container";
Expand Down
1 change: 0 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,6 @@
"prepare": "husky"
},
"resolutions": {
"node-fetch": "^2.6.7",
"semver": "^7.5.2",
"yaml": "^2.3.0"
},
Expand Down
20 changes: 20 additions & 0 deletions packages/api-v4/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,23 @@
## [2025-07-01] - v0.143.0

### Changed:

- Allow `authorized_keys` to be null in `Profile` type ([#12390](https://github.com/linode/manager/pull/12390))

### Removed:

- `is_beta` flag from ServiceTypes interface in cloudpulse types ([#12386](https://github.com/linode/manager/pull/12386))

### Upcoming Features:

- Add Beta ACLP alerts property to the `CreateLinodeRequest` type ([#12248](https://github.com/linode/manager/pull/12248))
- Add `parent_entity` field to `FirewallDeviceEntity` ([#12283](https://github.com/linode/manager/pull/12283))
- Fix `getMaintenancePolicies` to properly handle pagination params and return all maintenance policies ([#12334](https://github.com/linode/manager/pull/12334))
- Add `scope` in `Alert` and `EditAlertDefinitionPayload` interfaces, rename `ServiceTypes` interface to `Service`, add `ServiceAlert` interface ([#12377](https://github.com/linode/manager/pull/12377))
- Add maintenance policy types for VM maintenance API ([#12417](https://github.com/linode/manager/pull/12417))
- Add `monitors` field to the `Region` type ([#12375](https://github.com/linode/manager/pull/12375))
- Add CRUD CloudNAT types ([#12379](https://github.com/linode/manager/pull/12379))

## [2025-06-17] - v0.142.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.142.0",
"version": "0.143.0",
"homepage": "https://github.com/linode/manager/tree/develop/packages/api-v4",
"bugs": {
"url": "https://github.com/linode/manager/issues"
Expand Down
4 changes: 2 additions & 2 deletions packages/api-v4/src/account/account.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ export const updateAccountInfo = (data: Partial<Account>) =>
*/
export const getAccountSettings = () =>
Request<AccountSettings>(
setURL(`${API_ROOT}/account/settings`),
setURL(`${BETA_API_ROOT}/account/settings`),
setMethod('GET'),
);

Expand All @@ -82,7 +82,7 @@ export const getAccountSettings = () =>
*/
export const updateAccountSettings = (data: Partial<AccountSettings>) =>
Request<AccountSettings>(
setURL(`${API_ROOT}/account/settings`),
setURL(`${BETA_API_ROOT}/account/settings`),
setMethod('PUT'),
setData(data, UpdateAccountSettingsSchema),
);
Expand Down
6 changes: 4 additions & 2 deletions packages/api-v4/src/account/maintenance.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,10 @@ export const getAccountMaintenance = (params?: Params, filter?: Filter) =>
* Returns a list of maintenance policies that are available for Linodes in this account.
*
*/
export const getMaintenancePolicies = () =>
Request<MaintenancePolicy[]>(
export const getMaintenancePolicies = (params?: Params, filter?: Filter) =>
Request<ResourcePage<MaintenancePolicy>>(
setURL(`${BETA_API_ROOT}/maintenance/policies`),
setMethod('GET'),
setParams(params),
setXFilter(filter),
);
43 changes: 23 additions & 20 deletions packages/api-v4/src/account/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ export interface AccountSettings {
backups_enabled: boolean;
interfaces_for_new_linodes: LinodeInterfaceAccountSetting;
longview_subscription: null | string;
maintenance_policy_id: MaintenancePolicyId;
maintenance_policy: MaintenancePolicySlug;
managed: boolean;
network_helper: boolean;
object_storage: 'active' | 'disabled' | 'suspended';
Expand Down Expand Up @@ -504,8 +504,10 @@ export const EventActionKeys = [
export type EventAction = (typeof EventActionKeys)[number];

export type EventStatus =
| 'canceled'
| 'failed'
| 'finished'
| 'in-progress'
| 'notification'
| 'scheduled'
| 'started';
Expand All @@ -514,25 +516,25 @@ export type EventSource = 'platform' | 'user';

export interface Event {
action: EventAction;
complete_time?: null | string; // @TODO VM & Host Maintenance: verify new fields
complete_time?: null | string;
created: string;
description?: null | string; // @TODO VM & Host Maintenance: verify new fields
description?: null | string;
/*
NOTE: events before the duration key was added will have a duration of 0
*/
duration: null | number;
entity: Entity | null;
id: number;
maintenance_policy_set?: MaintenancePolicyType | null; // @TODO VM & Host Maintenance: verify new fields
maintenance_policy_set?: MaintenancePolicySlug | null;
message: null | string;
not_before?: null | string; // @TODO VM & Host Maintenance: verify new fields
not_before?: null | string;
percent_complete: null | number;
rate: null | string;
read: boolean;
secondary_entity: Entity | null;
seen: boolean;
source?: EventSource | null; // @TODO VM & Host Maintenance: verify new fields
start_time?: null | string; // @TODO VM & Host Maintenance: verify new fields
source?: EventSource | null;
start_time?: null | string;
status: EventStatus;
time_remaining: null | string;
username: null | string;
Expand Down Expand Up @@ -577,7 +579,7 @@ export interface AccountMaintenance {
type: 'linode' | 'volume';
url: string;
};
maintenance_policy_set: MaintenancePolicyType;
maintenance_policy_set: MaintenancePolicySlug;
not_before: string;
reason: string;
source: 'platform' | 'user';
Expand All @@ -589,25 +591,26 @@ export interface AccountMaintenance {
| 'pending'
| 'scheduled'
| 'started';
type: 'cold_migration' | 'live_migration' | 'reboot' | 'volume_migration';
type:
| 'cold_migration'
| 'live_migration'
| 'migrate'
| 'power_off_on'
| 'reboot'
| 'volume_migration';
when: string;
}

export const maintenancePolicies = [
{ id: 1, type: 'migrate' },
{ id: 2, type: 'power on/off' },
] as const;

export type MaintenancePolicyId = (typeof maintenancePolicies)[number]['id'];
// Note: In the future there will be more slugs, ie: 'private/1234'.
export type MaintenancePolicySlug = 'linode/migrate' | 'linode/power_off_on';

export type MaintenancePolicyType =
(typeof maintenancePolicies)[number]['type'];

export type MaintenancePolicy = (typeof maintenancePolicies)[number] & {
export type MaintenancePolicy = {
description: string;
is_default: boolean;
name: string;
label: 'Migrate' | 'Power Off / Power On';
notification_period_sec: number;
slug: MaintenancePolicySlug;
type: 'linode_migrate' | 'linode_power_off_on' | 'migrate' | 'power_off_on'; // Should not be needed for UX. Mainly for FleetOps.
};

export interface PayPalData {
Expand Down
51 changes: 51 additions & 0 deletions packages/api-v4/src/cloudnat/cloudnats.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import { createCloudNATSchema } from '@linode/validation';

import { API_ROOT } from '../constants';
import Request, {
setData,
setMethod,
setParams,
setURL,
setXFilter,
} from '../request';

import type { Filter, ResourcePage as Page, Params } from '../types';
import type {
CloudNAT,
CreateCloudNATPayload,
UpdateCloudNATPayload,
} from './types';

export const getCloudNATs = (params?: Params, filter?: Filter) =>
Request<Page<CloudNAT>>(
setURL(`${API_ROOT}/networking/cloudnats`),
setMethod('GET'),
setParams(params),
setXFilter(filter),
);

export const getCloudNAT = (id: number) =>
Request<CloudNAT>(
setURL(`${API_ROOT}/networking/cloudnats/${id}`),
setMethod('GET'),
);

export const createCloudNAT = (data: CreateCloudNATPayload) =>
Request<CloudNAT>(
setURL(`${API_ROOT}/networking/cloudnats`),
setMethod('POST'),
setData(data, createCloudNATSchema),
);

export const updateCloudNAT = (id: number, data: UpdateCloudNATPayload) =>
Request<CloudNAT>(
setURL(`${API_ROOT}/networking/cloudnats/${id}`),
setMethod('PUT'),
setData(data, createCloudNATSchema),
);

export const deleteCloudNAT = (id: number) =>
Request<{}>(
setURL(`${API_ROOT}/networking/cloudnats/${id}`),
setMethod('DELETE'),
);
3 changes: 3 additions & 0 deletions packages/api-v4/src/cloudnat/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export * from './cloudnats';

export * from './types';
28 changes: 28 additions & 0 deletions packages/api-v4/src/cloudnat/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
interface CloudNATIPAddress {
address: string;
}

export interface CloudNAT {
addresses: CloudNATIPAddress[];
id: number;
label: string;
port_prefix_default_len: number;
region: string;
}

export interface CreateCloudNATPayload {
addresses?: CloudNATIPAddress[];
label: string;
port_prefix_default_len?: ValidPortSize;
region: string;
}

export interface UpdateCloudNATPayload {
label?: string;
}

export const VALID_PORT_SIZES = [
64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384,
] as const;

export type ValidPortSize = (typeof VALID_PORT_SIZES)[number];
4 changes: 2 additions & 2 deletions packages/api-v4/src/cloudpulse/services.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import type {
JWEToken,
JWETokenPayLoad,
MetricDefinition,
ServiceTypes,
Service,
ServiceTypesList,
} from './types';
import type { Filter, Params, ResourcePage } from 'src/types';
Expand Down Expand Up @@ -51,7 +51,7 @@ export const getCloudPulseServiceTypes = () =>
);

export const getCloudPulseServiceByServiceType = (serviceType: string) =>
Request<ServiceTypes>(
Request<Service>(
setURL(`${API_ROOT}/monitor/services/${encodeURIComponent(serviceType)}`),
setMethod('GET'),
);
Loading
Loading