diff --git a/src/__tests__/unit/main.test.ts b/src/__tests__/unit/main.test.ts index 36e6cb58..49bf4530 100644 --- a/src/__tests__/unit/main.test.ts +++ b/src/__tests__/unit/main.test.ts @@ -54,6 +54,28 @@ describe("getMetaData", () => { expect(result.feedbackMechanism).toContain("/issues"); }); + it("preserves existing languages over GitHub-detected languages", async () => { + const deps = createMockDeps(); + const helpers = createHelpers(deps); + + const existing = { + ...validCodeJSON, + languages: ["TypeScript", "Markdown"], + } as any; + const result = await getMetaData(helpers, deps, existing); + + expect(result.languages).toEqual(["TypeScript", "Markdown"]); + }); + + it("falls back to GitHub-detected languages when none exist", async () => { + const deps = createMockDeps(); + const helpers = createHelpers(deps); + + const result = await getMetaData(helpers, deps, null); + + expect(result.languages).toEqual(["TypeScript", "JavaScript"]); + }); + it("sets Archival status when isArchived", async () => { const deps = createMockDeps({ isArchived: true }); const helpers = createHelpers(deps); diff --git a/src/main.ts b/src/main.ts index 984e2b4a..c453bb3a 100644 --- a/src/main.ts +++ b/src/main.ts @@ -114,6 +114,13 @@ async function getMetaData( ? partialCodeJSON.description : existingCodeJSON?.description || ""; + // preserve manually curated languages when they already exist in code.json, + // and only fall back to GitHub detected languages for new repositories. + const languages = + existingCodeJSON?.languages && existingCodeJSON.languages.length > 0 + ? existingCodeJSON.languages + : partialCodeJSON.languages; + // preserve existing tags and append repository topics, de-duped const tags = helpers.mergeTags( partialCodeJSON.tags ?? [], @@ -156,7 +163,7 @@ async function getMetaData( repositoryURL: partialCodeJSON.repositoryURL, repositoryVisibility: partialCodeJSON.repositoryVisibility, laborHours: partialCodeJSON.laborHours, - languages: partialCodeJSON.languages, + languages: languages, reuseFrequency: { forks: partialCodeJSON.reuseFrequency?.forks ?? 0, clones: existingCodeJSON?.reuseFrequency?.clones ?? 0,