@@ -13,21 +13,29 @@ import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/
13
13
import { ANNOTATION_LOCATION , ANNOTATION_ORIGIN_LOCATION , Entity , GroupEntityV1alpha1 } from '@backstage/catalog-model' ;
14
14
import { EntityProvider , EntityProviderConenction } from '@backstage/plugin-catalog-node' ;
15
15
16
+ import { DefaultGithubCredentialsProvider , ScmIntegrations } from '@backstage/integration' ;
17
+
18
+ import { Config } from '@backstage/config' ;
19
+
20
+ import { Octokit } from '@octokit/rest' ;
16
21
17
22
export class MozcloudEntityProvider implements EntityProvider {
18
23
private readonly env : string ;
19
24
private connection ?: EntityProviderConnection ;
20
25
private taskRunner : SchedulerServiceTaskRunner ;
21
26
private logger : coreServices . Logger ;
27
+ private config : Config ;
22
28
23
29
constructor (
24
30
env : string ,
25
31
taskRunner : SchedulerServiceTaskRunner ,
26
32
logger : coreServices . Logger ,
33
+ config : coreServices . rootConfig ,
27
34
) {
28
35
this . env = env ;
29
36
this . taskRunner = taskRunner ;
30
37
this . logger = logger ;
38
+ this . config = config ;
31
39
}
32
40
33
41
getProviderName ( ) : string {
@@ -50,21 +58,45 @@ export class MozcloudEntityProvider implements EntityProvider {
50
58
throw new Error ( "not initialized" ) ;
51
59
}
52
60
53
- // parse workgroup files
54
- let workgroup_dir = "/home/ahoneiser/dev/mozilla/global-platform-admin/google-workspace-management/tf/workgroups" ;
55
- let workgroup_files = await fs . readdir ( workgroup_dir ) ;
61
+ let owner = this . config . getString ( "catalog.providers.mozcloud.entitySourceLocation.owner" ) ;
62
+ let repo = this . config . getString ( "catalog.providers.mozcloud.entitySourceLocation.repo" ) ;
63
+ let path = this . config . getString ( "catalog.providers.mozcloud.entitySourceLocation.path" ) ;
64
+ let ref = this . config . getString ( "catalog.providers.mozcloud.entitySourceLocation.ref" ) ;
65
+
66
+ // do some github experiments first
67
+ let integrations = ScmIntegrations . fromConfig ( this . config ) ;
68
+ let credentialsProvider = DefaultGithubCredentialsProvider . fromIntegrations ( integrations ) ;
69
+ let { token } = await credentialsProvider . getCredentials ( { url : `https://github.com/${ owner } /${ repo } ` } ) ;
70
+ let octokit = new Octokit ( { auth : token } ) ;
71
+
72
+ let response = await octokit . repos . getContent ( {
73
+ owner : owner ,
74
+ repo : repo ,
75
+ path : path ,
76
+ ref : ref ,
77
+ } ) ;
78
+
79
+ let items = response . data ;
80
+ let workgroup_files = items . filter (
81
+ item => item . type === "file" && item . name . toLowerCase ( ) . endsWith ( "yaml" )
82
+ ) ;
56
83
57
84
let workgroups = [ ] ;
58
85
59
86
for ( let workgroup_file of workgroup_files ) {
60
- let full_qualified_path = path . join ( workgroup_dir , workgroup_file ) ;
87
+ this . logger . info ( `.. fetching file: ${ workgroup_file . name } ` ) ;
61
88
62
- if ( workgroup_file . toLowerCase ( ) . endsWith ( "yaml" ) ) {
63
- let content = await fs . readFile ( full_qualified_path , "utf8" ) ;
64
- let workgroup = YAML . parse ( content ) ;
89
+ let fileResponse = await octokit . repos . getContent ( {
90
+ owner : owner ,
91
+ repo : repo ,
92
+ path : workgroup_file . path ,
93
+ ref : ref ,
94
+ } ) ;
65
95
66
- workgroups . push ( workgroup ) ;
67
- }
96
+ let content = Buffer . from ( ( fileResponse . data as any ) . content , "base64" ) . toString ( "utf-8" ) ;
97
+ let workgroup = YAML . parse ( content ) ;
98
+
99
+ workgroups . push ( workgroup ) ;
68
100
}
69
101
70
102
let workgroup_emails = new Map ( ) ;
@@ -202,14 +234,15 @@ export const catalogModuleMozcloud = createBackendModule({
202
234
logger : coreServices . logger ,
203
235
catalog : catalogProcessingExtensionPoint ,
204
236
scheduler : coreServices . scheduler ,
237
+ config : coreServices . rootConfig ,
205
238
} ,
206
- async init ( { logger, catalog, scheduler } ) {
239
+ async init ( { logger, catalog, scheduler, config } ) {
207
240
const taskRunner = scheduler . createScheduledTaskRunner ( {
208
241
frequency : { seconds : 30 } ,
209
242
timeout : { seconds : 10 } ,
210
243
} ) ;
211
244
212
- const mozcloud = new MozcloudEntityProvider ( "dev" , taskRunner , logger ) ;
245
+ const mozcloud = new MozcloudEntityProvider ( "dev" , taskRunner , logger , config ) ;
213
246
catalog . addEntityProvider ( mozcloud ) ;
214
247
} ,
215
248
} ) ;
0 commit comments