Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release v1.118.0 - release → staging #10410

Merged
merged 40 commits into from
Apr 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
df09173
upcoming: [M3-7924] - Linode Create Refactor - VPC - Part 10 (#10354)
bnussman-akamai Apr 10, 2024
70106ac
feat: [M3-7959] - Update gecko feature flag to object (#10363)
hana-akamai Apr 11, 2024
3dbd2ae
upcoming: [M3-7972] - Invalidate PG queries on Linode create/delete (…
abailly-akamai Apr 11, 2024
e726c81
test: [M3-7395] Add new cypress tests to longview landing page (#10321)
cliu-akamai Apr 11, 2024
a1336c8
upcoming: [M3-7902] - Add PG region limit help text (#10355)
carrillo-erik Apr 11, 2024
26c3f9d
test: [M3-7768] - Add VM Placement Group landing page empty state tes…
jdamore-linode Apr 11, 2024
bb794c8
fix: `machine-image-upload.spec.ts` e2e test flake (#10370)
bnussman-akamai Apr 11, 2024
b6cac2c
change: [M3-7964] - Update developer guide documentation for Adobe An…
mjac0bs Apr 13, 2024
391b846
refactor: [M3-7380] - Use `volumes/types` endpoint for pricing data (…
mjac0bs Apr 15, 2024
5825d01
Merge pull request #10377 from linode/staging
mjac0bs Apr 15, 2024
68f0add
upcoming: [M3-7986] - Fix & Improve Placement Groups feature restrict…
abailly-akamai Apr 15, 2024
9404ce6
Merge branch 'master' into develop
mjac0bs Apr 15, 2024
6bffda4
refactor: [M3-7920, M3-7930] – Refactor VPC queries (#10322)
dwiley-akamai Apr 15, 2024
e2f610e
upcoming: [M3-7621] - Add PlacementGroups to Linode Migrate Flow (#10…
carrillo-erik Apr 16, 2024
b05812e
upcoming: [M3-7979] - Update Placement Group svg icon (#10379)
carrillo-erik Apr 16, 2024
2a2aa25
refactor: [M3-7770] - isFeatureEnabledV2 to check for feature flag AN…
hana-akamai Apr 16, 2024
7f2cf90
upcoming: [M3-7987] - Linode Create Refactor - Validation (#10374)
bnussman-akamai Apr 17, 2024
cffa916
upcoming: [M3-7872] - Linode Create Refactor - StackScripts (#10367)
bnussman-akamai Apr 18, 2024
2f71529
upcoming: [M3-7978] - RegionSelect disabled option API updates (#10373)
abailly-akamai Apr 18, 2024
6529346
change: [M3-7729] - Improve UX of Personal Access Token and Access Ke…
mjac0bs Apr 18, 2024
2547788
fix: [M3-7992] - Fix CSS vendor prefix bug in Chrome (#10380)
carrillo-erik Apr 18, 2024
4379ead
fix: Update latest kernel version to fix `linode-config.spec.ts` (#10…
bnussman-akamai Apr 19, 2024
8b2ec94
change: [M3-7994] - Clean up Top Menu and Fix Inconsistencies (#10383)
bnussman-akamai Apr 19, 2024
a68e2f2
fix: [M3-7997] - Charts Y-axis values are trimmed when scale is incre…
hana-akamai Apr 19, 2024
5672faf
refactor: [M3-7990] - Replace sanitize-html with DOM friendly alterna…
abailly-akamai Apr 22, 2024
98bc771
upcoming: [M3-7981] - Show the selected regions as chips in the Acces…
cpathipa Apr 22, 2024
4e39a03
change: [M3-7998] – "Limited Availability" --> "Limited Deployment Av…
dwiley-akamai Apr 23, 2024
d097eb9
fix: TopMenu related console errors (#10398)
bnussman-akamai Apr 23, 2024
4a5a088
change: [M3-8030] - Gecko Beta copy updates (#10400)
hana-akamai Apr 23, 2024
1998cea
fix: [UIE-7601] - disable smaller plans (#10381)
mpolotsk-akamai Apr 23, 2024
f9f33aa
refactor: [M3-8002] - Remove lodash (global import) as a package depe…
abailly-akamai Apr 23, 2024
62010b3
change: [M3-7688] - Gravatar Analytics (#10389)
bnussman-akamai Apr 23, 2024
1be5be5
fix: [M3-7833] - New OBJ Buckets do not appear when created before in…
cpathipa Apr 23, 2024
b98afbd
feat: [OCA-1315] April 2024 Marketplace Apps (#10382)
tbaka-akamai Apr 24, 2024
7bf7766
upcoming: [M3-8028]: Linode Create Refactor - User Defined Fields (#1…
bnussman-akamai Apr 24, 2024
a81151a
test: [M3-7982] - Fix hanging account switching test (#10396)
jdamore-linode Apr 24, 2024
e6ab3fc
feat: [M3-8004] – Support LDE feature flag (#10402)
dwiley-akamai Apr 24, 2024
2b951b0
test: [M3-7500] - Add tests for Parent/Child Users & Grants page enha…
cliu-akamai Apr 25, 2024
16d2b7c
change: [M3-7996] - DC Get Well - PlanSelection availability updates …
abailly-akamai Apr 25, 2024
c8a8e60
Cloud version 1.118.0, API v4 version 0.115.0, and Validation version…
hkhalil-akamai Apr 25, 2024
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
36 changes: 0 additions & 36 deletions docs/development-guide/13-coding-standards.md
Original file line number Diff line number Diff line change
Expand Up @@ -158,39 +158,3 @@ For this reason, extending types with interfaces/extends is suggested over creat
```

Source: [TypeScript Wiki](https://github.com/microsoft/TypeScript/wiki/Performance#preferring-interfaces-over-intersections)

## Adobe Analytics

### Writing a Custom Event

Custom events live (mostly) in `src/utilities/analytics.ts`. Try to write and export custom events in this file if possible, and import them in the component(s) where they are used.

```tsx
// Component.tsx {file(s) where the event is called, for quick reference}
// OtherComponent.tsx

sendDescriptiveNameEvent () => {
category: '{Descriptive/Page Name}',
action: '{interaction such as Click, Hover, Focus}:{input type such as button, link, toggle, checkbox, text field} e.g. Click:link',
label: '{string associated with the event; e.g event label} (optional)',
value: '{number associated with the event; e.g. size of a volume} (optional)',
}
```

When adding a new custom event, coordinating with UX on the event's `category`, `action`, `label`, and `value` props values ensures consistency across our data.

Avoid including pipes (`|`) as delimiters in any of the event properties. They are used in Adobe Analytics to separate fields.

Avoid creating custom events that collect such as search queries, entity names, or other forms of user input. Custom events can still be fired on these actions with a generic `label` or no label at all.

Examples

- `sendMarketplaceSearchEvent` fires when selecting a category from the dropdown (`label` is predefined) and clicking the search field (a generic `label` is used).
- `sendBucketCreateEvent` sends the region of the bucket, but does not send the bucket label.

### Locally Testing Page Views & Custom Events and/or Troubleshooting

1. Set the `REACT_APP_ADOBE_ANALYTICS_URL` environment variable in `.env`.
2. Use the browser tools Network tab, filter requests by "adobe", and check that successful network requests have been made to load the launch script and its extensions.
3. In the browser console, type `_satellite.setDebug(true)`.
4. Refresh the page. You should see Adobe debug log output in the console. Each page view change or custom event that fires should be visible in the logs.
42 changes: 42 additions & 0 deletions docs/tooling/analytics.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Adobe Analytics

Cloud Manager uses Adobe Analytics to capture page view and custom event statistics. To view analytics, Cloud Manager developers must follow internal processes to request access to Adobe Analytics dashboards.

## Writing a Custom Event

Custom events live (mostly) in `src/utilities/analytics.ts`. Try to write and export custom events in this file if possible, and import them in the component(s) where they are used.

A custom event will take this shape:
```tsx
// Component.tsx {file(s) where the event is called, for quick reference}
// OtherComponent.tsx

sendDescriptiveNameEvent () => {
category: '{Descriptive/Page/Flow Name}',
action: '{interaction such as Click, Hover, Focus}:{input type such as button, link, toggle, checkbox, text field} e.g. Click:link',
label: '{string associated with the event; e.g event label} (optional)',
value: '{number associated with the event; e.g. size of a volume} (optional)',
data: '{stringified object of additional key-value pairs; e.g. "{isLinodePoweredOff: true}"} (optional)'
}
```

When adding a new custom event, coordinate with UX on the event's `category`, `action`, `label`, and `value` variables to ensure consistency across our data.

`data` is an additional variable we use to capture information associated with an event that cannot easily or clearly be represented via the other variables; for example, boolean key-value pair(s). To add an additional property to `data`, it should first be added as an optional property and typed in the `CustomAnalyticsData` interface.

Avoid including pipes (`|`) as delimiters in any of the event properties. They are used in Adobe Analytics to separate fields.

Avoid creating custom events that collect such as search queries, entity names, or other forms of user input. Custom events can still be fired on these actions with a generic `label` or no label at all.

Examples

- `sendMarketplaceSearchEvent` fires when selecting a category from the dropdown (`label` is predefined) and clicking the search field (a generic `label` is used).
- `sendBucketCreateEvent` sends the region of the bucket, but does not send the bucket label.

## Locally Testing Page Views & Custom Events and/or Troubleshooting

1. Set the `REACT_APP_ADOBE_ANALYTICS_URL` environment variable in `.env`.
2. Use the browser tools Network tab, filter requests by "adobe", and check that successful network requests have been made to load the launch script and its extensions.
3. In the browser console, type `_satellite.setDebug(true)`.
4. Refresh the page. You should see Adobe debug log output in the console. Each page view change or custom event that fires should be visible in the logs.
5. When viewing dashboards in Adobe Analytics, it may take ~1 hour for analytics data to update. Once this happens, locally fired events will be visible in the dev dashboard.
1 change: 0 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@
"node-fetch": "^2.6.7",
"ua-parser-js": "^0.7.33",
"immer": "^9.0.6",
"lodash": "^4.17.21",
"glob-parent": "^5.1.2",
"hosted-git-info": "^5.0.0",
"yaml": "^2.3.0",
Expand Down
15 changes: 15 additions & 0 deletions packages/api-v4/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
## [2024-04-29] - v0.115.0


### Added:

- New endpoint for `volumes/types` ([#10376](https://github.com/linode/manager/pull/10376))

### Changed:

- Allow `stackscript_id` to be `null` in `CreateLinodeRequest` ([#10367](https://github.com/linode/manager/pull/10367))

### Upcoming Features:

- Add interface for linode migrate flow with placement groups ([#10339](https://github.com/linode/manager/pull/10339))

## [2024-04-15] - v0.114.0

### Added:
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.114.0",
"version": "0.115.0",
"homepage": "https://github.com/linode/manager/tree/develop/packages/api-v4",
"bugs": {
"url": "https://github.com/linode/manager/issues"
Expand Down
10 changes: 9 additions & 1 deletion packages/api-v4/src/linodes/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,7 @@ export interface CreateLinodeRequest {
*
* This field cannot be used when deploying from a Backup or a Private Image.
*/
stackscript_id?: number;
stackscript_id?: number | null;
/**
* A Backup ID from another Linode’s available backups.
*
Expand Down Expand Up @@ -451,6 +451,14 @@ export interface CreateLinodeRequest {
placement_group?: CreateLinodePlacementGroupPayload;
}

export interface MigrateLinodeRequest {
placement_group?: {
id: number;
compliant_only?: boolean;
};
region: string;
}

export type RescueRequestObject = Pick<
Devices,
'sda' | 'sdb' | 'sdc' | 'sdd' | 'sde' | 'sdf' | 'sdg'
Expand Down
15 changes: 14 additions & 1 deletion packages/api-v4/src/volumes/volumes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import Request, {
setURL,
setXFilter,
} from '../request';
import { Filter, Params, ResourcePage as Page } from '../types';
import { Filter, Params, ResourcePage as Page, PriceType } from '../types';
import {
AttachVolumePayload,
CloneVolumePayload,
Expand Down Expand Up @@ -48,6 +48,19 @@ export const getVolumes = (params?: Params, filters?: Filter) =>
setXFilter(filters)
);

/**
* getVolumeTypes
*
* Return a paginated list of available Volume types, which contains pricing information.
* This endpoint does not require authentication.
*/
export const getVolumeTypes = (params?: Params) =>
Request<Page<PriceType>>(
setURL(`${API_ROOT}/volumes/types`),
setMethod('GET'),
setParams(params)
);

/**
* attachVolume
*
Expand Down
62 changes: 62 additions & 0 deletions packages/manager/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,68 @@ 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/).

## [2024-04-29] - v1.118.0


### Added:

- April Marketplace apps and SVGs ([#10382](https://github.com/linode/manager/pull/10382))

### Changed:

- Improve the UX of Access Token & Access Key drawers ([#10338](https://github.com/linode/manager/pull/10338))
- RegionSelect disabled option API updates ([#10373](https://github.com/linode/manager/pull/10373))
- Dynamic pricing with `volumes/types` endpoint ([#10376](https://github.com/linode/manager/pull/10376))
- Top Menu clean up and refactor ([#10383](https://github.com/linode/manager/pull/10383))
- PlanSelection availability updates and consolidation ([#10387](https://github.com/linode/manager/pull/10387))
- Shift wording from 'limited availability' to 'limited deployment availability' ([#10394](https://github.com/linode/manager/pull/10394))
- Gecko Beta copy updates ([#10400](https://github.com/linode/manager/pull/10400))

### Fixed:

- Charts Y-axis values are trimmed when scale is increased ([#10330](https://github.com/linode/manager/pull/10330))
- Chrome bug related to outdated CSS vendor prefixes ([#10380](https://github.com/linode/manager/pull/10380))
- Clickable disabled smaller plans in Resizing Tab ([#10381](https://github.com/linode/manager/pull/10381))
- New OBJ Buckets do not appear when created before initial fetch completes ([#10388](https://github.com/linode/manager/pull/10388))

### Removed:

- Deprecated Marketplace apps ([#10382](https://github.com/linode/manager/pull/10382))

### Tech Stories:

- Refactor and streamline VPC queries ([#10322](https://github.com/linode/manager/pull/10322))
- Update documentation on Adobe Analytics to cover data property ([#10365](https://github.com/linode/manager/pull/10365))
- Add isFeatureEnabledV2 to check for feature flag AND account capability ([#10371](https://github.com/linode/manager/pull/10371))
- Replace sanitize-html with dompurify ([#10378](https://github.com/linode/manager/pull/10378))
- Remove lodash (global import) as a package dependency ([#10386](https://github.com/linode/manager/pull/10386))
- Add Gravatar Analytics ([#10389](https://github.com/linode/manager/pull/10389))

### Tests:

- Add tests for Parent/Child Users & Grants page ([#10240](https://github.com/linode/manager/pull/10240))
- Add new Cypress tests for Longview landing page ([#10321](https://github.com/linode/manager/pull/10321))
- Add VM Placement Group landing page empty state UI test ([#10350](https://github.com/linode/manager/pull/10350))
- Fix `machine-image-upload.spec.ts` e2e test flake ([#10370](https://github.com/linode/manager/pull/10370))
- Update latest kernel version to fix `linode-config.spec.ts` ([#10391](https://github.com/linode/manager/pull/10391))
- Fix hanging account switching test ([#10396](https://github.com/linode/manager/pull/10396))

### Upcoming Features:

- Add Placement Groups to Linode Migrate flow ([#10339](https://github.com/linode/manager/pull/10339))
- Add text copy for Placement Group region limits in PlacementGroupsCreateDrawer ([#10355](https://github.com/linode/manager/pull/10355))
- Invalidate Placement Group queries on Linode create & delete mutations ([#10366](https://github.com/linode/manager/pull/10366))
- Update the Placement Groups SVG icon ([#10379](https://github.com/linode/manager/pull/10379))
- Fix & Improve Placement Groups feature restriction ([#10372](https://github.com/linode/manager/pull/10372))
- Linode Create Refactor:
- VPC (#10354)
- StackScripts (#10367)
- Validation (#10374)
- User Defined Fields ([#10395](https://github.com/linode/manager/pull/10395))
- Update gecko feature flag to object ([#10363](https://github.com/linode/manager/pull/10363))
- Show the selected regions as chips in the AccessKeyDrawer ([#10375](https://github.com/linode/manager/pull/10375))
- Add feature flag for Linode Disk Encryption (LDE) ([#10402](https://github.com/linode/manager/pull/10402))

## [2024-04-15] - v1.117.0

### Added:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,14 +68,42 @@ describe('Personal access tokens', () => {
.findByTitle('Add Personal Access Token')
.should('be.visible')
.within(() => {
// Attempt to submit form without specifying a label
// Confirm submit button is disabled without specifying scopes.
ui.buttonGroup
.findButtonByTitle('Create Token')
.scrollIntoView()
.should('be.visible')
.should('be.disabled');

// Select just one scope.
cy.get('[data-qa-row="Account"]').within(() => {
cy.get('[type="radio"]').first().click();
});

// Confirm submit button is still disabled without specifying ALL scopes.
ui.buttonGroup
.findButtonByTitle('Create Token')
.scrollIntoView()
.should('be.visible')
.should('be.disabled');

// Specify ALL scopes by selecting the "No Access" Select All radio button.
cy.get('[data-qa-perm-no-access-radio]').click();
cy.get('[data-qa-perm-no-access-radio]').should(
'have.attr',
'data-qa-radio',
'true'
);

// Confirm submit button is enabled; attempt to submit form without specifying a label.
ui.buttonGroup
.findButtonByTitle('Create Token')
.scrollIntoView()
.should('be.visible')
.should('be.enabled')
.click();

// Confirm validation error.
cy.findByText('Label must be between 1 and 100 characters.')
.scrollIntoView()
.should('be.visible');
Expand Down
Loading
Loading