11import { AzureDevOpsConnectionConfig } from "@sourcebot/schemas/v3/azuredevops.type" ;
22import { createLogger } from "@sourcebot/logger" ;
3- import { getTokenFromConfig , measure , fetchWithRetry } from "./utils.js" ;
3+ import { measure , fetchWithRetry } from "./utils.js" ;
44import micromatch from "micromatch" ;
55import { PrismaClient } from "@sourcebot/db" ;
66import { BackendException , BackendError } from "@sourcebot/error" ;
77import { processPromiseResults , throwIfAnyFailed } from "./connectionUtils.js" ;
88import * as Sentry from "@sentry/node" ;
99import * as azdev from "azure-devops-node-api" ;
1010import { GitRepository } from "azure-devops-node-api/interfaces/GitInterfaces.js" ;
11+ import { getTokenFromConfig } from "@sourcebot/crypto" ;
1112
1213const logger = createLogger ( 'azuredevops' ) ;
1314const AZUREDEVOPS_CLOUD_HOSTNAME = "dev.azure.com" ;
@@ -34,7 +35,7 @@ export const getAzureDevOpsReposFromConfig = async (
3435 const baseUrl = config . url || `https://${ AZUREDEVOPS_CLOUD_HOSTNAME } ` ;
3536
3637 const token = config . token ?
37- await getTokenFromConfig ( config . token , orgId , db , logger ) :
38+ await getTokenFromConfig ( config . token , orgId , db ) :
3839 undefined ;
3940
4041 if ( ! token ) {
@@ -47,47 +48,39 @@ export const getAzureDevOpsReposFromConfig = async (
4748
4849 const useTfsPath = config . useTfsPath || false ;
4950 let allRepos : GitRepository [ ] = [ ] ;
50- let notFound : {
51- users : string [ ] ,
52- orgs : string [ ] ,
53- repos : string [ ] ,
54- } = {
55- users : [ ] ,
56- orgs : [ ] ,
57- repos : [ ] ,
58- } ;
51+ let allWarnings : string [ ] = [ ] ;
5952
6053 if ( config . orgs ) {
61- const { validRepos , notFoundOrgs } = await getReposForOrganizations (
54+ const { repos , warnings } = await getReposForOrganizations (
6255 config . orgs ,
6356 baseUrl ,
6457 token ,
6558 useTfsPath
6659 ) ;
67- allRepos = allRepos . concat ( validRepos ) ;
68- notFound . orgs = notFoundOrgs ;
60+ allRepos = allRepos . concat ( repos ) ;
61+ allWarnings = allWarnings . concat ( warnings ) ;
6962 }
7063
7164 if ( config . projects ) {
72- const { validRepos , notFoundProjects } = await getReposForProjects (
65+ const { repos , warnings } = await getReposForProjects (
7366 config . projects ,
7467 baseUrl ,
7568 token ,
7669 useTfsPath
7770 ) ;
78- allRepos = allRepos . concat ( validRepos ) ;
79- notFound . repos = notFound . repos . concat ( notFoundProjects ) ;
71+ allRepos = allRepos . concat ( repos ) ;
72+ allWarnings = allWarnings . concat ( warnings ) ;
8073 }
8174
8275 if ( config . repos ) {
83- const { validRepos , notFoundRepos } = await getRepos (
76+ const { repos , warnings } = await getRepos (
8477 config . repos ,
8578 baseUrl ,
8679 token ,
8780 useTfsPath
8881 ) ;
89- allRepos = allRepos . concat ( validRepos ) ;
90- notFound . repos = notFound . repos . concat ( notFoundRepos ) ;
82+ allRepos = allRepos . concat ( repos ) ;
83+ allWarnings = allWarnings . concat ( warnings ) ;
9184 }
9285
9386 let repos = allRepos
@@ -103,8 +96,8 @@ export const getAzureDevOpsReposFromConfig = async (
10396 logger . debug ( `Found ${ repos . length } total repositories.` ) ;
10497
10598 return {
106- validRepos : repos ,
107- notFound ,
99+ repos,
100+ warnings : allWarnings ,
108101 } ;
109102} ;
110103
@@ -221,22 +214,23 @@ async function getReposForOrganizations(
221214
222215 // Check if it's a 404-like error (organization not found)
223216 if ( error && typeof error === 'object' && 'statusCode' in error && error . statusCode === 404 ) {
224- logger . error ( `Organization ${ org } not found or no access` ) ;
217+ const warning = `Organization ${ org } not found or no access` ;
218+ logger . warn ( warning ) ;
225219 return {
226- type : 'notFound ' as const ,
227- value : org
220+ type : 'warning ' as const ,
221+ warning
228222 } ;
229223 }
230224 throw error ;
231225 }
232226 } ) ) ;
233227
234228 throwIfAnyFailed ( results ) ;
235- const { validItems : validRepos , notFoundItems : notFoundOrgs } = processPromiseResults < GitRepository > ( results ) ;
229+ const { validItems : repos , warnings } = processPromiseResults < GitRepository > ( results ) ;
236230
237231 return {
238- validRepos ,
239- notFoundOrgs ,
232+ repos ,
233+ warnings ,
240234 } ;
241235}
242236
@@ -274,22 +268,23 @@ async function getReposForProjects(
274268 logger . error ( `Failed to fetch repositories for project ${ project } .` , error ) ;
275269
276270 if ( error && typeof error === 'object' && 'statusCode' in error && error . statusCode === 404 ) {
277- logger . error ( `Project ${ project } not found or no access` ) ;
271+ const warning = `Project ${ project } not found or no access` ;
272+ logger . warn ( warning ) ;
278273 return {
279- type : 'notFound ' as const ,
280- value : project
274+ type : 'warning ' as const ,
275+ warning
281276 } ;
282277 }
283278 throw error ;
284279 }
285280 } ) ) ;
286281
287282 throwIfAnyFailed ( results ) ;
288- const { validItems : validRepos , notFoundItems : notFoundProjects } = processPromiseResults < GitRepository > ( results ) ;
283+ const { validItems : repos , warnings } = processPromiseResults < GitRepository > ( results ) ;
289284
290285 return {
291- validRepos ,
292- notFoundProjects ,
286+ repos ,
287+ warnings ,
293288 } ;
294289}
295290
@@ -328,21 +323,22 @@ async function getRepos(
328323 logger . error ( `Failed to fetch repository ${ repo } .` , error ) ;
329324
330325 if ( error && typeof error === 'object' && 'statusCode' in error && error . statusCode === 404 ) {
331- logger . error ( `Repository ${ repo } not found or no access` ) ;
326+ const warning = `Repository ${ repo } not found or no access` ;
327+ logger . warn ( warning ) ;
332328 return {
333- type : 'notFound ' as const ,
334- value : repo
329+ type : 'warning ' as const ,
330+ warning
335331 } ;
336332 }
337333 throw error ;
338334 }
339335 } ) ) ;
340336
341337 throwIfAnyFailed ( results ) ;
342- const { validItems : validRepos , notFoundItems : notFoundRepos } = processPromiseResults < GitRepository > ( results ) ;
338+ const { validItems : repos , warnings } = processPromiseResults < GitRepository > ( results ) ;
343339
344340 return {
345- validRepos ,
346- notFoundRepos ,
341+ repos ,
342+ warnings ,
347343 } ;
348344}
0 commit comments