From fbf6e8bc4a0c3bddbdf44ad351f4a882d4ed58bf Mon Sep 17 00:00:00 2001 From: ivan katliarchuk Date: Tue, 24 Dec 2024 17:49:08 +0000 Subject: [PATCH 01/18] feat(23410): eks addon refresh Signed-off-by: ivan katliarchuk --- lib/modules/datasource/api.ts | 2 + .../datasource/aws-eks-addon/index.spec.ts | 128 ++++++++++++++++++ lib/modules/datasource/aws-eks-addon/index.ts | 70 ++++++++++ .../datasource/aws-eks-addon/readme.md | 90 ++++++++++++ .../datasource/aws-eks-addon/schema.ts | 12 ++ lib/util/cache/package/types.ts | 1 + package.json | 1 + 7 files changed, 304 insertions(+) create mode 100644 lib/modules/datasource/aws-eks-addon/index.spec.ts create mode 100644 lib/modules/datasource/aws-eks-addon/index.ts create mode 100644 lib/modules/datasource/aws-eks-addon/readme.md create mode 100644 lib/modules/datasource/aws-eks-addon/schema.ts diff --git a/lib/modules/datasource/api.ts b/lib/modules/datasource/api.ts index e7284442c0a36b..37b0148f65f4a8 100644 --- a/lib/modules/datasource/api.ts +++ b/lib/modules/datasource/api.ts @@ -1,5 +1,6 @@ import { ArtifactoryDatasource } from './artifactory'; import { AwsMachineImageDatasource } from './aws-machine-image'; +import { AwsEKSAddonDataSource } from './aws-eks-addon'; import { AwsRdsDatasource } from './aws-rds'; import { AzureBicepResourceDatasource } from './azure-bicep-resource'; import { AzurePipelinesTasksDatasource } from './azure-pipelines-tasks'; @@ -70,6 +71,7 @@ const api = new Map(); export default api; api.set(ArtifactoryDatasource.id, new ArtifactoryDatasource()); +api.set(AwsEKSAddonDataSource.id, new AwsEKSAddonDataSource()); api.set(AwsMachineImageDatasource.id, new AwsMachineImageDatasource()); api.set(AwsRdsDatasource.id, new AwsRdsDatasource()); api.set(AzureBicepResourceDatasource.id, new AzureBicepResourceDatasource()); diff --git a/lib/modules/datasource/aws-eks-addon/index.spec.ts b/lib/modules/datasource/aws-eks-addon/index.spec.ts new file mode 100644 index 00000000000000..4c0b70b5c9e989 --- /dev/null +++ b/lib/modules/datasource/aws-eks-addon/index.spec.ts @@ -0,0 +1,128 @@ +import { + type AddonInfo, + DescribeAddonVersionsCommand, + DescribeAddonVersionsResponse, + EKSClient, +} from '@aws-sdk/client-eks'; +import { mockClient } from 'aws-sdk-client-mock'; +import { getPkgReleases } from '..'; +import { AwsEKSAddonDataSource } from '.'; + +const datasource = AwsEKSAddonDataSource.id; +const eksMock = mockClient(EKSClient); + +function mockDescribeAddonVersionsCommand( + result: DescribeAddonVersionsResponse, +): void { + eksMock.reset(); + eksMock.on(DescribeAddonVersionsCommand).resolves(result); +} + +function mockDescribeAddonVersionsCommandWithRegion( + result: DescribeAddonVersionsResponse, +): void { + eksMock.reset(); + eksMock + .on(DescribeAddonVersionsCommand) + .callsFake(async (input, getClient) => { + const client = getClient(); + const region = await client.config.region(); + return { + ...result, + // put the client region as nextToken + // so that when we assert on the snapshot, we also verify that region from packageName is + // passed to aws client. + nextToken: region, + }; + }); +} + +describe('modules/datasource/aws-eks-addon/index', () => { + describe('getPkgReleases()', () => { + it.each<{ des: string; req: DescribeAddonVersionsResponse }>` + des | req + ${'null'} | ${{}} + ${'empty'} | ${{ addons: [] }} + ${'emptyVersion'} | ${{ addons: [{}] }} + `('returned $des addons to be null', async ({ req }) => { + mockDescribeAddonVersionsCommand(req); + const res = await getPkgReleases({ + datasource, + packageName: + '{"kubernetesVersion":"1.30","addonName":"non-existing-addon"}', + }); + expect(res).toBeNull(); + expect(eksMock.calls()).toHaveLength(1); + expect(eksMock.call(0).args[0].input).toEqual({ + kubernetesVersion: '1.30', + addonName: 'non-existing-addon', + maxResults: 1, + }); + }); + + it('with matched addon to return all versions of the addon', async () => { + const vpcCniAddonInfo: AddonInfo = { + addonName: 'vpc-cni', + type: 'networking', + addonVersions: [ + { + addonVersion: 'v1.18.1-eksbuild.1', + architecture: ['amd64', 'arm64'], + compatibilities: [ + { + clusterVersion: '1.30', + platformVersions: ['*'], + defaultVersion: false, + }, + ], + requiresConfiguration: false, + }, + { + addonVersion: 'v1.18.2-eksbuild.1', + architecture: ['amd64', 'arm64'], + compatibilities: [ + { + clusterVersion: '1.30', + platformVersions: ['*'], + defaultVersion: false, + }, + ], + requiresConfiguration: false, + }, + // a bad addonVersion that's missing the basic fields. + {}, + ], + publisher: 'eks', + owner: 'aws', + }; + + mockDescribeAddonVersionsCommandWithRegion({ + addons: [vpcCniAddonInfo], + }); + const res = await getPkgReleases({ + datasource, + packageName: + '{"kubernetesVersion":"1.30","addonName":"vpc-cni","region":"mars-east-1"}', + }); + expect(res).toEqual({ + releases: [ + { + version: 'v1.18.1-eksbuild.1', + }, + { + version: 'v1.18.2-eksbuild.1', + }, + ], + }); + expect(eksMock.call(0).args[0].input).toEqual({ + kubernetesVersion: '1.30', + addonName: 'vpc-cni', + maxResults: 1, + }); + expect(await eksMock.call(0).returnValue).toEqual({ + addons: [vpcCniAddonInfo], + nextToken: 'mars-east-1', + }); + }); + }); +}); diff --git a/lib/modules/datasource/aws-eks-addon/index.ts b/lib/modules/datasource/aws-eks-addon/index.ts new file mode 100644 index 00000000000000..ab8cf0b089e17a --- /dev/null +++ b/lib/modules/datasource/aws-eks-addon/index.ts @@ -0,0 +1,70 @@ +import { + DescribeAddonVersionsCommand, + DescribeAddonVersionsCommandInput, + EKSClient, +} from '@aws-sdk/client-eks'; +import { fromNodeProviderChain } from '@aws-sdk/credential-providers'; +import { cache } from '../../../util/cache/package/decorator'; +import { Datasource } from '../datasource'; +import type { GetReleasesConfig, ReleaseResult } from '../types'; +import { EksAddonsFilter } from './schema'; + +export class AwsEKSAddonDataSource extends Datasource { + static readonly id = 'aws-eks-addon'; + + override readonly caching = true; + private readonly eksClients: Record = {}; + + constructor() { + super(AwsEKSAddonDataSource.id); + } + + @cache({ + namespace: `datasource-${AwsEKSAddonDataSource.id}`, + key: ({ packageName }: GetReleasesConfig) => `getReleases:${packageName}`, + }) + async getReleases({ + packageName: serializedFilter, + }: GetReleasesConfig): Promise { + const filter = EksAddonsFilter.safeParse(serializedFilter); + const eksClient = this.getEKSClient(filter); + + const cmd = new DescribeAddonVersionsCommand( + this.getDescribeAddonsRequest(filter), + ); + const response = await eksClient.send(cmd); + const addons = response.addons ?? []; + return { + releases: addons + .flatMap((addon) => addon.addonVersions) + .map((versionInfo) => ({ + version: versionInfo?.addonVersion ?? '', + })) + .filter((release) => release.version), + }; + } + + private getDescribeAddonsRequest({ + kubernetesVersion, + addonName, + }: EKSAddonsFilter): DescribeAddonVersionsCommandInput { + // this API is paginated, but we only ever care about a single addon at a time. + return { + kubernetesVersion, + addonName, + maxResults: 1, + }; + } + + private getEKSClient({ region, profile }: EKSAddonsFilter): EKSClient { + // we have two dimensions here, building a cache key for simplicity. + const cacheKey = `${region ?? 'default'}#${profile ?? 'default'}`; + if (!(cacheKey in this.eksClients)) { + this.eksClients[cacheKey] = new EKSClient({ + region, + credentials: fromNodeProviderChain({ profile }), + }); + } + return this.eksClients[cacheKey]; + } +} diff --git a/lib/modules/datasource/aws-eks-addon/readme.md b/lib/modules/datasource/aws-eks-addon/readme.md new file mode 100644 index 00000000000000..a90666ba2313e4 --- /dev/null +++ b/lib/modules/datasource/aws-eks-addon/readme.md @@ -0,0 +1,90 @@ +This datasource returns the addon versions available for use on [AWS EKS](https://aws.amazon.com/eks/) via the AWS API. + +**AWS API configuration** + +Since the datasource uses the AWS SDK for JavaScript, you can configure it like other AWS Tools. +You can use common AWS configuration options, for example: + +- Set the region via the `AWS_REGION` environment variable or your `~/.aws/config` file +- Provide credentials via the `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` environment variables or your `~/.aws/credentials` file +- Select the profile to use via `AWS_PROFILE` environment variable + +Alternatively, you can specify different `region` and `profile` for each addon. + +Read the [AWS Developer Guide - Configuring the SDK for JavaScript](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/configuring-the-jssdk.html) for more information on these configuration options. + +The minimal IAM privileges required for this datasource are: + +```json +{ + "Sid": "AllowDescribeEKSAddonVersions", + "Effect": "Allow", + "Action": ["eks:DescribeAddonVersions"], + "Resource": "*" +} +``` + +Read the [AWS EKS IAM reference](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelastickubernetesservice.html) for more information. + +**Usage** + +Because Renovate has no manager for the AWS EKS Addon datasource, you need to help Renovate by configuring the custom manager to identify the AWS EKS Addons you want updated. + +When configuring the custom manager, you have to pass in the Kubernetes version and addon names as a minified JSON object as the `packageName` +For example: + +```yaml +# Getting the vpc-cni version for Kubernetes 1.30 +{ + "kubernetesVersion": "1.30", + "addonName": "vpc-cni" +} + +# In order to use it with this datasource, you have to minify it: +{"kubernetesVersion":"1.30","addonName":"vpc-cni"} +``` + +Although it's unlikely that EKS might support different addon versions across regions, you can optionally specify the `region` and/or `profile` in the minified JSON object to discover the addon versions specific to this region. + +```yaml +# discover vpc-cni addon versions on Kubernetes 1.30 in us-east-1 region using environmental AWS credentials. +{"kubernetesVersion":"1.30","addonName":"vpc-cni","region":"us-east-1"} + +# discover vpc-cni addon versions on Kubernetes 1.30 in us-east-1 region using AWS credentials from `renovate-east` profile. +{"kubernetesVersion":"1.30","addonName":"vpc-cni","region":"us-east-1","profile":"renovate-east"} +``` + +Here's an example of using the custom manager to configure this datasource: + +```json +{ + "packageRules": [ + { + "matchDatasources": ["aws-eks-addon"], + "ignoreUnstable": false + } + ], + "customManagers": [ + { + "customType": "regex", + "fileMatch": [".*\\.tf"], + "matchStrings": [ + ".*# renovate: eksAddonsFilter=(?.*?)\n.*?[a-zA-Z0-9-_:]*[ ]*?[:|=][ ]*?[\"|']?(?[a-zA-Z0-9-_.]+)[\"|']?.*" + ], + "datasourceTemplate": "aws-eks-addon", + "versioningTemplate": "semver" + } + ] +} +``` + +The configuration above matches every terraform file, and recognizes these lines: + +```yaml +variable "vpc_cni_version" { + type = string + description = "EKS vpc-cni add-on version" + # renovate: eksAddonsFilter={"kubernetesVersion":"1.30","addonName":"vpc-cni"} + default = "v1.18.1-eksbuild.3" +} +``` diff --git a/lib/modules/datasource/aws-eks-addon/schema.ts b/lib/modules/datasource/aws-eks-addon/schema.ts new file mode 100644 index 00000000000000..f2eed918fe9339 --- /dev/null +++ b/lib/modules/datasource/aws-eks-addon/schema.ts @@ -0,0 +1,12 @@ +import { z } from 'zod'; +import { Json } from '../../../util/schema-utils'; + +export const EksAddonsFilterSchema = z.object({ + kubernetesVersion: z.string().min(1), + addonName: z.string().min(1), + region: z.string().optional(), + profile: z.string().optional(), +}); + +export type EksAddonsFilter = z.infer; +export const EksAddonsFilter = Json.pipe(EksAddonsFilterSchema); diff --git a/lib/util/cache/package/types.ts b/lib/util/cache/package/types.ts index d61cafdfe6f32e..dc3a01d79949bf 100644 --- a/lib/util/cache/package/types.ts +++ b/lib/util/cache/package/types.ts @@ -29,6 +29,7 @@ export type PackageCacheNamespace = | 'datasource-artifactory' | 'datasource-aws-machine-image' | 'datasource-aws-rds' + | 'datasource-aws-eks-addon' | 'datasource-azure-bicep-resource' | 'datasource-azure-pipelines-tasks' | 'datasource-bazel' diff --git a/package.json b/package.json index dd1d15ccf9df40..17036abbd8fb6e 100644 --- a/package.json +++ b/package.json @@ -146,6 +146,7 @@ "@aws-sdk/client-codecommit": "3.699.0", "@aws-sdk/client-ec2": "3.701.0", "@aws-sdk/client-ecr": "3.699.0", + "@aws-sdk/client-eks": "3.718.0", "@aws-sdk/client-rds": "3.699.0", "@aws-sdk/client-s3": "3.701.0", "@aws-sdk/credential-providers": "3.699.0", From d314263933d227d75f1961f53bb92900473e8858 Mon Sep 17 00:00:00 2001 From: ivan katliarchuk Date: Tue, 24 Dec 2024 17:57:28 +0000 Subject: [PATCH 02/18] feat(23410): update package json Signed-off-by: ivan katliarchuk --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 17036abbd8fb6e..97ce721ae4379f 100644 --- a/package.json +++ b/package.json @@ -67,6 +67,7 @@ "keywords": [ "automated", "azure", + "aws", "bazel", "bitbucket", "buildkite", From 726421546546ed973d59c58a442d5dffe889bc4e Mon Sep 17 00:00:00 2001 From: ivan katliarchuk Date: Tue, 24 Dec 2024 18:09:15 +0000 Subject: [PATCH 03/18] update pnpm-lock.yaml Signed-off-by: ivan katliarchuk --- package.json | 2 +- pnpm-lock.yaml | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 97ce721ae4379f..e03d503168e1bd 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ "@aws-sdk/client-codecommit": "3.699.0", "@aws-sdk/client-ec2": "3.701.0", "@aws-sdk/client-ecr": "3.699.0", - "@aws-sdk/client-eks": "3.718.0", + "@aws-sdk/client-eks": "3.699.0", "@aws-sdk/client-rds": "3.699.0", "@aws-sdk/client-s3": "3.701.0", "@aws-sdk/credential-providers": "3.699.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7549b097bf753e..e90e9dfd40cc66 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,9 @@ importers: '@aws-sdk/client-ecr': specifier: 3.699.0 version: 3.699.0 + '@aws-sdk/client-eks': + specifier: 3.699.0 + version: 3.699.0 '@aws-sdk/client-rds': specifier: 3.699.0 version: 3.699.0 @@ -671,6 +674,10 @@ packages: resolution: {integrity: sha512-hLcz7TZDx7tfxqrpcSm5xgMYitPpPDE4cKPk0BYAsu5RFg2Lo3QfooUnD5iKnaVbzJcY40BBHGChDrv7IhtERg==} engines: {node: '>=16.0.0'} + '@aws-sdk/client-eks@3.699.0': + resolution: {integrity: sha512-BN3FcMjjR2zNpoLkGc/nUgYupKnNWFT7cfbwxK7fBh6lEHMAqXIYTPSmcBFfh1bKouxR7/ae+XUBSMBVhO/wUA==} + engines: {node: '>=16.0.0'} + '@aws-sdk/client-rds@3.699.0': resolution: {integrity: sha512-i/S8sxyQDQbafjxaRTZBVP2/S/dCHlawr5ctz/dhK/HgO5LyHxac83JrpIlpLgndiFTC4h75ldRSjBuCcoRSJQ==} engines: {node: '>=16.0.0'} @@ -6519,6 +6526,55 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/client-eks@3.699.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.699.0(@aws-sdk/client-sts@3.699.0) + '@aws-sdk/client-sts': 3.699.0 + '@aws-sdk/core': 3.696.0 + '@aws-sdk/credential-provider-node': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0) + '@aws-sdk/middleware-host-header': 3.696.0 + '@aws-sdk/middleware-logger': 3.696.0 + '@aws-sdk/middleware-recursion-detection': 3.696.0 + '@aws-sdk/middleware-user-agent': 3.696.0 + '@aws-sdk/region-config-resolver': 3.696.0 + '@aws-sdk/types': 3.696.0 + '@aws-sdk/util-endpoints': 3.696.0 + '@aws-sdk/util-user-agent-browser': 3.696.0 + '@aws-sdk/util-user-agent-node': 3.696.0 + '@smithy/config-resolver': 3.0.13 + '@smithy/core': 2.5.5 + '@smithy/fetch-http-handler': 4.1.2 + '@smithy/hash-node': 3.0.11 + '@smithy/invalid-dependency': 3.0.11 + '@smithy/middleware-content-length': 3.0.13 + '@smithy/middleware-endpoint': 3.2.6 + '@smithy/middleware-retry': 3.0.31 + '@smithy/middleware-serde': 3.0.11 + '@smithy/middleware-stack': 3.0.11 + '@smithy/node-config-provider': 3.1.12 + '@smithy/node-http-handler': 3.3.2 + '@smithy/protocol-http': 4.1.8 + '@smithy/smithy-client': 3.5.1 + '@smithy/types': 3.7.2 + '@smithy/url-parser': 3.0.11 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.31 + '@smithy/util-defaults-mode-node': 3.0.31 + '@smithy/util-endpoints': 2.1.7 + '@smithy/util-middleware': 3.0.11 + '@smithy/util-retry': 3.0.11 + '@smithy/util-utf8': 3.0.0 + '@smithy/util-waiter': 3.2.0 + '@types/uuid': 9.0.8 + tslib: 2.8.1 + uuid: 9.0.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/client-rds@3.699.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 From 33414f491f0ce96110e42761e62add0babfddeb5 Mon Sep 17 00:00:00 2001 From: ivan katliarchuk Date: Wed, 25 Dec 2024 21:33:40 +0000 Subject: [PATCH 04/18] feat(23410): update as per linter Signed-off-by: ivan katliarchuk --- lib/modules/datasource/api.ts | 2 +- .../datasource/aws-eks-addon/index.spec.ts | 143 +++++++++++++++++- lib/modules/datasource/aws-eks-addon/index.ts | 77 ++++++---- .../datasource/aws-eks-addon/readme.md | 13 +- .../datasource/aws-eks-addon/schema.ts | 5 +- 5 files changed, 200 insertions(+), 40 deletions(-) diff --git a/lib/modules/datasource/api.ts b/lib/modules/datasource/api.ts index 37b0148f65f4a8..488a57d0b0056f 100644 --- a/lib/modules/datasource/api.ts +++ b/lib/modules/datasource/api.ts @@ -1,6 +1,6 @@ import { ArtifactoryDatasource } from './artifactory'; -import { AwsMachineImageDatasource } from './aws-machine-image'; import { AwsEKSAddonDataSource } from './aws-eks-addon'; +import { AwsMachineImageDatasource } from './aws-machine-image'; import { AwsRdsDatasource } from './aws-rds'; import { AzureBicepResourceDatasource } from './azure-bicep-resource'; import { AzurePipelinesTasksDatasource } from './azure-pipelines-tasks'; diff --git a/lib/modules/datasource/aws-eks-addon/index.spec.ts b/lib/modules/datasource/aws-eks-addon/index.spec.ts index 4c0b70b5c9e989..e8ec59490138c7 100644 --- a/lib/modules/datasource/aws-eks-addon/index.spec.ts +++ b/lib/modules/datasource/aws-eks-addon/index.spec.ts @@ -6,6 +6,8 @@ import { } from '@aws-sdk/client-eks'; import { mockClient } from 'aws-sdk-client-mock'; import { getPkgReleases } from '..'; +import { logger } from '../../../../test/util'; + import { AwsEKSAddonDataSource } from '.'; const datasource = AwsEKSAddonDataSource.id; @@ -37,6 +39,54 @@ function mockDescribeAddonVersionsCommandWithRegion( }); } +const addonInfo: AddonInfo = { + addonName: 'vpc-cni', + type: 'networking', + addonVersions: [ + { + addonVersion: 'v1.19.0-eksbuild.1', + architecture: ['amd64', 'arm64'], + compatibilities: [ + { + clusterVersion: '1.31', + defaultVersion: true, + }, + { + clusterVersion: '1.30', + defaultVersion: true, + }, + { + clusterVersion: '1.29', + defaultVersion: true, + }, + ], + }, + { + addonVersion: 'v1.18.1-eksbuild.1', + architecture: ['amd64', 'arm64'], + compatibilities: [ + { + clusterVersion: '1.30', + defaultVersion: false, + }, + ], + }, + { + addonVersion: 'v1.18.2-eksbuild.1', + architecture: ['amd64', 'arm64'], + compatibilities: [ + { + clusterVersion: '1.30', + platformVersions: ['*'], + defaultVersion: true, + }, + ], + }, + ], + publisher: 'eks', + owner: 'aws', +}; + describe('modules/datasource/aws-eks-addon/index', () => { describe('getPkgReleases()', () => { it.each<{ des: string; req: DescribeAddonVersionsResponse }>` @@ -60,6 +110,87 @@ describe('modules/datasource/aws-eks-addon/index', () => { }); }); + it('with addonName not supplied', async () => { + const res = await getPkgReleases({ + datasource, + packageName: + '{"kubernetesVersion":"1.30"}', + }); + expect(res).toBeNull() + expect(logger.logger.error).toHaveBeenCalledTimes(1) + }); + + it('with addonName only', async () => { + mockDescribeAddonVersionsCommand({addons: [addonInfo]}) + const res = await getPkgReleases({ + datasource, + packageName: + '{"addonName":"vpc-cni"}', + }); + expect(res?.releases).toHaveLength(3); + expect(res).toEqual({ + releases: [ + { + version: 'v1.18.1-eksbuild.1', + "compatibleWith": [ + "1.30" + ], + "default": false, + }, + { + version: 'v1.18.2-eksbuild.1', + "compatibleWith": [ + "1.30" + ], + "default": true, + }, + { + version: 'v1.19.0-eksbuild.1', + "compatibleWith": [ + "1.31", "1.30", "1.29" + ], + "default": true, + }, + ], + }); + expect(eksMock.call(0).args[0].input).toEqual({ + addonName: 'vpc-cni', + maxResults: 1, + }); + }); + + it('with addonName and default only config', async () => { + mockDescribeAddonVersionsCommand({addons: [addonInfo]}) + const res = await getPkgReleases({ + datasource, + packageName: + '{"addonName":"vpc-cni", "default":true}', + }); + expect(eksMock.call(0).args[0].input).toEqual({ + addonName: 'vpc-cni', + maxResults: 1, + }); + expect(res?.releases).toHaveLength(2); + expect(res).toEqual({ + releases: [ + { + version: 'v1.18.2-eksbuild.1', + "compatibleWith": [ + "1.30" + ], + "default": true, + }, + { + version: 'v1.19.0-eksbuild.1', + "compatibleWith": [ + "1.31", "1.30", "1.29" + ], + "default": true, + }, + ], + }); + }); + it('with matched addon to return all versions of the addon', async () => { const vpcCniAddonInfo: AddonInfo = { addonName: 'vpc-cni', @@ -108,9 +239,17 @@ describe('modules/datasource/aws-eks-addon/index', () => { releases: [ { version: 'v1.18.1-eksbuild.1', + "compatibleWith": [ + "1.30" + ], + "default": false, }, { version: 'v1.18.2-eksbuild.1', + "compatibleWith": [ + "1.30" + ], + "default": false, }, ], }); @@ -119,10 +258,6 @@ describe('modules/datasource/aws-eks-addon/index', () => { addonName: 'vpc-cni', maxResults: 1, }); - expect(await eksMock.call(0).returnValue).toEqual({ - addons: [vpcCniAddonInfo], - nextToken: 'mars-east-1', - }); }); }); }); diff --git a/lib/modules/datasource/aws-eks-addon/index.ts b/lib/modules/datasource/aws-eks-addon/index.ts index ab8cf0b089e17a..a7fc866e6b1c84 100644 --- a/lib/modules/datasource/aws-eks-addon/index.ts +++ b/lib/modules/datasource/aws-eks-addon/index.ts @@ -1,9 +1,14 @@ import { + AddonInfo, + AddonVersionInfo, + Compatibility, DescribeAddonVersionsCommand, DescribeAddonVersionsCommandInput, + DescribeAddonVersionsCommandOutput, EKSClient, } from '@aws-sdk/client-eks'; import { fromNodeProviderChain } from '@aws-sdk/credential-providers'; +import { logger } from '../../../logger'; import { cache } from '../../../util/cache/package/decorator'; import { Datasource } from '../datasource'; import type { GetReleasesConfig, ReleaseResult } from '../types'; @@ -13,7 +18,7 @@ export class AwsEKSAddonDataSource extends Datasource { static readonly id = 'aws-eks-addon'; override readonly caching = true; - private readonly eksClients: Record = {}; + private readonly clients: Record = {}; constructor() { super(AwsEKSAddonDataSource.id); @@ -26,45 +31,55 @@ export class AwsEKSAddonDataSource extends Datasource { async getReleases({ packageName: serializedFilter, }: GetReleasesConfig): Promise { - const filter = EksAddonsFilter.safeParse(serializedFilter); - const eksClient = this.getEKSClient(filter); + const res = EksAddonsFilter.safeParse(serializedFilter); + if (!res.success) { + logger.error( + { err: res.error, serializedFilter }, + 'Error parsing eks-addons config.', + ); + return null + } + + const filter = res.data; - const cmd = new DescribeAddonVersionsCommand( - this.getDescribeAddonsRequest(filter), - ); - const response = await eksClient.send(cmd); - const addons = response.addons ?? []; + const input: DescribeAddonVersionsCommandInput = { + kubernetesVersion: filter?.kubernetesVersion, + addonName: filter?.addonName, + maxResults: 1, + }; + const cmd = new DescribeAddonVersionsCommand(input) + const response : DescribeAddonVersionsCommandOutput = await this.getClient(filter).send(cmd) + const addons: AddonInfo[] = response.addons ?? []; return { releases: addons - .flatMap((addon) => addon.addonVersions) - .map((versionInfo) => ({ + .flatMap((addon : AddonInfo) : AddonVersionInfo[] | undefined => { + return addon.addonVersions + }) + .map((versionInfo: AddonVersionInfo | undefined) => ({ version: versionInfo?.addonVersion ?? '', + default: versionInfo?.compatibilities?.some((comp : Compatibility) : boolean | undefined => comp.defaultVersion) ?? false, + compatibleWith : versionInfo?.compatibilities?.flatMap((comp: Compatibility) : string | undefined => comp.clusterVersion) })) - .filter((release) => release.version), - }; - } - - private getDescribeAddonsRequest({ - kubernetesVersion, - addonName, - }: EKSAddonsFilter): DescribeAddonVersionsCommandInput { - // this API is paginated, but we only ever care about a single addon at a time. - return { - kubernetesVersion, - addonName, - maxResults: 1, + .filter((release ): boolean => { + return release.version !== '' + }) + .filter((release ): boolean => { + if (filter.default) { + return release.default && release.default === filter.default + } + return true + }) }; } - private getEKSClient({ region, profile }: EKSAddonsFilter): EKSClient { - // we have two dimensions here, building a cache key for simplicity. + private getClient({ region, profile }: EksAddonsFilter): EKSClient { const cacheKey = `${region ?? 'default'}#${profile ?? 'default'}`; - if (!(cacheKey in this.eksClients)) { - this.eksClients[cacheKey] = new EKSClient({ - region, - credentials: fromNodeProviderChain({ profile }), - }); + if (!(cacheKey in this.clients)) { + this.clients[cacheKey] = new EKSClient({ + region: region ?? undefined, + credentials: fromNodeProviderChain(profile ? { profile } : undefined) + }) } - return this.eksClients[cacheKey]; + return this.clients[cacheKey]; } } diff --git a/lib/modules/datasource/aws-eks-addon/readme.md b/lib/modules/datasource/aws-eks-addon/readme.md index a90666ba2313e4..f2f521a5ebe1c8 100644 --- a/lib/modules/datasource/aws-eks-addon/readme.md +++ b/lib/modules/datasource/aws-eks-addon/readme.md @@ -2,6 +2,9 @@ This datasource returns the addon versions available for use on [AWS EKS](https: **AWS API configuration** +- [Amazon EKS add-ons](https://docs.aws.amazon.com/eks/latest/userguide/eks-add-ons.html) +- [Available Amazon EKS add-ons from AWS](https://docs.aws.amazon.com/eks/latest/userguide/workloads-add-ons-available-eks.html) + Since the datasource uses the AWS SDK for JavaScript, you can configure it like other AWS Tools. You can use common AWS configuration options, for example: @@ -47,6 +50,12 @@ For example: Although it's unlikely that EKS might support different addon versions across regions, you can optionally specify the `region` and/or `profile` in the minified JSON object to discover the addon versions specific to this region. ```yaml +# discover kube-proxy addon versions without specifying a cluster version. +{"addonName":"kube-proxy"} + +# discover kube-proxy default addon versions +{"addonName":"kube-proxy", "default":true} + # discover vpc-cni addon versions on Kubernetes 1.30 in us-east-1 region using environmental AWS credentials. {"kubernetesVersion":"1.30","addonName":"vpc-cni","region":"us-east-1"} @@ -80,11 +89,11 @@ Here's an example of using the custom manager to configure this datasource: The configuration above matches every terraform file, and recognizes these lines: -```yaml +```hcl variable "vpc_cni_version" { type = string description = "EKS vpc-cni add-on version" # renovate: eksAddonsFilter={"kubernetesVersion":"1.30","addonName":"vpc-cni"} - default = "v1.18.1-eksbuild.3" + default = "v1.18.1-eksbuild.3" } ``` diff --git a/lib/modules/datasource/aws-eks-addon/schema.ts b/lib/modules/datasource/aws-eks-addon/schema.ts index f2eed918fe9339..f48f67026f9254 100644 --- a/lib/modules/datasource/aws-eks-addon/schema.ts +++ b/lib/modules/datasource/aws-eks-addon/schema.ts @@ -2,11 +2,12 @@ import { z } from 'zod'; import { Json } from '../../../util/schema-utils'; export const EksAddonsFilterSchema = z.object({ - kubernetesVersion: z.string().min(1), addonName: z.string().min(1), + kubernetesVersion: z.string().optional(), + default: z.boolean().optional(), region: z.string().optional(), profile: z.string().optional(), }); -export type EksAddonsFilter = z.infer; +export type EksAddonsFilter = z.infer; export const EksAddonsFilter = Json.pipe(EksAddonsFilterSchema); From e784702135c117ea11c79635b3d5d73453cfe2ea Mon Sep 17 00:00:00 2001 From: ivan katliarchuk Date: Wed, 25 Dec 2024 21:38:21 +0000 Subject: [PATCH 05/18] feat(23410): update dependencies Signed-off-by: ivan katliarchuk --- package.json | 14 +- pnpm-lock.yaml | 710 ++++++++++++++++++++++++------------------------- 2 files changed, 362 insertions(+), 362 deletions(-) diff --git a/package.json b/package.json index e03d503168e1bd..21274e080b6c74 100644 --- a/package.json +++ b/package.json @@ -144,13 +144,13 @@ "pnpm": "9.15.0" }, "dependencies": { - "@aws-sdk/client-codecommit": "3.699.0", - "@aws-sdk/client-ec2": "3.701.0", - "@aws-sdk/client-ecr": "3.699.0", - "@aws-sdk/client-eks": "3.699.0", - "@aws-sdk/client-rds": "3.699.0", - "@aws-sdk/client-s3": "3.701.0", - "@aws-sdk/credential-providers": "3.699.0", + "@aws-sdk/client-codecommit": "3.716.0", + "@aws-sdk/client-ec2": "3.716.0", + "@aws-sdk/client-ecr": "3.718.0", + "@aws-sdk/client-eks": "3.718.0", + "@aws-sdk/client-rds": "3.716.0", + "@aws-sdk/client-s3": "3.716.0", + "@aws-sdk/credential-providers": "3.716.0", "@breejs/later": "4.2.0", "@cdktf/hcl2json": "0.20.10", "@opentelemetry/api": "1.9.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e90e9dfd40cc66..23e574a3a9c1ad 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,26 +12,26 @@ importers: .: dependencies: '@aws-sdk/client-codecommit': - specifier: 3.699.0 - version: 3.699.0 + specifier: 3.716.0 + version: 3.716.0 '@aws-sdk/client-ec2': - specifier: 3.701.0 - version: 3.701.0 + specifier: 3.716.0 + version: 3.716.0 '@aws-sdk/client-ecr': - specifier: 3.699.0 - version: 3.699.0 + specifier: 3.718.0 + version: 3.718.0 '@aws-sdk/client-eks': - specifier: 3.699.0 - version: 3.699.0 + specifier: 3.718.0 + version: 3.718.0 '@aws-sdk/client-rds': - specifier: 3.699.0 - version: 3.699.0 + specifier: 3.716.0 + version: 3.716.0 '@aws-sdk/client-s3': - specifier: 3.701.0 - version: 3.701.0 + specifier: 3.716.0 + version: 3.716.0 '@aws-sdk/credential-providers': - specifier: 3.699.0 - version: 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0)) + specifier: 3.716.0 + version: 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0)) '@breejs/later': specifier: 4.2.0 version: 4.2.0 @@ -658,179 +658,179 @@ packages: '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - '@aws-sdk/client-codecommit@3.699.0': - resolution: {integrity: sha512-aM0o4b3daNkjpk/XAKzrrOjdWFdUU/gd5m7fHvGhCLK/++bO3iw5DrcjXzLqEefeHp+lxs+mpMrjCssnXXfO9g==} + '@aws-sdk/client-codecommit@3.716.0': + resolution: {integrity: sha512-RHPqbayg/QnpHj5RrAC72RU3ppadnDVG8iq+vV67CL16IA+4j9PtrSbfOuJYML0EpInVZ8kV+JHo70iibJCSDw==} engines: {node: '>=16.0.0'} - '@aws-sdk/client-cognito-identity@3.699.0': - resolution: {integrity: sha512-9tFt+we6AIvj/f1+nrLHuCWcQmyfux5gcBSOy9d9+zIG56YxGEX7S9TaZnybogpVV8A0BYWml36WvIHS9QjIpA==} + '@aws-sdk/client-cognito-identity@3.716.0': + resolution: {integrity: sha512-tXMp76f1ZzrZtJwVPnLe28YINbNmwxv595Z6kpi9yc3nB/YUdeBUND8u1dgQd/sVNwZzmgcR6nyXnT+GQkeoUg==} engines: {node: '>=16.0.0'} - '@aws-sdk/client-ec2@3.701.0': - resolution: {integrity: sha512-JTGunZM2UGO/F5WaA16IwhwMMaIsEEoLER0CkehPEnSIt8Y3Qn5j28rJfpI7TRBcFkRW8kEfbHJHPILg62oMiw==} + '@aws-sdk/client-ec2@3.716.0': + resolution: {integrity: sha512-AKAg47EasPKyFPWcUdf3EsduWIaifuKwyoXZpidhNzdl+LigWwkCfkm8LmZ87+JBuekuMhKc3QIGWLv7wsiP6g==} engines: {node: '>=16.0.0'} - '@aws-sdk/client-ecr@3.699.0': - resolution: {integrity: sha512-hLcz7TZDx7tfxqrpcSm5xgMYitPpPDE4cKPk0BYAsu5RFg2Lo3QfooUnD5iKnaVbzJcY40BBHGChDrv7IhtERg==} + '@aws-sdk/client-ecr@3.718.0': + resolution: {integrity: sha512-bF9aqlAWimltuq7rZPMGP2qCLuy3i1EFCcGnsDfkd0U3SdLVgMc8d2p5qhpvYyAVHf8RvfkUn2Hedflgz9NRnw==} engines: {node: '>=16.0.0'} - '@aws-sdk/client-eks@3.699.0': - resolution: {integrity: sha512-BN3FcMjjR2zNpoLkGc/nUgYupKnNWFT7cfbwxK7fBh6lEHMAqXIYTPSmcBFfh1bKouxR7/ae+XUBSMBVhO/wUA==} + '@aws-sdk/client-eks@3.718.0': + resolution: {integrity: sha512-P67oNE8NNtlz1lgBHhiM8pNFq90Ba758wxQoceL8ghBGcYEcBBL85iZx/Vkkc8XLPlxwcfpxSZDsyuSUpgEqkQ==} engines: {node: '>=16.0.0'} - '@aws-sdk/client-rds@3.699.0': - resolution: {integrity: sha512-i/S8sxyQDQbafjxaRTZBVP2/S/dCHlawr5ctz/dhK/HgO5LyHxac83JrpIlpLgndiFTC4h75ldRSjBuCcoRSJQ==} + '@aws-sdk/client-rds@3.716.0': + resolution: {integrity: sha512-LixHgm8Z816m18yUG/GBmOFfG8/rQdqpBEznJ5qy6RQqLfy26ve4EMV70HJrG/AwxZinYLyaLLQFL9+YGY5QTQ==} engines: {node: '>=16.0.0'} - '@aws-sdk/client-s3@3.701.0': - resolution: {integrity: sha512-7iXmPC5r7YNjvwSsRbGq9oLVgfIWZesXtEYl908UqMmRj2sVAW/leLopDnbLT7TEedqlK0RasOZT05I0JTNdKw==} + '@aws-sdk/client-s3@3.716.0': + resolution: {integrity: sha512-B49DwXnZS9GjjV+auIuqnCx86cqpACd//4mC5AXb5MsrLJJ6bPE/U2T+C/0NqUTfb31aqYbZ/cwhJELvpDU9mA==} engines: {node: '>=16.0.0'} - '@aws-sdk/client-sso-oidc@3.699.0': - resolution: {integrity: sha512-u8a1GorY5D1l+4FQAf4XBUC1T10/t7neuwT21r0ymrtMFSK2a9QqVHKMoLkvavAwyhJnARSBM9/UQC797PFOFw==} + '@aws-sdk/client-sso-oidc@3.716.0': + resolution: {integrity: sha512-lA4IB9FzR2KjH7EVCo+mHGFKqdViVyeBQEIX9oVratL/l7P0bMS1fMwgfHOc3ACazqNxBxDES7x08ZCp32y6Lw==} engines: {node: '>=16.0.0'} peerDependencies: - '@aws-sdk/client-sts': ^3.699.0 + '@aws-sdk/client-sts': ^3.716.0 - '@aws-sdk/client-sso@3.696.0': - resolution: {integrity: sha512-q5TTkd08JS0DOkHfUL853tuArf7NrPeqoS5UOvqJho8ibV9Ak/a/HO4kNvy9Nj3cib/toHYHsQIEtecUPSUUrQ==} + '@aws-sdk/client-sso@3.716.0': + resolution: {integrity: sha512-5Nb0jJXce2TclbjG7WVPufwhgV1TRydz1QnsuBtKU0AdViEpr787YrZhPpGnNIM1Dx+R1H/tmAHZnOoohS6D8g==} engines: {node: '>=16.0.0'} - '@aws-sdk/client-sts@3.699.0': - resolution: {integrity: sha512-++lsn4x2YXsZPIzFVwv3fSUVM55ZT0WRFmPeNilYIhZClxHLmVAWKH4I55cY9ry60/aTKYjzOXkWwyBKGsGvQg==} + '@aws-sdk/client-sts@3.716.0': + resolution: {integrity: sha512-i4SVNsrdXudp8T4bkm7Fi3YWlRnvXCSwvNDqf6nLqSJxqr4CN3VlBELueDyjBK7TAt453/qSif+eNx+bHmwo4Q==} engines: {node: '>=16.0.0'} - '@aws-sdk/core@3.696.0': - resolution: {integrity: sha512-3c9III1k03DgvRZWg8vhVmfIXPG6hAciN9MzQTzqGngzWAELZF/WONRTRQuDFixVtarQatmLHYVw/atGeA2Byw==} + '@aws-sdk/core@3.716.0': + resolution: {integrity: sha512-5DkUiTrbyzO8/W4g7UFEqRFpuhgizayHI/Zbh0wtFMcot8801nJV+MP/YMhdjimlvAr/OqYB08FbGsPyWppMTw==} engines: {node: '>=16.0.0'} - '@aws-sdk/credential-provider-cognito-identity@3.699.0': - resolution: {integrity: sha512-iuaTnudaBfEET+o444sDwf71Awe6UiZfH+ipUPmswAi2jZDwdFF1nxMKDEKL8/LV5WpXsdKSfwgS0RQeupURew==} + '@aws-sdk/credential-provider-cognito-identity@3.716.0': + resolution: {integrity: sha512-iHmyB3Z6KjAQcpWW01LRjqbOM2OFVfaiGH6tRylPvJN/GnlITLUnUZi/PBAFk1f+TZ94dQWN961c1L/LFCSg9Q==} engines: {node: '>=16.0.0'} - '@aws-sdk/credential-provider-env@3.696.0': - resolution: {integrity: sha512-T9iMFnJL7YTlESLpVFT3fg1Lkb1lD+oiaIC8KMpepb01gDUBIpj9+Y+pA/cgRWW0yRxmkDXNazAE2qQTVFGJzA==} + '@aws-sdk/credential-provider-env@3.716.0': + resolution: {integrity: sha512-JI2KQUnn2arICwP9F3CnqP1W3nAbm4+meQg/yOhp9X0DMzQiHrHRd4HIrK2vyVgi2/6hGhONY5uLF26yRTA7nQ==} engines: {node: '>=16.0.0'} - '@aws-sdk/credential-provider-http@3.696.0': - resolution: {integrity: sha512-GV6EbvPi2eq1+WgY/o2RFA3P7HGmnkIzCNmhwtALFlqMroLYWKE7PSeHw66Uh1dFQeVESn0/+hiUNhu1mB0emA==} + '@aws-sdk/credential-provider-http@3.716.0': + resolution: {integrity: sha512-CZ04pl2z7igQPysQyH2xKZHM3fLwkemxQbKOlje3TmiS1NwXvcKvERhp9PE/H23kOL7beTM19NMRog/Fka/rlw==} engines: {node: '>=16.0.0'} - '@aws-sdk/credential-provider-ini@3.699.0': - resolution: {integrity: sha512-dXmCqjJnKmG37Q+nLjPVu22mNkrGHY8hYoOt3Jo9R2zr5MYV7s/NHsCHr+7E+BZ+tfZYLRPeB1wkpTeHiEcdRw==} + '@aws-sdk/credential-provider-ini@3.716.0': + resolution: {integrity: sha512-P37We2GtZvdROxiwP0zrpEL81/HuYK1qlYxp5VCj3uV+G4mG8UQN2gMIU/baYrpOQqa0h81RfyQGRFUjVaDVqw==} engines: {node: '>=16.0.0'} peerDependencies: - '@aws-sdk/client-sts': ^3.699.0 + '@aws-sdk/client-sts': ^3.716.0 - '@aws-sdk/credential-provider-node@3.699.0': - resolution: {integrity: sha512-MmEmNDo1bBtTgRmdNfdQksXu4uXe66s0p1hi1YPrn1h59Q605eq/xiWbGL6/3KdkViH6eGUuABeV2ODld86ylg==} + '@aws-sdk/credential-provider-node@3.716.0': + resolution: {integrity: sha512-FGQPK2uKfS53dVvoskN/s/t6m0Po24BGd1PzJdzHBFCOjxbZLM6+8mDMXeyi2hCLVVQOUcuW41kOgmJ0+zMbww==} engines: {node: '>=16.0.0'} - '@aws-sdk/credential-provider-process@3.696.0': - resolution: {integrity: sha512-mL1RcFDe9sfmyU5K1nuFkO8UiJXXxLX4JO1gVaDIOvPqwStpUAwi3A1BoeZhWZZNQsiKI810RnYGo0E0WB/hUA==} + '@aws-sdk/credential-provider-process@3.716.0': + resolution: {integrity: sha512-0spcu2MWVVHSTHH3WE2E//ttUJPwXRM3BCp+WyI41xLzpNu1Fd8zjOrDpEo0SnGUzsSiRTIJWgkuu/tqv9NJ2A==} engines: {node: '>=16.0.0'} - '@aws-sdk/credential-provider-sso@3.699.0': - resolution: {integrity: sha512-Ekp2cZG4pl9D8+uKWm4qO1xcm8/MeiI8f+dnlZm8aQzizeC+aXYy9GyoclSf6daK8KfRPiRfM7ZHBBL5dAfdMA==} + '@aws-sdk/credential-provider-sso@3.716.0': + resolution: {integrity: sha512-J2IA3WuCpRGGoZm6VHZVFCnrxXP+41iUWb9Ct/1spljegTa1XjiaZ5Jf3+Ubj7WKiyvP9/dgz1L0bu2bYEjliw==} engines: {node: '>=16.0.0'} - '@aws-sdk/credential-provider-web-identity@3.696.0': - resolution: {integrity: sha512-XJ/CVlWChM0VCoc259vWguFUjJDn/QwDqHwbx+K9cg3v6yrqXfK5ai+p/6lx0nQpnk4JzPVeYYxWRpaTsGC9rg==} + '@aws-sdk/credential-provider-web-identity@3.716.0': + resolution: {integrity: sha512-vzgpWKs2gGXZGdbMKRFrMW4PqEFWkGvwWH2T7ZwQv9m+8lQ7P4Dk2uimqu0f37HZAbpn8HFMqRh4CaySjU354A==} engines: {node: '>=16.0.0'} peerDependencies: - '@aws-sdk/client-sts': ^3.696.0 + '@aws-sdk/client-sts': ^3.716.0 - '@aws-sdk/credential-providers@3.699.0': - resolution: {integrity: sha512-jBjOntl9zN9Nvb0jmbMGRbiTzemDz64ij7W6BDavxBJRZpRoNeN0QCz6RolkCyXnyUJjo5mF2unY2wnv00A+LQ==} + '@aws-sdk/credential-providers@3.716.0': + resolution: {integrity: sha512-UsalnK1MMfbI8Chb7BFghUvXf+zdqqiZLpSJp9ytXe0/thoafsi2jo0pyFeU08uarU/YA3Usl15I4SdK5uQr1A==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-bucket-endpoint@3.696.0': - resolution: {integrity: sha512-V07jishKHUS5heRNGFpCWCSTjRJyQLynS/ncUeE8ZYtG66StOOQWftTwDfFOSoXlIqrXgb4oT9atryzXq7Z4LQ==} + '@aws-sdk/middleware-bucket-endpoint@3.714.0': + resolution: {integrity: sha512-I/xSOskiseJJ8i183Z522BgqbgYzLKP7jGcg2Qeib/IWoG2IP+9DH8pwqagKaPAycyswtnoKBJiiFXY43n0CkA==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-expect-continue@3.696.0': - resolution: {integrity: sha512-vpVukqY3U2pb+ULeX0shs6L0aadNep6kKzjme/MyulPjtUDJpD3AekHsXRrCCGLmOqSKqRgQn5zhV9pQhHsb6Q==} + '@aws-sdk/middleware-expect-continue@3.714.0': + resolution: {integrity: sha512-rlzsXdG8Lzo4Qpl35ZnpOBAWlzvDHpP9++0AXoUwAJA0QmMm7auIRmgxJuNj91VwT9h15ZU6xjU4S7fJl4W0+w==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-flexible-checksums@3.701.0': - resolution: {integrity: sha512-adNaPCyTT+CiVM0ufDiO1Fe7nlRmJdI9Hcgj0M9S6zR7Dw70Ra5z8Lslkd7syAccYvZaqxLklGjPQH/7GNxwTA==} + '@aws-sdk/middleware-flexible-checksums@3.716.0': + resolution: {integrity: sha512-1j8PoBYyn0oQlRhPPzOnqf0sdXO0x34pG19cMC0a7cv+En17m7W44BtVplFPRKpGfto3DU5frozV+wu8d9v/hQ==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-host-header@3.696.0': - resolution: {integrity: sha512-zELJp9Ta2zkX7ELggMN9qMCgekqZhFC5V2rOr4hJDEb/Tte7gpfKSObAnw/3AYiVqt36sjHKfdkoTsuwGdEoDg==} + '@aws-sdk/middleware-host-header@3.714.0': + resolution: {integrity: sha512-6l68kjNrh5QC8FGX3I3geBDavWN5Tg1RLHJ2HLA8ByGBtJyCwnz3hEkKfaxn0bBx0hF9DzbfjEOUF6cDqy2Kjg==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-location-constraint@3.696.0': - resolution: {integrity: sha512-FgH12OB0q+DtTrP2aiDBddDKwL4BPOrm7w3VV9BJrSdkqQCNBPz8S1lb0y5eVH4tBG+2j7gKPlOv1wde4jF/iw==} + '@aws-sdk/middleware-location-constraint@3.714.0': + resolution: {integrity: sha512-MX7M+V+FblujKck3fyuzePVIAy9530gY719IiSxV6uN1qLHl7VDJxNblpF/KpXakD6rOg8OpvtmqsXj9aBMftw==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-logger@3.696.0': - resolution: {integrity: sha512-KhkHt+8AjCxcR/5Zp3++YPJPpFQzxpr+jmONiT/Jw2yqnSngZ0Yspm5wGoRx2hS1HJbyZNuaOWEGuJoxLeBKfA==} + '@aws-sdk/middleware-logger@3.714.0': + resolution: {integrity: sha512-RkqHlMvQWUaRklU1bMfUuBvdWwxgUtEqpADaHXlGVj3vtEY2UgBjy+57CveC4MByqKIunNvVHBBbjrGVtwY7Lg==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-recursion-detection@3.696.0': - resolution: {integrity: sha512-si/maV3Z0hH7qa99f9ru2xpS5HlfSVcasRlNUXKSDm611i7jFMWwGNLUOXFAOLhXotPX5G3Z6BLwL34oDeBMug==} + '@aws-sdk/middleware-recursion-detection@3.714.0': + resolution: {integrity: sha512-AVU5ixnh93nqtsfgNc284oXsXaadyHGPHpql/jwgaaqQfEXjS/1/j3j9E/vpacfTTz2Vzo7hAOjnvrOXSEVDaA==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-sdk-ec2@3.696.0': - resolution: {integrity: sha512-HVMpblaaTQ1Ysku2nR6+N22aEgT7CDot+vsFutHNJCBPl+eEON5exp7IvsFC7sFCWmSfnMHTHtmmj5YIYHO1gQ==} + '@aws-sdk/middleware-sdk-ec2@3.716.0': + resolution: {integrity: sha512-7d2uBQwl9maxINe0cWyi6LY76jqUi0saEvwPH6RbKTqW3OeYKsPNzx/48oWK6byBnLZAxeplN38aWPCcCW207g==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-sdk-rds@3.696.0': - resolution: {integrity: sha512-YSzPlVVgWfM+OfMM5LyuEP1A24zgKLNF9i+K8mtG+q2NpRJrXCbTlOEJUepCG58voYcL+GT8/Q0vwR7Btadi0w==} + '@aws-sdk/middleware-sdk-rds@3.716.0': + resolution: {integrity: sha512-88Dg1NRWAYHa6kdl9w4Aw8OIhdW9K9xFBjG3A6SjPgpNGVdCWfwXhDmnh1cyG0IsjXx6u8nfeL8e0ZGmjss50Q==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-sdk-s3@3.696.0': - resolution: {integrity: sha512-M7fEiAiN7DBMHflzOFzh1I2MNSlLpbiH2ubs87bdRc2wZsDPSbs4l3v6h3WLhxoQK0bq6vcfroudrLBgvCuX3Q==} + '@aws-sdk/middleware-sdk-s3@3.716.0': + resolution: {integrity: sha512-Qzz5OfRA/5brqfvq+JHTInwS1EuJ1+tC6qMtwKWJN3czMnVJVdnnsPTf+G5IM/1yYaGEIjY8rC1ExQLcc8ApFQ==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-ssec@3.696.0': - resolution: {integrity: sha512-w/d6O7AOZ7Pg3w2d3BxnX5RmGNWb5X4RNxF19rJqcgu/xqxxE/QwZTNd5a7eTsqLXAUIfbbR8hh0czVfC1pJLA==} + '@aws-sdk/middleware-ssec@3.714.0': + resolution: {integrity: sha512-RkK8REAVwNUQmYbIDRw8eYbMJ8F1Rw4C9mlME4BBMhFlelGcD3ErU2ce24moQbDxBjNwHNESmIqgmdQk93CDCQ==} engines: {node: '>=16.0.0'} - '@aws-sdk/middleware-user-agent@3.696.0': - resolution: {integrity: sha512-Lvyj8CTyxrHI6GHd2YVZKIRI5Fmnugt3cpJo0VrKKEgK5zMySwEZ1n4dqPK6czYRWKd5+WnYHYAuU+Wdk6Jsjw==} + '@aws-sdk/middleware-user-agent@3.716.0': + resolution: {integrity: sha512-FpAtT6nNKrYdkDZndutEraiRMf+TgDzAGvniqRtZ/YTPA+gIsWrsn+TwMKINR81lFC3nQfb9deS5CFtxd021Ew==} engines: {node: '>=16.0.0'} - '@aws-sdk/region-config-resolver@3.696.0': - resolution: {integrity: sha512-7EuH142lBXjI8yH6dVS/CZeiK/WZsmb/8zP6bQbVYpMrppSTgB3MzZZdxVZGzL5r8zPQOU10wLC4kIMy0qdBVQ==} + '@aws-sdk/region-config-resolver@3.714.0': + resolution: {integrity: sha512-HJzsQxgMOAzZrbf/YIqEx30or4tZK1oNAk6Wm6xecUQx+23JXIaePRu1YFUOLBBERQ4QBPpISFurZWBMZ5ibAw==} engines: {node: '>=16.0.0'} - '@aws-sdk/signature-v4-multi-region@3.696.0': - resolution: {integrity: sha512-ijPkoLjXuPtgxAYlDoYls8UaG/VKigROn9ebbvPL/orEY5umedd3iZTcS9T+uAf4Ur3GELLxMQiERZpfDKaz3g==} + '@aws-sdk/signature-v4-multi-region@3.716.0': + resolution: {integrity: sha512-k0goWotZKKz+kV6Ln0qeAMSeSVi4NipuIIz5R8A0uCF2zBK4CXWdZR7KeaIoLBhJwQnHj1UU7E+2MK74KIUBzA==} engines: {node: '>=16.0.0'} - '@aws-sdk/token-providers@3.699.0': - resolution: {integrity: sha512-kuiEW9DWs7fNos/SM+y58HCPhcIzm1nEZLhe2/7/6+TvAYLuEWURYsbK48gzsxXlaJ2k/jGY3nIsA7RptbMOwA==} + '@aws-sdk/token-providers@3.714.0': + resolution: {integrity: sha512-vKN064aLE3kl+Zl16Ony3jltHnMddMBT7JRkP1L+lLywhA0PcAKxpdvComul/sTBWnbnwLnaS5NsDUhcWySH8A==} engines: {node: '>=16.0.0'} peerDependencies: - '@aws-sdk/client-sso-oidc': ^3.699.0 + '@aws-sdk/client-sso-oidc': ^3.714.0 - '@aws-sdk/types@3.696.0': - resolution: {integrity: sha512-9rTvUJIAj5d3//U5FDPWGJ1nFJLuWb30vugGOrWk7aNZ6y9tuA3PI7Cc9dP8WEXKVyK1vuuk8rSFP2iqXnlgrw==} + '@aws-sdk/types@3.714.0': + resolution: {integrity: sha512-ZjpP2gYbSFlxxaUDa1Il5AVvfggvUPbjzzB/l3q0gIE5Thd6xKW+yzEpt2mLZ5s5UaYSABZbF94g8NUOF4CVGA==} engines: {node: '>=16.0.0'} '@aws-sdk/util-arn-parser@3.693.0': resolution: {integrity: sha512-WC8x6ca+NRrtpAH64rWu+ryDZI3HuLwlEr8EU6/dbC/pt+r/zC0PBoC15VEygUaBA+isppCikQpGyEDu0Yj7gQ==} engines: {node: '>=16.0.0'} - '@aws-sdk/util-endpoints@3.696.0': - resolution: {integrity: sha512-T5s0IlBVX+gkb9g/I6CLt4yAZVzMSiGnbUqWihWsHvQR1WOoIcndQy/Oz/IJXT9T2ipoy7a80gzV6a5mglrioA==} + '@aws-sdk/util-endpoints@3.714.0': + resolution: {integrity: sha512-Xv+Z2lhe7w7ZZRsgBwBMZgGTVmS+dkkj2S13uNHAx9lhB5ovM8PhK5G/j28xYf6vIibeuHkRAbb7/ozdZIGR+A==} engines: {node: '>=16.0.0'} - '@aws-sdk/util-format-url@3.696.0': - resolution: {integrity: sha512-R6yK1LozUD1GdAZRPhNsIow6VNFJUTyyoIar1OCWaknlucBMcq7musF3DN3TlORBwfFMj5buHc2ET9OtMtzvuA==} + '@aws-sdk/util-format-url@3.714.0': + resolution: {integrity: sha512-PA/ES6BeKmYzFOsZ3az/8MqSLf6uzXAS7GsYONZMF6YASn4ewd/AspuvQMp6+x9VreAPCq7PecF+XL9KXejtPg==} engines: {node: '>=16.0.0'} '@aws-sdk/util-locate-window@3.693.0': resolution: {integrity: sha512-ttrag6haJLWABhLqtg1Uf+4LgHWIMOVSYL+VYZmAp2v4PUGOwWmWQH0Zk8RM7YuQcLfH/EoR72/Yxz6A4FKcuw==} engines: {node: '>=16.0.0'} - '@aws-sdk/util-user-agent-browser@3.696.0': - resolution: {integrity: sha512-Z5rVNDdmPOe6ELoM5AhF/ja5tSjbe6ctSctDPb0JdDf4dT0v2MfwhJKzXju2RzX8Es/77Glh7MlaXLE0kCB9+Q==} + '@aws-sdk/util-user-agent-browser@3.714.0': + resolution: {integrity: sha512-OdJJ03cP9/MgIVToPJPCPUImbpZzTcwdIgbXC0tUQPJhbD7b7cB4LdnkhNHko+MptpOrCq4CPY/33EpOjRdofw==} - '@aws-sdk/util-user-agent-node@3.696.0': - resolution: {integrity: sha512-KhKqcfyXIB0SCCt+qsu4eJjsfiOrNzK5dCV7RAW2YIpp+msxGUUX0NdRE9rkzjiv+3EMktgJm3eEIS+yxtlVdQ==} + '@aws-sdk/util-user-agent-node@3.716.0': + resolution: {integrity: sha512-3PqaXmQbxrtHKAsPCdp7kn5FrQktj8j3YyuNsqFZ8rWZeEQ88GWlsvE61PTsr2peYCKzpFqYVddef2x1axHU0w==} engines: {node: '>=16.0.0'} peerDependencies: aws-crt: '>=1.0.0' @@ -838,8 +838,8 @@ packages: aws-crt: optional: true - '@aws-sdk/xml-builder@3.696.0': - resolution: {integrity: sha512-dn1mX+EeqivoLYnY7p2qLrir0waPnCgS/0YdRCAVU2x14FgfUYCH6Im3w3oi2dMwhxfKY5lYVB5NKvZu7uI9lQ==} + '@aws-sdk/xml-builder@3.709.0': + resolution: {integrity: sha512-2GPCwlNxeHspoK/Mc8nbk9cBOkSpp3j2SJUQmFnyQK6V/pR6II2oPRyZkMomug1Rc10hqlBHByMecq4zhV2uUw==} engines: {node: '>=16.0.0'} '@babel/code-frame@7.26.2': @@ -6291,20 +6291,20 @@ snapshots: '@aws-crypto/crc32@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.696.0 + '@aws-sdk/types': 3.714.0 tslib: 2.8.1 '@aws-crypto/crc32c@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.696.0 + '@aws-sdk/types': 3.714.0 tslib: 2.8.1 '@aws-crypto/sha1-browser@5.2.0': dependencies: '@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.696.0 + '@aws-sdk/types': 3.714.0 '@aws-sdk/util-locate-window': 3.693.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 @@ -6314,7 +6314,7 @@ snapshots: '@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.696.0 + '@aws-sdk/types': 3.714.0 '@aws-sdk/util-locate-window': 3.693.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 @@ -6322,7 +6322,7 @@ snapshots: '@aws-crypto/sha256-js@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.696.0 + '@aws-sdk/types': 3.714.0 tslib: 2.8.1 '@aws-crypto/supports-web-crypto@5.2.0': @@ -6331,27 +6331,27 @@ snapshots: '@aws-crypto/util@5.2.0': dependencies: - '@aws-sdk/types': 3.696.0 + '@aws-sdk/types': 3.714.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 - '@aws-sdk/client-codecommit@3.699.0': + '@aws-sdk/client-codecommit@3.716.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.699.0(@aws-sdk/client-sts@3.699.0) - '@aws-sdk/client-sts': 3.699.0 - '@aws-sdk/core': 3.696.0 - '@aws-sdk/credential-provider-node': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0) - '@aws-sdk/middleware-host-header': 3.696.0 - '@aws-sdk/middleware-logger': 3.696.0 - '@aws-sdk/middleware-recursion-detection': 3.696.0 - '@aws-sdk/middleware-user-agent': 3.696.0 - '@aws-sdk/region-config-resolver': 3.696.0 - '@aws-sdk/types': 3.696.0 - '@aws-sdk/util-endpoints': 3.696.0 - '@aws-sdk/util-user-agent-browser': 3.696.0 - '@aws-sdk/util-user-agent-node': 3.696.0 + '@aws-sdk/client-sso-oidc': 3.716.0(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/client-sts': 3.716.0 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/credential-provider-node': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/middleware-host-header': 3.714.0 + '@aws-sdk/middleware-logger': 3.714.0 + '@aws-sdk/middleware-recursion-detection': 3.714.0 + '@aws-sdk/middleware-user-agent': 3.716.0 + '@aws-sdk/region-config-resolver': 3.714.0 + '@aws-sdk/types': 3.714.0 + '@aws-sdk/util-endpoints': 3.714.0 + '@aws-sdk/util-user-agent-browser': 3.714.0 + '@aws-sdk/util-user-agent-node': 3.716.0 '@smithy/config-resolver': 3.0.13 '@smithy/core': 2.5.5 '@smithy/fetch-http-handler': 4.1.2 @@ -6383,23 +6383,23 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-cognito-identity@3.699.0': + '@aws-sdk/client-cognito-identity@3.716.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.699.0(@aws-sdk/client-sts@3.699.0) - '@aws-sdk/client-sts': 3.699.0 - '@aws-sdk/core': 3.696.0 - '@aws-sdk/credential-provider-node': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0) - '@aws-sdk/middleware-host-header': 3.696.0 - '@aws-sdk/middleware-logger': 3.696.0 - '@aws-sdk/middleware-recursion-detection': 3.696.0 - '@aws-sdk/middleware-user-agent': 3.696.0 - '@aws-sdk/region-config-resolver': 3.696.0 - '@aws-sdk/types': 3.696.0 - '@aws-sdk/util-endpoints': 3.696.0 - '@aws-sdk/util-user-agent-browser': 3.696.0 - '@aws-sdk/util-user-agent-node': 3.696.0 + '@aws-sdk/client-sso-oidc': 3.716.0(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/client-sts': 3.716.0 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/credential-provider-node': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/middleware-host-header': 3.714.0 + '@aws-sdk/middleware-logger': 3.714.0 + '@aws-sdk/middleware-recursion-detection': 3.714.0 + '@aws-sdk/middleware-user-agent': 3.716.0 + '@aws-sdk/region-config-resolver': 3.714.0 + '@aws-sdk/types': 3.714.0 + '@aws-sdk/util-endpoints': 3.714.0 + '@aws-sdk/util-user-agent-browser': 3.714.0 + '@aws-sdk/util-user-agent-node': 3.716.0 '@smithy/config-resolver': 3.0.13 '@smithy/core': 2.5.5 '@smithy/fetch-http-handler': 4.1.2 @@ -6429,24 +6429,24 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-ec2@3.701.0': + '@aws-sdk/client-ec2@3.716.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.699.0(@aws-sdk/client-sts@3.699.0) - '@aws-sdk/client-sts': 3.699.0 - '@aws-sdk/core': 3.696.0 - '@aws-sdk/credential-provider-node': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0) - '@aws-sdk/middleware-host-header': 3.696.0 - '@aws-sdk/middleware-logger': 3.696.0 - '@aws-sdk/middleware-recursion-detection': 3.696.0 - '@aws-sdk/middleware-sdk-ec2': 3.696.0 - '@aws-sdk/middleware-user-agent': 3.696.0 - '@aws-sdk/region-config-resolver': 3.696.0 - '@aws-sdk/types': 3.696.0 - '@aws-sdk/util-endpoints': 3.696.0 - '@aws-sdk/util-user-agent-browser': 3.696.0 - '@aws-sdk/util-user-agent-node': 3.696.0 + '@aws-sdk/client-sso-oidc': 3.716.0(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/client-sts': 3.716.0 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/credential-provider-node': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/middleware-host-header': 3.714.0 + '@aws-sdk/middleware-logger': 3.714.0 + '@aws-sdk/middleware-recursion-detection': 3.714.0 + '@aws-sdk/middleware-sdk-ec2': 3.716.0 + '@aws-sdk/middleware-user-agent': 3.716.0 + '@aws-sdk/region-config-resolver': 3.714.0 + '@aws-sdk/types': 3.714.0 + '@aws-sdk/util-endpoints': 3.714.0 + '@aws-sdk/util-user-agent-browser': 3.714.0 + '@aws-sdk/util-user-agent-node': 3.716.0 '@smithy/config-resolver': 3.0.13 '@smithy/core': 2.5.5 '@smithy/fetch-http-handler': 4.1.2 @@ -6479,23 +6479,23 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-ecr@3.699.0': + '@aws-sdk/client-ecr@3.718.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.699.0(@aws-sdk/client-sts@3.699.0) - '@aws-sdk/client-sts': 3.699.0 - '@aws-sdk/core': 3.696.0 - '@aws-sdk/credential-provider-node': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0) - '@aws-sdk/middleware-host-header': 3.696.0 - '@aws-sdk/middleware-logger': 3.696.0 - '@aws-sdk/middleware-recursion-detection': 3.696.0 - '@aws-sdk/middleware-user-agent': 3.696.0 - '@aws-sdk/region-config-resolver': 3.696.0 - '@aws-sdk/types': 3.696.0 - '@aws-sdk/util-endpoints': 3.696.0 - '@aws-sdk/util-user-agent-browser': 3.696.0 - '@aws-sdk/util-user-agent-node': 3.696.0 + '@aws-sdk/client-sso-oidc': 3.716.0(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/client-sts': 3.716.0 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/credential-provider-node': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/middleware-host-header': 3.714.0 + '@aws-sdk/middleware-logger': 3.714.0 + '@aws-sdk/middleware-recursion-detection': 3.714.0 + '@aws-sdk/middleware-user-agent': 3.716.0 + '@aws-sdk/region-config-resolver': 3.714.0 + '@aws-sdk/types': 3.714.0 + '@aws-sdk/util-endpoints': 3.714.0 + '@aws-sdk/util-user-agent-browser': 3.714.0 + '@aws-sdk/util-user-agent-node': 3.716.0 '@smithy/config-resolver': 3.0.13 '@smithy/core': 2.5.5 '@smithy/fetch-http-handler': 4.1.2 @@ -6526,23 +6526,23 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-eks@3.699.0': + '@aws-sdk/client-eks@3.718.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.699.0(@aws-sdk/client-sts@3.699.0) - '@aws-sdk/client-sts': 3.699.0 - '@aws-sdk/core': 3.696.0 - '@aws-sdk/credential-provider-node': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0) - '@aws-sdk/middleware-host-header': 3.696.0 - '@aws-sdk/middleware-logger': 3.696.0 - '@aws-sdk/middleware-recursion-detection': 3.696.0 - '@aws-sdk/middleware-user-agent': 3.696.0 - '@aws-sdk/region-config-resolver': 3.696.0 - '@aws-sdk/types': 3.696.0 - '@aws-sdk/util-endpoints': 3.696.0 - '@aws-sdk/util-user-agent-browser': 3.696.0 - '@aws-sdk/util-user-agent-node': 3.696.0 + '@aws-sdk/client-sso-oidc': 3.716.0(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/client-sts': 3.716.0 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/credential-provider-node': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/middleware-host-header': 3.714.0 + '@aws-sdk/middleware-logger': 3.714.0 + '@aws-sdk/middleware-recursion-detection': 3.714.0 + '@aws-sdk/middleware-user-agent': 3.716.0 + '@aws-sdk/region-config-resolver': 3.714.0 + '@aws-sdk/types': 3.714.0 + '@aws-sdk/util-endpoints': 3.714.0 + '@aws-sdk/util-user-agent-browser': 3.714.0 + '@aws-sdk/util-user-agent-node': 3.716.0 '@smithy/config-resolver': 3.0.13 '@smithy/core': 2.5.5 '@smithy/fetch-http-handler': 4.1.2 @@ -6575,24 +6575,24 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-rds@3.699.0': + '@aws-sdk/client-rds@3.716.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.699.0(@aws-sdk/client-sts@3.699.0) - '@aws-sdk/client-sts': 3.699.0 - '@aws-sdk/core': 3.696.0 - '@aws-sdk/credential-provider-node': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0) - '@aws-sdk/middleware-host-header': 3.696.0 - '@aws-sdk/middleware-logger': 3.696.0 - '@aws-sdk/middleware-recursion-detection': 3.696.0 - '@aws-sdk/middleware-sdk-rds': 3.696.0 - '@aws-sdk/middleware-user-agent': 3.696.0 - '@aws-sdk/region-config-resolver': 3.696.0 - '@aws-sdk/types': 3.696.0 - '@aws-sdk/util-endpoints': 3.696.0 - '@aws-sdk/util-user-agent-browser': 3.696.0 - '@aws-sdk/util-user-agent-node': 3.696.0 + '@aws-sdk/client-sso-oidc': 3.716.0(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/client-sts': 3.716.0 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/credential-provider-node': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/middleware-host-header': 3.714.0 + '@aws-sdk/middleware-logger': 3.714.0 + '@aws-sdk/middleware-recursion-detection': 3.714.0 + '@aws-sdk/middleware-sdk-rds': 3.716.0 + '@aws-sdk/middleware-user-agent': 3.716.0 + '@aws-sdk/region-config-resolver': 3.714.0 + '@aws-sdk/types': 3.714.0 + '@aws-sdk/util-endpoints': 3.714.0 + '@aws-sdk/util-user-agent-browser': 3.714.0 + '@aws-sdk/util-user-agent-node': 3.716.0 '@smithy/config-resolver': 3.0.13 '@smithy/core': 2.5.5 '@smithy/fetch-http-handler': 4.1.2 @@ -6623,32 +6623,32 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-s3@3.701.0': + '@aws-sdk/client-s3@3.716.0': dependencies: '@aws-crypto/sha1-browser': 5.2.0 '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.699.0(@aws-sdk/client-sts@3.699.0) - '@aws-sdk/client-sts': 3.699.0 - '@aws-sdk/core': 3.696.0 - '@aws-sdk/credential-provider-node': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0) - '@aws-sdk/middleware-bucket-endpoint': 3.696.0 - '@aws-sdk/middleware-expect-continue': 3.696.0 - '@aws-sdk/middleware-flexible-checksums': 3.701.0 - '@aws-sdk/middleware-host-header': 3.696.0 - '@aws-sdk/middleware-location-constraint': 3.696.0 - '@aws-sdk/middleware-logger': 3.696.0 - '@aws-sdk/middleware-recursion-detection': 3.696.0 - '@aws-sdk/middleware-sdk-s3': 3.696.0 - '@aws-sdk/middleware-ssec': 3.696.0 - '@aws-sdk/middleware-user-agent': 3.696.0 - '@aws-sdk/region-config-resolver': 3.696.0 - '@aws-sdk/signature-v4-multi-region': 3.696.0 - '@aws-sdk/types': 3.696.0 - '@aws-sdk/util-endpoints': 3.696.0 - '@aws-sdk/util-user-agent-browser': 3.696.0 - '@aws-sdk/util-user-agent-node': 3.696.0 - '@aws-sdk/xml-builder': 3.696.0 + '@aws-sdk/client-sso-oidc': 3.716.0(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/client-sts': 3.716.0 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/credential-provider-node': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/middleware-bucket-endpoint': 3.714.0 + '@aws-sdk/middleware-expect-continue': 3.714.0 + '@aws-sdk/middleware-flexible-checksums': 3.716.0 + '@aws-sdk/middleware-host-header': 3.714.0 + '@aws-sdk/middleware-location-constraint': 3.714.0 + '@aws-sdk/middleware-logger': 3.714.0 + '@aws-sdk/middleware-recursion-detection': 3.714.0 + '@aws-sdk/middleware-sdk-s3': 3.716.0 + '@aws-sdk/middleware-ssec': 3.714.0 + '@aws-sdk/middleware-user-agent': 3.716.0 + '@aws-sdk/region-config-resolver': 3.714.0 + '@aws-sdk/signature-v4-multi-region': 3.716.0 + '@aws-sdk/types': 3.714.0 + '@aws-sdk/util-endpoints': 3.714.0 + '@aws-sdk/util-user-agent-browser': 3.714.0 + '@aws-sdk/util-user-agent-node': 3.716.0 + '@aws-sdk/xml-builder': 3.709.0 '@smithy/config-resolver': 3.0.13 '@smithy/core': 2.5.5 '@smithy/eventstream-serde-browser': 3.0.14 @@ -6686,22 +6686,22 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0)': + '@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0)': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sts': 3.699.0 - '@aws-sdk/core': 3.696.0 - '@aws-sdk/credential-provider-node': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0) - '@aws-sdk/middleware-host-header': 3.696.0 - '@aws-sdk/middleware-logger': 3.696.0 - '@aws-sdk/middleware-recursion-detection': 3.696.0 - '@aws-sdk/middleware-user-agent': 3.696.0 - '@aws-sdk/region-config-resolver': 3.696.0 - '@aws-sdk/types': 3.696.0 - '@aws-sdk/util-endpoints': 3.696.0 - '@aws-sdk/util-user-agent-browser': 3.696.0 - '@aws-sdk/util-user-agent-node': 3.696.0 + '@aws-sdk/client-sts': 3.716.0 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/credential-provider-node': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/middleware-host-header': 3.714.0 + '@aws-sdk/middleware-logger': 3.714.0 + '@aws-sdk/middleware-recursion-detection': 3.714.0 + '@aws-sdk/middleware-user-agent': 3.716.0 + '@aws-sdk/region-config-resolver': 3.714.0 + '@aws-sdk/types': 3.714.0 + '@aws-sdk/util-endpoints': 3.714.0 + '@aws-sdk/util-user-agent-browser': 3.714.0 + '@aws-sdk/util-user-agent-node': 3.716.0 '@smithy/config-resolver': 3.0.13 '@smithy/core': 2.5.5 '@smithy/fetch-http-handler': 4.1.2 @@ -6731,20 +6731,20 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso@3.696.0': + '@aws-sdk/client-sso@3.716.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.696.0 - '@aws-sdk/middleware-host-header': 3.696.0 - '@aws-sdk/middleware-logger': 3.696.0 - '@aws-sdk/middleware-recursion-detection': 3.696.0 - '@aws-sdk/middleware-user-agent': 3.696.0 - '@aws-sdk/region-config-resolver': 3.696.0 - '@aws-sdk/types': 3.696.0 - '@aws-sdk/util-endpoints': 3.696.0 - '@aws-sdk/util-user-agent-browser': 3.696.0 - '@aws-sdk/util-user-agent-node': 3.696.0 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/middleware-host-header': 3.714.0 + '@aws-sdk/middleware-logger': 3.714.0 + '@aws-sdk/middleware-recursion-detection': 3.714.0 + '@aws-sdk/middleware-user-agent': 3.716.0 + '@aws-sdk/region-config-resolver': 3.714.0 + '@aws-sdk/types': 3.714.0 + '@aws-sdk/util-endpoints': 3.714.0 + '@aws-sdk/util-user-agent-browser': 3.714.0 + '@aws-sdk/util-user-agent-node': 3.716.0 '@smithy/config-resolver': 3.0.13 '@smithy/core': 2.5.5 '@smithy/fetch-http-handler': 4.1.2 @@ -6774,22 +6774,22 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sts@3.699.0': + '@aws-sdk/client-sts@3.716.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.699.0(@aws-sdk/client-sts@3.699.0) - '@aws-sdk/core': 3.696.0 - '@aws-sdk/credential-provider-node': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0) - '@aws-sdk/middleware-host-header': 3.696.0 - '@aws-sdk/middleware-logger': 3.696.0 - '@aws-sdk/middleware-recursion-detection': 3.696.0 - '@aws-sdk/middleware-user-agent': 3.696.0 - '@aws-sdk/region-config-resolver': 3.696.0 - '@aws-sdk/types': 3.696.0 - '@aws-sdk/util-endpoints': 3.696.0 - '@aws-sdk/util-user-agent-browser': 3.696.0 - '@aws-sdk/util-user-agent-node': 3.696.0 + '@aws-sdk/client-sso-oidc': 3.716.0(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/core': 3.716.0 + '@aws-sdk/credential-provider-node': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/middleware-host-header': 3.714.0 + '@aws-sdk/middleware-logger': 3.714.0 + '@aws-sdk/middleware-recursion-detection': 3.714.0 + '@aws-sdk/middleware-user-agent': 3.716.0 + '@aws-sdk/region-config-resolver': 3.714.0 + '@aws-sdk/types': 3.714.0 + '@aws-sdk/util-endpoints': 3.714.0 + '@aws-sdk/util-user-agent-browser': 3.714.0 + '@aws-sdk/util-user-agent-node': 3.716.0 '@smithy/config-resolver': 3.0.13 '@smithy/core': 2.5.5 '@smithy/fetch-http-handler': 4.1.2 @@ -6819,9 +6819,9 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/core@3.696.0': + '@aws-sdk/core@3.716.0': dependencies: - '@aws-sdk/types': 3.696.0 + '@aws-sdk/types': 3.714.0 '@smithy/core': 2.5.5 '@smithy/node-config-provider': 3.1.12 '@smithy/property-provider': 3.1.11 @@ -6833,28 +6833,28 @@ snapshots: fast-xml-parser: 4.4.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-cognito-identity@3.699.0': + '@aws-sdk/credential-provider-cognito-identity@3.716.0': dependencies: - '@aws-sdk/client-cognito-identity': 3.699.0 - '@aws-sdk/types': 3.696.0 + '@aws-sdk/client-cognito-identity': 3.716.0 + '@aws-sdk/types': 3.714.0 '@smithy/property-provider': 3.1.11 '@smithy/types': 3.7.2 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-env@3.696.0': + '@aws-sdk/credential-provider-env@3.716.0': dependencies: - '@aws-sdk/core': 3.696.0 - '@aws-sdk/types': 3.696.0 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/types': 3.714.0 '@smithy/property-provider': 3.1.11 '@smithy/types': 3.7.2 tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.696.0': + '@aws-sdk/credential-provider-http@3.716.0': dependencies: - '@aws-sdk/core': 3.696.0 - '@aws-sdk/types': 3.696.0 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/types': 3.714.0 '@smithy/fetch-http-handler': 4.1.2 '@smithy/node-http-handler': 3.3.2 '@smithy/property-provider': 3.1.11 @@ -6864,16 +6864,16 @@ snapshots: '@smithy/util-stream': 3.3.2 tslib: 2.8.1 - '@aws-sdk/credential-provider-ini@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0)': + '@aws-sdk/credential-provider-ini@3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0)': dependencies: - '@aws-sdk/client-sts': 3.699.0 - '@aws-sdk/core': 3.696.0 - '@aws-sdk/credential-provider-env': 3.696.0 - '@aws-sdk/credential-provider-http': 3.696.0 - '@aws-sdk/credential-provider-process': 3.696.0 - '@aws-sdk/credential-provider-sso': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0)) - '@aws-sdk/credential-provider-web-identity': 3.696.0(@aws-sdk/client-sts@3.699.0) - '@aws-sdk/types': 3.696.0 + '@aws-sdk/client-sts': 3.716.0 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/credential-provider-env': 3.716.0 + '@aws-sdk/credential-provider-http': 3.716.0 + '@aws-sdk/credential-provider-process': 3.716.0 + '@aws-sdk/credential-provider-sso': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0)) + '@aws-sdk/credential-provider-web-identity': 3.716.0(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/types': 3.714.0 '@smithy/credential-provider-imds': 3.2.8 '@smithy/property-provider': 3.1.11 '@smithy/shared-ini-file-loader': 3.1.12 @@ -6883,15 +6883,15 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-node@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0)': + '@aws-sdk/credential-provider-node@3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0)': dependencies: - '@aws-sdk/credential-provider-env': 3.696.0 - '@aws-sdk/credential-provider-http': 3.696.0 - '@aws-sdk/credential-provider-ini': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0) - '@aws-sdk/credential-provider-process': 3.696.0 - '@aws-sdk/credential-provider-sso': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0)) - '@aws-sdk/credential-provider-web-identity': 3.696.0(@aws-sdk/client-sts@3.699.0) - '@aws-sdk/types': 3.696.0 + '@aws-sdk/credential-provider-env': 3.716.0 + '@aws-sdk/credential-provider-http': 3.716.0 + '@aws-sdk/credential-provider-ini': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/credential-provider-process': 3.716.0 + '@aws-sdk/credential-provider-sso': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0)) + '@aws-sdk/credential-provider-web-identity': 3.716.0(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/types': 3.714.0 '@smithy/credential-provider-imds': 3.2.8 '@smithy/property-provider': 3.1.11 '@smithy/shared-ini-file-loader': 3.1.12 @@ -6902,21 +6902,21 @@ snapshots: - '@aws-sdk/client-sts' - aws-crt - '@aws-sdk/credential-provider-process@3.696.0': + '@aws-sdk/credential-provider-process@3.716.0': dependencies: - '@aws-sdk/core': 3.696.0 - '@aws-sdk/types': 3.696.0 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/types': 3.714.0 '@smithy/property-provider': 3.1.11 '@smithy/shared-ini-file-loader': 3.1.12 '@smithy/types': 3.7.2 tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))': + '@aws-sdk/credential-provider-sso@3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))': dependencies: - '@aws-sdk/client-sso': 3.696.0 - '@aws-sdk/core': 3.696.0 - '@aws-sdk/token-providers': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0)) - '@aws-sdk/types': 3.696.0 + '@aws-sdk/client-sso': 3.716.0 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/token-providers': 3.714.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0)) + '@aws-sdk/types': 3.714.0 '@smithy/property-provider': 3.1.11 '@smithy/shared-ini-file-loader': 3.1.12 '@smithy/types': 3.7.2 @@ -6925,30 +6925,30 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-web-identity@3.696.0(@aws-sdk/client-sts@3.699.0)': + '@aws-sdk/credential-provider-web-identity@3.716.0(@aws-sdk/client-sts@3.716.0)': dependencies: - '@aws-sdk/client-sts': 3.699.0 - '@aws-sdk/core': 3.696.0 - '@aws-sdk/types': 3.696.0 + '@aws-sdk/client-sts': 3.716.0 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/types': 3.714.0 '@smithy/property-provider': 3.1.11 '@smithy/types': 3.7.2 tslib: 2.8.1 - '@aws-sdk/credential-providers@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))': - dependencies: - '@aws-sdk/client-cognito-identity': 3.699.0 - '@aws-sdk/client-sso': 3.696.0 - '@aws-sdk/client-sts': 3.699.0 - '@aws-sdk/core': 3.696.0 - '@aws-sdk/credential-provider-cognito-identity': 3.699.0 - '@aws-sdk/credential-provider-env': 3.696.0 - '@aws-sdk/credential-provider-http': 3.696.0 - '@aws-sdk/credential-provider-ini': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0) - '@aws-sdk/credential-provider-node': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))(@aws-sdk/client-sts@3.699.0) - '@aws-sdk/credential-provider-process': 3.696.0 - '@aws-sdk/credential-provider-sso': 3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0)) - '@aws-sdk/credential-provider-web-identity': 3.696.0(@aws-sdk/client-sts@3.699.0) - '@aws-sdk/types': 3.696.0 + '@aws-sdk/credential-providers@3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))': + dependencies: + '@aws-sdk/client-cognito-identity': 3.716.0 + '@aws-sdk/client-sso': 3.716.0 + '@aws-sdk/client-sts': 3.716.0 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/credential-provider-cognito-identity': 3.716.0 + '@aws-sdk/credential-provider-env': 3.716.0 + '@aws-sdk/credential-provider-http': 3.716.0 + '@aws-sdk/credential-provider-ini': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/credential-provider-node': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/credential-provider-process': 3.716.0 + '@aws-sdk/credential-provider-sso': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0)) + '@aws-sdk/credential-provider-web-identity': 3.716.0(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/types': 3.714.0 '@smithy/credential-provider-imds': 3.2.8 '@smithy/property-provider': 3.1.11 '@smithy/types': 3.7.2 @@ -6957,9 +6957,9 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/middleware-bucket-endpoint@3.696.0': + '@aws-sdk/middleware-bucket-endpoint@3.714.0': dependencies: - '@aws-sdk/types': 3.696.0 + '@aws-sdk/types': 3.714.0 '@aws-sdk/util-arn-parser': 3.693.0 '@smithy/node-config-provider': 3.1.12 '@smithy/protocol-http': 4.1.8 @@ -6967,20 +6967,20 @@ snapshots: '@smithy/util-config-provider': 3.0.0 tslib: 2.8.1 - '@aws-sdk/middleware-expect-continue@3.696.0': + '@aws-sdk/middleware-expect-continue@3.714.0': dependencies: - '@aws-sdk/types': 3.696.0 + '@aws-sdk/types': 3.714.0 '@smithy/protocol-http': 4.1.8 '@smithy/types': 3.7.2 tslib: 2.8.1 - '@aws-sdk/middleware-flexible-checksums@3.701.0': + '@aws-sdk/middleware-flexible-checksums@3.716.0': dependencies: '@aws-crypto/crc32': 5.2.0 '@aws-crypto/crc32c': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/core': 3.696.0 - '@aws-sdk/types': 3.696.0 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/types': 3.714.0 '@smithy/is-array-buffer': 3.0.0 '@smithy/node-config-provider': 3.1.12 '@smithy/protocol-http': 4.1.8 @@ -6990,36 +6990,36 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.8.1 - '@aws-sdk/middleware-host-header@3.696.0': + '@aws-sdk/middleware-host-header@3.714.0': dependencies: - '@aws-sdk/types': 3.696.0 + '@aws-sdk/types': 3.714.0 '@smithy/protocol-http': 4.1.8 '@smithy/types': 3.7.2 tslib: 2.8.1 - '@aws-sdk/middleware-location-constraint@3.696.0': + '@aws-sdk/middleware-location-constraint@3.714.0': dependencies: - '@aws-sdk/types': 3.696.0 + '@aws-sdk/types': 3.714.0 '@smithy/types': 3.7.2 tslib: 2.8.1 - '@aws-sdk/middleware-logger@3.696.0': + '@aws-sdk/middleware-logger@3.714.0': dependencies: - '@aws-sdk/types': 3.696.0 + '@aws-sdk/types': 3.714.0 '@smithy/types': 3.7.2 tslib: 2.8.1 - '@aws-sdk/middleware-recursion-detection@3.696.0': + '@aws-sdk/middleware-recursion-detection@3.714.0': dependencies: - '@aws-sdk/types': 3.696.0 + '@aws-sdk/types': 3.714.0 '@smithy/protocol-http': 4.1.8 '@smithy/types': 3.7.2 tslib: 2.8.1 - '@aws-sdk/middleware-sdk-ec2@3.696.0': + '@aws-sdk/middleware-sdk-ec2@3.716.0': dependencies: - '@aws-sdk/types': 3.696.0 - '@aws-sdk/util-format-url': 3.696.0 + '@aws-sdk/types': 3.714.0 + '@aws-sdk/util-format-url': 3.714.0 '@smithy/middleware-endpoint': 3.2.6 '@smithy/protocol-http': 4.1.8 '@smithy/signature-v4': 4.2.4 @@ -7027,20 +7027,20 @@ snapshots: '@smithy/types': 3.7.2 tslib: 2.8.1 - '@aws-sdk/middleware-sdk-rds@3.696.0': + '@aws-sdk/middleware-sdk-rds@3.716.0': dependencies: - '@aws-sdk/types': 3.696.0 - '@aws-sdk/util-format-url': 3.696.0 + '@aws-sdk/types': 3.714.0 + '@aws-sdk/util-format-url': 3.714.0 '@smithy/middleware-endpoint': 3.2.6 '@smithy/protocol-http': 4.1.8 '@smithy/signature-v4': 4.2.4 '@smithy/types': 3.7.2 tslib: 2.8.1 - '@aws-sdk/middleware-sdk-s3@3.696.0': + '@aws-sdk/middleware-sdk-s3@3.716.0': dependencies: - '@aws-sdk/core': 3.696.0 - '@aws-sdk/types': 3.696.0 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/types': 3.714.0 '@aws-sdk/util-arn-parser': 3.693.0 '@smithy/core': 2.5.5 '@smithy/node-config-provider': 3.1.12 @@ -7054,50 +7054,50 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.8.1 - '@aws-sdk/middleware-ssec@3.696.0': + '@aws-sdk/middleware-ssec@3.714.0': dependencies: - '@aws-sdk/types': 3.696.0 + '@aws-sdk/types': 3.714.0 '@smithy/types': 3.7.2 tslib: 2.8.1 - '@aws-sdk/middleware-user-agent@3.696.0': + '@aws-sdk/middleware-user-agent@3.716.0': dependencies: - '@aws-sdk/core': 3.696.0 - '@aws-sdk/types': 3.696.0 - '@aws-sdk/util-endpoints': 3.696.0 + '@aws-sdk/core': 3.716.0 + '@aws-sdk/types': 3.714.0 + '@aws-sdk/util-endpoints': 3.714.0 '@smithy/core': 2.5.5 '@smithy/protocol-http': 4.1.8 '@smithy/types': 3.7.2 tslib: 2.8.1 - '@aws-sdk/region-config-resolver@3.696.0': + '@aws-sdk/region-config-resolver@3.714.0': dependencies: - '@aws-sdk/types': 3.696.0 + '@aws-sdk/types': 3.714.0 '@smithy/node-config-provider': 3.1.12 '@smithy/types': 3.7.2 '@smithy/util-config-provider': 3.0.0 '@smithy/util-middleware': 3.0.11 tslib: 2.8.1 - '@aws-sdk/signature-v4-multi-region@3.696.0': + '@aws-sdk/signature-v4-multi-region@3.716.0': dependencies: - '@aws-sdk/middleware-sdk-s3': 3.696.0 - '@aws-sdk/types': 3.696.0 + '@aws-sdk/middleware-sdk-s3': 3.716.0 + '@aws-sdk/types': 3.714.0 '@smithy/protocol-http': 4.1.8 '@smithy/signature-v4': 4.2.4 '@smithy/types': 3.7.2 tslib: 2.8.1 - '@aws-sdk/token-providers@3.699.0(@aws-sdk/client-sso-oidc@3.699.0(@aws-sdk/client-sts@3.699.0))': + '@aws-sdk/token-providers@3.714.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))': dependencies: - '@aws-sdk/client-sso-oidc': 3.699.0(@aws-sdk/client-sts@3.699.0) - '@aws-sdk/types': 3.696.0 + '@aws-sdk/client-sso-oidc': 3.716.0(@aws-sdk/client-sts@3.716.0) + '@aws-sdk/types': 3.714.0 '@smithy/property-provider': 3.1.11 '@smithy/shared-ini-file-loader': 3.1.12 '@smithy/types': 3.7.2 tslib: 2.8.1 - '@aws-sdk/types@3.696.0': + '@aws-sdk/types@3.714.0': dependencies: '@smithy/types': 3.7.2 tslib: 2.8.1 @@ -7106,16 +7106,16 @@ snapshots: dependencies: tslib: 2.8.1 - '@aws-sdk/util-endpoints@3.696.0': + '@aws-sdk/util-endpoints@3.714.0': dependencies: - '@aws-sdk/types': 3.696.0 + '@aws-sdk/types': 3.714.0 '@smithy/types': 3.7.2 '@smithy/util-endpoints': 2.1.7 tslib: 2.8.1 - '@aws-sdk/util-format-url@3.696.0': + '@aws-sdk/util-format-url@3.714.0': dependencies: - '@aws-sdk/types': 3.696.0 + '@aws-sdk/types': 3.714.0 '@smithy/querystring-builder': 3.0.11 '@smithy/types': 3.7.2 tslib: 2.8.1 @@ -7124,22 +7124,22 @@ snapshots: dependencies: tslib: 2.8.1 - '@aws-sdk/util-user-agent-browser@3.696.0': + '@aws-sdk/util-user-agent-browser@3.714.0': dependencies: - '@aws-sdk/types': 3.696.0 + '@aws-sdk/types': 3.714.0 '@smithy/types': 3.7.2 bowser: 2.11.0 tslib: 2.8.1 - '@aws-sdk/util-user-agent-node@3.696.0': + '@aws-sdk/util-user-agent-node@3.716.0': dependencies: - '@aws-sdk/middleware-user-agent': 3.696.0 - '@aws-sdk/types': 3.696.0 + '@aws-sdk/middleware-user-agent': 3.716.0 + '@aws-sdk/types': 3.714.0 '@smithy/node-config-provider': 3.1.12 '@smithy/types': 3.7.2 tslib: 2.8.1 - '@aws-sdk/xml-builder@3.696.0': + '@aws-sdk/xml-builder@3.709.0': dependencies: '@smithy/types': 3.7.2 tslib: 2.8.1 From d0775ccba85b68942c1fbdbca9449997b69577fe Mon Sep 17 00:00:00 2001 From: ivan katliarchuk Date: Wed, 25 Dec 2024 21:43:21 +0000 Subject: [PATCH 06/18] feat(23410): fix linters Signed-off-by: ivan katliarchuk --- .../datasource/aws-eks-addon/index.spec.ts | 59 +++++++------------ lib/modules/datasource/aws-eks-addon/index.ts | 42 +++++++------ 2 files changed, 45 insertions(+), 56 deletions(-) diff --git a/lib/modules/datasource/aws-eks-addon/index.spec.ts b/lib/modules/datasource/aws-eks-addon/index.spec.ts index e8ec59490138c7..8855a0874e4d45 100644 --- a/lib/modules/datasource/aws-eks-addon/index.spec.ts +++ b/lib/modules/datasource/aws-eks-addon/index.spec.ts @@ -113,43 +113,35 @@ describe('modules/datasource/aws-eks-addon/index', () => { it('with addonName not supplied', async () => { const res = await getPkgReleases({ datasource, - packageName: - '{"kubernetesVersion":"1.30"}', + packageName: '{"kubernetesVersion":"1.30"}', }); - expect(res).toBeNull() - expect(logger.logger.error).toHaveBeenCalledTimes(1) + expect(res).toBeNull(); + expect(logger.logger.error).toHaveBeenCalledTimes(1); }); it('with addonName only', async () => { - mockDescribeAddonVersionsCommand({addons: [addonInfo]}) + mockDescribeAddonVersionsCommand({ addons: [addonInfo] }); const res = await getPkgReleases({ datasource, - packageName: - '{"addonName":"vpc-cni"}', + packageName: '{"addonName":"vpc-cni"}', }); expect(res?.releases).toHaveLength(3); expect(res).toEqual({ releases: [ { version: 'v1.18.1-eksbuild.1', - "compatibleWith": [ - "1.30" - ], - "default": false, + compatibleWith: ['1.30'], + default: false, }, { version: 'v1.18.2-eksbuild.1', - "compatibleWith": [ - "1.30" - ], - "default": true, + compatibleWith: ['1.30'], + default: true, }, { version: 'v1.19.0-eksbuild.1', - "compatibleWith": [ - "1.31", "1.30", "1.29" - ], - "default": true, + compatibleWith: ['1.31', '1.30', '1.29'], + default: true, }, ], }); @@ -160,11 +152,10 @@ describe('modules/datasource/aws-eks-addon/index', () => { }); it('with addonName and default only config', async () => { - mockDescribeAddonVersionsCommand({addons: [addonInfo]}) + mockDescribeAddonVersionsCommand({ addons: [addonInfo] }); const res = await getPkgReleases({ datasource, - packageName: - '{"addonName":"vpc-cni", "default":true}', + packageName: '{"addonName":"vpc-cni", "default":true}', }); expect(eksMock.call(0).args[0].input).toEqual({ addonName: 'vpc-cni', @@ -175,17 +166,13 @@ describe('modules/datasource/aws-eks-addon/index', () => { releases: [ { version: 'v1.18.2-eksbuild.1', - "compatibleWith": [ - "1.30" - ], - "default": true, + compatibleWith: ['1.30'], + default: true, }, { version: 'v1.19.0-eksbuild.1', - "compatibleWith": [ - "1.31", "1.30", "1.29" - ], - "default": true, + compatibleWith: ['1.31', '1.30', '1.29'], + default: true, }, ], }); @@ -239,17 +226,13 @@ describe('modules/datasource/aws-eks-addon/index', () => { releases: [ { version: 'v1.18.1-eksbuild.1', - "compatibleWith": [ - "1.30" - ], - "default": false, + compatibleWith: ['1.30'], + default: false, }, { version: 'v1.18.2-eksbuild.1', - "compatibleWith": [ - "1.30" - ], - "default": false, + compatibleWith: ['1.30'], + default: false, }, ], }); diff --git a/lib/modules/datasource/aws-eks-addon/index.ts b/lib/modules/datasource/aws-eks-addon/index.ts index a7fc866e6b1c84..72a1a490867bbb 100644 --- a/lib/modules/datasource/aws-eks-addon/index.ts +++ b/lib/modules/datasource/aws-eks-addon/index.ts @@ -29,46 +29,52 @@ export class AwsEKSAddonDataSource extends Datasource { key: ({ packageName }: GetReleasesConfig) => `getReleases:${packageName}`, }) async getReleases({ - packageName: serializedFilter, - }: GetReleasesConfig): Promise { + packageName: serializedFilter, + }: GetReleasesConfig): Promise { const res = EksAddonsFilter.safeParse(serializedFilter); if (!res.success) { logger.error( { err: res.error, serializedFilter }, 'Error parsing eks-addons config.', ); - return null + return null; } - const filter = res.data; + const filter = res.data; const input: DescribeAddonVersionsCommandInput = { kubernetesVersion: filter?.kubernetesVersion, addonName: filter?.addonName, maxResults: 1, }; - const cmd = new DescribeAddonVersionsCommand(input) - const response : DescribeAddonVersionsCommandOutput = await this.getClient(filter).send(cmd) + const cmd = new DescribeAddonVersionsCommand(input); + const response: DescribeAddonVersionsCommandOutput = + await this.getClient(filter).send(cmd); const addons: AddonInfo[] = response.addons ?? []; return { releases: addons - .flatMap((addon : AddonInfo) : AddonVersionInfo[] | undefined => { - return addon.addonVersions + .flatMap((addon: AddonInfo): AddonVersionInfo[] | undefined => { + return addon.addonVersions; }) .map((versionInfo: AddonVersionInfo | undefined) => ({ version: versionInfo?.addonVersion ?? '', - default: versionInfo?.compatibilities?.some((comp : Compatibility) : boolean | undefined => comp.defaultVersion) ?? false, - compatibleWith : versionInfo?.compatibilities?.flatMap((comp: Compatibility) : string | undefined => comp.clusterVersion) + default: + versionInfo?.compatibilities?.some( + (comp: Compatibility): boolean | undefined => comp.defaultVersion, + ) ?? false, + compatibleWith: versionInfo?.compatibilities?.flatMap( + (comp: Compatibility): string | undefined => comp.clusterVersion, + ), })) - .filter((release ): boolean => { - return release.version !== '' + .filter((release): boolean => { + return release.version !== ''; }) - .filter((release ): boolean => { + .filter((release): boolean => { if (filter.default) { - return release.default && release.default === filter.default + return release.default && release.default === filter.default; } - return true - }) + return true; + }), }; } @@ -77,8 +83,8 @@ export class AwsEKSAddonDataSource extends Datasource { if (!(cacheKey in this.clients)) { this.clients[cacheKey] = new EKSClient({ region: region ?? undefined, - credentials: fromNodeProviderChain(profile ? { profile } : undefined) - }) + credentials: fromNodeProviderChain(profile ? { profile } : undefined), + }); } return this.clients[cacheKey]; } From b071797d46307c6f0785392d3832f32da3e8643a Mon Sep 17 00:00:00 2001 From: ivan katliarchuk Date: Wed, 25 Dec 2024 21:47:42 +0000 Subject: [PATCH 07/18] feat(23410): fix linters Signed-off-by: ivan katliarchuk --- lib/modules/datasource/aws-eks-addon/index.spec.ts | 2 +- lib/modules/datasource/aws-eks-addon/index.ts | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/modules/datasource/aws-eks-addon/index.spec.ts b/lib/modules/datasource/aws-eks-addon/index.spec.ts index 8855a0874e4d45..2f99b57e4ad74b 100644 --- a/lib/modules/datasource/aws-eks-addon/index.spec.ts +++ b/lib/modules/datasource/aws-eks-addon/index.spec.ts @@ -1,7 +1,7 @@ import { type AddonInfo, DescribeAddonVersionsCommand, - DescribeAddonVersionsResponse, + type DescribeAddonVersionsResponse, EKSClient, } from '@aws-sdk/client-eks'; import { mockClient } from 'aws-sdk-client-mock'; diff --git a/lib/modules/datasource/aws-eks-addon/index.ts b/lib/modules/datasource/aws-eks-addon/index.ts index 72a1a490867bbb..f58589c148b1df 100644 --- a/lib/modules/datasource/aws-eks-addon/index.ts +++ b/lib/modules/datasource/aws-eks-addon/index.ts @@ -1,10 +1,10 @@ import { - AddonInfo, - AddonVersionInfo, - Compatibility, + type AddonInfo, + type AddonVersionInfo, + type Compatibility, DescribeAddonVersionsCommand, - DescribeAddonVersionsCommandInput, - DescribeAddonVersionsCommandOutput, + type DescribeAddonVersionsCommandInput, + type DescribeAddonVersionsCommandOutput, EKSClient, } from '@aws-sdk/client-eks'; import { fromNodeProviderChain } from '@aws-sdk/credential-providers'; From dffe55e580901bf3c6665f757bb42e122f9fb6ff Mon Sep 17 00:00:00 2001 From: ivan katliarchuk Date: Thu, 26 Dec 2024 12:34:06 +0000 Subject: [PATCH 08/18] feat(23410): added support for versioning Signed-off-by: ivan katliarchuk --- .../datasource/aws-eks-addon/readme.md | 8 +- .../datasource/aws-machine-image/index.ts | 2 +- lib/modules/versioning/api.ts | 2 + .../versioning/aws-eks-addon/index.spec.ts | 65 ++++++++++++++++ lib/modules/versioning/aws-eks-addon/index.ts | 77 +++++++++++++++++++ .../versioning/aws-eks-addon/readme.md | 16 ++++ 6 files changed, 165 insertions(+), 5 deletions(-) create mode 100644 lib/modules/versioning/aws-eks-addon/index.spec.ts create mode 100644 lib/modules/versioning/aws-eks-addon/index.ts create mode 100644 lib/modules/versioning/aws-eks-addon/readme.md diff --git a/lib/modules/datasource/aws-eks-addon/readme.md b/lib/modules/datasource/aws-eks-addon/readme.md index f2f521a5ebe1c8..d9532e47901ead 100644 --- a/lib/modules/datasource/aws-eks-addon/readme.md +++ b/lib/modules/datasource/aws-eks-addon/readme.md @@ -51,16 +51,16 @@ Although it's unlikely that EKS might support different addon versions across re ```yaml # discover kube-proxy addon versions without specifying a cluster version. -{"addonName":"kube-proxy"} +renovate: eksAddonsFilter={"addonName":"kube-proxy"} # discover kube-proxy default addon versions -{"addonName":"kube-proxy", "default":true} +renovate: eksAddonsFilter={"addonName":"kube-proxy", "default":true} # discover vpc-cni addon versions on Kubernetes 1.30 in us-east-1 region using environmental AWS credentials. -{"kubernetesVersion":"1.30","addonName":"vpc-cni","region":"us-east-1"} +renovate: eksAddonsFilter={"kubernetesVersion":"1.30","addonName":"vpc-cni","region":"eu-west-1"} # discover vpc-cni addon versions on Kubernetes 1.30 in us-east-1 region using AWS credentials from `renovate-east` profile. -{"kubernetesVersion":"1.30","addonName":"vpc-cni","region":"us-east-1","profile":"renovate-east"} +renovate: eksAddonsFilter={"kubernetesVersion":"1.30","addonName":"vpc-cni","region":"us-east-1","profile":"renovate-east"} ``` Here's an example of using the custom manager to configure this datasource: diff --git a/lib/modules/datasource/aws-machine-image/index.ts b/lib/modules/datasource/aws-machine-image/index.ts index f069ef5a52777e..515ffb988b2d49 100644 --- a/lib/modules/datasource/aws-machine-image/index.ts +++ b/lib/modules/datasource/aws-machine-image/index.ts @@ -26,7 +26,7 @@ export class AwsMachineImageDatasource extends Datasource { Image: '```{{{newDigest}}}```', }, digest: { - // Because newDigestShort will allways be 'amazon-' we override to print the name of the AMI + // Because newDigestShort will always be 'amazon-' we override to print the name of the AMI commitMessageExtra: 'to {{{newDigest}}}', prBodyColumns: ['Image'], prBodyDefinitions: { diff --git a/lib/modules/versioning/api.ts b/lib/modules/versioning/api.ts index 454d0f631ade1a..10bae3b202c4cb 100644 --- a/lib/modules/versioning/api.ts +++ b/lib/modules/versioning/api.ts @@ -1,3 +1,4 @@ +import * as awsEksAddon from './aws-eks-addon'; import * as amazonMachineImage from './aws-machine-image'; import * as azureRestApi from './azure-rest-api'; import * as bazelModule from './bazel-module'; @@ -45,6 +46,7 @@ import * as unity3d from './unity3d'; const api = new Map(); export default api; +api.set(awsEksAddon.id, awsEksAddon.api); api.set(amazonMachineImage.id, amazonMachineImage.api); api.set(azureRestApi.id, azureRestApi.api); api.set(bazelModule.id, bazelModule.api); diff --git a/lib/modules/versioning/aws-eks-addon/index.spec.ts b/lib/modules/versioning/aws-eks-addon/index.spec.ts new file mode 100644 index 00000000000000..53aaa5fac2c4dd --- /dev/null +++ b/lib/modules/versioning/aws-eks-addon/index.spec.ts @@ -0,0 +1,65 @@ +import aws from '.'; + +describe('modules/versioning/aws-eks-addon/index', () => { + describe('parse(version)', () => { + it('should return 1.23.7 and release version', () => { + expect(aws.getMajor('v1.20.7-eksbuild.1')).toBe(1); + expect(aws.getMinor('v1.23.7-eksbuild.1')).toBe(23); + expect(aws.getPatch('v1.20.7-eksbuild.1')).toBe(7); + }); + }); + + describe('isValid(version)', () => { + it('should return true', () => { + expect(aws.isValid('v1.11.7-eksbuild.23')).toBeTruthy(); + }); + + it('should return false', () => { + expect(aws.isValid('v1.11.7-noneksbuild.23')).toBeFalsy(); + }); + }); + + describe('isVersion(version)', () => { + it('should return true', () => { + expect(aws.isVersion('v1.11.7-eksbuild.1')).toBeTruthy(); + }); + + it('should return false', () => { + expect(aws.isVersion('v1.11.7')).toBeFalsy(); + }); + }); + + describe('isCompatible(version)', () => { + + it('should return false', () => { + expect(aws.isCompatible('v1.11.7')).toBeFalsy(); + expect(aws.isCompatible('v1.11.7-noneksbuild')).toBeFalsy(); + expect(aws.isCompatible('v1.11.7-noneksbuild.1')).toBeFalsy(); + expect(aws.isCompatible('v1.11.7-eksbuild')).toBeFalsy(); + }); + }); + + describe('isCompatible(version,range)', () => { + it('should return true', () => { + expect( + aws.isCompatible('v1.11.7-eksbuild.1', 'v1.2.7-eksbuild.1'), + ).toBeTruthy(); + }); + + it('should return false', () => { + expect(aws.isCompatible('v1.11.7-eksbuild.1', 'v1.11.7-noneksbuild.1')).toBeFalsy(); + }); + }); + + describe('isGreaterThan(version1, version2)', () => { + it('should return true', () => { + expect(aws.isGreaterThan('v1.11.7-eksbuild.1', 'v1.11.7-eksbuild.0')).toBeTrue(); + expect(aws.isGreaterThan('v1.20.7-eksbuild.2', 'v1.20.7-eksbuild.1')).toBeTrue(); + }); + + it('should return false', () => { + expect(aws.isGreaterThan('v1.20.7-eksbuild.1', 'v1.20.7-eksbuild.2')).toBeFalsy(); + expect(aws.isGreaterThan('v1.20.7-eksbuild.1', 'v2.0.0-eksbuild.1')).toBeFalsy(); + }); + }); +}); diff --git a/lib/modules/versioning/aws-eks-addon/index.ts b/lib/modules/versioning/aws-eks-addon/index.ts new file mode 100644 index 00000000000000..23ed620ad22f3e --- /dev/null +++ b/lib/modules/versioning/aws-eks-addon/index.ts @@ -0,0 +1,77 @@ +import { regEx } from '../../../util/regex'; +import { coerceString } from '../../../util/string'; +import type { GenericVersion } from '../generic'; +import { GenericVersioningApi } from '../generic'; +import type { VersioningApi } from '../types'; + +export const id = 'aws-eks-addon'; +export const displayName = 'aws-eks-addon'; + +export const urls = []; + +export const supportsRanges = false; + +const versionPattern = regEx('^[vV]?(\\d+(?:\\.\\d+)*)(?-eksbuild\\.\\d+)?$'); + +class AwsEKSAddonVersioningApi extends GenericVersioningApi { + + protected _parse(version: string): GenericVersion | null { + if (!version) { + return null; + } + const matches : RegExpExecArray | null = versionPattern.exec(version); + if (!matches) { + return null; + } + const [, prefix, suffix] = matches; + const release : number[] = prefix.split('.').map(Number); + if (release.length !== 3) { + return null; + } + if (!suffix) { + return null + } + return { release, suffix: suffix || '' }; + } + + protected override _compare(version: string, other: string): number { + const parsed1 : GenericVersion | null = this._parse(version); + const parsed2 : GenericVersion | null = this._parse(other); + // istanbul ignore if + if (!(parsed1 && parsed2)) { + return 1; + } + const length = Math.max(parsed1.release.length, parsed2.release.length); + for (let i = 0; i < length; i += 1) { + const part1 = parsed1.release[i]; + const part2 = parsed2.release[i]; + if (part1 === undefined) { + return 1; + } + if (part2 === undefined) { + return -1; + } + if (part1 !== part2) { + return part1 - part2; + } + } + const suffix1 = coerceString(parsed1.suffix); + const suffix2 = coerceString(parsed2.suffix); + return suffix1.localeCompare(suffix2); + } + + override isCompatible(version: string, current: string): boolean { + const parsed1 : GenericVersion | null = this._parse(version); + const parsed2 : GenericVersion | null = this._parse(current); + return !!( + parsed1 && + parsed2 && + parsed1.suffix === parsed2.suffix && + parsed1.release.length === parsed2.release.length + ); + } +} + +export const api: VersioningApi = new AwsEKSAddonVersioningApi(); + +export default api; diff --git a/lib/modules/versioning/aws-eks-addon/readme.md b/lib/modules/versioning/aws-eks-addon/readme.md new file mode 100644 index 00000000000000..3fa0b2dad07640 --- /dev/null +++ b/lib/modules/versioning/aws-eks-addon/readme.md @@ -0,0 +1,16 @@ +Renovate's AWS EKS Addon versioning to support on EKS Addon updates. + +At the moment every ESK Addon that matches the regex `^[vV]?(\d+(?:\.\d+)*)(-eksbuild\.\d+)?$` is considered a valid "release". + +## Key Points about EKS Addon Versioning: + +1. Versioning Scheme: Add-ons typically follow a semantic versioning scheme (e.g., Major.Minor.Patch). This helps in understanding the significance of changes between versions: + + - `Major`: Indicates significant changes or breaking API changes for plugin version. + - `Minor`: Introduces new features or enhancements for plugin version. + - `Patch`: Includes bug fixes and minor improvements for plugin version. + - `Build Metadata` : It helps differentiate this particular release from others that might have been built independently. + +2. Default Versions: When creating a new EKS cluster, AWS often selects a default version for each addon based on the cluster's Kubernetes version and other factors. This default version is usually the most stable and recommended for the specific cluster configuration + +3. Build metadata. Example `eksbuild.1`. The `eksbuild.1` part signifies a specific build or release within the `1.19.0` version, likely managed by the EKS build system. It helps differentiate this particular release from others that might have been built independently. The build metadata provides additional context about the specific release, which can be useful for tracking and troubleshooting. From 1a64d1ace44cd7da106de858c3d37e60fbd4749f Mon Sep 17 00:00:00 2001 From: ivan katliarchuk Date: Thu, 26 Dec 2024 16:02:28 +0000 Subject: [PATCH 09/18] feat(23410): added tests for schema. prettier-fix Signed-off-by: ivan katliarchuk --- lib/modules/datasource/aws-eks-addon/index.ts | 13 ++-- .../datasource/aws-eks-addon/readme.md | 16 ++++- .../datasource/aws-eks-addon/schema.spec.ts | 20 +++++++ .../datasource/aws-eks-addon/schema.ts | 24 ++++++-- .../versioning/aws-eks-addon/index.spec.ts | 42 +++++++++++-- lib/modules/versioning/aws-eks-addon/index.ts | 60 +++++++------------ 6 files changed, 121 insertions(+), 54 deletions(-) create mode 100644 lib/modules/datasource/aws-eks-addon/schema.spec.ts diff --git a/lib/modules/datasource/aws-eks-addon/index.ts b/lib/modules/datasource/aws-eks-addon/index.ts index f58589c148b1df..cddd16379ae27f 100644 --- a/lib/modules/datasource/aws-eks-addon/index.ts +++ b/lib/modules/datasource/aws-eks-addon/index.ts @@ -10,6 +10,7 @@ import { import { fromNodeProviderChain } from '@aws-sdk/credential-providers'; import { logger } from '../../../logger'; import { cache } from '../../../util/cache/package/decorator'; +import * as awsEksAddonVersioning from '../../versioning/aws-eks-addon'; import { Datasource } from '../datasource'; import type { GetReleasesConfig, ReleaseResult } from '../types'; import { EksAddonsFilter } from './schema'; @@ -17,9 +18,15 @@ import { EksAddonsFilter } from './schema'; export class AwsEKSAddonDataSource extends Datasource { static readonly id = 'aws-eks-addon'; + override readonly defaultVersioning = awsEksAddonVersioning.id; override readonly caching = true; private readonly clients: Record = {}; + override readonly defaultConfig: Record | undefined = { + commitMessageTopic: '{{datasource}}', + commitMessageExtra: '{{currentVersion}} to {{{newVersion}}}', + }; + constructor() { super(AwsEKSAddonDataSource.id); } @@ -41,12 +48,12 @@ export class AwsEKSAddonDataSource extends Datasource { } const filter = res.data; - const input: DescribeAddonVersionsCommandInput = { kubernetesVersion: filter?.kubernetesVersion, addonName: filter?.addonName, maxResults: 1, }; + const cmd = new DescribeAddonVersionsCommand(input); const response: DescribeAddonVersionsCommandOutput = await this.getClient(filter).send(cmd); @@ -66,9 +73,7 @@ export class AwsEKSAddonDataSource extends Datasource { (comp: Compatibility): string | undefined => comp.clusterVersion, ), })) - .filter((release): boolean => { - return release.version !== ''; - }) + .filter((release) => release.version && release.version !== '') .filter((release): boolean => { if (filter.default) { return release.default && release.default === filter.default; diff --git a/lib/modules/datasource/aws-eks-addon/readme.md b/lib/modules/datasource/aws-eks-addon/readme.md index d9532e47901ead..665c48035a36c1 100644 --- a/lib/modules/datasource/aws-eks-addon/readme.md +++ b/lib/modules/datasource/aws-eks-addon/readme.md @@ -69,8 +69,7 @@ Here's an example of using the custom manager to configure this datasource: { "packageRules": [ { - "matchDatasources": ["aws-eks-addon"], - "ignoreUnstable": false + "matchDatasources": ["aws-eks-addon"] } ], "customManagers": [ @@ -81,7 +80,7 @@ Here's an example of using the custom manager to configure this datasource: ".*# renovate: eksAddonsFilter=(?.*?)\n.*?[a-zA-Z0-9-_:]*[ ]*?[:|=][ ]*?[\"|']?(?[a-zA-Z0-9-_.]+)[\"|']?.*" ], "datasourceTemplate": "aws-eks-addon", - "versioningTemplate": "semver" + "versioningTemplate": "aws-eks-addon" // Optional. Default value is 'aws-eks-addon' } ] } @@ -93,7 +92,18 @@ The configuration above matches every terraform file, and recognizes these lines variable "vpc_cni_version" { type = string description = "EKS vpc-cni add-on version" + # kubernetesVersion and addonName provided # renovate: eksAddonsFilter={"kubernetesVersion":"1.30","addonName":"vpc-cni"} default = "v1.18.1-eksbuild.3" } ``` + +or + +```yml +addons: + - name: vpc-cni + # only addon name and the supported default version + # renovate: eksAddonsFilter={"addonName":"vpc-cni", "default":true} + version: v1.18.5-eksbuild.1 +``` diff --git a/lib/modules/datasource/aws-eks-addon/schema.spec.ts b/lib/modules/datasource/aws-eks-addon/schema.spec.ts new file mode 100644 index 00000000000000..58d05518640223 --- /dev/null +++ b/lib/modules/datasource/aws-eks-addon/schema.spec.ts @@ -0,0 +1,20 @@ +import { EksAddonsFilter } from './schema'; + +describe('modules/datasource/aws-eks-addon/schema', () => { + describe('EksAddonsFilter', () => { + it.each` + input | expected + ${{ kubernetesVersion: '1.30', addonName: 'kube_proxy' }} | ${false} + ${{ kubernetesVersion: '130', addonName: 'kube_proxy' }} | ${false} + ${{ addonName: 'kube_proxy', default: 'abrakadabra' }} | ${false} + ${{ kubernetesVersion: '1.30' }} | ${false} + ${{ addonName: 'kube-proxy', default: 'false' }} | ${true} + ${{ addonName: 'kube-proxy', default: false }} | ${true} + ${{ kubernetesVersion: '1.30', addonName: 'vpc-cni' }} | ${true} + ${{ addonName: 'vpc-cni' }} | ${true} + `('safeParse("$input") === $expected', ({ input, expected }) => { + const actual = EksAddonsFilter.safeParse(JSON.stringify(input)); + expect(actual.success).toBe(expected); + }); + }); +}); diff --git a/lib/modules/datasource/aws-eks-addon/schema.ts b/lib/modules/datasource/aws-eks-addon/schema.ts index f48f67026f9254..bc73927d8192cb 100644 --- a/lib/modules/datasource/aws-eks-addon/schema.ts +++ b/lib/modules/datasource/aws-eks-addon/schema.ts @@ -1,10 +1,26 @@ -import { z } from 'zod'; +import { type ZodEffects, type ZodString, z } from 'zod'; +import { regEx } from '../../../util/regex'; import { Json } from '../../../util/schema-utils'; +const stringIsBoolSchema: ZodEffects = z + .string() + .transform((value) => { + if (value === 'true') { + return true; + } else if (value === 'false') { + return false; + } else { + return false; + } + }); + export const EksAddonsFilterSchema = z.object({ - addonName: z.string().min(1), - kubernetesVersion: z.string().optional(), - default: z.boolean().optional(), + addonName: z.string().nonempty().regex(regEx('^[a-z0-9][a-z0-9-]*[a-z0-9]$')), + kubernetesVersion: z + .string() + .regex(regEx('^(?\\d+)\\.(?\\d+)$')) + .optional(), + default: z.oboolean().or(stringIsBoolSchema), region: z.string().optional(), profile: z.string().optional(), }); diff --git a/lib/modules/versioning/aws-eks-addon/index.spec.ts b/lib/modules/versioning/aws-eks-addon/index.spec.ts index 53aaa5fac2c4dd..1a4fe0800cfd52 100644 --- a/lib/modules/versioning/aws-eks-addon/index.spec.ts +++ b/lib/modules/versioning/aws-eks-addon/index.spec.ts @@ -30,7 +30,6 @@ describe('modules/versioning/aws-eks-addon/index', () => { }); describe('isCompatible(version)', () => { - it('should return false', () => { expect(aws.isCompatible('v1.11.7')).toBeFalsy(); expect(aws.isCompatible('v1.11.7-noneksbuild')).toBeFalsy(); @@ -47,19 +46,50 @@ describe('modules/versioning/aws-eks-addon/index', () => { }); it('should return false', () => { - expect(aws.isCompatible('v1.11.7-eksbuild.1', 'v1.11.7-noneksbuild.1')).toBeFalsy(); + expect( + aws.isCompatible('v1.11.7-eksbuild.1', 'v1.11.7-noneksbuild.1'), + ).toBeFalsy(); }); }); describe('isGreaterThan(version1, version2)', () => { it('should return true', () => { - expect(aws.isGreaterThan('v1.11.7-eksbuild.1', 'v1.11.7-eksbuild.0')).toBeTrue(); - expect(aws.isGreaterThan('v1.20.7-eksbuild.2', 'v1.20.7-eksbuild.1')).toBeTrue(); + expect( + aws.isGreaterThan('v1.11.7-eksbuild.1', 'v1.11.7-eksbuild.0'), + ).toBeTrue(); + expect( + aws.isGreaterThan('v1.20.7-eksbuild.2', 'v1.20.7-eksbuild.1'), + ).toBeTrue(); + expect( + aws.isGreaterThan('v1.22.7-eksbuild.2', 'v1.20.7-eksbuild.1'), + ).toBeTrue(); }); it('should return false', () => { - expect(aws.isGreaterThan('v1.20.7-eksbuild.1', 'v1.20.7-eksbuild.2')).toBeFalsy(); - expect(aws.isGreaterThan('v1.20.7-eksbuild.1', 'v2.0.0-eksbuild.1')).toBeFalsy(); + expect( + aws.isGreaterThan('v1.20.7-eksbuild.1', 'v1.20.7-eksbuild.2'), + ).toBeFalsy(); + expect( + aws.isGreaterThan('v1.20.7-eksbuild.1', 'v2.0.0-eksbuild.1'), + ).toBeFalsy(); }); }); + + it('getSatisfyingVersion', () => { + expect( + aws.getSatisfyingVersion(['v1.20.7-eksbuild.1'], 'v1.20.7-eksbuild.1'), + ).toBe('v1.20.7-eksbuild.1'); + expect( + aws.getSatisfyingVersion( + ['v1.20.7-eksbuild.1', 'v1.20.7-eksbuild.2', 'v1.20.7-eksbuild.7'], + 'v1.20.7-eksbuild.3', + ), + ).toBeNull(); + expect( + aws.getSatisfyingVersion( + ['v1.20.7-eksbuild.1', 'v1.20.7-eksbuild.2'], + 'v1.20.7-eksbuild.3', + ), + ).toBeNull(); + }); }); diff --git a/lib/modules/versioning/aws-eks-addon/index.ts b/lib/modules/versioning/aws-eks-addon/index.ts index 23ed620ad22f3e..6db52c86b5758b 100644 --- a/lib/modules/versioning/aws-eks-addon/index.ts +++ b/lib/modules/versioning/aws-eks-addon/index.ts @@ -11,64 +11,50 @@ export const urls = []; export const supportsRanges = false; -const versionPattern = regEx('^[vV]?(\\d+(?:\\.\\d+)*)(?-eksbuild\\.\\d+)?$'); +const versionPattern = regEx( + '^[vV]?(\\d+(?:\\.\\d+)*)(?-eksbuild\\.\\d+)?$', +); class AwsEKSAddonVersioningApi extends GenericVersioningApi { - protected _parse(version: string): GenericVersion | null { if (!version) { return null; } - const matches : RegExpExecArray | null = versionPattern.exec(version); + const matches: RegExpExecArray | null = versionPattern.exec(version); if (!matches) { return null; } const [, prefix, suffix] = matches; - const release : number[] = prefix.split('.').map(Number); - if (release.length !== 3) { + const release: number[] = prefix.split('.').map(Number); + if (release.length !== 3) { return null; } if (!suffix) { - return null + return null; } return { release, suffix: suffix || '' }; } protected override _compare(version: string, other: string): number { - const parsed1 : GenericVersion | null = this._parse(version); - const parsed2 : GenericVersion | null = this._parse(other); - // istanbul ignore if - if (!(parsed1 && parsed2)) { - return 1; - } - const length = Math.max(parsed1.release.length, parsed2.release.length); - for (let i = 0; i < length; i += 1) { - const part1 = parsed1.release[i]; - const part2 = parsed2.release[i]; - if (part1 === undefined) { - return 1; - } - if (part2 === undefined) { - return -1; - } - if (part1 !== part2) { - return part1 - part2; - } - } - const suffix1 = coerceString(parsed1.suffix); - const suffix2 = coerceString(parsed2.suffix); - return suffix1.localeCompare(suffix2); + const compare: number = super._compare(version, other); + if (compare !== 0) { + return compare; } + const parsed1: GenericVersion | null = this._parse(version); + const parsed2: GenericVersion | null = this._parse(other); + // istanbul ignore if + if (!(parsed1 && parsed2)) { + return 1; + } + const suffix1 = coerceString(parsed1.suffix); + const suffix2 = coerceString(parsed2.suffix); + return suffix1.localeCompare(suffix2); + } override isCompatible(version: string, current: string): boolean { - const parsed1 : GenericVersion | null = this._parse(version); - const parsed2 : GenericVersion | null = this._parse(current); - return !!( - parsed1 && - parsed2 && - parsed1.suffix === parsed2.suffix && - parsed1.release.length === parsed2.release.length - ); + const parsed1: GenericVersion | null = this._parse(version); + const parsed2: GenericVersion | null = this._parse(current); + return !!(parsed1 && parsed2); } } From d551b46cd6017c21bb6d2b45fd52976a1351d928 Mon Sep 17 00:00:00 2001 From: ivan katliarchuk Date: Thu, 26 Dec 2024 16:26:08 +0000 Subject: [PATCH 10/18] feat(23410): fix all tests Signed-off-by: ivan katliarchuk --- lib/modules/datasource/aws-eks-addon/readme.md | 4 ++-- lib/modules/versioning/aws-eks-addon/readme.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/modules/datasource/aws-eks-addon/readme.md b/lib/modules/datasource/aws-eks-addon/readme.md index 665c48035a36c1..c8e89002d560ef 100644 --- a/lib/modules/datasource/aws-eks-addon/readme.md +++ b/lib/modules/datasource/aws-eks-addon/readme.md @@ -1,4 +1,4 @@ -This datasource returns the addon versions available for use on [AWS EKS](https://aws.amazon.com/eks/) via the AWS API. +This `datasource` returns the addon versions available for use on [AWS EKS](https://aws.amazon.com/eks/) via the AWS API. **AWS API configuration** @@ -65,7 +65,7 @@ renovate: eksAddonsFilter={"kubernetesVersion":"1.30","addonName":"vpc-cni","reg Here's an example of using the custom manager to configure this datasource: -```json +```js { "packageRules": [ { diff --git a/lib/modules/versioning/aws-eks-addon/readme.md b/lib/modules/versioning/aws-eks-addon/readme.md index 3fa0b2dad07640..4ba14ab865c131 100644 --- a/lib/modules/versioning/aws-eks-addon/readme.md +++ b/lib/modules/versioning/aws-eks-addon/readme.md @@ -2,7 +2,7 @@ Renovate's AWS EKS Addon versioning to support on EKS Addon updates. At the moment every ESK Addon that matches the regex `^[vV]?(\d+(?:\.\d+)*)(-eksbuild\.\d+)?$` is considered a valid "release". -## Key Points about EKS Addon Versioning: +**Key Points about EKS Addon Versioning** 1. Versioning Scheme: Add-ons typically follow a semantic versioning scheme (e.g., Major.Minor.Patch). This helps in understanding the significance of changes between versions: From 8c7a10bc7003fc87f339f3443ffad3e5fa6039c2 Mon Sep 17 00:00:00 2001 From: ivan katliarchuk Date: Thu, 26 Dec 2024 16:44:01 +0000 Subject: [PATCH 11/18] feat(23410): update package.json deps and loc Signed-off-by: ivan katliarchuk --- package.json | 18 ++--- pnpm-lock.yaml | 194 ++++++++++++++++++++++++------------------------- 2 files changed, 106 insertions(+), 106 deletions(-) diff --git a/package.json b/package.json index 21274e080b6c74..28c51bd417c416 100644 --- a/package.json +++ b/package.json @@ -66,8 +66,8 @@ }, "keywords": [ "automated", - "azure", "aws", + "azure", "bazel", "bitbucket", "buildkite", @@ -154,14 +154,14 @@ "@breejs/later": "4.2.0", "@cdktf/hcl2json": "0.20.10", "@opentelemetry/api": "1.9.0", - "@opentelemetry/context-async-hooks": "1.29.0", - "@opentelemetry/exporter-trace-otlp-http": "0.56.0", - "@opentelemetry/instrumentation": "0.56.0", - "@opentelemetry/instrumentation-bunyan": "0.44.0", - "@opentelemetry/instrumentation-http": "0.56.0", - "@opentelemetry/resources": "1.29.0", - "@opentelemetry/sdk-trace-base": "1.29.0", - "@opentelemetry/sdk-trace-node": "1.29.0", + "@opentelemetry/context-async-hooks": "1.30.0", + "@opentelemetry/exporter-trace-otlp-http": "0.57.0", + "@opentelemetry/instrumentation": "0.57.0", + "@opentelemetry/instrumentation-bunyan": "0.45.0", + "@opentelemetry/instrumentation-http": "0.57.0", + "@opentelemetry/resources": "1.30.0", + "@opentelemetry/sdk-trace-base": "1.30.0", + "@opentelemetry/sdk-trace-node": "1.30.0", "@opentelemetry/semantic-conventions": "1.28.0", "@qnighy/marshal": "0.1.3", "@renovatebot/detect-tools": "1.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 23e574a3a9c1ad..21710f574bacd9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -42,29 +42,29 @@ importers: specifier: 1.9.0 version: 1.9.0 '@opentelemetry/context-async-hooks': - specifier: 1.29.0 - version: 1.29.0(@opentelemetry/api@1.9.0) + specifier: 1.30.0 + version: 1.30.0(@opentelemetry/api@1.9.0) '@opentelemetry/exporter-trace-otlp-http': - specifier: 0.56.0 - version: 0.56.0(@opentelemetry/api@1.9.0) + specifier: 0.57.0 + version: 0.57.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': - specifier: 0.56.0 - version: 0.56.0(@opentelemetry/api@1.9.0) + specifier: 0.57.0 + version: 0.57.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-bunyan': - specifier: 0.44.0 - version: 0.44.0(@opentelemetry/api@1.9.0) + specifier: 0.45.0 + version: 0.45.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-http': - specifier: 0.56.0 - version: 0.56.0(@opentelemetry/api@1.9.0) + specifier: 0.57.0 + version: 0.57.0(@opentelemetry/api@1.9.0) '@opentelemetry/resources': - specifier: 1.29.0 - version: 1.29.0(@opentelemetry/api@1.9.0) + specifier: 1.30.0 + version: 1.30.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': - specifier: 1.29.0 - version: 1.29.0(@opentelemetry/api@1.9.0) + specifier: 1.30.0 + version: 1.30.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-node': - specifier: 1.29.0 - version: 1.29.0(@opentelemetry/api@1.9.0) + specifier: 1.30.0 + version: 1.30.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': specifier: 1.28.0 version: 1.28.0 @@ -1332,100 +1332,100 @@ packages: typescript: optional: true - '@opentelemetry/api-logs@0.56.0': - resolution: {integrity: sha512-Wr39+94UNNG3Ei9nv3pHd4AJ63gq5nSemMRpCd8fPwDL9rN3vK26lzxfH27mw16XzOSO+TpyQwBAMaLxaPWG0g==} + '@opentelemetry/api-logs@0.57.0': + resolution: {integrity: sha512-l1aJ30CXeauVYaI+btiynHpw341LthkMTv3omi1VJDX14werY2Wmv9n1yudMsq9HuY0m8PvXEVX4d8zxEb+WRg==} engines: {node: '>=14'} '@opentelemetry/api@1.9.0': resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} - '@opentelemetry/context-async-hooks@1.29.0': - resolution: {integrity: sha512-TKT91jcFXgHyIDF1lgJF3BHGIakn6x0Xp7Tq3zoS3TMPzT9IlP0xEavWP8C1zGjU9UmZP2VR1tJhW9Az1A3w8Q==} + '@opentelemetry/context-async-hooks@1.30.0': + resolution: {integrity: sha512-roCetrG/cz0r/gugQm/jFo75UxblVvHaNSRoR0kSSRSzXFAiIBqFCZuH458BHBNRtRe+0yJdIJ21L9t94bw7+g==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/core@1.29.0': - resolution: {integrity: sha512-gmT7vAreXl0DTHD2rVZcw3+l2g84+5XiHIqdBUxXbExymPCvSsGOpiwMmn8nkiJur28STV31wnhIDrzWDPzjfA==} + '@opentelemetry/core@1.30.0': + resolution: {integrity: sha512-Q/3u/K73KUjTCnFUP97ZY+pBjQ1kPEgjOfXj/bJl8zW7GbXdkw6cwuyZk6ZTXkVgCBsYRYUzx4fvYK1jxdb9MA==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/exporter-trace-otlp-http@0.56.0': - resolution: {integrity: sha512-vqVuJvcwameA0r0cNrRzrZqPLB0otS+95g0XkZdiKOXUo81wYdY6r4kyrwz4nSChqTBEFm0lqi/H2OWGboOa6g==} + '@opentelemetry/exporter-trace-otlp-http@0.57.0': + resolution: {integrity: sha512-BJl35PSkwoMlGEOrzjCG1ih6zqZoAZJIR4xyqSKC2BqPtwuRjID0vWBaEdP9xrxxJTEIEQw+gEY/0pUgicX0ew==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-bunyan@0.44.0': - resolution: {integrity: sha512-9JHcfUPejOx5ULuxrH5K5qOZ9GJSTisuMSZZFVkDigZJ42pMn26Zgmb1HhuiZXd/ZcFgOeLZcwQNpBmF1whftg==} + '@opentelemetry/instrumentation-bunyan@0.45.0': + resolution: {integrity: sha512-K3ZleoOxKUzGjt0TfAT1jfSNcgyt7+toqjhWymPf2tsGUETXxaxGDzAoNepWcfIkgPauJLPpRLLKcP6LjYLILw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-http@0.56.0': - resolution: {integrity: sha512-/bWHBUAq8VoATnH9iLk5w8CE9+gj+RgYSUphe7hry472n6fYl7+4PvuScoQMdmSUTprKq/gyr2kOWL6zrC7FkQ==} + '@opentelemetry/instrumentation-http@0.57.0': + resolution: {integrity: sha512-GJD6e/YSSZUI/xZokK9L+ghMAyFrtGV+8HHXCnV8tDYCo66biLpmC9BUTg6fBnv26QsosYvFTYbdo6Sfn6TxCw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation@0.56.0': - resolution: {integrity: sha512-2KkGBKE+FPXU1F0zKww+stnlUxUTlBvLCiWdP63Z9sqXYeNI/ziNzsxAp4LAdUcTQmXjw1IWgvm5CAb/BHy99w==} + '@opentelemetry/instrumentation@0.57.0': + resolution: {integrity: sha512-qIKp+tSCLqofneUWRc5XHtr9jHIq0N0BJfaJamM9gjEFO8sthV4SDXDGNOSAx16PxkbrQJ5/AxMPAGCXl8W/Hg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/otlp-exporter-base@0.56.0': - resolution: {integrity: sha512-eURvv0fcmBE+KE1McUeRo+u0n18ZnUeSc7lDlW/dzlqFYasEbsztTK4v0Qf8C4vEY+aMTjPKUxBG0NX2Te3Pmw==} + '@opentelemetry/otlp-exporter-base@0.57.0': + resolution: {integrity: sha512-QQl4Ngm3D6H8SDO0EM642ncTxjRsf/HDq7+IWIA0eaEK/NTsJeQ3iYJiZj3F4jkALnvyeM1kkwd+DHtqxTBx9Q==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/otlp-transformer@0.56.0': - resolution: {integrity: sha512-kVkH/W2W7EpgWWpyU5VnnjIdSD7Y7FljQYObAQSKdRcejiwMj2glypZtUdfq1LTJcv4ht0jyTrw1D3CCxssNtQ==} + '@opentelemetry/otlp-transformer@0.57.0': + resolution: {integrity: sha512-yHX7sdwkdAmSa6Jbi3caSLDWy0PCHS1pKQeKz8AIWSyQqL7IojHKgdk9A+7eRd98Z1n9YTdwWSWLnObvIqhEhQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/propagator-b3@1.29.0': - resolution: {integrity: sha512-ktsNDlqhu+/IPGEJRMj81upg2JupUp+SwW3n1ZVZTnrDiYUiMUW41vhaziA7Q6UDhbZvZ58skDpQhe2ZgNIPvg==} + '@opentelemetry/propagator-b3@1.30.0': + resolution: {integrity: sha512-lcobQQmd+hLdtxJJKu/i51lNXmF1PJJ7Y9B97ciHRVQuMI260vSZG7Uf4Zg0fqR8PB+fT/7rnlDwS0M7QldZQQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/propagator-jaeger@1.29.0': - resolution: {integrity: sha512-EXIEYmFgybnFMijVgqx1mq/diWwSQcd0JWVksytAVQEnAiaDvP45WuncEVQkFIAC0gVxa2+Xr8wL5pF5jCVKbg==} + '@opentelemetry/propagator-jaeger@1.30.0': + resolution: {integrity: sha512-0hdP495V6HPRkVpowt54+Swn5NdesMIRof+rlp0mbnuIUOM986uF+eNxnPo9q5MmJegVBRTxgMHXXwvnXRnKRg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/resources@1.29.0': - resolution: {integrity: sha512-s7mLXuHZE7RQr1wwweGcaRp3Q4UJJ0wazeGlc/N5/XSe6UyXfsh1UQGMADYeg7YwD+cEdMtU1yJAUXdnFzYzyQ==} + '@opentelemetry/resources@1.30.0': + resolution: {integrity: sha512-5mGMjL0Uld/99t7/pcd7CuVtJbkARckLVuiOX84nO8RtLtIz0/J6EOHM2TGvPZ6F4K+XjUq13gMx14w80SVCQg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/sdk-logs@0.56.0': - resolution: {integrity: sha512-OS0WPBJF++R/cSl+terUjQH5PebloidB1Jbbecgg2rnCmQbTST9xsRes23bLfDQVRvmegmHqDh884h0aRdJyLw==} + '@opentelemetry/sdk-logs@0.57.0': + resolution: {integrity: sha512-6Kbxdu/QE9LWH7+WSLmYo3DjAq+c55TiCLXiXu6b/2m2muy5SyOG2m0MrGqetyRpfYSSbIqHmJoqNVTN3+2a9g==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.4.0 <1.10.0' - '@opentelemetry/sdk-metrics@1.29.0': - resolution: {integrity: sha512-MkVtuzDjXZaUJSuJlHn6BSXjcQlMvHcsDV7LjY4P6AJeffMa4+kIGDjzsCf6DkAh6Vqlwag5EWEam3KZOX5Drw==} + '@opentelemetry/sdk-metrics@1.30.0': + resolution: {integrity: sha512-5kcj6APyRMvv6dEIP5plz2qfJAD4OMipBRT11u/pa1a68rHKI2Ln+iXVkAGKgx8o7CXbD7FdPypTUY88ZQgP4Q==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/sdk-trace-base@1.29.0': - resolution: {integrity: sha512-hEOpAYLKXF3wGJpXOtWsxEtqBgde0SCv+w+jvr3/UusR4ll3QrENEGnSl1WDCyRrpqOQ5NCNOvZch9UFVa7MnQ==} + '@opentelemetry/sdk-trace-base@1.30.0': + resolution: {integrity: sha512-RKQDaDIkV7PwizmHw+rE/FgfB2a6MBx+AEVVlAHXRG1YYxLiBpPX2KhmoB99R5vA4b72iJrjle68NDWnbrE9Dg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/sdk-trace-node@1.29.0': - resolution: {integrity: sha512-ZpGYt+VnMu6O0SRKzhuIivr7qJm3GpWnTCMuJspu4kt3QWIpIenwixo5Vvjuu3R4h2Onl/8dtqAiPIs92xd5ww==} + '@opentelemetry/sdk-trace-node@1.30.0': + resolution: {integrity: sha512-MeXkXEdBs9xq1JSGTr/3P1lHBSUBaVmo1+UpoQhUpviPMzDXy0MNsdTC7KKI6/YcG74lTX6eqeNjlC1jV4Rstw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' @@ -7780,54 +7780,54 @@ snapshots: optionalDependencies: typescript: 5.7.2 - '@opentelemetry/api-logs@0.56.0': + '@opentelemetry/api-logs@0.57.0': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/api@1.9.0': {} - '@opentelemetry/context-async-hooks@1.29.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/context-async-hooks@1.30.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core@1.29.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/exporter-trace-otlp-http@0.56.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-trace-otlp-http@0.57.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.56.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.56.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 1.29.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.30.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-bunyan@0.44.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-bunyan@0.45.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.56.0 - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api-logs': 0.57.0 + '@opentelemetry/instrumentation': 0.57.0(@opentelemetry/api@1.9.0) '@types/bunyan': 1.8.9 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-http@0.56.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-http@0.57.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.56.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.28.0 forwarded-parse: 2.1.2 semver: 7.6.3 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation@0.57.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.56.0 + '@opentelemetry/api-logs': 0.57.0 '@types/shimmer': 1.2.0 import-in-the-middle: 1.12.0 require-in-the-middle: 7.4.0 @@ -7836,67 +7836,67 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/otlp-exporter-base@0.56.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/otlp-exporter-base@0.57.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.56.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.57.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer@0.56.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/otlp-transformer@0.57.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.56.0 - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.56.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 1.29.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api-logs': 0.57.0 + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.30.0(@opentelemetry/api@1.9.0) protobufjs: 7.4.0 - '@opentelemetry/propagator-b3@1.29.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/propagator-b3@1.30.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) - '@opentelemetry/propagator-jaeger@1.29.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/propagator-jaeger@1.30.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources@1.29.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/resources@1.30.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/sdk-logs@0.56.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-logs@0.57.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.56.0 - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 1.29.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api-logs': 0.57.0 + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics@1.29.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-metrics@1.30.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 1.29.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 1.29.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/sdk-trace-node@1.29.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-trace-node@1.30.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/context-async-hooks': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/propagator-b3': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/propagator-jaeger': 1.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 1.29.0(@opentelemetry/api@1.9.0) + '@opentelemetry/context-async-hooks': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-b3': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-jaeger': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.30.0(@opentelemetry/api@1.9.0) semver: 7.6.3 '@opentelemetry/semantic-conventions@1.28.0': {} From 2c5724af8a56f12796899d72f0dc97e33e0c5034 Mon Sep 17 00:00:00 2001 From: ivan katliarchuk Date: Thu, 26 Dec 2024 17:19:50 +0000 Subject: [PATCH 12/18] feat(23410): increase code coverage Signed-off-by: ivan katliarchuk --- lib/modules/datasource/aws-eks-addon/schema.spec.ts | 1 + lib/modules/datasource/aws-machine-image/index.ts | 2 +- lib/modules/versioning/aws-eks-addon/index.spec.ts | 7 +++++++ lib/modules/versioning/aws-eks-addon/index.ts | 9 +++------ 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/lib/modules/datasource/aws-eks-addon/schema.spec.ts b/lib/modules/datasource/aws-eks-addon/schema.spec.ts index 58d05518640223..f8f0c5a435b634 100644 --- a/lib/modules/datasource/aws-eks-addon/schema.spec.ts +++ b/lib/modules/datasource/aws-eks-addon/schema.spec.ts @@ -9,6 +9,7 @@ describe('modules/datasource/aws-eks-addon/schema', () => { ${{ addonName: 'kube_proxy', default: 'abrakadabra' }} | ${false} ${{ kubernetesVersion: '1.30' }} | ${false} ${{ addonName: 'kube-proxy', default: 'false' }} | ${true} + ${{ addonName: 'kube-proxy', default: 'true' }} | ${true} ${{ addonName: 'kube-proxy', default: false }} | ${true} ${{ kubernetesVersion: '1.30', addonName: 'vpc-cni' }} | ${true} ${{ addonName: 'vpc-cni' }} | ${true} diff --git a/lib/modules/datasource/aws-machine-image/index.ts b/lib/modules/datasource/aws-machine-image/index.ts index 515ffb988b2d49..f069ef5a52777e 100644 --- a/lib/modules/datasource/aws-machine-image/index.ts +++ b/lib/modules/datasource/aws-machine-image/index.ts @@ -26,7 +26,7 @@ export class AwsMachineImageDatasource extends Datasource { Image: '```{{{newDigest}}}```', }, digest: { - // Because newDigestShort will always be 'amazon-' we override to print the name of the AMI + // Because newDigestShort will allways be 'amazon-' we override to print the name of the AMI commitMessageExtra: 'to {{{newDigest}}}', prBodyColumns: ['Image'], prBodyDefinitions: { diff --git a/lib/modules/versioning/aws-eks-addon/index.spec.ts b/lib/modules/versioning/aws-eks-addon/index.spec.ts index 1a4fe0800cfd52..fcbac697dbc6bf 100644 --- a/lib/modules/versioning/aws-eks-addon/index.spec.ts +++ b/lib/modules/versioning/aws-eks-addon/index.spec.ts @@ -32,6 +32,7 @@ describe('modules/versioning/aws-eks-addon/index', () => { describe('isCompatible(version)', () => { it('should return false', () => { expect(aws.isCompatible('v1.11.7')).toBeFalsy(); + expect(aws.isCompatible('v1.11')).toBeFalsy(); expect(aws.isCompatible('v1.11.7-noneksbuild')).toBeFalsy(); expect(aws.isCompatible('v1.11.7-noneksbuild.1')).toBeFalsy(); expect(aws.isCompatible('v1.11.7-eksbuild')).toBeFalsy(); @@ -63,6 +64,12 @@ describe('modules/versioning/aws-eks-addon/index', () => { expect( aws.isGreaterThan('v1.22.7-eksbuild.2', 'v1.20.7-eksbuild.1'), ).toBeTrue(); + expect( + aws.isGreaterThan('v1.22.7-eksbuild.2', 'v1.22.7'), + ).toBeTrue(); + expect( + aws.isGreaterThan('v1.20.7-eksbuild.1', 'v2.0.0'), + ).toBeTrue(); }); it('should return false', () => { diff --git a/lib/modules/versioning/aws-eks-addon/index.ts b/lib/modules/versioning/aws-eks-addon/index.ts index 6db52c86b5758b..ee0cfd0e2885c6 100644 --- a/lib/modules/versioning/aws-eks-addon/index.ts +++ b/lib/modules/versioning/aws-eks-addon/index.ts @@ -42,12 +42,9 @@ class AwsEKSAddonVersioningApi extends GenericVersioningApi { } const parsed1: GenericVersion | null = this._parse(version); const parsed2: GenericVersion | null = this._parse(other); - // istanbul ignore if - if (!(parsed1 && parsed2)) { - return 1; - } - const suffix1 = coerceString(parsed1.suffix); - const suffix2 = coerceString(parsed2.suffix); + + const suffix1 = coerceString(parsed1?.suffix); + const suffix2 = coerceString(parsed2?.suffix); return suffix1.localeCompare(suffix2); } From e9a902263b4976faa5fcfdd8ba0bca5273fa309a Mon Sep 17 00:00:00 2001 From: ivan katliarchuk Date: Thu, 26 Dec 2024 17:25:54 +0000 Subject: [PATCH 13/18] feat(23410): prettier fix Signed-off-by: ivan katliarchuk --- lib/modules/versioning/aws-eks-addon/index.spec.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/lib/modules/versioning/aws-eks-addon/index.spec.ts b/lib/modules/versioning/aws-eks-addon/index.spec.ts index fcbac697dbc6bf..04fb51b2c9b67f 100644 --- a/lib/modules/versioning/aws-eks-addon/index.spec.ts +++ b/lib/modules/versioning/aws-eks-addon/index.spec.ts @@ -64,12 +64,8 @@ describe('modules/versioning/aws-eks-addon/index', () => { expect( aws.isGreaterThan('v1.22.7-eksbuild.2', 'v1.20.7-eksbuild.1'), ).toBeTrue(); - expect( - aws.isGreaterThan('v1.22.7-eksbuild.2', 'v1.22.7'), - ).toBeTrue(); - expect( - aws.isGreaterThan('v1.20.7-eksbuild.1', 'v2.0.0'), - ).toBeTrue(); + expect(aws.isGreaterThan('v1.22.7-eksbuild.2', 'v1.22.7')).toBeTrue(); + expect(aws.isGreaterThan('v1.20.7-eksbuild.1', 'v2.0.0')).toBeTrue(); }); it('should return false', () => { From 339b63f3de27e6171b980541fc50430523fdadcf Mon Sep 17 00:00:00 2001 From: ivan katliarchuk Date: Thu, 26 Dec 2024 17:43:31 +0000 Subject: [PATCH 14/18] feat(23410): prettier fix Signed-off-by: ivan katliarchuk --- .../versioning/aws-eks-addon/index.spec.ts | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/modules/versioning/aws-eks-addon/index.spec.ts b/lib/modules/versioning/aws-eks-addon/index.spec.ts index 04fb51b2c9b67f..ed62965394b90f 100644 --- a/lib/modules/versioning/aws-eks-addon/index.spec.ts +++ b/lib/modules/versioning/aws-eks-addon/index.spec.ts @@ -30,12 +30,18 @@ describe('modules/versioning/aws-eks-addon/index', () => { }); describe('isCompatible(version)', () => { - it('should return false', () => { - expect(aws.isCompatible('v1.11.7')).toBeFalsy(); - expect(aws.isCompatible('v1.11')).toBeFalsy(); - expect(aws.isCompatible('v1.11.7-noneksbuild')).toBeFalsy(); - expect(aws.isCompatible('v1.11.7-noneksbuild.1')).toBeFalsy(); - expect(aws.isCompatible('v1.11.7-eksbuild')).toBeFalsy(); + it.each` + input | expected + ${''} | ${false} + ${'abrakadabra'} | ${false} + ${'v1.11.7'} | ${false} + ${'v1.11.7.6'} | ${false} + ${'v1.11.7-noneksbuild'} | ${false} + ${'v1.11.7-noneksbuild.1'} | ${false} + ${'v1.11.7-eksbuild'} | ${false} + `('isCompatible("$input") === $expected', ({ input, expected }) => { + const actual = aws.isCompatible(input); + expect(actual).toBe(expected); }); }); From 23c386b0e91695826b90130feaed6297447a0377 Mon Sep 17 00:00:00 2001 From: ivan katliarchuk Date: Thu, 26 Dec 2024 18:33:13 +0000 Subject: [PATCH 15/18] feat(23410): prettier fix Signed-off-by: ivan katliarchuk --- .../datasource/aws-eks-addon/index.spec.ts | 18 +++++++++++++++ .../datasource/aws-eks-addon/schema.spec.ts | 22 ++++++++++--------- lib/modules/versioning/aws-eks-addon/index.ts | 8 +++---- 3 files changed, 34 insertions(+), 14 deletions(-) diff --git a/lib/modules/datasource/aws-eks-addon/index.spec.ts b/lib/modules/datasource/aws-eks-addon/index.spec.ts index 2f99b57e4ad74b..0b5ec16e7c8cab 100644 --- a/lib/modules/datasource/aws-eks-addon/index.spec.ts +++ b/lib/modules/datasource/aws-eks-addon/index.spec.ts @@ -151,6 +151,24 @@ describe('modules/datasource/aws-eks-addon/index', () => { }); }); + it('with addon and profile', async () => { + mockDescribeAddonVersionsCommand({ addons: [] }); + await getPkgReleases({ + datasource, + packageName: '{"addonName":"vpc-cni-not-exist", "profile":"paradox"}', + }); + expect(eksMock.calls()).toHaveLength(1); + }); + + it('with addon and region', async () => { + mockDescribeAddonVersionsCommand({ addons: [] }); + await getPkgReleases({ + datasource, + packageName: '{"addonName":"vpc-cni-not-exist", "region":"usa"}', + }); + expect(eksMock.calls()).toHaveLength(1); + }); + it('with addonName and default only config', async () => { mockDescribeAddonVersionsCommand({ addons: [addonInfo] }); const res = await getPkgReleases({ diff --git a/lib/modules/datasource/aws-eks-addon/schema.spec.ts b/lib/modules/datasource/aws-eks-addon/schema.spec.ts index f8f0c5a435b634..dc0358d4cf00eb 100644 --- a/lib/modules/datasource/aws-eks-addon/schema.spec.ts +++ b/lib/modules/datasource/aws-eks-addon/schema.spec.ts @@ -3,16 +3,18 @@ import { EksAddonsFilter } from './schema'; describe('modules/datasource/aws-eks-addon/schema', () => { describe('EksAddonsFilter', () => { it.each` - input | expected - ${{ kubernetesVersion: '1.30', addonName: 'kube_proxy' }} | ${false} - ${{ kubernetesVersion: '130', addonName: 'kube_proxy' }} | ${false} - ${{ addonName: 'kube_proxy', default: 'abrakadabra' }} | ${false} - ${{ kubernetesVersion: '1.30' }} | ${false} - ${{ addonName: 'kube-proxy', default: 'false' }} | ${true} - ${{ addonName: 'kube-proxy', default: 'true' }} | ${true} - ${{ addonName: 'kube-proxy', default: false }} | ${true} - ${{ kubernetesVersion: '1.30', addonName: 'vpc-cni' }} | ${true} - ${{ addonName: 'vpc-cni' }} | ${true} + input | expected + ${{ kubernetesVersion: '1.30', addonName: 'kube_proxy' }} | ${false} + ${{ kubernetesVersion: '130', addonName: 'kube_proxy' }} | ${false} + ${{ addonName: 'kube_proxy', default: 'abrakadabra' }} | ${false} + ${{ kubernetesVersion: '1.30' }} | ${false} + ${{ addonName: 'kube-proxy', default: 'false' }} | ${true} + ${{ addonName: 'kube-proxy', default: 'true' }} | ${true} + ${{ addonName: 'kube-proxy', default: false }} | ${true} + ${{ addonName: 'aws-cloudwatch-controller', default: false }} | ${true} + ${{ addonName: 'aws-cloudwatch-controller', profile: 'abc' }} | ${true} + ${{ kubernetesVersion: '1.30', addonName: 'vpc-cni' }} | ${true} + ${{ addonName: 'vpc-cni' }} | ${true} `('safeParse("$input") === $expected', ({ input, expected }) => { const actual = EksAddonsFilter.safeParse(JSON.stringify(input)); expect(actual.success).toBe(expected); diff --git a/lib/modules/versioning/aws-eks-addon/index.ts b/lib/modules/versioning/aws-eks-addon/index.ts index ee0cfd0e2885c6..07af5ade526e28 100644 --- a/lib/modules/versioning/aws-eks-addon/index.ts +++ b/lib/modules/versioning/aws-eks-addon/index.ts @@ -25,14 +25,14 @@ class AwsEKSAddonVersioningApi extends GenericVersioningApi { return null; } const [, prefix, suffix] = matches; - const release: number[] = prefix.split('.').map(Number); - if (release.length !== 3) { + if (!suffix) { return null; } - if (!suffix) { + const release: number[] = prefix.split('.').map(Number); + if (release.length !== 3) { return null; } - return { release, suffix: suffix || '' }; + return { release, suffix }; } protected override _compare(version: string, other: string): number { From 6824963b09347171f354effa2d3455eb1ec6213a Mon Sep 17 00:00:00 2001 From: ivan katliarchuk Date: Thu, 26 Dec 2024 18:42:28 +0000 Subject: [PATCH 16/18] feat(23410): cover all lines for aws-eks-addon versioning Signed-off-by: ivan katliarchuk --- lib/modules/versioning/aws-eks-addon/index.spec.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/modules/versioning/aws-eks-addon/index.spec.ts b/lib/modules/versioning/aws-eks-addon/index.spec.ts index ed62965394b90f..ab22cafcfc6dd0 100644 --- a/lib/modules/versioning/aws-eks-addon/index.spec.ts +++ b/lib/modules/versioning/aws-eks-addon/index.spec.ts @@ -39,6 +39,7 @@ describe('modules/versioning/aws-eks-addon/index', () => { ${'v1.11.7-noneksbuild'} | ${false} ${'v1.11.7-noneksbuild.1'} | ${false} ${'v1.11.7-eksbuild'} | ${false} + ${'v1.11.7.3-eksbuild.1'} | ${false} `('isCompatible("$input") === $expected', ({ input, expected }) => { const actual = aws.isCompatible(input); expect(actual).toBe(expected); From 36f1ac6367805a28b3efe0bb961df871e259aebd Mon Sep 17 00:00:00 2001 From: ivan katliarchuk Date: Fri, 27 Dec 2024 12:35:58 +0000 Subject: [PATCH 17/18] feat(datasource): split versioning Signed-off-by: ivan katliarchuk --- lib/modules/datasource/aws-eks-addon/index.ts | 4 +- lib/modules/versioning/api.ts | 1 - .../versioning/aws-eks-addon/index.spec.ts | 105 ------------------ lib/modules/versioning/aws-eks-addon/index.ts | 60 ---------- .../versioning/aws-eks-addon/readme.md | 16 --- 5 files changed, 2 insertions(+), 184 deletions(-) delete mode 100644 lib/modules/versioning/aws-eks-addon/index.spec.ts delete mode 100644 lib/modules/versioning/aws-eks-addon/index.ts delete mode 100644 lib/modules/versioning/aws-eks-addon/readme.md diff --git a/lib/modules/datasource/aws-eks-addon/index.ts b/lib/modules/datasource/aws-eks-addon/index.ts index cddd16379ae27f..14a7c781db8a09 100644 --- a/lib/modules/datasource/aws-eks-addon/index.ts +++ b/lib/modules/datasource/aws-eks-addon/index.ts @@ -10,7 +10,7 @@ import { import { fromNodeProviderChain } from '@aws-sdk/credential-providers'; import { logger } from '../../../logger'; import { cache } from '../../../util/cache/package/decorator'; -import * as awsEksAddonVersioning from '../../versioning/aws-eks-addon'; +// import * as awsEksAddonVersioning from '../../versioning/aws-eks-addon'; import { Datasource } from '../datasource'; import type { GetReleasesConfig, ReleaseResult } from '../types'; import { EksAddonsFilter } from './schema'; @@ -18,7 +18,7 @@ import { EksAddonsFilter } from './schema'; export class AwsEKSAddonDataSource extends Datasource { static readonly id = 'aws-eks-addon'; - override readonly defaultVersioning = awsEksAddonVersioning.id; + // override readonly defaultVersioning = awsEksAddonVersioning.id; override readonly caching = true; private readonly clients: Record = {}; diff --git a/lib/modules/versioning/api.ts b/lib/modules/versioning/api.ts index 10bae3b202c4cb..7f0d26aed8cc61 100644 --- a/lib/modules/versioning/api.ts +++ b/lib/modules/versioning/api.ts @@ -1,4 +1,3 @@ -import * as awsEksAddon from './aws-eks-addon'; import * as amazonMachineImage from './aws-machine-image'; import * as azureRestApi from './azure-rest-api'; import * as bazelModule from './bazel-module'; diff --git a/lib/modules/versioning/aws-eks-addon/index.spec.ts b/lib/modules/versioning/aws-eks-addon/index.spec.ts deleted file mode 100644 index ab22cafcfc6dd0..00000000000000 --- a/lib/modules/versioning/aws-eks-addon/index.spec.ts +++ /dev/null @@ -1,105 +0,0 @@ -import aws from '.'; - -describe('modules/versioning/aws-eks-addon/index', () => { - describe('parse(version)', () => { - it('should return 1.23.7 and release version', () => { - expect(aws.getMajor('v1.20.7-eksbuild.1')).toBe(1); - expect(aws.getMinor('v1.23.7-eksbuild.1')).toBe(23); - expect(aws.getPatch('v1.20.7-eksbuild.1')).toBe(7); - }); - }); - - describe('isValid(version)', () => { - it('should return true', () => { - expect(aws.isValid('v1.11.7-eksbuild.23')).toBeTruthy(); - }); - - it('should return false', () => { - expect(aws.isValid('v1.11.7-noneksbuild.23')).toBeFalsy(); - }); - }); - - describe('isVersion(version)', () => { - it('should return true', () => { - expect(aws.isVersion('v1.11.7-eksbuild.1')).toBeTruthy(); - }); - - it('should return false', () => { - expect(aws.isVersion('v1.11.7')).toBeFalsy(); - }); - }); - - describe('isCompatible(version)', () => { - it.each` - input | expected - ${''} | ${false} - ${'abrakadabra'} | ${false} - ${'v1.11.7'} | ${false} - ${'v1.11.7.6'} | ${false} - ${'v1.11.7-noneksbuild'} | ${false} - ${'v1.11.7-noneksbuild.1'} | ${false} - ${'v1.11.7-eksbuild'} | ${false} - ${'v1.11.7.3-eksbuild.1'} | ${false} - `('isCompatible("$input") === $expected', ({ input, expected }) => { - const actual = aws.isCompatible(input); - expect(actual).toBe(expected); - }); - }); - - describe('isCompatible(version,range)', () => { - it('should return true', () => { - expect( - aws.isCompatible('v1.11.7-eksbuild.1', 'v1.2.7-eksbuild.1'), - ).toBeTruthy(); - }); - - it('should return false', () => { - expect( - aws.isCompatible('v1.11.7-eksbuild.1', 'v1.11.7-noneksbuild.1'), - ).toBeFalsy(); - }); - }); - - describe('isGreaterThan(version1, version2)', () => { - it('should return true', () => { - expect( - aws.isGreaterThan('v1.11.7-eksbuild.1', 'v1.11.7-eksbuild.0'), - ).toBeTrue(); - expect( - aws.isGreaterThan('v1.20.7-eksbuild.2', 'v1.20.7-eksbuild.1'), - ).toBeTrue(); - expect( - aws.isGreaterThan('v1.22.7-eksbuild.2', 'v1.20.7-eksbuild.1'), - ).toBeTrue(); - expect(aws.isGreaterThan('v1.22.7-eksbuild.2', 'v1.22.7')).toBeTrue(); - expect(aws.isGreaterThan('v1.20.7-eksbuild.1', 'v2.0.0')).toBeTrue(); - }); - - it('should return false', () => { - expect( - aws.isGreaterThan('v1.20.7-eksbuild.1', 'v1.20.7-eksbuild.2'), - ).toBeFalsy(); - expect( - aws.isGreaterThan('v1.20.7-eksbuild.1', 'v2.0.0-eksbuild.1'), - ).toBeFalsy(); - }); - }); - - it('getSatisfyingVersion', () => { - expect( - aws.getSatisfyingVersion(['v1.20.7-eksbuild.1'], 'v1.20.7-eksbuild.1'), - ).toBe('v1.20.7-eksbuild.1'); - expect( - aws.getSatisfyingVersion( - ['v1.20.7-eksbuild.1', 'v1.20.7-eksbuild.2', 'v1.20.7-eksbuild.7'], - 'v1.20.7-eksbuild.3', - ), - ).toBeNull(); - expect( - aws.getSatisfyingVersion( - ['v1.20.7-eksbuild.1', 'v1.20.7-eksbuild.2'], - 'v1.20.7-eksbuild.3', - ), - ).toBeNull(); - }); -}); diff --git a/lib/modules/versioning/aws-eks-addon/index.ts b/lib/modules/versioning/aws-eks-addon/index.ts deleted file mode 100644 index 07af5ade526e28..00000000000000 --- a/lib/modules/versioning/aws-eks-addon/index.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { regEx } from '../../../util/regex'; -import { coerceString } from '../../../util/string'; -import type { GenericVersion } from '../generic'; -import { GenericVersioningApi } from '../generic'; -import type { VersioningApi } from '../types'; - -export const id = 'aws-eks-addon'; -export const displayName = 'aws-eks-addon'; - -export const urls = []; - -export const supportsRanges = false; - -const versionPattern = regEx( - '^[vV]?(\\d+(?:\\.\\d+)*)(?-eksbuild\\.\\d+)?$', -); - -class AwsEKSAddonVersioningApi extends GenericVersioningApi { - protected _parse(version: string): GenericVersion | null { - if (!version) { - return null; - } - const matches: RegExpExecArray | null = versionPattern.exec(version); - if (!matches) { - return null; - } - const [, prefix, suffix] = matches; - if (!suffix) { - return null; - } - const release: number[] = prefix.split('.').map(Number); - if (release.length !== 3) { - return null; - } - return { release, suffix }; - } - - protected override _compare(version: string, other: string): number { - const compare: number = super._compare(version, other); - if (compare !== 0) { - return compare; - } - const parsed1: GenericVersion | null = this._parse(version); - const parsed2: GenericVersion | null = this._parse(other); - - const suffix1 = coerceString(parsed1?.suffix); - const suffix2 = coerceString(parsed2?.suffix); - return suffix1.localeCompare(suffix2); - } - - override isCompatible(version: string, current: string): boolean { - const parsed1: GenericVersion | null = this._parse(version); - const parsed2: GenericVersion | null = this._parse(current); - return !!(parsed1 && parsed2); - } -} - -export const api: VersioningApi = new AwsEKSAddonVersioningApi(); - -export default api; diff --git a/lib/modules/versioning/aws-eks-addon/readme.md b/lib/modules/versioning/aws-eks-addon/readme.md deleted file mode 100644 index 4ba14ab865c131..00000000000000 --- a/lib/modules/versioning/aws-eks-addon/readme.md +++ /dev/null @@ -1,16 +0,0 @@ -Renovate's AWS EKS Addon versioning to support on EKS Addon updates. - -At the moment every ESK Addon that matches the regex `^[vV]?(\d+(?:\.\d+)*)(-eksbuild\.\d+)?$` is considered a valid "release". - -**Key Points about EKS Addon Versioning** - -1. Versioning Scheme: Add-ons typically follow a semantic versioning scheme (e.g., Major.Minor.Patch). This helps in understanding the significance of changes between versions: - - - `Major`: Indicates significant changes or breaking API changes for plugin version. - - `Minor`: Introduces new features or enhancements for plugin version. - - `Patch`: Includes bug fixes and minor improvements for plugin version. - - `Build Metadata` : It helps differentiate this particular release from others that might have been built independently. - -2. Default Versions: When creating a new EKS cluster, AWS often selects a default version for each addon based on the cluster's Kubernetes version and other factors. This default version is usually the most stable and recommended for the specific cluster configuration - -3. Build metadata. Example `eksbuild.1`. The `eksbuild.1` part signifies a specific build or release within the `1.19.0` version, likely managed by the EKS build system. It helps differentiate this particular release from others that might have been built independently. The build metadata provides additional context about the specific release, which can be useful for tracking and troubleshooting. From 69046a8f46b2c5887128fb328bc79747b1c53281 Mon Sep 17 00:00:00 2001 From: ivan katliarchuk Date: Fri, 27 Dec 2024 12:36:54 +0000 Subject: [PATCH 18/18] feat(datasource): split versioning Signed-off-by: ivan katliarchuk --- lib/modules/versioning/api.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/modules/versioning/api.ts b/lib/modules/versioning/api.ts index 7f0d26aed8cc61..454d0f631ade1a 100644 --- a/lib/modules/versioning/api.ts +++ b/lib/modules/versioning/api.ts @@ -45,7 +45,6 @@ import * as unity3d from './unity3d'; const api = new Map(); export default api; -api.set(awsEksAddon.id, awsEksAddon.api); api.set(amazonMachineImage.id, amazonMachineImage.api); api.set(azureRestApi.id, azureRestApi.api); api.set(bazelModule.id, bazelModule.api);