Merge branch 'feat/readable-schedule-desc' of https://github.com/RahulGautamSingh/renovate into feat/readable-schedule-desc

This commit is contained in:
Rahul Gautam Singh 2024-12-25 10:56:00 +05:30
commit f8cc0e2f19
34 changed files with 711 additions and 462 deletions

View file

@ -31,7 +31,7 @@ concurrency:
env:
DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
NODE_VERSION: 22
PDM_VERSION: 2.22.0 # renovate: datasource=pypi depName=pdm
PDM_VERSION: 2.22.1 # renovate: datasource=pypi depName=pdm
DRY_RUN: true
TEST_LEGACY_DECRYPTION: true
SPARSE_CHECKOUT: |-
@ -438,7 +438,7 @@ jobs:
merge-multiple: true
- name: Codecov
uses: codecov/codecov-action@7f8b4b4bde536c465e797be725718b88c5d95e0e # v5.1.1
uses: codecov/codecov-action@1e68e06f1dbfde0e4cefc87efeba9e4643565303 # v5.1.2
with:
token: ${{ secrets.CODECOV_TOKEN }}
directory: coverage/lcov

View file

@ -41,7 +41,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9
uses: github/codeql-action/init@48ab28a6f5dbc2a99bf1e0131198dd8f1df78169 # v3.28.0
with:
languages: javascript
@ -51,7 +51,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9
uses: github/codeql-action/autobuild@48ab28a6f5dbc2a99bf1e0131198dd8f1df78169 # v3.28.0
# Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@ -65,4 +65,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9
uses: github/codeql-action/analyze@48ab28a6f5dbc2a99bf1e0131198dd8f1df78169 # v3.28.0

View file

@ -51,6 +51,6 @@ jobs:
# Upload the results to GitHub's code scanning dashboard.
- name: 'Upload to code-scanning'
uses: github/codeql-action/upload-sarif@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9
uses: github/codeql-action/upload-sarif@48ab28a6f5dbc2a99bf1e0131198dd8f1df78169 # v3.28.0
with:
sarif_file: results.sarif

View file

@ -31,7 +31,7 @@ jobs:
format: 'sarif'
output: 'trivy-results.sarif'
- uses: github/codeql-action/upload-sarif@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9
- uses: github/codeql-action/upload-sarif@48ab28a6f5dbc2a99bf1e0131198dd8f1df78169 # v3.28.0
with:
sarif_file: trivy-results.sarif
category: 'docker-image-${{ matrix.tag }}'

View file

@ -3357,6 +3357,7 @@ Table with options:
| `gomodTidyE` | Run `go mod tidy -e` after Go module updates. |
| `gomodUpdateImportPaths` | Update source import paths on major module updates, using [mod](https://github.com/marwan-at-work/mod). |
| `gomodSkipVendor` | Never run `go mod vendor` after Go module updates. |
| `gomodVendor` | Always run `go mod vendor` after Go module updates even if vendor files aren't detected. |
| `helmUpdateSubChartArchives` | Update subchart archives in the `/charts` folder. |
| `npmDedupe` | Run `npm install` with `--prefer-dedupe` for npm >= 7 or `npm dedupe` after `package-lock.json` update for npm <= 6. |
| `pnpmDedupe` | Run `pnpm dedupe --config.ignore-scripts=true` after `pnpm-lock.yaml` updates. |

View file

@ -2390,6 +2390,7 @@ const options: RenovateOptions[] = [
'gomodTidyE',
'gomodUpdateImportPaths',
'gomodSkipVendor',
'gomodVendor',
'helmUpdateSubChartArchives',
'npmDedupe',
'pnpmDedupe',

View file

@ -316,9 +316,10 @@ const staticGroups = {
'k8s.io/cluster-bootstrap**',
'k8s.io/code-generator**',
'k8s.io/component-base**',
'k8s.io/component-helpers**',
'k8s.io/controller-manager**',
'k8s.io/cri-api**',
// 'k8s.io/csi-api', has not go.mod set up and does not follow the versioning of other repos
// 'k8s.io/csi-api', has no go.mod set up and does not follow the versioning of other repos
'k8s.io/csi-translation-lib**',
'k8s.io/kube-aggregator**',
'k8s.io/kube-controller-manager**',

View file

@ -306,6 +306,9 @@ export interface RenovateConfig
statusCheckNames?: Record<StatusCheckKey, string | null>;
env?: UserEnv;
logLevelRemap?: LogLevelRemap[];
branchTopic?: string;
additionalBranchPrefix?: string;
}
const CustomDatasourceFormats = ['json', 'plain', 'yaml', 'html'] as const;

View file

@ -0,0 +1,17 @@
import { getParentName } from './utils';
describe('config/validation-helpers/utils', () => {
describe('getParentName()', () => {
it('ignores encrypted in root', () => {
expect(getParentName('encrypted')).toBeEmptyString();
});
it('handles array types', () => {
expect(getParentName('hostRules[1]')).toBe('hostRules');
});
it('handles encrypted within array types', () => {
expect(getParentName('hostRules[0].encrypted')).toBe('hostRules');
});
});
});

View file

@ -0,0 +1,138 @@
import is from '@sindresorhus/is';
import { logger } from '../../logger';
import type {
RegexManagerConfig,
RegexManagerTemplates,
} from '../../modules/manager/custom/regex/types';
import { regEx } from '../../util/regex';
import type { ValidationMessage } from '../types';
export function getParentName(parentPath: string | undefined): string {
return parentPath
? parentPath
.replace(regEx(/\.?encrypted$/), '')
.replace(regEx(/\[\d+\]$/), '')
.split('.')
.pop()!
: '.';
}
export function validatePlainObject(
val: Record<string, unknown>,
): true | string {
for (const [key, value] of Object.entries(val)) {
if (!is.string(value)) {
return key;
}
}
return true;
}
export function validateNumber(
key: string,
val: unknown,
allowsNegative: boolean,
currentPath?: string,
subKey?: string,
): ValidationMessage[] {
const errors: ValidationMessage[] = [];
const path = `${currentPath}${subKey ? '.' + subKey : ''}`;
if (is.number(val)) {
if (val < 0 && !allowsNegative) {
errors.push({
topic: 'Configuration Error',
message: `Configuration option \`${path}\` should be a positive integer. Found negative value instead.`,
});
}
} else {
errors.push({
topic: 'Configuration Error',
message: `Configuration option \`${path}\` should be an integer. Found: ${JSON.stringify(
val,
)} (${typeof val}).`,
});
}
return errors;
}
/** An option is a false global if it has the same name as a global only option
* but is actually just the field of a non global option or field an children of the non global option
* eg. token: it's global option used as the bot's token as well and
* also it can be the token used for a platform inside the hostRules configuration
*/
export function isFalseGlobal(
optionName: string,
parentPath?: string,
): boolean {
if (parentPath?.includes('hostRules')) {
if (
optionName === 'token' ||
optionName === 'username' ||
optionName === 'password'
) {
return true;
}
}
return false;
}
function hasField(
customManager: Partial<RegexManagerConfig>,
field: string,
): boolean {
const templateField = `${field}Template` as keyof RegexManagerTemplates;
return !!(
customManager[templateField] ??
customManager.matchStrings?.some((matchString) =>
matchString.includes(`(?<${field}>`),
)
);
}
export function validateRegexManagerFields(
customManager: Partial<RegexManagerConfig>,
currentPath: string,
errors: ValidationMessage[],
): void {
if (is.nonEmptyArray(customManager.matchStrings)) {
for (const matchString of customManager.matchStrings) {
try {
regEx(matchString);
} catch (err) {
logger.debug(
{ err },
'customManager.matchStrings regEx validation error',
);
errors.push({
topic: 'Configuration Error',
message: `Invalid regExp for ${currentPath}: \`${matchString}\``,
});
}
}
} else {
errors.push({
topic: 'Configuration Error',
message: `Each Custom Manager must contain a non-empty matchStrings array`,
});
}
const mandatoryFields = ['currentValue', 'datasource'];
for (const field of mandatoryFields) {
if (!hasField(customManager, field)) {
errors.push({
topic: 'Configuration Error',
message: `Regex Managers must contain ${field}Template configuration or regex group named ${field}`,
});
}
}
const nameFields = ['depName', 'packageName'];
if (!nameFields.some((field) => hasField(customManager, field))) {
errors.push({
topic: 'Configuration Error',
message: `Regex Managers must contain depName or packageName regex groups or templates`,
});
}
}

View file

@ -4,22 +4,6 @@ import type { RenovateConfig } from './types';
import * as configValidation from './validation';
describe('config/validation', () => {
describe('getParentName()', () => {
it('ignores encrypted in root', () => {
expect(configValidation.getParentName('encrypted')).toBeEmptyString();
});
it('handles array types', () => {
expect(configValidation.getParentName('hostRules[1]')).toBe('hostRules');
});
it('handles encrypted within array types', () => {
expect(configValidation.getParentName('hostRules[0].encrypted')).toBe(
'hostRules',
);
});
});
describe('validateConfig(config)', () => {
it('returns deprecation warnings', async () => {
const config = {

View file

@ -1,11 +1,6 @@
import is from '@sindresorhus/is';
import { logger } from '../logger';
import { allManagersList, getManagerList } from '../modules/manager';
import { isCustomManager } from '../modules/manager/custom';
import type {
RegexManagerConfig,
RegexManagerTemplates,
} from '../modules/manager/custom/regex/types';
import type { CustomManager } from '../modules/manager/custom/types';
import type { HostRule } from '../types';
import { getExpression } from '../util/jsonata';
@ -39,6 +34,13 @@ import { allowedStatusCheckStrings } from './types';
import * as managerValidator from './validation-helpers/managers';
import * as matchBaseBranchesValidator from './validation-helpers/match-base-branches';
import * as regexOrGlobValidator from './validation-helpers/regex-glob-matchers';
import {
getParentName,
isFalseGlobal,
validateNumber,
validatePlainObject,
validateRegexManagerFields,
} from './validation-helpers/utils';
const options = getOptions();
@ -84,42 +86,6 @@ function isIgnored(key: string): boolean {
return ignoredNodes.includes(key);
}
function validatePlainObject(val: Record<string, unknown>): true | string {
for (const [key, value] of Object.entries(val)) {
if (!is.string(value)) {
return key;
}
}
return true;
}
function validateNumber(
key: string,
val: unknown,
currentPath?: string,
subKey?: string,
): ValidationMessage[] {
const errors: ValidationMessage[] = [];
const path = `${currentPath}${subKey ? '.' + subKey : ''}`;
if (is.number(val)) {
if (val < 0 && !optionAllowsNegativeIntegers.has(key)) {
errors.push({
topic: 'Configuration Error',
message: `Configuration option \`${path}\` should be a positive integer. Found negative value instead.`,
});
}
} else {
errors.push({
topic: 'Configuration Error',
message: `Configuration option \`${path}\` should be an integer. Found: ${JSON.stringify(
val,
)} (${typeof val}).`,
});
}
return errors;
}
function getUnsupportedEnabledManagers(enabledManagers: string[]): string[] {
return enabledManagers.filter(
(manager) => !allManagersList.includes(manager.replace('custom.', '')),
@ -186,16 +152,6 @@ function initOptions(): void {
optionsInitialized = true;
}
export function getParentName(parentPath: string | undefined): string {
return parentPath
? parentPath
.replace(regEx(/\.?encrypted$/), '')
.replace(regEx(/\[\d+\]$/), '')
.split('.')
.pop()!
: '.';
}
export async function validateConfig(
configType: 'global' | 'inherit' | 'repo',
config: RenovateConfig,
@ -370,7 +326,8 @@ export async function validateConfig(
});
}
} else if (type === 'integer') {
errors.push(...validateNumber(key, val, currentPath));
const allowsNegative = optionAllowsNegativeIntegers.has(key);
errors.push(...validateNumber(key, val, allowsNegative, currentPath));
} else if (type === 'array' && val) {
if (is.array(val)) {
for (const [subIndex, subval] of val.entries()) {
@ -865,65 +822,6 @@ export async function validateConfig(
return { errors, warnings };
}
function hasField(
customManager: Partial<RegexManagerConfig>,
field: string,
): boolean {
const templateField = `${field}Template` as keyof RegexManagerTemplates;
return !!(
customManager[templateField] ??
customManager.matchStrings?.some((matchString) =>
matchString.includes(`(?<${field}>`),
)
);
}
function validateRegexManagerFields(
customManager: Partial<RegexManagerConfig>,
currentPath: string,
errors: ValidationMessage[],
): void {
if (is.nonEmptyArray(customManager.matchStrings)) {
for (const matchString of customManager.matchStrings) {
try {
regEx(matchString);
} catch (err) {
logger.debug(
{ err },
'customManager.matchStrings regEx validation error',
);
errors.push({
topic: 'Configuration Error',
message: `Invalid regExp for ${currentPath}: \`${matchString}\``,
});
}
}
} else {
errors.push({
topic: 'Configuration Error',
message: `Each Custom Manager must contain a non-empty matchStrings array`,
});
}
const mandatoryFields = ['currentValue', 'datasource'];
for (const field of mandatoryFields) {
if (!hasField(customManager, field)) {
errors.push({
topic: 'Configuration Error',
message: `Regex Managers must contain ${field}Template configuration or regex group named ${field}`,
});
}
}
const nameFields = ['depName', 'packageName'];
if (!nameFields.some((field) => hasField(customManager, field))) {
errors.push({
topic: 'Configuration Error',
message: `Regex Managers must contain depName or packageName regex groups or templates`,
});
}
}
/**
* Basic validation for global config options
*/
@ -1013,7 +911,8 @@ async function validateGlobalConfig(
});
}
} else if (type === 'integer') {
warnings.push(...validateNumber(key, val, currentPath));
const allowsNegative = optionAllowsNegativeIntegers.has(key);
warnings.push(...validateNumber(key, val, allowsNegative, currentPath));
} else if (type === 'boolean') {
if (val !== true && val !== false) {
warnings.push({
@ -1079,8 +978,15 @@ async function validateGlobalConfig(
}
} else if (key === 'cacheTtlOverride') {
for (const [subKey, subValue] of Object.entries(val)) {
const allowsNegative = optionAllowsNegativeIntegers.has(key);
warnings.push(
...validateNumber(key, subValue, currentPath, subKey),
...validateNumber(
key,
subValue,
allowsNegative,
currentPath,
subKey,
),
);
}
} else {
@ -1101,22 +1007,3 @@ async function validateGlobalConfig(
}
}
}
/** An option is a false global if it has the same name as a global only option
* but is actually just the field of a non global option or field an children of the non global option
* eg. token: it's global option used as the bot's token as well and
* also it can be the token used for a platform inside the hostRules configuration
*/
function isFalseGlobal(optionName: string, parentPath?: string): boolean {
if (parentPath?.includes('hostRules')) {
if (
optionName === 'token' ||
optionName === 'username' ||
optionName === 'password'
) {
return true;
}
}
return false;
}

View file

@ -59,10 +59,12 @@ describe('instrumentation/index', () => {
_registeredSpanProcessors: [
{
_exporter: {
_transport: {
_delegate: {
_transport: {
_parameters: {
url: 'https://collector.example.com/v1/traces',
_transport: {
_parameters: {
url: 'https://collector.example.com/v1/traces',
},
},
},
},
@ -88,10 +90,12 @@ describe('instrumentation/index', () => {
{ _exporter: {} },
{
_exporter: {
_transport: {
_delegate: {
_transport: {
_parameters: {
url: 'https://collector.example.com/v1/traces',
_transport: {
_parameters: {
url: 'https://collector.example.com/v1/traces',
},
},
},
},

View file

@ -494,7 +494,10 @@ describe('modules/datasource/go/releases-goproxy', () => {
.get('.v2/@latest')
.reply(200, { Version: 'v2.4.0' })
.get('.v3/@v/list')
.reply(200, ['v3.0.0', 'v3.0.1', ' \n'].join('\n'))
.reply(
200,
['v1.0.0', 'v2.0.0', 'v3.0.0', 'v3.0.1', 'v4.0.0', ' \n'].join('\n'),
)
.get('.v3/@v/v3.0.0.info')
.reply(200, { Version: 'v3.0.0', Time: '2022-05-21T10:33:21Z' })
.get('.v3/@v/v3.0.1.info')

View file

@ -217,7 +217,20 @@ export class GoProxyDatasource extends Datasource {
try {
const res = await this.listVersions(baseUrl, pkg);
releases = await p.map(res, async (versionInfo) => {
// Artifactory returns all versions in any major (past and future),
// so starting from v2, we filter them in order to avoid the infinite loop
const filteredReleases = res.filter(({ version }) => {
if (major < 2) {
return true;
}
return (
version.split(regEx(/[^\d]+/)).find(is.truthy) === major.toString()
);
});
releases = await p.map(filteredReleases, async (versionInfo) => {
const { version, newDigest, releaseTimestamp } = versionInfo;
if (releaseTimestamp) {

View file

@ -4,7 +4,7 @@ exports[`modules/datasource/orb/index getReleases processes homeUrl 1`] = `
{
"homepage": "https://google.com",
"isPrivate": false,
"registryUrl": "https://circleci.com/",
"registryUrl": "https://circleci.com",
"releases": [
{
"releaseTimestamp": "2018-12-11T05:28:14.080Z",
@ -53,7 +53,7 @@ exports[`modules/datasource/orb/index getReleases processes real data 1`] = `
{
"homepage": "https://circleci.com/developer/orbs/orb/hyper-expanse/library-release-workflows",
"isPrivate": false,
"registryUrl": "https://circleci.com/",
"registryUrl": "https://circleci.com",
"releases": [
{
"releaseTimestamp": "2018-12-11T05:28:14.080Z",

View file

@ -92,5 +92,18 @@ describe('modules/datasource/orb/index', () => {
expect(res).toMatchSnapshot();
expect(res?.homepage).toBe('https://google.com');
});
it('supports other registries', async () => {
httpMock
.scope('https://cci.internal.dev')
.post('/graphql-unstable')
.reply(200, orbData);
const res = await getPkgReleases({
datasource,
packageName: 'hyper-expanse/library-release-workflows',
registryUrls: ['https://cci.internal.dev'],
});
expect(res?.registryUrl).toBe('https://cci.internal.dev');
});
});
});

View file

@ -1,5 +1,6 @@
import { logger } from '../../../logger';
import { cache } from '../../../util/cache/package/decorator';
import { joinUrlParts } from '../../../util/url';
import { Datasource } from '../datasource';
import type { GetReleasesConfig, ReleaseResult } from '../types';
import type { OrbResponse } from './types';
@ -27,9 +28,10 @@ export class OrbDatasource extends Datasource {
super(OrbDatasource.id);
}
override readonly customRegistrySupport = false;
override readonly customRegistrySupport = true;
override readonly defaultRegistryUrls = ['https://circleci.com/'];
override readonly registryStrategy = 'hunt';
override readonly releaseTimestampSupport = true;
override readonly releaseTimestampNote =
@ -47,7 +49,7 @@ export class OrbDatasource extends Datasource {
if (!registryUrl) {
return null;
}
const url = `${registryUrl}graphql-unstable`;
const url = joinUrlParts(registryUrl, 'graphql-unstable');
const body = {
query,
variables: { packageName, maxVersions: MAX_VERSIONS },

View file

@ -11,7 +11,7 @@ export const url = 'https://bazel.build/external/module';
export const categories: Category[] = ['bazel'];
export const defaultConfig = {
fileMatch: ['(^|/)MODULE\\.bazel$'],
fileMatch: ['(^|/|\\.)MODULE\\.bazel$'],
};
export const supportedDatasources = [

View file

@ -189,6 +189,112 @@ describe('modules/manager/gomod/artifacts', () => {
]);
});
it('runs go mod vendor with gomodVendor', async () => {
fs.readLocalFile.mockResolvedValueOnce('Current go.sum');
fs.readLocalFile.mockResolvedValueOnce('New go.sum');
fs.readLocalFile.mockResolvedValueOnce('New go.mod');
const execSnapshots = mockExecAll();
git.getRepoStatus.mockResolvedValueOnce(
partial<StatusResult>({
modified: ['go.sum'],
not_added: [],
deleted: [],
}),
);
const res = await gomod.updateArtifacts({
packageFileName: 'go.mod',
updatedDeps: [],
newPackageFileContent: gomod1,
config: {
...config,
postUpdateOptions: ['gomodVendor'],
},
});
expect(res).toEqual([
{
file: {
contents: 'New go.sum',
path: 'go.sum',
type: 'addition',
},
},
{
file: {
contents: 'New go.mod',
path: 'go.mod',
type: 'addition',
},
},
]);
expect(execSnapshots).toMatchObject([
{
cmd: 'go get -d -t ./...',
options: { cwd: '/tmp/github/some/repo' },
},
{
cmd: 'go mod vendor',
options: { cwd: '/tmp/github/some/repo' },
},
]);
});
it('runs go work vendor with gomodVendor and go.work', async () => {
fs.readLocalFile.mockResolvedValueOnce('Current go.sum');
fs.findLocalSiblingOrParent.mockResolvedValueOnce('go.work');
const execSnapshots = mockExecAll();
git.getRepoStatus.mockResolvedValueOnce(
partial<StatusResult>({
modified: ['go.sum'],
not_added: [],
deleted: [],
}),
);
fs.readLocalFile.mockResolvedValueOnce('New go.sum');
fs.readLocalFile.mockResolvedValueOnce('New go.mod');
const res = await gomod.updateArtifacts({
packageFileName: 'go.mod',
updatedDeps: [],
newPackageFileContent: gomod1,
config: {
...config,
postUpdateOptions: ['gomodVendor'],
},
});
expect(res).toEqual([
{
file: {
contents: 'New go.sum',
path: 'go.sum',
type: 'addition',
},
},
{
file: {
contents: 'New go.mod',
path: 'go.mod',
type: 'addition',
},
},
]);
expect(execSnapshots).toMatchObject([
{
cmd: 'go get -d -t ./...',
options: { cwd: '/tmp/github/some/repo' },
},
{
cmd: 'go work vendor',
options: { cwd: '/tmp/github/some/repo' },
},
{
cmd: 'go work sync',
options: { cwd: '/tmp/github/some/repo' },
},
]);
});
it('supports vendor directory update', async () => {
const foo = join('vendor/github.com/foo/foo/go.mod');
const bar = join('vendor/github.com/bar/bar/go.mod');

View file

@ -134,9 +134,9 @@ export async function updateArtifacts({
const vendorDir = upath.join(goModDir, 'vendor/');
const vendorModulesFileName = upath.join(vendorDir, 'modules.txt');
const useVendor =
!config.postUpdateOptions?.includes('gomodSkipVendor') &&
(await readLocalFile(vendorModulesFileName)) !== null;
!!config.postUpdateOptions?.includes('gomodVendor') ||
(!config.postUpdateOptions?.includes('gomodSkipVendor') &&
(await readLocalFile(vendorModulesFileName)) !== null);
let massagedGoMod = newGoModContent;
if (config.postUpdateOptions?.includes('gomodMassage')) {

View file

@ -312,7 +312,7 @@ export async function updateYarnBinary(
let yarnrcYml = existingYarnrcYmlContent;
try {
const yarnrcYmlFilename = upath.join(lockFileDir, '.yarnrc.yml');
yarnrcYml ||= (await getFile(yarnrcYmlFilename)) ?? undefined;
yarnrcYml ??= (await getFile(yarnrcYmlFilename)) ?? undefined;
const newYarnrcYml = await readLocalFile(yarnrcYmlFilename, 'utf8');
if (!is.string(yarnrcYml) || !is.string(newYarnrcYml)) {
return existingYarnrcYmlContent;

View file

@ -6,6 +6,7 @@ import * as composer from './composer';
import * as conan from './conan';
import * as deb from './deb';
import * as debian from './debian';
import * as devbox from './devbox';
import * as docker from './docker';
import * as git from './git';
import * as glasskube from './glasskube';
@ -52,6 +53,7 @@ api.set(composer.id, composer.api);
api.set(conan.id, conan.api);
api.set(deb.id, deb.api);
api.set(debian.id, debian.api);
api.set(devbox.id, devbox.api);
api.set(docker.id, docker.api);
api.set(git.id, git.api);
api.set(glasskube.id, glasskube.api);

View file

@ -0,0 +1,103 @@
import devbox from '.';
describe('modules/versioning/devbox/index', () => {
it.each`
version | expected
${'1'} | ${false}
${'01'} | ${false}
${'1.01'} | ${false}
${'1.1'} | ${false}
${'1.3.0'} | ${true}
${'2.1.20'} | ${true}
${'v1.4'} | ${false}
${'V0.5'} | ${false}
${'3.5.0'} | ${true}
${'4.2.21.Final'} | ${false}
${'1234'} | ${false}
${'foo'} | ${false}
${'latest'} | ${false}
${''} | ${false}
${'3.5.0-beta.3'} | ${false}
${'*'} | ${false}
${'x'} | ${false}
${'X'} | ${false}
${'~1.2.3'} | ${false}
${'>1.2.3'} | ${false}
${'^1.2.3'} | ${false}
${'1.2.3-foo'} | ${false}
${'1.2.3foo'} | ${false}
`('isVersion("$version") === $expected', ({ version, expected }) => {
expect(!!devbox.isVersion(version)).toBe(expected);
});
it.each`
version | isValid
${'1'} | ${true}
${'01'} | ${false}
${'1.01'} | ${false}
${'1.1'} | ${true}
${'1.3.0'} | ${true}
${'2.1.20'} | ${true}
${'v1.4'} | ${false}
${'V0.5'} | ${false}
${'3.5.0'} | ${true}
${'4.2.21.Final'} | ${false}
${'1234'} | ${true}
${'foo'} | ${false}
${'latest'} | ${true}
${''} | ${false}
${'3.5.0-beta.3'} | ${false}
${'*'} | ${false}
${'x'} | ${false}
${'X'} | ${false}
${'~1.2.3'} | ${false}
${'>1.2.3'} | ${false}
${'^1.2.3'} | ${false}
${'1.2.3-foo'} | ${false}
${'1.2.3foo'} | ${false}
`('isValid("$version") === $isValid', ({ version, isValid }) => {
expect(!!devbox.isValid(version)).toBe(isValid);
});
it.each`
version | range | expected
${'1'} | ${'1'} | ${false}
${'1'} | ${'0'} | ${false}
${'1.2.3'} | ${'1'} | ${true}
${'1.2'} | ${'1'} | ${false}
${'1.0.0'} | ${'1'} | ${true}
${'1.2.0'} | ${'1.2'} | ${true}
${'1.2.3'} | ${'1.2'} | ${true}
${'0'} | ${'latest'} | ${false}
${'1.2.3'} | ${'latest'} | ${true}
${'1.2.3.5'} | ${'1.2.3.5'} | ${false}
${'1.2'} | ${'1.2.3'} | ${false}
`(
'matches("$version", "$range") === $expected',
({ version, range, expected }) => {
expect(devbox.matches(version, range)).toBe(expected);
},
);
it.each`
version | range | expected
${'1'} | ${'1'} | ${true}
${'1'} | ${'0'} | ${false}
${'1.2.3'} | ${'1'} | ${true}
${'1.2'} | ${'1'} | ${true}
${'1.0.0'} | ${'1'} | ${true}
${'1.2.0'} | ${'1.2'} | ${true}
${'1.2.3'} | ${'1.2'} | ${true}
${'0'} | ${'latest'} | ${true}
${'1.2.3'} | ${'latest'} | ${true}
${'1.2.3.5'} | ${'1.2.3.5'} | ${false}
${'latest'} | ${'latest'} | ${false}
${'latest'} | ${'1.2.3'} | ${false}
${'1.2'} | ${'1.2.3'} | ${true}
`(
'equals("$version", "$range") === $expected',
({ version, range, expected }) => {
expect(devbox.equals(version, range)).toBe(expected);
},
);
});

View file

@ -0,0 +1,74 @@
import { regEx } from '../../../util/regex';
import type { GenericVersion } from '../generic';
import { GenericVersioningApi } from '../generic';
import type { VersioningApi } from '../types';
export const id = 'devbox';
export const displayName = 'devbox';
export const urls = [];
export const supportsRanges = false;
const validPattern = regEx(/^((\d|[1-9]\d*)(\.(\d|[1-9]\d*)){0,2})$/);
const versionPattern = regEx(/^((\d|[1-9]\d*)(\.(\d|[1-9]\d*)){2})$/);
class DevboxVersioningApi extends GenericVersioningApi {
protected _parse(version: string): GenericVersion | null {
const matches = validPattern.exec(version);
if (!matches) {
return null;
}
const release = matches[0].split('.').map(Number);
return { release };
}
override isValid(version: string): boolean {
if (version === 'latest') {
return true;
}
return this._parse(version) !== null;
}
override isVersion(version: string): boolean {
if (version === 'latest') {
return false;
}
const matches = versionPattern.exec(version);
return !!matches;
}
override matches(version: string, range: string): boolean {
return this.isVersion(version) && this.equals(version, range);
}
protected override _compare(version: string, other: string): number {
const parsed1 = this._parse(version);
const parsed2 = this._parse(other);
// Treat "latest" as * and always return equal
if (other === 'latest' && parsed1) {
return 0;
}
// If either version is invalid, return unequal
if (!(parsed1 && parsed2)) {
return 1;
}
// support variable length compare
const length = Math.max(parsed1.release.length, parsed2.release.length);
for (let i = 0; i < length; i += 1) {
// 2.1 and 2.1.0 are equivalent
const part1 = parsed1.release[i];
const part2 = parsed2.release[i];
// if part1 or part2 is undefined, we should treat them as equal
// e.g. 1.0.0 === 1.0
if (part1 !== undefined && part2 !== undefined && part1 !== part2) {
return part1 - part2;
}
}
return 0;
}
}
export const api: VersioningApi = new DevboxVersioningApi();
export default api;

View file

@ -0,0 +1,2 @@
Devbox's Nixhub uses fairly strict versioning, characters such as ~, ^ and >= are not allowed.
The semver values must not include "\*" or "x". "1.2.3" "1.2" and "1" are the only valid formats.

View file

@ -142,7 +142,7 @@ export async function getConfig(
}
}
config.hostRules ||= [];
config.hostRules ??= [];
options.forEach((option) => {
if (option.env !== false) {

View file

@ -113,9 +113,9 @@ export async function detectVulnerabilityAlerts(
alert.security_vulnerability.first_patched_version.identifier;
const advisory = alert.security_advisory;
combinedAlerts[fileName] ||= {};
combinedAlerts[fileName][datasource] ||= {};
combinedAlerts[fileName][datasource][depName] ||= {
combinedAlerts[fileName] ??= {};
combinedAlerts[fileName][datasource] ??= {};
combinedAlerts[fileName][datasource][depName] ??= {
advisories: [],
};
const alertDetails = combinedAlerts[fileName][datasource][depName];

View file

@ -160,7 +160,7 @@ function handleOnboardingManualRebase(onboardingPr: Pr): void {
function invalidateExtractCache(baseBranch: string): void {
const cache = getCache();
cache.scan ||= {};
cache.scan ??= {};
if (cache.scan?.[baseBranch]) {
delete cache.scan[baseBranch];

View file

@ -136,7 +136,7 @@ export async function extract(
const baseBranchSha = await scm.getBranchCommit(baseBranch!);
let packageFiles: Record<string, PackageFile[]>;
const cache = getCache();
cache.scan ||= {};
cache.scan ??= {};
const cachedExtract = cache.scan[baseBranch!];
const configHash = fingerprint(generateFingerprintConfig(config));
// istanbul ignore if

View file

@ -152,14 +152,14 @@
"@breejs/later": "4.2.0",
"@cdktf/hcl2json": "0.20.10",
"@opentelemetry/api": "1.9.0",
"@opentelemetry/context-async-hooks": "1.28.0",
"@opentelemetry/exporter-trace-otlp-http": "0.55.0",
"@opentelemetry/instrumentation": "0.55.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.55.0",
"@opentelemetry/resources": "1.28.0",
"@opentelemetry/sdk-trace-base": "1.28.0",
"@opentelemetry/sdk-trace-node": "1.28.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/semantic-conventions": "1.28.0",
"@qnighy/marshal": "0.1.3",
"@renovatebot/detect-tools": "1.1.0",
@ -311,20 +311,20 @@
"@types/url-join": "4.0.3",
"@types/validate-npm-package-name": "4.0.2",
"@types/xmldoc": "1.1.9",
"@typescript-eslint/eslint-plugin": "8.11.0",
"@typescript-eslint/parser": "8.11.0",
"@typescript-eslint/eslint-plugin": "8.18.0",
"@typescript-eslint/parser": "8.18.0",
"aws-sdk-client-mock": "4.1.0",
"callsite": "1.0.0",
"common-tags": "1.8.2",
"conventional-changelog-conventionalcommits": "8.0.0",
"emojibase-data": "16.0.2",
"eslint": "8.57.1",
"eslint-formatter-gha": "1.5.1",
"eslint-import-resolver-typescript": "3.6.3",
"eslint-formatter-gha": "1.5.2",
"eslint-import-resolver-typescript": "3.7.0",
"eslint-plugin-import": "2.31.0",
"eslint-plugin-jest": "28.8.3",
"eslint-plugin-jest": "28.9.0",
"eslint-plugin-jest-formatting": "3.1.0",
"eslint-plugin-promise": "7.1.0",
"eslint-plugin-promise": "7.2.1",
"eslint-plugin-typescript-enum": "2.1.0",
"expect": "29.7.0",
"expect-more-jest": "5.5.0",
@ -347,7 +347,7 @@
"tmp-promise": "3.0.3",
"ts-jest": "29.2.5",
"ts-node": "10.9.2",
"type-fest": "4.30.0",
"type-fest": "4.30.1",
"typescript": "5.7.2",
"unified": "9.2.2"
},

View file

@ -39,29 +39,29 @@ importers:
specifier: 1.9.0
version: 1.9.0
'@opentelemetry/context-async-hooks':
specifier: 1.28.0
version: 1.28.0(@opentelemetry/api@1.9.0)
specifier: 1.29.0
version: 1.29.0(@opentelemetry/api@1.9.0)
'@opentelemetry/exporter-trace-otlp-http':
specifier: 0.55.0
version: 0.55.0(@opentelemetry/api@1.9.0)
specifier: 0.56.0
version: 0.56.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation':
specifier: 0.55.0
version: 0.55.0(@opentelemetry/api@1.9.0)
specifier: 0.56.0
version: 0.56.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-bunyan':
specifier: 0.44.0
version: 0.44.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-http':
specifier: 0.55.0
version: 0.55.0(@opentelemetry/api@1.9.0)
specifier: 0.56.0
version: 0.56.0(@opentelemetry/api@1.9.0)
'@opentelemetry/resources':
specifier: 1.28.0
version: 1.28.0(@opentelemetry/api@1.9.0)
specifier: 1.29.0
version: 1.29.0(@opentelemetry/api@1.9.0)
'@opentelemetry/sdk-trace-base':
specifier: 1.28.0
version: 1.28.0(@opentelemetry/api@1.9.0)
specifier: 1.29.0
version: 1.29.0(@opentelemetry/api@1.9.0)
'@opentelemetry/sdk-trace-node':
specifier: 1.28.0
version: 1.28.0(@opentelemetry/api@1.9.0)
specifier: 1.29.0
version: 1.29.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions':
specifier: 1.28.0
version: 1.28.0
@ -506,11 +506,11 @@ importers:
specifier: 1.1.9
version: 1.1.9
'@typescript-eslint/eslint-plugin':
specifier: 8.11.0
version: 8.11.0(@typescript-eslint/parser@8.11.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2)
specifier: 8.18.0
version: 8.18.0(@typescript-eslint/parser@8.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2)
'@typescript-eslint/parser':
specifier: 8.11.0
version: 8.11.0(eslint@8.57.1)(typescript@5.7.2)
specifier: 8.18.0
version: 8.18.0(eslint@8.57.1)(typescript@5.7.2)
aws-sdk-client-mock:
specifier: 4.1.0
version: 4.1.0
@ -530,23 +530,23 @@ importers:
specifier: 8.57.1
version: 8.57.1
eslint-formatter-gha:
specifier: 1.5.1
version: 1.5.1
specifier: 1.5.2
version: 1.5.2
eslint-import-resolver-typescript:
specifier: 3.6.3
version: 3.6.3(@typescript-eslint/parser@8.11.0(eslint@8.57.1)(typescript@5.7.2))(eslint-plugin-import@2.31.0)(eslint@8.57.1)
specifier: 3.7.0
version: 3.7.0(eslint-plugin-import@2.31.0)(eslint@8.57.1)
eslint-plugin-import:
specifier: 2.31.0
version: 2.31.0(@typescript-eslint/parser@8.11.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
version: 2.31.0(@typescript-eslint/parser@8.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1)
eslint-plugin-jest:
specifier: 28.8.3
version: 28.8.3(@typescript-eslint/eslint-plugin@8.11.0(@typescript-eslint/parser@8.11.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2)
specifier: 28.9.0
version: 28.9.0(@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2)
eslint-plugin-jest-formatting:
specifier: 3.1.0
version: 3.1.0(eslint@8.57.1)
eslint-plugin-promise:
specifier: 7.1.0
version: 7.1.0(eslint@8.57.1)
specifier: 7.2.1
version: 7.2.1(eslint@8.57.1)
eslint-plugin-typescript-enum:
specifier: 2.1.0
version: 2.1.0(eslint@8.57.1)(typescript@5.7.2)
@ -614,8 +614,8 @@ importers:
specifier: 10.9.2
version: 10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2)
type-fest:
specifier: 4.30.0
version: 4.30.0
specifier: 4.30.1
version: 4.30.1
typescript:
specifier: 5.7.2
version: 5.7.2
@ -1325,10 +1325,6 @@ packages:
typescript:
optional: true
'@opentelemetry/api-logs@0.55.0':
resolution: {integrity: sha512-3cpa+qI45VHYcA5c0bHM6VHo9gicv3p5mlLHNG3rLyjQU8b7e0st1rWtrUn3JbZ3DwwCfhKop4eQ9UuYlC6Pkg==}
engines: {node: '>=14'}
'@opentelemetry/api-logs@0.56.0':
resolution: {integrity: sha512-Wr39+94UNNG3Ei9nv3pHd4AJ63gq5nSemMRpCd8fPwDL9rN3vK26lzxfH27mw16XzOSO+TpyQwBAMaLxaPWG0g==}
engines: {node: '>=14'}
@ -1337,20 +1333,20 @@ packages:
resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==}
engines: {node: '>=8.0.0'}
'@opentelemetry/context-async-hooks@1.28.0':
resolution: {integrity: sha512-igcl4Ve+F1N2063PJUkesk/GkYyuGIWinYkSyAFTnIj3gzrOgvOA4k747XNdL47HRRL1w/qh7UW8NDuxOLvKFA==}
'@opentelemetry/context-async-hooks@1.29.0':
resolution: {integrity: sha512-TKT91jcFXgHyIDF1lgJF3BHGIakn6x0Xp7Tq3zoS3TMPzT9IlP0xEavWP8C1zGjU9UmZP2VR1tJhW9Az1A3w8Q==}
engines: {node: '>=14'}
peerDependencies:
'@opentelemetry/api': '>=1.0.0 <1.10.0'
'@opentelemetry/core@1.28.0':
resolution: {integrity: sha512-ZLwRMV+fNDpVmF2WYUdBHlq0eOWtEaUJSusrzjGnBt7iSRvfjFE3RXYUZJrqou/wIDWV0DwQ5KIfYe9WXg9Xqw==}
'@opentelemetry/core@1.29.0':
resolution: {integrity: sha512-gmT7vAreXl0DTHD2rVZcw3+l2g84+5XiHIqdBUxXbExymPCvSsGOpiwMmn8nkiJur28STV31wnhIDrzWDPzjfA==}
engines: {node: '>=14'}
peerDependencies:
'@opentelemetry/api': '>=1.0.0 <1.10.0'
'@opentelemetry/exporter-trace-otlp-http@0.55.0':
resolution: {integrity: sha512-lMiNic63EVHpW+eChmLD2CieDmwQBFi72+LFbh8+5hY0ShrDGrsGP/zuT5MRh7M/vM/UZYO/2A/FYd7CMQGR7A==}
'@opentelemetry/exporter-trace-otlp-http@0.56.0':
resolution: {integrity: sha512-vqVuJvcwameA0r0cNrRzrZqPLB0otS+95g0XkZdiKOXUo81wYdY6r4kyrwz4nSChqTBEFm0lqi/H2OWGboOa6g==}
engines: {node: '>=14'}
peerDependencies:
'@opentelemetry/api': ^1.3.0
@ -1361,14 +1357,8 @@ packages:
peerDependencies:
'@opentelemetry/api': ^1.3.0
'@opentelemetry/instrumentation-http@0.55.0':
resolution: {integrity: sha512-AO27XSjkgNicfy/YBthskFAwx9VfaO7tChrLaTONTfOWv14GlB3Rs2eTYpywZIHWsW2cR5hvVkcDte4GV0stoA==}
engines: {node: '>=14'}
peerDependencies:
'@opentelemetry/api': ^1.3.0
'@opentelemetry/instrumentation@0.55.0':
resolution: {integrity: sha512-YDCMlaQRZkziLL3t6TONRgmmGxDx6MyQDXRD0dknkkgUZtOK5+8MWft1OXzmNu6XfBOdT12MKN5rz+jHUkafKQ==}
'@opentelemetry/instrumentation-http@0.56.0':
resolution: {integrity: sha512-/bWHBUAq8VoATnH9iLk5w8CE9+gj+RgYSUphe7hry472n6fYl7+4PvuScoQMdmSUTprKq/gyr2kOWL6zrC7FkQ==}
engines: {node: '>=14'}
peerDependencies:
'@opentelemetry/api': ^1.3.0
@ -1379,64 +1369,60 @@ packages:
peerDependencies:
'@opentelemetry/api': ^1.3.0
'@opentelemetry/otlp-exporter-base@0.55.0':
resolution: {integrity: sha512-iHQI0Zzq3h1T6xUJTVFwmFl5Dt5y1es+fl4kM+k5T/3YvmVyeYkSiF+wHCg6oKrlUAJfk+t55kaAu3sYmt7ZYA==}
'@opentelemetry/otlp-exporter-base@0.56.0':
resolution: {integrity: sha512-eURvv0fcmBE+KE1McUeRo+u0n18ZnUeSc7lDlW/dzlqFYasEbsztTK4v0Qf8C4vEY+aMTjPKUxBG0NX2Te3Pmw==}
engines: {node: '>=14'}
peerDependencies:
'@opentelemetry/api': ^1.3.0
'@opentelemetry/otlp-transformer@0.55.0':
resolution: {integrity: sha512-kVqEfxtp6mSN2Dhpy0REo1ghP4PYhC1kMHQJ2qVlO99Pc+aigELjZDfg7/YKmL71gR6wVGIeJfiql/eXL7sQPA==}
'@opentelemetry/otlp-transformer@0.56.0':
resolution: {integrity: sha512-kVkH/W2W7EpgWWpyU5VnnjIdSD7Y7FljQYObAQSKdRcejiwMj2glypZtUdfq1LTJcv4ht0jyTrw1D3CCxssNtQ==}
engines: {node: '>=14'}
peerDependencies:
'@opentelemetry/api': ^1.3.0
'@opentelemetry/propagator-b3@1.28.0':
resolution: {integrity: sha512-Q7HVDIMwhN5RxL4bECMT4BdbyYSAKkC6U/RGn4NpO/cbqP6ZRg+BS7fPo/pGZi2w8AHfpIGQFXQmE8d2PC5xxQ==}
'@opentelemetry/propagator-b3@1.29.0':
resolution: {integrity: sha512-ktsNDlqhu+/IPGEJRMj81upg2JupUp+SwW3n1ZVZTnrDiYUiMUW41vhaziA7Q6UDhbZvZ58skDpQhe2ZgNIPvg==}
engines: {node: '>=14'}
peerDependencies:
'@opentelemetry/api': '>=1.0.0 <1.10.0'
'@opentelemetry/propagator-jaeger@1.28.0':
resolution: {integrity: sha512-wKJ94+s8467CnIRgoSRh0yXm/te0QMOwTq9J01PfG/RzYZvlvN8aRisN2oZ9SznB45dDGnMj3BhUlchSA9cEKA==}
'@opentelemetry/propagator-jaeger@1.29.0':
resolution: {integrity: sha512-EXIEYmFgybnFMijVgqx1mq/diWwSQcd0JWVksytAVQEnAiaDvP45WuncEVQkFIAC0gVxa2+Xr8wL5pF5jCVKbg==}
engines: {node: '>=14'}
peerDependencies:
'@opentelemetry/api': '>=1.0.0 <1.10.0'
'@opentelemetry/resources@1.28.0':
resolution: {integrity: sha512-cIyXSVJjGeTICENN40YSvLDAq4Y2502hGK3iN7tfdynQLKWb3XWZQEkPc+eSx47kiy11YeFAlYkEfXwR1w8kfw==}
'@opentelemetry/resources@1.29.0':
resolution: {integrity: sha512-s7mLXuHZE7RQr1wwweGcaRp3Q4UJJ0wazeGlc/N5/XSe6UyXfsh1UQGMADYeg7YwD+cEdMtU1yJAUXdnFzYzyQ==}
engines: {node: '>=14'}
peerDependencies:
'@opentelemetry/api': '>=1.0.0 <1.10.0'
'@opentelemetry/sdk-logs@0.55.0':
resolution: {integrity: sha512-TSx+Yg/d48uWW6HtjS1AD5x6WPfLhDWLl/WxC7I2fMevaiBuKCuraxTB8MDXieCNnBI24bw9ytyXrDCswFfWgA==}
'@opentelemetry/sdk-logs@0.56.0':
resolution: {integrity: sha512-OS0WPBJF++R/cSl+terUjQH5PebloidB1Jbbecgg2rnCmQbTST9xsRes23bLfDQVRvmegmHqDh884h0aRdJyLw==}
engines: {node: '>=14'}
peerDependencies:
'@opentelemetry/api': '>=1.4.0 <1.10.0'
'@opentelemetry/sdk-metrics@1.28.0':
resolution: {integrity: sha512-43tqMK/0BcKTyOvm15/WQ3HLr0Vu/ucAl/D84NO7iSlv6O4eOprxSHa3sUtmYkaZWHqdDJV0AHVz/R6u4JALVQ==}
'@opentelemetry/sdk-metrics@1.29.0':
resolution: {integrity: sha512-MkVtuzDjXZaUJSuJlHn6BSXjcQlMvHcsDV7LjY4P6AJeffMa4+kIGDjzsCf6DkAh6Vqlwag5EWEam3KZOX5Drw==}
engines: {node: '>=14'}
peerDependencies:
'@opentelemetry/api': '>=1.3.0 <1.10.0'
'@opentelemetry/sdk-trace-base@1.28.0':
resolution: {integrity: sha512-ceUVWuCpIao7Y5xE02Xs3nQi0tOGmMea17ecBdwtCvdo9ekmO+ijc9RFDgfifMl7XCBf41zne/1POM3LqSTZDA==}
'@opentelemetry/sdk-trace-base@1.29.0':
resolution: {integrity: sha512-hEOpAYLKXF3wGJpXOtWsxEtqBgde0SCv+w+jvr3/UusR4ll3QrENEGnSl1WDCyRrpqOQ5NCNOvZch9UFVa7MnQ==}
engines: {node: '>=14'}
peerDependencies:
'@opentelemetry/api': '>=1.0.0 <1.10.0'
'@opentelemetry/sdk-trace-node@1.28.0':
resolution: {integrity: sha512-N0sYfYXvHpP0FNIyc+UfhLnLSTOuZLytV0qQVrDWIlABeD/DWJIGttS7nYeR14gQLXch0M1DW8zm3VeN6Opwtg==}
'@opentelemetry/sdk-trace-node@1.29.0':
resolution: {integrity: sha512-ZpGYt+VnMu6O0SRKzhuIivr7qJm3GpWnTCMuJspu4kt3QWIpIenwixo5Vvjuu3R4h2Onl/8dtqAiPIs92xd5ww==}
engines: {node: '>=14'}
peerDependencies:
'@opentelemetry/api': '>=1.0.0 <1.10.0'
'@opentelemetry/semantic-conventions@1.27.0':
resolution: {integrity: sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==}
engines: {node: '>=14'}
'@opentelemetry/semantic-conventions@1.28.0':
resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==}
engines: {node: '>=14'}
@ -2201,16 +2187,13 @@ packages:
'@types/yauzl@2.10.3':
resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
'@typescript-eslint/eslint-plugin@8.11.0':
resolution: {integrity: sha512-KhGn2LjW1PJT2A/GfDpiyOfS4a8xHQv2myUagTM5+zsormOmBlYsnQ6pobJ8XxJmh6hnHwa2Mbe3fPrDJoDhbA==}
'@typescript-eslint/eslint-plugin@8.18.0':
resolution: {integrity: sha512-NR2yS7qUqCL7AIxdJUQf2MKKNDVNaig/dEB0GBLU7D+ZdHgK1NoH/3wsgO3OnPVipn51tG3MAwaODEGil70WEw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
eslint: ^8.57.0 || ^9.0.0
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
typescript: '>=4.8.4 <5.8.0'
'@typescript-eslint/experimental-utils@5.62.0':
resolution: {integrity: sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==}
@ -2218,45 +2201,32 @@ packages:
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
'@typescript-eslint/parser@8.11.0':
resolution: {integrity: sha512-lmt73NeHdy1Q/2ul295Qy3uninSqi6wQI18XwSpm8w0ZbQXUpjCAWP1Vlv/obudoBiIjJVjlztjQ+d/Md98Yxg==}
'@typescript-eslint/parser@8.18.0':
resolution: {integrity: sha512-hgUZ3kTEpVzKaK3uNibExUYm6SKKOmTU2BOxBSvOYwtJEPdVQ70kZJpPjstlnhCHcuc2WGfSbpKlb/69ttyN5Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
typescript: '>=4.8.4 <5.8.0'
'@typescript-eslint/scope-manager@5.62.0':
resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
'@typescript-eslint/scope-manager@8.11.0':
resolution: {integrity: sha512-Uholz7tWhXmA4r6epo+vaeV7yjdKy5QFCERMjs1kMVsLRKIrSdM6o21W2He9ftp5PP6aWOVpD5zvrvuHZC0bMQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/scope-manager@8.18.0':
resolution: {integrity: sha512-PNGcHop0jkK2WVYGotk/hxj+UFLhXtGPiGtiaWgVBVP1jhMoMCHlTyJA+hEj4rszoSdLTK3fN4oOatrL0Cp+Xw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/type-utils@8.11.0':
resolution: {integrity: sha512-ItiMfJS6pQU0NIKAaybBKkuVzo6IdnAhPFZA/2Mba/uBjuPQPet/8+zh5GtLHwmuFRShZx+8lhIs7/QeDHflOg==}
'@typescript-eslint/type-utils@8.18.0':
resolution: {integrity: sha512-er224jRepVAVLnMF2Q7MZJCq5CsdH2oqjP4dT7K6ij09Kyd+R21r7UVJrF0buMVdZS5QRhDzpvzAxHxabQadow==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.8.0'
'@typescript-eslint/types@5.62.0':
resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
'@typescript-eslint/types@8.11.0':
resolution: {integrity: sha512-tn6sNMHf6EBAYMvmPUaKaVeYvhUsrE6x+bXQTxjQRp360h1giATU0WvgeEys1spbvb5R+VpNOZ+XJmjD8wOUHw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/types@8.18.0':
resolution: {integrity: sha512-FNYxgyTCAnFwTrzpBGq+zrnoTO4x0c1CKYY5MuUTzpScqmY5fmsh2o3+57lqdI3NZucBDCzDgdEbIaNfAjAHQA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@ -2270,15 +2240,6 @@ packages:
typescript:
optional: true
'@typescript-eslint/typescript-estree@8.11.0':
resolution: {integrity: sha512-yHC3s1z1RCHoCz5t06gf7jH24rr3vns08XXhfEqzYpd6Hll3z/3g23JRi0jM8A47UFKNc3u/y5KIMx8Ynbjohg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
'@typescript-eslint/typescript-estree@8.18.0':
resolution: {integrity: sha512-rqQgFRu6yPkauz+ms3nQpohwejS8bvgbPyIDq13cgEDbkXt4LH4OkDMT0/fN1RUtzG8e8AKJyDBoocuQh8qNeg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@ -2291,12 +2252,6 @@ packages:
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
'@typescript-eslint/utils@8.11.0':
resolution: {integrity: sha512-CYiX6WZcbXNJV7UNB4PLDIBtSdRmRI/nb0FMyqHPTQD1rMjA0foPLaPUV39C/MxkTd/QKSeX+Gb34PPsDVC35g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
'@typescript-eslint/utils@8.18.0':
resolution: {integrity: sha512-p6GLdY383i7h5b0Qrfbix3Vc3+J2k6QWw6UMUeY5JGfm3C5LbZ4QIZzJNoNOfgyRe0uuYKjvVOsO/jD4SJO+xg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@ -2308,10 +2263,6 @@ packages:
resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
'@typescript-eslint/visitor-keys@8.11.0':
resolution: {integrity: sha512-EaewX6lxSjRJnc+99+dqzTeoDZUfyrA52d2/HRrkI830kgovWsmIiTfmr0NZorzqic7ga+1bS60lRBUgR3n/Bw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/visitor-keys@8.18.0':
resolution: {integrity: sha512-pCh/qEA8Lb1wVIqNvBke8UaRjJ6wrAWkJO5yyIbs8Yx6TNGYyfNjOo61tLv+WwLvoLPp4BQ8B7AHKijl8NGUfw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@ -3187,8 +3138,8 @@ packages:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
eslint-formatter-gha@1.5.1:
resolution: {integrity: sha512-OSMS0XdM2Z5DhTMfRJx/1NiOH+zMYvrq6VXoARgR7mikwkQ5lG8uKBE2GIbM6sxcX13gI4M8x0vyhLNp3RIG7A==}
eslint-formatter-gha@1.5.2:
resolution: {integrity: sha512-1TY8AYbrIP9DCcbydYW467nTP67eW79bT+oVKdUehO3WPMP8pn2oOZVkDc8yDcWf35+t2Li1elY5Dh6jTjJ3/Q==}
eslint-formatter-json@8.40.0:
resolution: {integrity: sha512-0bXo4At1EoEU23gFfN7wcDeqRXDHLJnvDOuQKD3Q6FkBlk7L2oVNPYg/sciIWdYrUnCBcKuMit3IWXkdSfzChg==}
@ -3201,8 +3152,8 @@ packages:
eslint-import-resolver-node@0.3.9:
resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
eslint-import-resolver-typescript@3.6.3:
resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==}
eslint-import-resolver-typescript@3.7.0:
resolution: {integrity: sha512-Vrwyi8HHxY97K5ebydMtffsWAn1SCR9eol49eCd5fJS4O1WV7PaAjbcjmbfJJSMz/t4Mal212Uz/fQZrOB8mow==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
eslint: '*'
@ -3251,8 +3202,8 @@ packages:
peerDependencies:
eslint: '>=0.8.0'
eslint-plugin-jest@28.8.3:
resolution: {integrity: sha512-HIQ3t9hASLKm2IhIOqnu+ifw7uLZkIlR7RYNv7fMcEi/p0CIiJmfriStQS2LDkgtY4nyLbIZAD+JL347Yc2ETQ==}
eslint-plugin-jest@28.9.0:
resolution: {integrity: sha512-rLu1s1Wf96TgUUxSw6loVIkNtUjq1Re7A9QdCCHSohnvXEBAjuL420h0T/fMmkQlNsQP2GhQzEUpYHPfxBkvYQ==}
engines: {node: ^16.10.0 || ^18.12.0 || >=20.0.0}
peerDependencies:
'@typescript-eslint/eslint-plugin': ^6.0.0 || ^7.0.0 || ^8.0.0
@ -3264,8 +3215,8 @@ packages:
jest:
optional: true
eslint-plugin-promise@7.1.0:
resolution: {integrity: sha512-8trNmPxdAy3W620WKDpaS65NlM5yAumod6XeC4LOb+jxlkG4IVcp68c6dXY2ev+uT4U1PtG57YDV6EGAXN0GbQ==}
eslint-plugin-promise@7.2.1:
resolution: {integrity: sha512-SWKjd+EuvWkYaS+uN2csvj0KoP43YTu7+phKQ5v+xw6+A0gutVX2yqCeCkC3uLCJFiPfR2dD8Es5L7yUsmvEaA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
@ -5649,6 +5600,9 @@ packages:
resolution: {integrity: sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==}
engines: {node: ^18.17.0 || >=20.5.0}
stable-hash@0.0.4:
resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==}
stack-utils@2.0.6:
resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
engines: {node: '>=10'}
@ -5991,8 +5945,8 @@ packages:
resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
engines: {node: '>=12.20'}
type-fest@4.30.0:
resolution: {integrity: sha512-G6zXWS1dLj6eagy6sVhOMQiLtJdxQBHIA9Z6HFUNLOlr6MFOgzV8wvmidtPONfPtEUv0uZsy77XJNzTAfwPDaA==}
type-fest@4.30.1:
resolution: {integrity: sha512-ojFL7eDMX2NF0xMbDwPZJ8sb7ckqtlAi1GsmgsFXvErT9kFTk1r0DuQKvrCh73M6D4nngeHJmvogF9OluXs7Hw==}
engines: {node: '>=16'}
typed-array-buffer@1.0.2:
@ -7771,33 +7725,29 @@ snapshots:
optionalDependencies:
typescript: 5.7.2
'@opentelemetry/api-logs@0.55.0':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/api-logs@0.56.0':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/api@1.9.0': {}
'@opentelemetry/context-async-hooks@1.28.0(@opentelemetry/api@1.9.0)':
'@opentelemetry/context-async-hooks@1.29.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core@1.28.0(@opentelemetry/api@1.9.0)':
'@opentelemetry/core@1.29.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/semantic-conventions': 1.27.0
'@opentelemetry/semantic-conventions': 1.28.0
'@opentelemetry/exporter-trace-otlp-http@0.55.0(@opentelemetry/api@1.9.0)':
'@opentelemetry/exporter-trace-otlp-http@0.56.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0)
'@opentelemetry/otlp-exporter-base': 0.55.0(@opentelemetry/api@1.9.0)
'@opentelemetry/otlp-transformer': 0.55.0(@opentelemetry/api@1.9.0)
'@opentelemetry/resources': 1.28.0(@opentelemetry/api@1.9.0)
'@opentelemetry/sdk-trace-base': 1.28.0(@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/instrumentation-bunyan@0.44.0(@opentelemetry/api@1.9.0)':
dependencies:
@ -7808,29 +7758,17 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation-http@0.55.0(@opentelemetry/api@1.9.0)':
'@opentelemetry/instrumentation-http@0.56.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.27.0
'@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.56.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.55.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/api-logs': 0.55.0
'@types/shimmer': 1.2.0
import-in-the-middle: 1.11.3
require-in-the-middle: 7.4.0
semver: 7.6.3
shimmer: 1.2.1
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
@ -7843,71 +7781,69 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@opentelemetry/otlp-exporter-base@0.55.0(@opentelemetry/api@1.9.0)':
'@opentelemetry/otlp-exporter-base@0.56.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0)
'@opentelemetry/otlp-transformer': 0.55.0(@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/otlp-transformer@0.55.0(@opentelemetry/api@1.9.0)':
'@opentelemetry/otlp-transformer@0.56.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/api-logs': 0.55.0
'@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0)
'@opentelemetry/resources': 1.28.0(@opentelemetry/api@1.9.0)
'@opentelemetry/sdk-logs': 0.55.0(@opentelemetry/api@1.9.0)
'@opentelemetry/sdk-metrics': 1.28.0(@opentelemetry/api@1.9.0)
'@opentelemetry/sdk-trace-base': 1.28.0(@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)
protobufjs: 7.4.0
'@opentelemetry/propagator-b3@1.28.0(@opentelemetry/api@1.9.0)':
'@opentelemetry/propagator-b3@1.29.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0)
'@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0)
'@opentelemetry/propagator-jaeger@1.28.0(@opentelemetry/api@1.9.0)':
'@opentelemetry/propagator-jaeger@1.29.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0)
'@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0)
'@opentelemetry/resources@1.28.0(@opentelemetry/api@1.9.0)':
'@opentelemetry/resources@1.29.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.27.0
'@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.28.0
'@opentelemetry/sdk-logs@0.55.0(@opentelemetry/api@1.9.0)':
'@opentelemetry/sdk-logs@0.56.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/api-logs': 0.55.0
'@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0)
'@opentelemetry/resources': 1.28.0(@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-metrics@1.28.0(@opentelemetry/api@1.9.0)':
'@opentelemetry/sdk-metrics@1.29.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0)
'@opentelemetry/resources': 1.28.0(@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/sdk-trace-base@1.28.0(@opentelemetry/api@1.9.0)':
'@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0)
'@opentelemetry/resources': 1.28.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.27.0
'@opentelemetry/core': 1.29.0(@opentelemetry/api@1.9.0)
'@opentelemetry/resources': 1.29.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.28.0
'@opentelemetry/sdk-trace-node@1.28.0(@opentelemetry/api@1.9.0)':
'@opentelemetry/sdk-trace-node@1.29.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/context-async-hooks': 1.28.0(@opentelemetry/api@1.9.0)
'@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0)
'@opentelemetry/propagator-b3': 1.28.0(@opentelemetry/api@1.9.0)
'@opentelemetry/propagator-jaeger': 1.28.0(@opentelemetry/api@1.9.0)
'@opentelemetry/sdk-trace-base': 1.28.0(@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)
semver: 7.6.3
'@opentelemetry/semantic-conventions@1.27.0': {}
'@opentelemetry/semantic-conventions@1.28.0': {}
'@pkgjs/parseargs@0.11.0':
@ -8838,20 +8774,19 @@ snapshots:
'@types/node': 20.17.10
optional: true
'@typescript-eslint/eslint-plugin@8.11.0(@typescript-eslint/parser@8.11.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2)':
'@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2)':
dependencies:
'@eslint-community/regexpp': 4.12.1
'@typescript-eslint/parser': 8.11.0(eslint@8.57.1)(typescript@5.7.2)
'@typescript-eslint/scope-manager': 8.11.0
'@typescript-eslint/type-utils': 8.11.0(eslint@8.57.1)(typescript@5.7.2)
'@typescript-eslint/utils': 8.11.0(eslint@8.57.1)(typescript@5.7.2)
'@typescript-eslint/visitor-keys': 8.11.0
'@typescript-eslint/parser': 8.18.0(eslint@8.57.1)(typescript@5.7.2)
'@typescript-eslint/scope-manager': 8.18.0
'@typescript-eslint/type-utils': 8.18.0(eslint@8.57.1)(typescript@5.7.2)
'@typescript-eslint/utils': 8.18.0(eslint@8.57.1)(typescript@5.7.2)
'@typescript-eslint/visitor-keys': 8.18.0
eslint: 8.57.1
graphemer: 1.4.0
ignore: 5.3.2
natural-compare: 1.4.0
ts-api-utils: 1.4.3(typescript@5.7.2)
optionalDependencies:
typescript: 5.7.2
transitivePeerDependencies:
- supports-color
@ -8864,15 +8799,14 @@ snapshots:
- supports-color
- typescript
'@typescript-eslint/parser@8.11.0(eslint@8.57.1)(typescript@5.7.2)':
'@typescript-eslint/parser@8.18.0(eslint@8.57.1)(typescript@5.7.2)':
dependencies:
'@typescript-eslint/scope-manager': 8.11.0
'@typescript-eslint/types': 8.11.0
'@typescript-eslint/typescript-estree': 8.11.0(typescript@5.7.2)
'@typescript-eslint/visitor-keys': 8.11.0
'@typescript-eslint/scope-manager': 8.18.0
'@typescript-eslint/types': 8.18.0
'@typescript-eslint/typescript-estree': 8.18.0(typescript@5.7.2)
'@typescript-eslint/visitor-keys': 8.18.0
debug: 4.4.0
eslint: 8.57.1
optionalDependencies:
typescript: 5.7.2
transitivePeerDependencies:
- supports-color
@ -8882,32 +8816,24 @@ snapshots:
'@typescript-eslint/types': 5.62.0
'@typescript-eslint/visitor-keys': 5.62.0
'@typescript-eslint/scope-manager@8.11.0':
dependencies:
'@typescript-eslint/types': 8.11.0
'@typescript-eslint/visitor-keys': 8.11.0
'@typescript-eslint/scope-manager@8.18.0':
dependencies:
'@typescript-eslint/types': 8.18.0
'@typescript-eslint/visitor-keys': 8.18.0
'@typescript-eslint/type-utils@8.11.0(eslint@8.57.1)(typescript@5.7.2)':
'@typescript-eslint/type-utils@8.18.0(eslint@8.57.1)(typescript@5.7.2)':
dependencies:
'@typescript-eslint/typescript-estree': 8.11.0(typescript@5.7.2)
'@typescript-eslint/utils': 8.11.0(eslint@8.57.1)(typescript@5.7.2)
'@typescript-eslint/typescript-estree': 8.18.0(typescript@5.7.2)
'@typescript-eslint/utils': 8.18.0(eslint@8.57.1)(typescript@5.7.2)
debug: 4.4.0
eslint: 8.57.1
ts-api-utils: 1.4.3(typescript@5.7.2)
optionalDependencies:
typescript: 5.7.2
transitivePeerDependencies:
- eslint
- supports-color
'@typescript-eslint/types@5.62.0': {}
'@typescript-eslint/types@8.11.0': {}
'@typescript-eslint/types@8.18.0': {}
'@typescript-eslint/typescript-estree@5.62.0(typescript@5.7.2)':
@ -8924,21 +8850,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/typescript-estree@8.11.0(typescript@5.7.2)':
dependencies:
'@typescript-eslint/types': 8.11.0
'@typescript-eslint/visitor-keys': 8.11.0
debug: 4.4.0
fast-glob: 3.3.2
is-glob: 4.0.3
minimatch: 9.0.5
semver: 7.6.3
ts-api-utils: 1.4.3(typescript@5.7.2)
optionalDependencies:
typescript: 5.7.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/typescript-estree@8.18.0(typescript@5.7.2)':
dependencies:
'@typescript-eslint/types': 8.18.0
@ -8968,17 +8879,6 @@ snapshots:
- supports-color
- typescript
'@typescript-eslint/utils@8.11.0(eslint@8.57.1)(typescript@5.7.2)':
dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1)
'@typescript-eslint/scope-manager': 8.11.0
'@typescript-eslint/types': 8.11.0
'@typescript-eslint/typescript-estree': 8.11.0(typescript@5.7.2)
eslint: 8.57.1
transitivePeerDependencies:
- supports-color
- typescript
'@typescript-eslint/utils@8.18.0(eslint@8.57.1)(typescript@5.7.2)':
dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1)
@ -8995,11 +8895,6 @@ snapshots:
'@typescript-eslint/types': 5.62.0
eslint-visitor-keys: 3.4.3
'@typescript-eslint/visitor-keys@8.11.0':
dependencies:
'@typescript-eslint/types': 8.11.0
eslint-visitor-keys: 3.4.3
'@typescript-eslint/visitor-keys@8.18.0':
dependencies:
'@typescript-eslint/types': 8.18.0
@ -9967,7 +9862,7 @@ snapshots:
escape-string-regexp@5.0.0: {}
eslint-formatter-gha@1.5.1:
eslint-formatter-gha@1.5.2:
dependencies:
eslint-formatter-json: 8.40.0
eslint-formatter-stylish: 8.40.0
@ -9988,37 +9883,34 @@ snapshots:
transitivePeerDependencies:
- supports-color
eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.11.0(eslint@8.57.1)(typescript@5.7.2))(eslint-plugin-import@2.31.0)(eslint@8.57.1):
eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@8.57.1):
dependencies:
'@nolyfill/is-core-module': 1.0.39
debug: 4.4.0
enhanced-resolve: 5.17.1
eslint: 8.57.1
eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.11.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
fast-glob: 3.3.2
get-tsconfig: 4.8.1
is-bun-module: 1.3.0
is-glob: 4.0.3
stable-hash: 0.0.4
optionalDependencies:
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.11.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1)
transitivePeerDependencies:
- '@typescript-eslint/parser'
- eslint-import-resolver-node
- eslint-import-resolver-webpack
- supports-color
eslint-module-utils@2.12.0(@typescript-eslint/parser@8.11.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1):
eslint-module-utils@2.12.0(@typescript-eslint/parser@8.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1):
dependencies:
debug: 3.2.7
optionalDependencies:
'@typescript-eslint/parser': 8.11.0(eslint@8.57.1)(typescript@5.7.2)
'@typescript-eslint/parser': 8.18.0(eslint@8.57.1)(typescript@5.7.2)
eslint: 8.57.1
eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.11.0(eslint@8.57.1)(typescript@5.7.2))(eslint-plugin-import@2.31.0)(eslint@8.57.1)
eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@8.57.1)
transitivePeerDependencies:
- supports-color
eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.11.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1):
eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.8
@ -10029,7 +9921,7 @@ snapshots:
doctrine: 2.1.0
eslint: 8.57.1
eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.11.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1)
hasown: 2.0.2
is-core-module: 2.16.0
is-glob: 4.0.3
@ -10041,7 +9933,7 @@ snapshots:
string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0
optionalDependencies:
'@typescript-eslint/parser': 8.11.0(eslint@8.57.1)(typescript@5.7.2)
'@typescript-eslint/parser': 8.18.0(eslint@8.57.1)(typescript@5.7.2)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
@ -10051,19 +9943,20 @@ snapshots:
dependencies:
eslint: 8.57.1
eslint-plugin-jest@28.8.3(@typescript-eslint/eslint-plugin@8.11.0(@typescript-eslint/parser@8.11.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2):
eslint-plugin-jest@28.9.0(@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2):
dependencies:
'@typescript-eslint/utils': 8.18.0(eslint@8.57.1)(typescript@5.7.2)
eslint: 8.57.1
optionalDependencies:
'@typescript-eslint/eslint-plugin': 8.11.0(@typescript-eslint/parser@8.11.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2)
'@typescript-eslint/eslint-plugin': 8.18.0(@typescript-eslint/parser@8.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2)
jest: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.1)(@types/node@20.17.10)(typescript@5.7.2))
transitivePeerDependencies:
- supports-color
- typescript
eslint-plugin-promise@7.1.0(eslint@8.57.1):
eslint-plugin-promise@7.2.1(eslint@8.57.1):
dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1)
eslint: 8.57.1
eslint-plugin-typescript-enum@2.1.0(eslint@8.57.1)(typescript@5.7.2):
@ -12176,7 +12069,7 @@ snapshots:
dependencies:
'@babel/code-frame': 7.26.2
index-to-position: 0.1.2
type-fest: 4.30.0
type-fest: 4.30.1
parse-link-header@2.0.0:
dependencies:
@ -12380,7 +12273,7 @@ snapshots:
dependencies:
find-up-simple: 1.0.0
read-pkg: 9.0.1
type-fest: 4.30.0
type-fest: 4.30.1
read-pkg-up@7.0.1:
dependencies:
@ -12400,7 +12293,7 @@ snapshots:
'@types/normalize-package-data': 2.4.4
normalize-package-data: 6.0.2
parse-json: 8.1.0
type-fest: 4.30.0
type-fest: 4.30.1
unicorn-magic: 0.1.0
read-yaml-file@2.1.0:
@ -12830,6 +12723,8 @@ snapshots:
dependencies:
minipass: 7.1.2
stable-hash@0.0.4: {}
stack-utils@2.0.6:
dependencies:
escape-string-regexp: 2.0.0
@ -13165,7 +13060,7 @@ snapshots:
type-fest@2.19.0: {}
type-fest@4.30.0: {}
type-fest@4.30.1: {}
typed-array-buffer@1.0.2:
dependencies:

View file

@ -5,19 +5,19 @@ ARG BASE_IMAGE_TYPE=slim
# --------------------------------------
# slim image
# --------------------------------------
FROM ghcr.io/renovatebot/base-image:9.23.2@sha256:9d9bd9f3769a4a168ad68dc6fcc664dd370909fc1db4f665a2b9d1fe0ed73828 AS slim-base
FROM ghcr.io/renovatebot/base-image:9.26.0@sha256:02405ce6467fac5c5a48ab36e51a582ec72026a86e9641b185032b396388eec3 AS slim-base
# --------------------------------------
# full image
# --------------------------------------
FROM ghcr.io/renovatebot/base-image:9.23.2-full@sha256:85c47daceb3f56ee8934c3772bb78dfd5e798b55eadf6b4a1a35ed226056e961 AS full-base
FROM ghcr.io/renovatebot/base-image:9.26.0-full@sha256:6b828c94fe7b4d3f4b2154df888c83926c46715846871d3a1794a66bb86da86a AS full-base
ENV RENOVATE_BINARY_SOURCE=global
# --------------------------------------
# build image
# --------------------------------------
FROM --platform=$BUILDPLATFORM ghcr.io/renovatebot/base-image:9.23.2@sha256:9d9bd9f3769a4a168ad68dc6fcc664dd370909fc1db4f665a2b9d1fe0ed73828 AS build
FROM --platform=$BUILDPLATFORM ghcr.io/renovatebot/base-image:9.26.0@sha256:02405ce6467fac5c5a48ab36e51a582ec72026a86e9641b185032b396388eec3 AS build
# We want a specific node version here
# renovate: datasource=node-version

View file

@ -27,7 +27,7 @@ for FILTER in "$TYPE_LABELS_FILTER" "$PRIORITY_LABELS_FILTER"; do
HAS_ISSUES_MISSING_LABELS=true
# Create a list of issue numbers
FORMATTED_OUTPUT=$(echo "$ISSUES_MISSING_LABEL" | jq -r '.[].number' | sed 's/^/- #/')
FORMATTED_OUTPUT=$(echo "$ISSUES_MISSING_LABEL" | jq -r '.[].number' | sed 's/^/- https:\/\/redirect.github.com\/renovatebot\/renovate\/issues\//')
# Count the issues and decide if the output should be singular or plural
ISSUE_COUNT=$(echo "$ISSUES_MISSING_LABEL" | jq '. | length')