From 8a298b472401d04c12e178020c1f57d2e612bc65 Mon Sep 17 00:00:00 2001 From: Jos Craw Date: Thu, 2 Mar 2023 19:56:42 +1300 Subject: [PATCH] feat: add offline support for linguist Signed-off-by: Jos Craw --- .changeset/pink-dolls-unite.md | 5 +++++ plugins/linguist-backend/README.md | 8 ++++++++ plugins/linguist-backend/api-report.md | 3 +++ plugins/linguist-backend/src/api/LinguistBackendApi.ts | 5 ++++- plugins/linguist-backend/src/service/router.ts | 5 ++++- 5 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 .changeset/pink-dolls-unite.md diff --git a/.changeset/pink-dolls-unite.md b/.changeset/pink-dolls-unite.md new file mode 100644 index 0000000000..f7c8b8c40c --- /dev/null +++ b/.changeset/pink-dolls-unite.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-linguist-backend': minor +--- + +Added support for offline language data diff --git a/plugins/linguist-backend/README.md b/plugins/linguist-backend/README.md index a7c89d23b3..981cebc19e 100644 --- a/plugins/linguist-backend/README.md +++ b/plugins/linguist-backend/README.md @@ -85,6 +85,14 @@ return createRouter({ schedule: schedule, age: { days: 30 } }, { ...env }); With the `age` setup like this if the language breakdown is older than 15 days it will get regenerated. It's recommended that if you choose to use this configuration to set it to a large value - 30, 90, or 180 - as this data generally does not change drastically. +## Offline + +The default setup will pull the language data from GitHub, by setting `offline` to `true` a packaged offline version of this data is used instead. + +```ts +return createRouter({ schedule: schedule, offline: true }, { ...env }); +``` + ## Use Source Location You may wish to use the `backstage.io/source-location` annotation over using the `backstage.io/linguist` as you may not be able to quickly add that annotation to your Entities. To do this you'll just need to set the `useSourceLocation` boolean to `true` in your `packages/backend/src/plugins/linguist.ts` when you call `createRouter`: diff --git a/plugins/linguist-backend/api-report.md b/plugins/linguist-backend/api-report.md index d3a77bc2d7..c1486ab3ae 100644 --- a/plugins/linguist-backend/api-report.md +++ b/plugins/linguist-backend/api-report.md @@ -35,6 +35,7 @@ export class LinguistBackendApi { batchSize?: number, useSourceLocation?: boolean, kind?: string[], + offline?: boolean, ); // (undocumented) getEntityLanguages(entityRef: string): Promise; @@ -82,6 +83,8 @@ export interface PluginOptions { // (undocumented) kind?: string[]; // (undocumented) + offline?: boolean; + // (undocumented) schedule?: TaskScheduleDefinition; // (undocumented) useSourceLocation?: boolean; diff --git a/plugins/linguist-backend/src/api/LinguistBackendApi.ts b/plugins/linguist-backend/src/api/LinguistBackendApi.ts index 6a4cc0ea56..f58b913c2d 100644 --- a/plugins/linguist-backend/src/api/LinguistBackendApi.ts +++ b/plugins/linguist-backend/src/api/LinguistBackendApi.ts @@ -57,6 +57,7 @@ export class LinguistBackendApi { private readonly batchSize?: number; private readonly useSourceLocation?: boolean; private readonly kind: string[]; + private readonly offline?: boolean; public constructor( logger: Logger, store: LinguistBackendStore, @@ -67,6 +68,7 @@ export class LinguistBackendApi { batchSize?: number, useSourceLocation?: boolean, kind?: string[], + offline?: boolean, ) { this.logger = logger; this.store = store; @@ -78,6 +80,7 @@ export class LinguistBackendApi { this.age = age; this.useSourceLocation = useSourceLocation; this.kind = kindOrDefault(kind); + this.offline = offline; } public async getEntityLanguages(entityRef: string): Promise { @@ -190,7 +193,7 @@ export class LinguistBackendApi { const readTreeResponse = await this.urlReader.readTree(url); const dir = await readTreeResponse.dir(); - const results = await linguist(dir); + const results = await linguist(dir, { offline: this.offline }); try { const totalBytes = results.languages.bytes; diff --git a/plugins/linguist-backend/src/service/router.ts b/plugins/linguist-backend/src/service/router.ts index 66138f5ed2..4a279aba7d 100644 --- a/plugins/linguist-backend/src/service/router.ts +++ b/plugins/linguist-backend/src/service/router.ts @@ -38,6 +38,7 @@ export interface PluginOptions { age?: HumanDuration; batchSize?: number; useSourceLocation?: boolean; + offline?: boolean; kind?: string[]; } @@ -57,7 +58,8 @@ export async function createRouter( pluginOptions: PluginOptions, routerOptions: RouterOptions, ): Promise { - const { schedule, age, batchSize, useSourceLocation, kind } = pluginOptions; + const { schedule, age, batchSize, useSourceLocation, kind, offline } = + pluginOptions; const { logger, reader, database, discovery, scheduler, tokenManager } = routerOptions; @@ -78,6 +80,7 @@ export async function createRouter( batchSize, useSourceLocation, kind, + offline, ); if (scheduler && schedule) {