From 213e4cd111325b9d0def137032b53c08d751681e Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Mon, 11 Mar 2024 16:37:03 -0300 Subject: [PATCH 01/12] refactor(bitbucket): Use schema for repo result validation --- lib/modules/platform/bitbucket/index.spec.ts | 70 ++++++++++++++++---- lib/modules/platform/bitbucket/index.ts | 28 +++----- lib/modules/platform/bitbucket/schema.ts | 35 ++++++++++ lib/modules/platform/bitbucket/types.ts | 20 ------ lib/modules/platform/bitbucket/utils.ts | 14 ---- 5 files changed, 102 insertions(+), 65 deletions(-) diff --git a/lib/modules/platform/bitbucket/index.spec.ts b/lib/modules/platform/bitbucket/index.spec.ts index e958ea7c07d339..e9569f3841e00a 100644 --- a/lib/modules/platform/bitbucket/index.spec.ts +++ b/lib/modules/platform/bitbucket/index.spec.ts @@ -56,8 +56,12 @@ describe('modules/platform/bitbucket/index', () => { const scope = existingScope ?? httpMock.scope(baseUrl); scope.get(`/2.0/repositories/${repository}`).reply(200, { - owner: {}, + owner: { username: 'some' }, mainbranch: { name: 'master' }, + has_issues: true, + uuid: '123', + full_name: 'some/repo', + is_private: false, ...repoResp, }); @@ -143,12 +147,23 @@ describe('modules/platform/bitbucket/index', () => { httpMock .scope(baseUrl) .get('/2.0/repositories/some/repo') - .reply(200, { owner: {}, mainbranch: { name: 'master' } }); + .reply(200, { + owner: { username: 'some' }, + mainbranch: { name: 'master' }, + has_issues: true, + uuid: '123', + full_name: 'some/repo', + is_private: false, + }); expect( await bitbucket.initRepo({ repository: 'some/repo', }), - ).toMatchSnapshot(); + ).toMatchObject({ + defaultBranch: 'master', + isFork: false, + repoFingerprint: expect.any(String), + }); }); it('works with only token', async () => { @@ -159,16 +174,22 @@ describe('modules/platform/bitbucket/index', () => { httpMock .scope(baseUrl) .get('/2.0/repositories/some/repo') - .reply(200, { owner: {}, mainbranch: { name: 'master' } }); + .reply(200, { + owner: { username: 'some' }, + mainbranch: { name: 'master' }, + has_issues: true, + uuid: '123', + full_name: 'some/repo', + is_private: false, + }); expect( await bitbucket.initRepo({ repository: 'some/repo', }), - ).toEqual({ + ).toMatchObject({ defaultBranch: 'master', isFork: false, - repoFingerprint: - '56653db0e9341ef4957c92bb78ee668b0a3f03c75b77db94d520230557385fca344cc1f593191e3594183b5b050909d29996c040045e8852f21774617b240642', + repoFingerprint: expect.any(String), }); }); }); @@ -178,7 +199,14 @@ describe('modules/platform/bitbucket/index', () => { httpMock .scope(baseUrl) .get('/2.0/repositories/some/repo') - .reply(200, { owner: {}, mainbranch: { name: 'master' } }); + .reply(200, { + owner: { username: 'some' }, + mainbranch: { name: 'master' }, + has_issues: true, + uuid: '123', + full_name: 'some/repo', + is_private: false, + }); const res = await bitbucket.initRepo({ repository: 'some/repo', @@ -192,7 +220,14 @@ describe('modules/platform/bitbucket/index', () => { httpMock .scope(baseUrl) .get('/2.0/repositories/some/repo') - .reply(200, { owner: {}, mainbranch: { name: 'master' } }) + .reply(200, { + owner: { username: 'some' }, + mainbranch: { name: 'master' }, + has_issues: true, + uuid: '123', + full_name: 'some/repo', + is_private: false, + }) .get('/2.0/repositories/some/repo/branching-model') .reply(200, { development: { name: 'develop', branch: { name: 'develop' } }, @@ -210,7 +245,14 @@ describe('modules/platform/bitbucket/index', () => { httpMock .scope(baseUrl) .get('/2.0/repositories/some/repo') - .reply(200, { owner: {}, mainbranch: { name: 'master' } }) + .reply(200, { + owner: { username: 'some' }, + mainbranch: { name: 'master' }, + has_issues: true, + uuid: '123', + full_name: 'some/repo', + is_private: false, + }) .get('/2.0/repositories/some/repo/branching-model') .reply(200, { development: { name: 'develop' }, @@ -579,8 +621,8 @@ describe('modules/platform/bitbucket/index', () => { }); describe('ensureIssueClosing()', () => { - it('does not throw', async () => { - await initRepoMock(); + it('does not throw for disabled issues', async () => { + await initRepoMock({ repository: 'some/repo' }, { has_issues: false }); await expect(bitbucket.ensureIssueClosing('title')).toResolve(); }); @@ -613,8 +655,8 @@ describe('modules/platform/bitbucket/index', () => { }); describe('getIssueList()', () => { - it('has no issues', async () => { - await initRepoMock(); + it('returns empty array for disabled issues', async () => { + await initRepoMock({ repository: 'some/repo' }, { has_issues: false }); expect(await bitbucket.getIssueList()).toEqual([]); }); diff --git a/lib/modules/platform/bitbucket/index.ts b/lib/modules/platform/bitbucket/index.ts index dc6301ae89d5a1..e5006212de483c 100644 --- a/lib/modules/platform/bitbucket/index.ts +++ b/lib/modules/platform/bitbucket/index.ts @@ -42,11 +42,10 @@ import type { PagedResult, PrResponse, RepoBranchingModel, - RepoInfo, - RepoInfoBody, } from './types'; import * as utils from './utils'; import { mergeBodyTransformer } from './utils'; +import { RepoInfo, RepositoryNames } from './schema'; export const id = 'bitbucket'; @@ -116,15 +115,12 @@ export async function initPlatform({ export async function getRepos(): Promise { logger.debug('Autodiscovering Bitbucket Cloud repositories'); try { - const repos = ( - await bitbucketHttp.getJson>( - `/2.0/repositories/?role=contributor`, - { - paginate: true, - }, - ) - ).body.values; - return repos.map((repo) => repo.full_name); + const { body: repoNames } = await bitbucketHttp.getJson( + `/2.0/repositories/?role=contributor`, + { paginate: true }, + RepositoryNames, + ); + return repoNames; } catch (err) /* istanbul ignore next */ { logger.error({ err }, `bitbucket getRepos error`); throw err; @@ -183,13 +179,11 @@ export async function initRepo({ let info: RepoInfo; let mainBranch: string; try { - info = utils.repoInfoTransformer( - ( - await bitbucketHttp.getJson( - `/2.0/repositories/${repository}`, - ) - ).body, + const { body: repoInfo } = await bitbucketHttp.getJson( + `/2.0/repositories/${repository}`, + RepoInfo, ); + info = repoInfo; mainBranch = info.mainbranch; diff --git a/lib/modules/platform/bitbucket/schema.ts b/lib/modules/platform/bitbucket/schema.ts index 48104f2dc55e90..13e2fd4e50de55 100644 --- a/lib/modules/platform/bitbucket/schema.ts +++ b/lib/modules/platform/bitbucket/schema.ts @@ -20,3 +20,38 @@ const PagedSchema = z.object({ export const PagedSourceResultsSchema = PagedSchema.extend({ values: z.array(SourceResultsSchema), }); + +export const RepoInfo = z + .object({ + parent: z.unknown().optional(), + owner: z.object({ + username: z.string(), + }), + mainbranch: z.object({ + name: z.string(), + }), + has_issues: z.boolean(), + uuid: z.string(), + full_name: z.string(), + is_private: z.boolean(), + }) + .transform((repoInfoBody) => ({ + isFork: !!repoInfoBody.parent, + owner: repoInfoBody.owner.username, + mainbranch: repoInfoBody.mainbranch.name, + mergeMethod: 'merge', + has_issues: repoInfoBody.has_issues, + uuid: repoInfoBody.uuid, + is_private: repoInfoBody.is_private, + })); +export type RepoInfo = z.infer; + +export const RepositoryNames = z + .object({ + values: z.array( + z.object({ + full_name: z.string(), + }), + ), + }) + .transform((body) => body.values.map((repo) => repo.full_name)); diff --git a/lib/modules/platform/bitbucket/types.ts b/lib/modules/platform/bitbucket/types.ts index 35fba3d1638a5e..26ef43e3125b53 100644 --- a/lib/modules/platform/bitbucket/types.ts +++ b/lib/modules/platform/bitbucket/types.ts @@ -26,16 +26,6 @@ export interface PagedResult { values: T[]; } -export interface RepoInfo { - isFork: boolean; - owner: string; - mainbranch: string; - mergeMethod: string; - has_issues: boolean; - uuid: string; - is_private: boolean; -} - export interface RepoBranchingModel { development: { name: string; @@ -58,16 +48,6 @@ export interface BitbucketStatus { state: BitbucketBranchState; } -export interface RepoInfoBody { - parent?: any; - owner: { username: string }; - mainbranch: { name: string }; - has_issues: boolean; - uuid: string; - full_name: string; - is_private: boolean; -} - export interface PrResponse { id: number; title: string; diff --git a/lib/modules/platform/bitbucket/utils.ts b/lib/modules/platform/bitbucket/utils.ts index 852f61611164f5..f0d2fa7f9a9676 100644 --- a/lib/modules/platform/bitbucket/utils.ts +++ b/lib/modules/platform/bitbucket/utils.ts @@ -7,22 +7,8 @@ import type { BitbucketMergeStrategy, MergeRequestBody, PrResponse, - RepoInfo, - RepoInfoBody, } from './types'; -export function repoInfoTransformer(repoInfoBody: RepoInfoBody): RepoInfo { - return { - isFork: !!repoInfoBody.parent, - owner: repoInfoBody.owner.username, - mainbranch: repoInfoBody.mainbranch.name, - mergeMethod: 'merge', - has_issues: repoInfoBody.has_issues, - uuid: repoInfoBody.uuid, - is_private: repoInfoBody.is_private, - }; -} - const bitbucketMergeStrategies: Map = new Map([ ['squash', 'squash'], From a255472562b6513452fef413dd5731fe64faa41c Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Mon, 11 Mar 2024 16:44:11 -0300 Subject: [PATCH 02/12] Fix snapshot --- .../platform/bitbucket/__snapshots__/index.spec.ts.snap | 8 -------- 1 file changed, 8 deletions(-) diff --git a/lib/modules/platform/bitbucket/__snapshots__/index.spec.ts.snap b/lib/modules/platform/bitbucket/__snapshots__/index.spec.ts.snap index 1818c5b6361ede..b009eb1bde00d7 100644 --- a/lib/modules/platform/bitbucket/__snapshots__/index.spec.ts.snap +++ b/lib/modules/platform/bitbucket/__snapshots__/index.spec.ts.snap @@ -132,14 +132,6 @@ exports[`modules/platform/bitbucket/index getPrList() filters PR list by author ] `; -exports[`modules/platform/bitbucket/index initRepo() works with username and password 1`] = ` -{ - "defaultBranch": "master", - "isFork": false, - "repoFingerprint": "56653db0e9341ef4957c92bb78ee668b0a3f03c75b77db94d520230557385fca344cc1f593191e3594183b5b050909d29996c040045e8852f21774617b240642", -} -`; - exports[`modules/platform/bitbucket/index massageMarkdown() returns diff files 1`] = ` "**foo** From c1c964a1387fce6c31318fc8ffa5c8ce819c8b52 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Mon, 11 Mar 2024 16:47:35 -0300 Subject: [PATCH 03/12] Fix bitbucket-tags --- lib/modules/datasource/bitbucket-tags/index.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/modules/datasource/bitbucket-tags/index.ts b/lib/modules/datasource/bitbucket-tags/index.ts index 7a2457c0c3a324..57149f7e74e77e 100644 --- a/lib/modules/datasource/bitbucket-tags/index.ts +++ b/lib/modules/datasource/bitbucket-tags/index.ts @@ -2,7 +2,8 @@ import { cache } from '../../../util/cache/package/decorator'; import type { PackageCacheNamespace } from '../../../util/cache/package/types'; import { BitbucketHttp } from '../../../util/http/bitbucket'; import { ensureTrailingSlash } from '../../../util/url'; -import type { PagedResult, RepoInfoBody } from '../../platform/bitbucket/types'; +import { RepoInfo } from '../../platform/bitbucket/schema'; +import type { PagedResult } from '../../platform/bitbucket/types'; import { Datasource } from '../datasource'; import type { DigestConfig, GetReleasesConfig, ReleaseResult } from '../types'; import type { BitbucketCommit, BitbucketTag } from './types'; @@ -102,10 +103,8 @@ export class BitbucketTagsDatasource extends Datasource { }) async getMainBranch(repo: string): Promise { return ( - await this.bitbucketHttp.getJson( - `/2.0/repositories/${repo}`, - ) - ).body.mainbranch.name; + await this.bitbucketHttp.getJson(`/2.0/repositories/${repo}`, RepoInfo) + ).body.mainbranch; } // getDigest fetched the latest commit for repository main branch From bb2ba962896b3cc10b67604a11115086e166c418 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Mon, 11 Mar 2024 16:52:32 -0300 Subject: [PATCH 04/12] Fixes --- .../datasource/bitbucket-tags/index.spec.ts | 18 ++++++++++++++++-- lib/modules/platform/bitbucket/index.ts | 2 +- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/lib/modules/datasource/bitbucket-tags/index.spec.ts b/lib/modules/datasource/bitbucket-tags/index.spec.ts index 4a8780d689e67f..2be4fa60df04de 100644 --- a/lib/modules/datasource/bitbucket-tags/index.spec.ts +++ b/lib/modules/datasource/bitbucket-tags/index.spec.ts @@ -62,7 +62,14 @@ describe('modules/datasource/bitbucket-tags/index', () => { httpMock .scope('https://api.bitbucket.org') .get('/2.0/repositories/some/dep2') - .reply(200, { mainbranch: { name: 'master' } }); + .reply(200, { + owner: { username: 'some' }, + mainbranch: { name: 'master' }, + has_issues: true, + uuid: '123', + full_name: 'some/repo', + is_private: false, + }); httpMock .scope('https://api.bitbucket.org') .get('/2.0/repositories/some/dep2/commits/master') @@ -87,7 +94,14 @@ describe('modules/datasource/bitbucket-tags/index', () => { httpMock .scope('https://api.bitbucket.org') .get('/2.0/repositories/some/dep2') - .reply(200, { mainbranch: { name: 'master' } }); + .reply(200, { + owner: { username: 'some' }, + mainbranch: { name: 'master' }, + has_issues: true, + uuid: '123', + full_name: 'some/repo', + is_private: false, + }); httpMock .scope('https://api.bitbucket.org') .get('/2.0/repositories/some/dep2/commits/master') diff --git a/lib/modules/platform/bitbucket/index.ts b/lib/modules/platform/bitbucket/index.ts index e5006212de483c..9a75ec9bfe3832 100644 --- a/lib/modules/platform/bitbucket/index.ts +++ b/lib/modules/platform/bitbucket/index.ts @@ -33,6 +33,7 @@ import { smartTruncate } from '../utils/pr-body'; import { readOnlyIssueBody } from '../utils/read-only-issue-body'; import * as comments from './comments'; import { BitbucketPrCache } from './pr-cache'; +import { RepoInfo, RepositoryNames } from './schema'; import type { Account, BitbucketStatus, @@ -45,7 +46,6 @@ import type { } from './types'; import * as utils from './utils'; import { mergeBodyTransformer } from './utils'; -import { RepoInfo, RepositoryNames } from './schema'; export const id = 'bitbucket'; From aeea7fa119253de9630bb47049e5b856c4db1984 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Tue, 12 Mar 2024 17:50:05 -0300 Subject: [PATCH 05/12] Catch clause for `parent` field schema --- lib/modules/platform/bitbucket/schema.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/modules/platform/bitbucket/schema.ts b/lib/modules/platform/bitbucket/schema.ts index 13e2fd4e50de55..7216800fa52d10 100644 --- a/lib/modules/platform/bitbucket/schema.ts +++ b/lib/modules/platform/bitbucket/schema.ts @@ -23,7 +23,7 @@ export const PagedSourceResultsSchema = PagedSchema.extend({ export const RepoInfo = z .object({ - parent: z.unknown().optional(), + parent: z.unknown().optional().catch(undefined), owner: z.object({ username: z.string(), }), From ec9fdcb6dcc91e45e29d7fd39145c8dec58e4eac Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Tue, 12 Mar 2024 18:33:18 -0300 Subject: [PATCH 06/12] Infer repo owner from `full_name` --- lib/modules/platform/bitbucket/schema.ts | 32 ++++++++++++++++-------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/lib/modules/platform/bitbucket/schema.ts b/lib/modules/platform/bitbucket/schema.ts index 7216800fa52d10..605410d3f3be6b 100644 --- a/lib/modules/platform/bitbucket/schema.ts +++ b/lib/modules/platform/bitbucket/schema.ts @@ -25,25 +25,35 @@ export const RepoInfo = z .object({ parent: z.unknown().optional().catch(undefined), owner: z.object({ - username: z.string(), + username: z.string().optional(), }), mainbranch: z.object({ name: z.string(), }), has_issues: z.boolean(), uuid: z.string(), - full_name: z.string(), + full_name: z + .string() + .regex( + /^[^/]+\/[^/]+$/, + 'Expected repository full_name to be in the format "owner/repo"', + ), is_private: z.boolean(), }) - .transform((repoInfoBody) => ({ - isFork: !!repoInfoBody.parent, - owner: repoInfoBody.owner.username, - mainbranch: repoInfoBody.mainbranch.name, - mergeMethod: 'merge', - has_issues: repoInfoBody.has_issues, - uuid: repoInfoBody.uuid, - is_private: repoInfoBody.is_private, - })); + .transform((repoInfoBody) => { + const isFork = !!repoInfoBody.parent; + const [owner] = repoInfoBody.full_name.split('/'); + + return { + isFork, + owner, + mainbranch: repoInfoBody.mainbranch.name, + mergeMethod: 'merge', + has_issues: repoInfoBody.has_issues, + uuid: repoInfoBody.uuid, + is_private: repoInfoBody.is_private, + }; + }); export type RepoInfo = z.infer; export const RepositoryNames = z From 7f9d4400c55db14348ac9066d48bc6fa95c8bfe5 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Tue, 12 Mar 2024 18:34:27 -0300 Subject: [PATCH 07/12] Remove `owner` field --- lib/modules/platform/bitbucket/schema.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/modules/platform/bitbucket/schema.ts b/lib/modules/platform/bitbucket/schema.ts index 605410d3f3be6b..6caece178e598b 100644 --- a/lib/modules/platform/bitbucket/schema.ts +++ b/lib/modules/platform/bitbucket/schema.ts @@ -24,9 +24,6 @@ export const PagedSourceResultsSchema = PagedSchema.extend({ export const RepoInfo = z .object({ parent: z.unknown().optional().catch(undefined), - owner: z.object({ - username: z.string().optional(), - }), mainbranch: z.object({ name: z.string(), }), From 340d56d3a74446d7ef860a19b06c75234d54459b Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Mon, 18 Mar 2024 11:19:15 -0300 Subject: [PATCH 08/12] Catch and log some of schema errors --- lib/modules/platform/bitbucket/index.spec.ts | 24 -------------------- lib/modules/platform/bitbucket/schema.ts | 16 ++++++++++--- 2 files changed, 13 insertions(+), 27 deletions(-) diff --git a/lib/modules/platform/bitbucket/index.spec.ts b/lib/modules/platform/bitbucket/index.spec.ts index 1f756d6317bfb5..66fd23ac131a2e 100644 --- a/lib/modules/platform/bitbucket/index.spec.ts +++ b/lib/modules/platform/bitbucket/index.spec.ts @@ -57,10 +57,8 @@ describe('modules/platform/bitbucket/index', () => { scope.get(`/2.0/repositories/${repository}`).reply(200, { mainbranch: { name: 'master' }, - has_issues: true, uuid: '123', full_name: 'some/repo', - is_private: false, ...repoResp, }); @@ -137,17 +135,13 @@ describe('modules/platform/bitbucket/index', () => { values: [ { mainbranch: { name: 'master' }, - has_issues: true, uuid: '111', full_name: 'foo/bar', - is_private: false, }, { mainbranch: { name: 'master' }, - has_issues: true, uuid: '222', full_name: 'some/repo', - is_private: false, }, ], }); @@ -163,18 +157,14 @@ describe('modules/platform/bitbucket/index', () => { values: [ { mainbranch: { name: 'master' }, - has_issues: true, uuid: '111', full_name: 'foo/bar', - is_private: false, project: { name: 'ignore' }, }, { mainbranch: { name: 'master' }, - has_issues: true, uuid: '222', full_name: 'some/repo', - is_private: false, project: { name: 'allow' }, }, ], @@ -191,18 +181,14 @@ describe('modules/platform/bitbucket/index', () => { values: [ { mainbranch: { name: 'master' }, - has_issues: true, uuid: '111', full_name: 'foo/bar', - is_private: false, project: { name: 'ignore' }, }, { mainbranch: { name: 'master' }, - has_issues: true, uuid: '222', full_name: 'some/repo', - is_private: false, project: { name: 'allow' }, }, ], @@ -219,10 +205,8 @@ describe('modules/platform/bitbucket/index', () => { .get('/2.0/repositories/some/repo') .reply(200, { mainbranch: { name: 'master' }, - has_issues: true, uuid: '123', full_name: 'some/repo', - is_private: false, }); expect( await bitbucket.initRepo({ @@ -245,10 +229,8 @@ describe('modules/platform/bitbucket/index', () => { .get('/2.0/repositories/some/repo') .reply(200, { mainbranch: { name: 'master' }, - has_issues: true, uuid: '123', full_name: 'some/repo', - is_private: false, }); expect( await bitbucket.initRepo({ @@ -269,10 +251,8 @@ describe('modules/platform/bitbucket/index', () => { .get('/2.0/repositories/some/repo') .reply(200, { mainbranch: { name: 'master' }, - has_issues: true, uuid: '123', full_name: 'some/repo', - is_private: false, }); const res = await bitbucket.initRepo({ @@ -289,10 +269,8 @@ describe('modules/platform/bitbucket/index', () => { .get('/2.0/repositories/some/repo') .reply(200, { mainbranch: { name: 'master' }, - has_issues: true, uuid: '123', full_name: 'some/repo', - is_private: false, }) .get('/2.0/repositories/some/repo/branching-model') .reply(200, { @@ -313,10 +291,8 @@ describe('modules/platform/bitbucket/index', () => { .get('/2.0/repositories/some/repo') .reply(200, { mainbranch: { name: 'master' }, - has_issues: true, uuid: '123', full_name: 'some/repo', - is_private: false, }) .get('/2.0/repositories/some/repo/branching-model') .reply(200, { diff --git a/lib/modules/platform/bitbucket/schema.ts b/lib/modules/platform/bitbucket/schema.ts index 49e69686878237..8c07380b1cc169 100644 --- a/lib/modules/platform/bitbucket/schema.ts +++ b/lib/modules/platform/bitbucket/schema.ts @@ -1,4 +1,5 @@ import { z } from 'zod'; +import { logger } from '../../../logger'; import { LooseArray } from '../../../util/schema-utils'; const BitbucketSourceTypeSchema = z.enum(['commit_directory', 'commit_file']); @@ -28,7 +29,10 @@ export const RepoInfo = z mainbranch: z.object({ name: z.string(), }), - has_issues: z.boolean(), + has_issues: z.boolean().catch(() => { + logger.once.warn('Bitbucket: "has_issues" field missing from repo info'); + return false; + }), uuid: z.string(), full_name: z .string() @@ -36,13 +40,19 @@ export const RepoInfo = z /^[^/]+\/[^/]+$/, 'Expected repository full_name to be in the format "owner/repo"', ), - is_private: z.boolean(), + is_private: z.boolean().catch(() => { + logger.once.warn('Bitbucket: "is_private" field missing from repo info'); + return true; + }), project: z .object({ name: z.string(), }) .nullable() - .catch(null), + .catch(() => { + logger.once.warn('Bitbucket: "project" field missing from repo info'); + return null; + }), }) .transform((repoInfoBody) => { const isFork = !!repoInfoBody.parent; From ff602a42fe5c23eaabb33efcf5b6e1070351155b Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Mon, 18 Mar 2024 11:22:42 -0300 Subject: [PATCH 09/12] Remove unused fields from tests --- lib/modules/datasource/bitbucket-tags/index.spec.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/modules/datasource/bitbucket-tags/index.spec.ts b/lib/modules/datasource/bitbucket-tags/index.spec.ts index 2be4fa60df04de..523a7c1d3f0790 100644 --- a/lib/modules/datasource/bitbucket-tags/index.spec.ts +++ b/lib/modules/datasource/bitbucket-tags/index.spec.ts @@ -63,7 +63,6 @@ describe('modules/datasource/bitbucket-tags/index', () => { .scope('https://api.bitbucket.org') .get('/2.0/repositories/some/dep2') .reply(200, { - owner: { username: 'some' }, mainbranch: { name: 'master' }, has_issues: true, uuid: '123', From 4d4976811434edc30c073e78ac06c7971ae05f79 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Mon, 18 Mar 2024 11:24:20 -0300 Subject: [PATCH 10/12] Remove unused fields from tests --- lib/modules/datasource/bitbucket-tags/index.spec.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/modules/datasource/bitbucket-tags/index.spec.ts b/lib/modules/datasource/bitbucket-tags/index.spec.ts index 523a7c1d3f0790..b405c8ba5b89a8 100644 --- a/lib/modules/datasource/bitbucket-tags/index.spec.ts +++ b/lib/modules/datasource/bitbucket-tags/index.spec.ts @@ -64,10 +64,8 @@ describe('modules/datasource/bitbucket-tags/index', () => { .get('/2.0/repositories/some/dep2') .reply(200, { mainbranch: { name: 'master' }, - has_issues: true, uuid: '123', full_name: 'some/repo', - is_private: false, }); httpMock .scope('https://api.bitbucket.org') From 9ee78ca09713cc76bc120f440abec8fd19cefa2f Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Mon, 18 Mar 2024 11:24:57 -0300 Subject: [PATCH 11/12] Remove more --- lib/modules/datasource/bitbucket-tags/index.spec.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/modules/datasource/bitbucket-tags/index.spec.ts b/lib/modules/datasource/bitbucket-tags/index.spec.ts index b405c8ba5b89a8..08f8e8d9a682f0 100644 --- a/lib/modules/datasource/bitbucket-tags/index.spec.ts +++ b/lib/modules/datasource/bitbucket-tags/index.spec.ts @@ -92,12 +92,9 @@ describe('modules/datasource/bitbucket-tags/index', () => { .scope('https://api.bitbucket.org') .get('/2.0/repositories/some/dep2') .reply(200, { - owner: { username: 'some' }, mainbranch: { name: 'master' }, - has_issues: true, uuid: '123', full_name: 'some/repo', - is_private: false, }); httpMock .scope('https://api.bitbucket.org') From 738d376126ba0841a9255bd38f13af8ec24980c7 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Mon, 18 Mar 2024 18:09:17 -0300 Subject: [PATCH 12/12] fix --- lib/modules/platform/bitbucket/schema.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lib/modules/platform/bitbucket/schema.ts b/lib/modules/platform/bitbucket/schema.ts index 8c07380b1cc169..679073591b6f25 100644 --- a/lib/modules/platform/bitbucket/schema.ts +++ b/lib/modules/platform/bitbucket/schema.ts @@ -49,10 +49,7 @@ export const RepoInfo = z name: z.string(), }) .nullable() - .catch(() => { - logger.once.warn('Bitbucket: "project" field missing from repo info'); - return null; - }), + .catch(null), }) .transform((repoInfoBody) => { const isFork = !!repoInfoBody.parent;