Skip to content

Commit f8f60d9

Browse files
authored
Add new root package.json#manypkg config + ability to set defaultBranch (#67)
1 parent a4db72a commit f8f60d9

File tree

8 files changed

+165
-55
lines changed

8 files changed

+165
-55
lines changed

.changeset/little-gifts-tickle.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
---
2+
"@manypkg/cli": minor
3+
---
4+
5+
Add package.json#manypkg config object:
6+
7+
```
8+
{
9+
"manypkg": {}
10+
}
11+
```
12+
13+
To support setting a default branch for the INCORRECT_REPOSITORY_FIELD check/fix, a new config option can be set:
14+
15+
```
16+
{
17+
"manypkg": {
18+
"defaultBranch": "master"
19+
}
20+
}
21+
```
22+
23+
The default `defaultBranch` is `"master"`.

packages/cli/src/checks/INCORRECT_REPOSITORY_FIELD.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ type ErrorType = {
1414

1515
export default makeCheck<ErrorType>({
1616
type: "all",
17-
validate: (workspace, allWorkspaces, rootWorkspace) => {
17+
validate: (workspace, allWorkspaces, rootWorkspace, options) => {
1818
let rootRepositoryField = (rootWorkspace.packageJson as any).repository;
1919

2020
if (typeof rootRepositoryField === "string") {
@@ -43,17 +43,18 @@ export default makeCheck<ErrorType>({
4343
];
4444
}
4545
} else {
46-
// TODO: handle default branches that aren't master
4746
let correctRepositoryField = "";
4847

4948
if (result.host === "github.com") {
50-
correctRepositoryField = `${baseRepositoryUrl}/tree/master/${normalizePath(
49+
correctRepositoryField = `${baseRepositoryUrl}/tree/${
50+
options.defaultBranch
51+
}/${normalizePath(
5152
path.relative(rootWorkspace.dir, workspace.dir)
5253
)}`;
5354
} else if (result.host === "dev.azure.com") {
5455
correctRepositoryField = `${baseRepositoryUrl}?path=${normalizePath(
5556
path.relative(rootWorkspace.dir, workspace.dir)
56-
)}&version=GBmaster&_a=contents`;
57+
)}&version=GB${options.defaultBranch}&_a=contents`;
5758
}
5859

5960
let currentRepositoryField = (workspace.packageJson as any)

packages/cli/src/checks/__tests__/INCORRECT_REPOSITORY_FIELD.ts

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import path from "path";
22
import check from "../INCORRECT_REPOSITORY_FIELD";
3-
import { getWS, getFakeWS } from "../../test-helpers";
3+
import { getWS, getFakeWS, getFakeString } from "../../test-helpers";
44

55
describe("incorrect repository field", () => {
66
describe("github", () => {
77
it("should work", () => {
88
let ws = getWS();
99
let rootWorkspace = getFakeWS("root");
10+
let defaultBranch = `b${getFakeString(5)}`;
1011

1112
(rootWorkspace.packageJson as any).repository =
1213
"https://github.com/Thinkmill/manypkg";
@@ -15,27 +16,30 @@ describe("incorrect repository field", () => {
1516
workspace.dir = path.join(__dirname, "packages/no-repository-field");
1617
ws.set("depends-on-one", workspace);
1718
ws.set("root", rootWorkspace);
18-
let errors = check.validate(workspace, ws, rootWorkspace);
19+
let errors = check.validate(workspace, ws, rootWorkspace, {
20+
defaultBranch
21+
});
1922
expect(errors.map(({ workspace, ...x }: any) => x))
2023
.toMatchInlineSnapshot(`
2124
Array [
2225
Object {
23-
"correctRepositoryField": "https://github.com/Thinkmill/manypkg/tree/master/packages/no-repository-field",
26+
"correctRepositoryField": "https://github.com/Thinkmill/manypkg/tree/${defaultBranch}/packages/no-repository-field",
2427
"currentRepositoryField": undefined,
2528
"type": "INCORRECT_REPOSITORY_FIELD",
2629
},
2730
]
2831
`);
2932

30-
check.fix(errors[0]);
33+
check.fix(errors[0], {});
3134

3235
expect((workspace.packageJson as any).repository).toBe(
33-
"https://github.com/Thinkmill/manypkg/tree/master/packages/no-repository-field"
36+
`https://github.com/Thinkmill/manypkg/tree/${defaultBranch}/packages/no-repository-field`
3437
);
3538
});
3639
it("should fix root in a different format", () => {
3740
let ws = getWS();
3841
let rootWorkspace = getFakeWS("root");
42+
let defaultBranch = `b${getFakeString(5)}`;
3943

4044
(rootWorkspace.packageJson as any).repository =
4145
"https://github.com/Thinkmill/manypkg.git";
@@ -45,7 +49,9 @@ describe("incorrect repository field", () => {
4549
workspace.dir = path.join(__dirname, "packages/no-repository-field");
4650
ws.set("depends-on-one", workspace);
4751
ws.set("root", rootWorkspace);
48-
let errors = check.validate(rootWorkspace, ws, rootWorkspace);
52+
let errors = check.validate(rootWorkspace, ws, rootWorkspace, {
53+
defaultBranch
54+
});
4955
expect(errors.map(({ workspace, ...x }: any) => x))
5056
.toMatchInlineSnapshot(`
5157
Array [
@@ -57,7 +63,7 @@ describe("incorrect repository field", () => {
5763
]
5864
`);
5965

60-
check.fix(errors[0]);
66+
check.fix(errors[0], {});
6167

6268
expect((rootWorkspace.packageJson as any).repository).toBe(
6369
"https://github.com/Thinkmill/manypkg"
@@ -66,6 +72,7 @@ describe("incorrect repository field", () => {
6672
it("should do nothing if already in good format", () => {
6773
let ws = getWS();
6874
let rootWorkspace = getFakeWS("root");
75+
let defaultBranch = `b${getFakeString(5)}`;
6976

7077
(rootWorkspace.packageJson as any).repository =
7178
"https://github.com/Thinkmill/manypkg";
@@ -75,7 +82,9 @@ describe("incorrect repository field", () => {
7582
workspace.dir = path.join(__dirname, "packages/no-repository-field");
7683
ws.set("depends-on-one", workspace);
7784
ws.set("root", rootWorkspace);
78-
let errors = check.validate(rootWorkspace, ws, rootWorkspace);
85+
let errors = check.validate(rootWorkspace, ws, rootWorkspace, {
86+
defaultBranch
87+
});
7988
expect(errors.map(({ workspace, ...x }: any) => x)).toMatchInlineSnapshot(
8089
`Array []`
8190
);
@@ -90,6 +99,7 @@ describe("incorrect repository field", () => {
9099
it("should work", () => {
91100
let ws = getWS();
92101
let rootWorkspace = getFakeWS("root");
102+
let defaultBranch = `b${getFakeString(5)}`;
93103

94104
(rootWorkspace.packageJson as any).repository =
95105
"https://dev.azure.com/Thinkmill/monorepos/_git/manypkg";
@@ -98,27 +108,30 @@ describe("incorrect repository field", () => {
98108
workspace.dir = path.join(__dirname, "packages/no-repository-field");
99109
ws.set("depends-on-one", workspace);
100110
ws.set("root", rootWorkspace);
101-
let errors = check.validate(workspace, ws, rootWorkspace);
111+
let errors = check.validate(workspace, ws, rootWorkspace, {
112+
defaultBranch
113+
});
102114
expect(errors.map(({ workspace, ...x }: any) => x))
103115
.toMatchInlineSnapshot(`
104116
Array [
105117
Object {
106-
"correctRepositoryField": "https://dev.azure.com/Thinkmill/monorepos/_git/manypkg?path=packages/no-repository-field&version=GBmaster&_a=contents",
118+
"correctRepositoryField": "https://dev.azure.com/Thinkmill/monorepos/_git/manypkg?path=packages/no-repository-field&version=GB${defaultBranch}&_a=contents",
107119
"currentRepositoryField": undefined,
108120
"type": "INCORRECT_REPOSITORY_FIELD",
109121
},
110122
]
111123
`);
112124

113-
check.fix(errors[0]);
125+
check.fix(errors[0], {});
114126

115127
expect((workspace.packageJson as any).repository).toBe(
116-
"https://dev.azure.com/Thinkmill/monorepos/_git/manypkg?path=packages/no-repository-field&version=GBmaster&_a=contents"
128+
`https://dev.azure.com/Thinkmill/monorepos/_git/manypkg?path=packages/no-repository-field&version=GB${defaultBranch}&_a=contents`
117129
);
118130
});
119131
it("should fix root in a different format", () => {
120132
let ws = getWS();
121133
let rootWorkspace = getFakeWS("root");
134+
let defaultBranch = `b${getFakeString(5)}`;
122135

123136
(rootWorkspace.packageJson as any).repository =
124137
"https://[email protected]/Thinkmill/monorepos/_git/manypkg";
@@ -128,7 +141,9 @@ describe("incorrect repository field", () => {
128141
workspace.dir = path.join(__dirname, "packages/no-repository-field");
129142
ws.set("depends-on-one", workspace);
130143
ws.set("root", rootWorkspace);
131-
let errors = check.validate(rootWorkspace, ws, rootWorkspace);
144+
let errors = check.validate(rootWorkspace, ws, rootWorkspace, {
145+
defaultBranch
146+
});
132147
expect(errors.map(({ workspace, ...x }: any) => x))
133148
.toMatchInlineSnapshot(`
134149
Array [
@@ -140,7 +155,7 @@ describe("incorrect repository field", () => {
140155
]
141156
`);
142157

143-
check.fix(errors[0]);
158+
check.fix(errors[0], {});
144159

145160
expect((rootWorkspace.packageJson as any).repository).toBe(
146161
"https://dev.azure.com/Thinkmill/monorepos/_git/manypkg"
@@ -149,6 +164,7 @@ describe("incorrect repository field", () => {
149164
it("should do nothing if already in good format", () => {
150165
let ws = getWS();
151166
let rootWorkspace = getFakeWS("root");
167+
let defaultBranch = `b${getFakeString(5)}`;
152168

153169
(rootWorkspace.packageJson as any).repository =
154170
"https://dev.azure.com/Thinkmill/monorepos/_git/manypkg";
@@ -158,7 +174,9 @@ describe("incorrect repository field", () => {
158174
workspace.dir = path.join(__dirname, "packages/no-repository-field");
159175
ws.set("depends-on-one", workspace);
160176
ws.set("root", rootWorkspace);
161-
let errors = check.validate(rootWorkspace, ws, rootWorkspace);
177+
let errors = check.validate(rootWorkspace, ws, rootWorkspace, {
178+
defaultBranch
179+
});
162180
expect(errors.map(({ workspace, ...x }: any) => x)).toMatchInlineSnapshot(
163181
`Array []`
164182
);

packages/cli/src/checks/__tests__/INTERNAL_MISMATCH.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ describe("internal mismatch", () => {
1111
"pkg-1": "^1.0.0"
1212
};
1313
ws.set("depends-on-one", dependsOnOne);
14-
let errors = makeCheck.validate(dependsOnOne, ws, rootWorkspace);
14+
let errors = makeCheck.validate(dependsOnOne, ws, rootWorkspace, {});
1515
expect(errors.length).toEqual(0);
1616
});
1717
it("should error if internal version is not compatible", () => {
@@ -21,7 +21,7 @@ describe("internal mismatch", () => {
2121
"pkg-1": "^0.1.0"
2222
};
2323
ws.set("depends-on-one", dependsOnOne);
24-
let errors = makeCheck.validate(dependsOnOne, ws, rootWorkspace);
24+
let errors = makeCheck.validate(dependsOnOne, ws, rootWorkspace, {});
2525
expect(errors[0]).toMatchObject({
2626
type: "INTERNAL_MISMATCH",
2727
dependencyWorkspace: ws.get("pkg-1"),
@@ -43,7 +43,7 @@ describe("internal mismatch", () => {
4343
dependencyRange: "^0.1.0"
4444
};
4545

46-
let fixed = makeCheck.fix!(error);
46+
let fixed = makeCheck.fix!(error, {});
4747
expect(fixed).toMatchObject({ requiresInstall: true });
4848
expect(workspace.packageJson.dependencies).toMatchObject({
4949
"pkg-1": "^1.0.0"
@@ -56,7 +56,7 @@ describe("internal mismatch", () => {
5656
"pkg-1": "^0.1.0"
5757
};
5858
ws.set("depends-on-one", dependsOnOne);
59-
let errors = makeCheck.validate(dependsOnOne, ws, rootWorkspace);
59+
let errors = makeCheck.validate(dependsOnOne, ws, rootWorkspace, {});
6060
expect(errors).toMatchInlineSnapshot(`
6161
Array [
6262
Object {

packages/cli/src/checks/__tests__/INVALID_DEV_AND_PEER_DEPENDENCY.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ describe("invalid dev and peer dependency", () => {
1515
"pkg-1": "^1.0.0"
1616
};
1717
ws.set("depends-on-one", dependsOnOne);
18-
let errors = makeCheck.validate(dependsOnOne, ws, rootWorkspace);
18+
let errors = makeCheck.validate(dependsOnOne, ws, rootWorkspace, {});
1919
expect(errors.length).toEqual(0);
2020
});
2121
it("should not error if the dependencies match", () => {
@@ -30,7 +30,7 @@ describe("invalid dev and peer dependency", () => {
3030
"pkg-1": "*"
3131
};
3232
ws.set("depends-on-one", dependsOnOne);
33-
let errors = makeCheck.validate(dependsOnOne, ws, rootWorkspace);
33+
let errors = makeCheck.validate(dependsOnOne, ws, rootWorkspace, {});
3434
expect(errors.length).toEqual(0);
3535
});
3636
it("should error if the devDependency is missing", () => {
@@ -41,7 +41,7 @@ describe("invalid dev and peer dependency", () => {
4141
"pkg-1": "^1.0.0"
4242
};
4343
ws.set("depends-on-one", dependsOnOne);
44-
let errors = makeCheck.validate(dependsOnOne, ws, rootWorkspace);
44+
let errors = makeCheck.validate(dependsOnOne, ws, rootWorkspace, {});
4545

4646
expect(errors[0]).toMatchObject({
4747
type: "INVALID_DEV_AND_PEER_DEPENDENCY_RELATIONSHIP",
@@ -60,7 +60,7 @@ describe("invalid dev and peer dependency", () => {
6060
pkg1.packageJson.peerDependencies = {
6161
"external-dep": "^1.0.0"
6262
};
63-
let errors = makeCheck.validate(pkg1, ws, rootWorkspace);
63+
let errors = makeCheck.validate(pkg1, ws, rootWorkspace, {});
6464

6565
expect(errors[0]).toMatchObject({
6666
type: "INVALID_DEV_AND_PEER_DEPENDENCY_RELATIONSHIP",
@@ -86,7 +86,7 @@ describe("invalid dev and peer dependency", () => {
8686
};
8787

8888
ws.set("pkg-2", pkg2);
89-
let errors = makeCheck.validate(pkg1, ws, rootWorkspace);
89+
let errors = makeCheck.validate(pkg1, ws, rootWorkspace, {});
9090

9191
expect(errors[0]).toMatchObject({
9292
type: "INVALID_DEV_AND_PEER_DEPENDENCY_RELATIONSHIP",
@@ -113,7 +113,7 @@ describe("invalid dev and peer dependency", () => {
113113
};
114114

115115
ws.set("pkg-2", pkg2);
116-
let errors = makeCheck.validate(pkg1, ws, rootWorkspace);
116+
let errors = makeCheck.validate(pkg1, ws, rootWorkspace, {});
117117

118118
expect(errors[0]).not.toMatchObject({
119119
type: "INVALID_DEV_AND_PEER_DEPENDENCY_RELATIONSHIP",
@@ -131,10 +131,10 @@ describe("invalid dev and peer dependency", () => {
131131
pkg1.packageJson.peerDependencies = {
132132
"external-dep": "^1.0.0"
133133
};
134-
let errors = makeCheck.validate(pkg1, ws, rootWorkspace);
134+
let errors = makeCheck.validate(pkg1, ws, rootWorkspace, {});
135135
let error = errors[0]!;
136136

137-
let fixed = makeCheck.fix!(error);
137+
let fixed = makeCheck.fix!(error, {});
138138
expect(fixed).toMatchObject({ requiresInstall: true });
139139
expect(pkg1.packageJson.devDependencies).toMatchObject({
140140
"external-dep": "^1.0.0"
@@ -150,7 +150,7 @@ describe("invalid dev and peer dependency", () => {
150150
pkg1.packageJson.devDependencies = {
151151
"external-dep": "^1.1.0"
152152
};
153-
let errors = makeCheck.validate(pkg1, ws, rootWorkspace);
153+
let errors = makeCheck.validate(pkg1, ws, rootWorkspace, {});
154154
expect(errors).toHaveLength(0);
155155
});
156156
});

0 commit comments

Comments
 (0)