Skip to content

Commit 3578f3a

Browse files
committed
chore: make mozcloud entity source location configurable / read sources from github
1 parent 37b9f0b commit 3578f3a

File tree

1 file changed

+44
-11
lines changed
  • plugins/catalog-backend-module-mozcloud/src

1 file changed

+44
-11
lines changed

plugins/catalog-backend-module-mozcloud/src/module.ts

Lines changed: 44 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,29 @@ import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/
1313
import { ANNOTATION_LOCATION, ANNOTATION_ORIGIN_LOCATION, Entity, GroupEntityV1alpha1 } from '@backstage/catalog-model';
1414
import { EntityProvider, EntityProviderConenction } from '@backstage/plugin-catalog-node';
1515

16+
import { DefaultGithubCredentialsProvider, ScmIntegrations } from '@backstage/integration';
17+
18+
import { Config } from '@backstage/config';
19+
20+
import { Octokit } from '@octokit/rest';
1621

1722
export class MozcloudEntityProvider implements EntityProvider {
1823
private readonly env: string;
1924
private connection?: EntityProviderConnection;
2025
private taskRunner: SchedulerServiceTaskRunner;
2126
private logger: coreServices.Logger;
27+
private config: Config;
2228

2329
constructor(
2430
env: string,
2531
taskRunner: SchedulerServiceTaskRunner,
2632
logger: coreServices.Logger,
33+
config: coreServices.rootConfig,
2734
) {
2835
this.env = env;
2936
this.taskRunner = taskRunner;
3037
this.logger = logger;
38+
this.config = config;
3139
}
3240

3341
getProviderName(): string {
@@ -50,21 +58,45 @@ export class MozcloudEntityProvider implements EntityProvider {
5058
throw new Error("not initialized");
5159
}
5260

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+
);
5683

5784
let workgroups = [];
5885

5986
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}`);
6188

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+
});
6595

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);
68100
}
69101

70102
let workgroup_emails = new Map();
@@ -202,14 +234,15 @@ export const catalogModuleMozcloud = createBackendModule({
202234
logger: coreServices.logger,
203235
catalog: catalogProcessingExtensionPoint,
204236
scheduler: coreServices.scheduler,
237+
config: coreServices.rootConfig,
205238
},
206-
async init({ logger, catalog, scheduler }) {
239+
async init({ logger, catalog, scheduler, config }) {
207240
const taskRunner = scheduler.createScheduledTaskRunner({
208241
frequency: { seconds: 30 },
209242
timeout: { seconds: 10 },
210243
});
211244

212-
const mozcloud = new MozcloudEntityProvider("dev", taskRunner, logger);
245+
const mozcloud = new MozcloudEntityProvider("dev", taskRunner, logger, config);
213246
catalog.addEntityProvider(mozcloud);
214247
},
215248
});

0 commit comments

Comments
 (0)