Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
08a42b9
upcoming: [UIE-10432] - Implement drawer to reserve an IP address (#1…
grevanak-akamai Apr 7, 2026
4f36980
deps: [UIE-10721] - Bump `tsup` and `vite` to fix vulnerabilities (#1…
pmakode-akamai Apr 7, 2026
de5e148
[upcoming] UIE-9410: Implement the Create Share Group page (#13550)
fabrice-akamai Apr 7, 2026
9a9fb94
change: [DPS-42071] - Improve errors handling in stream and destinati…
kagora-akamai Apr 8, 2026
128efd1
fix: [UIE-10603] - Increase profile preferences reliability (#13547)
abailly-akamai Apr 8, 2026
c531474
change: [DPS-41998] - Akamai Object Storage Destination - tech writin…
kagora-akamai Apr 8, 2026
b1c9557
fix:[UIE-10720] fixed lke version upgrade logic (#13562)
tvijay-akamai Apr 8, 2026
56cab84
upcoming: [DPS-41826] - add newFeature chip to render conditionally (…
santoshp210-akamai Apr 8, 2026
cdab569
upcoming: [UIE-9487] VPC UI not displaying DBaaS resources (#13504)
smans-akamai Apr 9, 2026
a996133
upcoming: [UIE-9409] β€” View Shared Image Details drawer (#13558)
dwiley-akamai Apr 9, 2026
22f8513
upcoming: [UIE-10430] - Reserved IP: Implement Landing Screen. (#13549)
tanushree-akamai Apr 10, 2026
f213afd
test: [UIE-10834] - Fix Image test failures by mocking feature flag (…
jdamore-linode Apr 10, 2026
1b992c1
upcoming: [UIE-10729] β€” Parity between image options in Rebuild Linod…
dwiley-akamai Apr 10, 2026
524b8c9
upcoming: [UIE-10550] - Add databaseValkey feature flag (#13573)
hana-akamai Apr 10, 2026
63871a3
fix: [DPS-42123] - Destination Form: fix tooltips positions (#13574)
mduda-akamai Apr 13, 2026
7f35a94
build(deps): Bump axios from 1.13.5 to 1.15.0 (#13576)
dependabot[bot] Apr 13, 2026
5902fbb
upcoming: [UIE-9410] - Create Share Group: Implement the Images selec…
fabrice-akamai Apr 13, 2026
f62fd99
upcoming: [UIE-10333] - Allow Creating Secure Linodes without Root Pa…
harsh-akamai Apr 13, 2026
9407595
change: [DPS-41857] - Logs: Add new statuses - deactivating, failed (…
bbanucha-akamai Apr 13, 2026
54393ec
feat: [UIE-10778], [UIE-10777] - IAM LA/New flag fix, text update (#1…
mpolotsk-akamai Apr 13, 2026
5476c17
upcoming: [UIE-10433] - Implement feature to Unreserve IP address (#1…
grevanak-akamai Apr 14, 2026
535ef89
feat: [DPS-36767] - Embedded metrics dashboard as contextual view in …
kagora-akamai Apr 14, 2026
0180606
upcoming: [UIE-9837] - Generational plans changes for Databases (#13539)
hana-akamai Apr 14, 2026
9fc994d
fix: [PDI-3249] - Use sessionStorage for codeVerifier and nonce: upda…
mkaminsk-akamai Apr 15, 2026
cc9df4e
change: LKE-9380 - update HA SLA (#13553)
unn Apr 15, 2026
0b1e0f0
upcoming: [M3-10780] - prepare for LKE Dashboard removal (#13485)
isimluk Apr 15, 2026
cd99b3a
upcoming: [UIE-10427] - Reserved IP: Implement IP Address Selection c…
tanushree-akamai Apr 15, 2026
ea301d0
test: [DBAAS1-1529] - Improvise DBaaS update test cases and restructu…
stayal712 Apr 15, 2026
786043b
added acc build folders permanently
tvijay-akamai Apr 15, 2026
ab3280c
added dependency to jenkins in jenkins
tvijay-akamai Apr 15, 2026
e7fd7c2
increased unit test timeout to 10000ms from 5000ms as some of the tes…
tvijay-akamai Apr 15, 2026
c5627b6
testing
tvijay-akamai Apr 15, 2026
40b3519
fix(tests): CICD unit tests timeout
Apr 15, 2026
5105705
Pull request #55: fix(tests): CICD unit tests timeout
corya-akamai Apr 15, 2026
e403370
Pull request #58: UIE-11111 - Align CDS libs to latest snapshot
abailly-akamai Apr 16, 2026
abd0dcc
chore: [UIE-11109] - Fix intermittent test failures targeting repeat …
Apr 16, 2026
a40da86
Pull request #69: chore: [UIE-11109] - Fix intermittent test failures…
corya-akamai Apr 17, 2026
4cb03e5
Pull request #73: chore: [UIE-11109] Improve Vitest setup w/ shards
abailly-akamai Apr 17, 2026
f74bea8
Pull request #80: Revert "Pull request #73: chore: [UIE-11109] Improv…
corya-akamai Apr 17, 2026
0a894fc
Pull request #79: chore: CICD - Skip pipeline unless it's develop, st…
corya-akamai Apr 17, 2026
a441e11
Pull request #62: upcoming: [UIE-10437] - Allow allotment of reserved…
grevanak-akamai Apr 20, 2026
62c03bd
sync latest upstream
santoshp210-akamai Apr 20, 2026
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
197 changes: 197 additions & 0 deletions acc/Jenkinsfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
pipeline {
agent {
label "cloud-focal"
}

options {
disableConcurrentBuilds()
}

environment {
CI = 'true'
}

stages {
stage("Setup pnpm") {
when {
anyOf {
branch 'develop'
branch 'staging'
branch 'master'
expression { env.CHANGE_ID != null } // It's a PR
}
}
steps {
nodejs(configId: "npmrc-ro", nodeJSInstallationName: "v22") {
sh "node -v"
sh "npm -v"
sh "pnpm -v || corepack enable pnpm"
sh "pnpm install:all"
}
}
}

stage("Build dependencies") {
when {
anyOf {
branch 'develop'
branch 'staging'
branch 'master'
expression { env.CHANGE_ID != null } // It's a PR
}
}
steps {
nodejs(configId: "npmrc-ro", nodeJSInstallationName: "v22") {
sh "pnpm build:validation"
sh "pnpm build:sdk"
}
}
}

stage("Validate") {
when {
anyOf {
branch 'develop'
branch 'staging'
branch 'master'
expression { env.CHANGE_ID != null } // It's a PR
}
}
parallel {
stage("Lint") {
steps {
nodejs(configId: "npmrc-ro", nodeJSInstallationName: "v22") {
sh "pnpm lint:all"
}
}
}
stage("Typecheck") {
steps {
nodejs(configId: "npmrc-ro", nodeJSInstallationName: "v22") {
sh "pnpm -r --parallel typecheck"
}
}
}
stage("Test") {
steps {
nodejs(configId: "npmrc-ro", nodeJSInstallationName: "v22") {
sh "pnpm test"
}
}
}
}
}

stage("Build PR") {
when {
expression { env.CHANGE_ID != null } // It's a PR
}
steps {
nodejs(configId: "npmrc-ro", nodeJSInstallationName: "v22") {
sh "pnpm build"
}
}
}

stage("Build develop") {
when {
anyOf {
branch pattern: "develop"
}
}
environment {
REACT_APP_API_MAX_PAGE_SIZE = "500"
REACT_APP_API_ROOT = "https://api.devcloud.linode.com/v4"
REACT_APP_APP_ROOT = "https://cloud.devcloud.linode.com"
REACT_APP_CLIENT_ID = "4bd20531408b51e73313"
REACT_APP_LAUNCH_DARKLY_ID = "67ed97f93736be0c14fa0ea2"
REACT_APP_LKE_HIGH_AVAILABILITY_PRICE = "60"
REACT_APP_LOGIN_ROOT = "https://login.devcloud.linode.com"
}
steps {
nodejs(configId: "npmrc-ro", nodeJSInstallationName: "v22") {
sh "pnpm build"
sh "pnpm release --env=develop"
}
}
}

stage("Build staging") {
when {
anyOf {
branch pattern: "staging"
}
}
environment {
REACT_APP_PAYPAL_CLIENT_ID = "AWdnFJ_Yx5X9uqKZQdbdkLfCnEJwtauQJ2tyesKf3S0IxSrkRLmB2ZN2ACSwy37gxY_AZoTagHWlZCOA"
REACT_APP_GPAY_MERCHANT_ID = "BCR2DN6TZ6OMNHTP"
REACT_APP_ALGOLIA_APPLICATION_ID = "KGUN8FAIPF"
REACT_APP_ALGOLIA_SEARCH_KEY = "d4847002cd30392fe0fbd00a1da933ed"
REACT_APP_API_ROOT = "https://cloud.staging.linode.com/api/v4"
REACT_APP_APP_ROOT = "https://cloud.staging.linode.com"
REACT_APP_CLIENT_ID = "6714f4f895cbe13a5781"
REACT_APP_ENVIRONMENT_NAME = "staging"
REACT_APP_LISH_ROOT = "webconsole.linode.com"
REACT_APP_LOGIN_ROOT = "https://login.staging.linode.com"
REACT_APP_ADOBE_ANALYTICS_URL = "https://assets.adobedtm.com/fcfd3580c848/15e23aa7fce2/launch-5bda4b7a1db9-staging.min.js"
REACT_APP_PENDO_API_KEY = "46f744c8-8628-4dc4-55f9-83fdd3bf2eef"
REACT_APP_SENTRY_URL = "https://ec5fcee0daee4bc9bb74e5b614e27ee0@o83654.ingest.sentry.io/182732"
REACT_APP_LAUNCH_DARKLY_ID = "5ed11a54d310ac0a0e542702"
REACT_APP_API_MAX_PAGE_SIZE = "500"
REACT_APP_STATUS_PAGE_URL = "https://status.linode.com/api/v2"
}
steps {
nodejs(configId: "npmrc-ro", nodeJSInstallationName: "v22") {
sh "pnpm build"
sh "pnpm release --env=staging"
}
}
}

stage("Build master") {
when {
anyOf {
branch pattern: "master"
}
}
environment {
REACT_APP_ADOBE_ANALYTICS_URL = "https://assets.adobedtm.com/fcfd3580c848/15e23aa7fce2/launch-9ea21650035a.min.js"
REACT_APP_ALGOLIA_APPLICATION_ID = "KGUN8FAIPF"
REACT_APP_ALGOLIA_SEARCH_KEY = "d4847002cd30392fe0fbd00a1da933ed"
REACT_APP_API_MAX_PAGE_SIZE = "500"
REACT_APP_API_ROOT = "https://cloud.linode.com/api/v4"
REACT_APP_APP_ROOT = "https://cloud.linode.com"
REACT_APP_CLIENT_ID = "04b4276a4094ce378d27"
REACT_APP_ENVIRONMENT_NAME = "production"
REACT_APP_GPAY_MERCHANT_ID = "BCR2DN6TZ6OMNHTP"
REACT_APP_LAUNCH_DARKLY_ID = "5cd5be32283709081fd70fbc"
REACT_APP_LISH_ROOT = "webconsole.linode.com"
REACT_APP_LOGIN_ROOT = "https://login.linode.com"
REACT_APP_PAYPAL_CLIENT_ID = "AWdnFJ_Yx5X9uqKZQdbdkLfCnEJwtauQJ2tyesKf3S0IxSrkRLmB2ZN2ACSwy37gxY_AZoTagHWlZCOA"
REACT_APP_PENDO_API_KEY = '46f744c8-8628-4dc4-55f9-83fdd3bf2eef'
REACT_APP_SENTRY_URL = "https://ec5fcee0daee4bc9bb74e5b614e27ee0@o83654.ingest.sentry.io/182732"
REACT_APP_STATUS_PAGE_URL = "https://status.linode.com/api/v2"
}
steps {
nodejs(configId: "npmrc-ro", nodeJSInstallationName: "v22") {
sh "pnpm build"
sh "pnpm release --env=master"
}
}
}

stage("Scan") {
when {
anyOf {
branch pattern: "develop"
branch pattern: "staging"
branch pattern: "master"
}
}
steps {
pulsarBlackduck(bdApplicationId: "cloud-manager", buildType: "FRONTEND")
pulsarSonar(jobType: "FREESTYLE", projectName: "cloud-manager", customSrc: true)
}
}
}
}
49 changes: 49 additions & 0 deletions acc/publish.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import fs from "fs";
import path from "path";
import { execSync } from "child_process";
import { fileURLToPath } from "url";

const args = process.argv.slice(2);
const envFlag = args.find(arg => arg.startsWith("--env="));
const env = envFlag ? envFlag.split("=")[1] : '';

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

const pathToPackage = path.join(
__dirname,
"../packages/manager/package.json",
);
const file = fs.readFileSync(pathToPackage, "utf-8");
const pkg = JSON.parse(file);

const gitHash = execSync("git rev-parse --short HEAD", {
encoding: "utf8",
}).trim();
const currentDate = execSync("date +%Y%m%dT%H%M%S", {
encoding: "utf8",
}).trim();

// uses a variable that we know exists on jenkins: https://wiki.jenkins.io/display/JENKINS/Git+Plugin
const branch = (process.env.GIT_BRANCH || "").trim();
const isDev = branch === "develop";
const isStage = branch === "staging";
const isProd = branch === "master";

if (isDev || isStage) {
console.log("Publishing develop:", pkg.version);
pkg.version = `${pkg.version.split("-")[0]}-${env}-${currentDate}-${gitHash}`;
fs.writeFileSync(pathToPackage, JSON.stringify(pkg, null, 2));
execSync("pnpm publish --no-git-checks", {
cwd: path.join(__dirname, "../packages/manager"),
stdio: "inherit",
});
} else if (isProd) {
console.log("Publishing master:", pkg.version);
execSync("pnpm publish --no-git-checks", {
cwd: path.join(__dirname, "../packages/manager"),
stdio: "inherit",
});
} else {
console.log("On branch:", branch, ", skipping publish");
}
35 changes: 18 additions & 17 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,40 +34,41 @@
"install:all": "pnpm install --frozen-lockfile",
"build:sdk": "pnpm run --filter @linode/api-v4 build",
"build:validation": "pnpm run --filter @linode/validation build",
"build": "pnpm build:validation && pnpm build:sdk && pnpm --filter linode-manager build",
"build:analyze": "pnpm run --filter linode-manager build:analyze",
"build": "pnpm build:validation && pnpm build:sdk && pnpm --filter @linode/cloud-manager build",
"build:analyze": "pnpm run --filter @linode/cloud-manager build:analyze",
"bootstrap": "pnpm install:all && pnpm build:validation && pnpm build:sdk",
"up:expose": "npm_config_package_import_method=clone-or-copy pnpm install:all && pnpm build:validation && pnpm build:sdk && pnpm start:all:expose",
"dev": "concurrently -n api-v4,validation,ui,utilities,queries,shared,manager -c blue,yellow,magenta,cyan,gray,blue,green \"pnpm run --filter @linode/api-v4 start\" \"pnpm run --filter @linode/validation start\" \"pnpm run --filter @linode/ui start\" \"pnpm run --filter @linode/utilities start\" \"pnpm run --filter @linode/queries start\" \"pnpm run --filter @linode/shared start\" \"pnpm run --filter linode-manager start\"",
"start:all:expose": "concurrently -n api-v4,validation,ui,utilities,queries,shared,manager -c blue,yellow,magenta,cyan,gray,blue,green \"pnpm run --filter @linode/api-v4 start\" \"pnpm run --filter @linode/validation start\" \"pnpm run --filter @linode/ui start\" \"pnpm run --filter @linode/utilities start\" \"pnpm run --filter @linode/queries start\" \"pnpm run --filter @linode/shared start\" \"pnpm run --filter linode-manager start:expose\"",
"start:manager": "pnpm --filter linode-manager start",
"start:manager:ci": "pnpm run --filter linode-manager start:ci",
"dev": "concurrently -n api-v4,validation,ui,utilities,queries,shared,manager -c blue,yellow,magenta,cyan,gray,blue,green \"pnpm run --filter @linode/api-v4 start\" \"pnpm run --filter @linode/validation start\" \"pnpm run --filter @linode/ui start\" \"pnpm run --filter @linode/utilities start\" \"pnpm run --filter @linode/queries start\" \"pnpm run --filter @linode/shared start\" \"pnpm run --filter @linode/cloud-manager start\"",
"start:all:expose": "concurrently -n api-v4,validation,ui,utilities,queries,shared,manager -c blue,yellow,magenta,cyan,gray,blue,green \"pnpm run --filter @linode/api-v4 start\" \"pnpm run --filter @linode/validation start\" \"pnpm run --filter @linode/ui start\" \"pnpm run --filter @linode/utilities start\" \"pnpm run --filter @linode/queries start\" \"pnpm run --filter @linode/shared start\" \"pnpm run --filter @linode/cloud-manager start:expose\"",
"start:manager": "pnpm --filter @linode/cloud-manager start",
"start:manager:ci": "pnpm run --filter @linode/cloud-manager start:ci",
"docs": "bunx vitepress@1.0.0-rc.44 dev docs",
"storybook": "pnpm run --filter linode-manager storybook",
"storybook": "pnpm run --filter @linode/cloud-manager storybook",
"test": "vitest run",
"test:watch": "vitest",
"test:manager": "pnpm run --filter linode-manager test",
"test:manager": "pnpm run --filter @linode/cloud-manager test",
"test:sdk": "pnpm run --filter @linode/api-v4 test",
"test:search": "pnpm run --filter @linode/search test",
"test:ui": "pnpm run --filter @linode/ui test",
"test:utilities": "pnpm run --filter @linode/utilities test",
"test:shared": "pnpm run --filter @linode/shared test",
"coverage": "pnpm run --filter linode-manager coverage",
"coverage:summary": "pnpm run --filter linode-manager coverage:summary",
"cy:run": "pnpm run --filter linode-manager cy:run",
"cy:e2e": "pnpm run --filter linode-manager cy:e2e",
"coverage": "pnpm run --filter @linode/cloud-manager coverage",
"coverage:summary": "pnpm run --filter @linode/cloud-manager coverage:summary",
"cy:run": "pnpm run --filter @linode/cloud-manager cy:run",
"cy:e2e": "pnpm run --filter @linode/cloud-manager cy:e2e",
"cy:ci": "pnpm cy:e2e",
"cy:debug": "pnpm run --filter linode-manager cy:debug",
"cy:component": "pnpm run --filter linode-manager cy:component",
"cy:component:run": "pnpm run --filter linode-manager cy:component:run",
"cy:rec-snap": "pnpm run --filter linode-manager cy:rec-snap",
"cy:debug": "pnpm run --filter @linode/cloud-manager cy:debug",
"cy:component": "pnpm run --filter @linode/cloud-manager cy:component",
"cy:component:run": "pnpm run --filter @linode/cloud-manager cy:component:run",
"cy:rec-snap": "pnpm run --filter @linode/cloud-manager cy:rec-snap",
"changeset": "pnpm run --filter @linode/scripts changeset",
"generate-changelogs": "pnpm run --filter @linode/scripts generate-changelogs",
"package-versions": "pnpm run --filter @linode/scripts package-versions",
"junit:summary": "pnpm run --filter @linode/scripts --silent junit:summary",
"generate-tod": "pnpm run --filter @linode/scripts --silent generate-tod",
"clean": "concurrently \"rm -rf node_modules\" \"pnpm -r exec rm -rf node_modules lib dist\" \"pnpm store prune\"",
"prepare": "husky"
"prepare": "husky",
"release": "node acc/publish.mjs"
},
"resolutions": {
"semver": "^7.5.2",
Expand Down
5 changes: 5 additions & 0 deletions packages/api-v4/.changeset/pr-13504-added-1775602581034.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@linode/api-v4": Added
---

SubnetAssignedDatabaseData interface and update to Subnet to include databases property ([#13504](https://github.com/linode/manager/pull/13504))
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@linode/api-v4": Tech Stories
---

Bump `tsup` from `8.4.0` to `8.5.1` ([#13559](https://github.com/linode/manager/pull/13559))
4 changes: 2 additions & 2 deletions packages/api-v4/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
"unpkg": "./lib/index.global.js",
"dependencies": {
"@linode/validation": "workspace:*",
"axios": "~1.13.5",
"axios": "~1.15.0",
"ipaddr.js": "^2.0.0",
"yup": "^1.4.0"
},
Expand All @@ -59,7 +59,7 @@
"@linode/tsconfig": "workspace:*",
"axios-mock-adapter": "^1.22.0",
"concurrently": "^9.0.1",
"tsup": "^8.4.0",
"tsup": "^8.5.1",
"@types/node": "^22.13.14"
},
"lint-staged": {
Expand Down
2 changes: 2 additions & 0 deletions packages/api-v4/src/delivery/types.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
export const streamStatus = {
Active: 'active',
Deactivating: 'deactivating',
Failed: 'failed',
Inactive: 'inactive',
Provisioning: 'provisioning',
} as const;
Expand Down
10 changes: 10 additions & 0 deletions packages/api-v4/src/linodes/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -653,6 +653,11 @@ export interface CreateLinodeRequest {
* @default false
*/
backups_enabled?: boolean | null;
/**
* When deploying from an Image, this field is optional, otherwise it is ignored.
* This is used to set the boot size for the newly-created Linode.
*/
boot_size?: null | number;
/**
* If it is deployed from an Image or a Backup and you wish it to remain offline after deployment, set this to false.
*
Expand Down Expand Up @@ -694,6 +699,11 @@ export interface CreateLinodeRequest {
* Must be empty if Linode is configured to use new Linode Interfaces.
*/
ipv4?: string[];
/**
* When deploying from an Image, this field is optional, otherwise it is ignored.
* This is used to set the kernel type for the newly-created Linode.
*/
kernel?: null | string;
/**
* The Linode's label is for display purposes only.
* If no label is provided for a Linode, a default will be assigned.
Expand Down
2 changes: 1 addition & 1 deletion packages/api-v4/src/networking/networking.ts
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,7 @@ export const unReserveIP = (ipAddress: string) =>
*/
export const getReservedIPsTypes = (params?: Params) =>
Request<Page<PriceType>>(
setURL(`${API_ROOT}/networking/reserved/ips/types`),
setURL(`${BETA_API_ROOT}/networking/reserved/ips/types`),
setMethod('GET'),
setParams(params),
);
9 changes: 2 additions & 7 deletions packages/api-v4/src/networking/types.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,8 @@
export interface AssignedEntity {
id: number;
label: string;
type: string;
url: string;
}
import type { Entity } from '../account/types';

export interface IPAddress {
address: string;
assigned_entity: AssignedEntity | null;
assigned_entity: Entity | null;
gateway: null | string;
interface_id: null | number;
linode_id: null | number;
Expand Down
Loading
Loading