Skip to content

Commit 6b33d45

Browse files
fix: respect existing contributors in hydration (#638)
## PR Checklist - [x] Addresses an existing open issue: fixes #449 - [x] That issue was marked as [`status: accepting prs`](https://github.com/JoshuaKGoldberg/template-typescript-node-package/issues?q=is%3Aopen+is%3Aissue+label%3A%22status%3A+accepting+prs%22) - [x] Steps in [CONTRIBUTING.md](https://github.com/JoshuaKGoldberg/template-typescript-node-package/blob/main/.github/CONTRIBUTING.md) were taken ## Overview Reads the existing `.all-contributorsrc` if it exists. Shuffles code around a bit to make a new shared `readFileAsJsonSafe`.
1 parent d5ec3ea commit 6b33d45

15 files changed

+47
-51
lines changed

src/hydrate/steps/writeReadme.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as fs from "node:fs/promises";
22

3-
import { readFileSafe } from "../readFileSafe.js";
3+
import { readFileSafe } from "../../shared/readFileSafe.js";
44
import { HydrationInputValues } from "../values/types.js";
55

66
const contributorsIndicator = `<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->`;

src/hydrate/steps/writing/creation/rootFiles.ts

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,12 @@
11
import { HydrationInputValues } from "../../../values/types.js";
22
import { formatIgnoreFile } from "./formatters/formatIgnoreFile.js";
33
import { formatJson } from "./formatters/formatJson.js";
4+
import { writeAllContributorsRC } from "./writeAllContributorsRC.js";
45
import { writePackageJson } from "./writePackageJson.js";
56

67
export async function createRootFiles(values: HydrationInputValues) {
78
return {
8-
".all-contributorsrc": await formatJson({
9-
badgeTemplate:
10-
'<img alt="All Contributors: <%= contributors.length %>" src="https://img.shields.io/badge/all_contributors-<%= contributors.length %>-21bb42.svg" />',
11-
commit: false,
12-
commitConvention: "angular",
13-
contributors: [],
14-
contributorsPerLine: 7,
15-
contributorsSortAlphabetically: true,
16-
files: ["README.md"],
17-
imageSize: 100,
18-
projectName: values.repository,
19-
projectOwner: values.owner,
20-
repoHost: "https://github.com",
21-
repoType: "github",
22-
}),
9+
".all-contributorsrc": await writeAllContributorsRC(values),
2310
".eslintignore": formatIgnoreFile([
2411
"!.*",
2512
...(values.unitTests ? ["coverage"] : []),
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { readFileSafeAsJson } from "../../../../shared/readFileSafeAsJson.js";
2+
import { AllContributorsData } from "../../../../shared/types.js";
3+
import { HydrationInputValues } from "../../../values/types.js";
4+
import { formatJson } from "./formatters/formatJson.js";
5+
6+
export async function writeAllContributorsRC(values: HydrationInputValues) {
7+
const existing = (await readFileSafeAsJson(
8+
".all-contributorsrc",
9+
)) as AllContributorsData | null;
10+
11+
return await formatJson({
12+
badgeTemplate:
13+
'<img alt="All Contributors: <%= contributors.length %>" src="https://img.shields.io/badge/all_contributors-<%= contributors.length %>-21bb42.svg" />',
14+
commit: false,
15+
commitConvention: "angular",
16+
contributors: existing?.contributors ?? [],
17+
contributorsPerLine: 7,
18+
contributorsSortAlphabetically: true,
19+
files: ["README.md"],
20+
imageSize: 100,
21+
projectName: values.repository,
22+
projectOwner: values.owner,
23+
repoHost: "https://github.com",
24+
repoType: "github",
25+
});
26+
}

src/hydrate/values/getHydrationDefaults.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { getHydrationDefaults } from "./getHydrationDefaults.js";
44

55
const mockReadFileSafe = vi.fn();
66

7-
vi.mock("../readFileSafe.js", () => ({
7+
vi.mock("../../shared/readFileSafe.js", () => ({
88
get readFileSafe() {
99
return mockReadFileSafe;
1010
},

src/hydrate/values/getHydrationDefaults.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { PartialPackageData } from "./types.js";
22

3-
import { readFileSafe } from "../readFileSafe.js";
3+
import { readFileSafe } from "../../shared/readFileSafe.js";
44
import { readAuthorIfExists } from "./readAuthorIfExists.js";
55
import { readEmailIfExists } from "./readEmailIfExists.js";
66
import { readFundingIfExists } from "./readFundingIfExists.js";

src/hydrate/values/readTitleFromReadme.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { readTitleFromReadme } from "./readTitleFromReadme.js";
44

55
const mockReadFileSafe = vi.fn();
66

7-
vi.mock("../readFileSafe.js", () => ({
7+
vi.mock("../../shared/readFileSafe.js", () => ({
88
get readFileSafe() {
99
return mockReadFileSafe;
1010
},

src/hydrate/values/readTitleFromReadme.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { readFileSafe } from "../readFileSafe.js";
1+
import { readFileSafe } from "../../shared/readFileSafe.js";
22

33
export async function readTitleFromReadme() {
44
return (

src/setup/settings/addOwnerAsAllContributor.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import fs from "node:fs/promises";
44
import prettier from "prettier";
55

66
import { readFileAsJson } from "../../shared/readFileAsJson.js";
7+
import { AllContributorsData } from "../../shared/types.js";
78

89
interface GhUserOutput {
910
login: string;
@@ -60,10 +61,6 @@ export async function addOwnerAsAllContributor(owner: string) {
6061
);
6162
}
6263

63-
interface AllContributorsData {
64-
contributors: { contributions: string[]; login: string }[];
65-
}
66-
6764
function isValidAllContributorsData(
6865
value: unknown,
6966
): value is AllContributorsData {

src/setup/setupWithInformation.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import { hydrateRepositoryLabels } from "./steps/labels/hydrateRepositoryLabels.
1313
import { removeSetupScripts } from "./steps/removeSetupScripts.js";
1414
import { resetGitTags } from "./steps/resetGitTags.js";
1515
import { uninstallPackages } from "./steps/uninstallPackages.js";
16-
import { updateAllContributorsFile } from "./steps/updateAllContributorsFile.js";
1716
import { updateAllContributorsTable } from "./steps/updateAllContributorsTable.js";
1817
import { updateLocalFiles } from "./steps/updateLocalFiles.js";
1918
import { updateReadme } from "./steps/updateReadme.js";
@@ -34,10 +33,6 @@ export async function setupWithInformation({
3433
await updateLocalFiles({ ...values, npmAuthor });
3534
}, "Updating all the files with provided details.");
3635

37-
await withSpinner(async () => {
38-
await updateAllContributorsFile(values);
39-
}, "Updating '.all-contributorsrc' with new repository details.");
40-
4136
await withSpinner(
4237
updateReadme,
4338
"Appending template-typescript-node-package notice to 'README.md'",

src/setup/steps/updateAllContributorsFile.ts

Lines changed: 0 additions & 21 deletions
This file was deleted.

0 commit comments

Comments
 (0)