Skip to content

Commit b816057

Browse files
committed
feat: allow running tool in offline mode by setting --fetch-remote=false
1 parent 60328a1 commit b816057

9 files changed

+49
-13
lines changed

src/initial-parameters.test.ts

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,13 @@ describe('initial-parameters', () => {
3636
reset: true,
3737
backport: false,
3838
defaultBranch: 'main',
39+
fetchRemote: true,
3940
});
4041
jest
4142
.spyOn(envModule, 'getEnvironmentVariables')
4243
.mockReturnValue({ EDITOR: undefined });
4344
when(jest.spyOn(projectModule, 'readProject'))
44-
.calledWith('/path/to/project', { stderr })
45+
.calledWith('/path/to/project', { stderr, fetchRemote: true })
4546
.mockResolvedValue(project);
4647

4748
const initialParameters = await determineInitialParameters({
@@ -56,6 +57,7 @@ describe('initial-parameters', () => {
5657
reset: true,
5758
releaseType: 'ordinary',
5859
defaultBranch: 'main',
60+
fetchRemote: true,
5961
});
6062
});
6163

@@ -72,6 +74,7 @@ describe('initial-parameters', () => {
7274
reset: true,
7375
backport: false,
7476
defaultBranch: 'main',
77+
fetchRemote: true,
7578
});
7679
jest
7780
.spyOn(envModule, 'getEnvironmentVariables')
@@ -88,6 +91,7 @@ describe('initial-parameters', () => {
8891

8992
expect(readProjectSpy).toHaveBeenCalledWith('/path/to/cwd/project', {
9093
stderr,
94+
fetchRemote: true,
9195
});
9296
});
9397

@@ -102,12 +106,13 @@ describe('initial-parameters', () => {
102106
reset: true,
103107
backport: false,
104108
defaultBranch: 'main',
109+
fetchRemote: true,
105110
});
106111
jest
107112
.spyOn(envModule, 'getEnvironmentVariables')
108113
.mockReturnValue({ EDITOR: undefined });
109114
when(jest.spyOn(projectModule, 'readProject'))
110-
.calledWith('/path/to/project', { stderr })
115+
.calledWith('/path/to/project', { stderr, fetchRemote: true })
111116
.mockResolvedValue(project);
112117

113118
const initialParameters = await determineInitialParameters({
@@ -132,12 +137,13 @@ describe('initial-parameters', () => {
132137
reset: true,
133138
backport: false,
134139
defaultBranch: 'main',
140+
fetchRemote: true,
135141
});
136142
jest
137143
.spyOn(envModule, 'getEnvironmentVariables')
138144
.mockReturnValue({ EDITOR: undefined });
139145
when(jest.spyOn(projectModule, 'readProject'))
140-
.calledWith('/path/to/project', { stderr })
146+
.calledWith('/path/to/project', { stderr, fetchRemote: true })
141147
.mockResolvedValue(project);
142148

143149
const initialParameters = await determineInitialParameters({
@@ -162,12 +168,13 @@ describe('initial-parameters', () => {
162168
reset: true,
163169
backport: false,
164170
defaultBranch: 'main',
171+
fetchRemote: true,
165172
});
166173
jest
167174
.spyOn(envModule, 'getEnvironmentVariables')
168175
.mockReturnValue({ EDITOR: undefined });
169176
when(jest.spyOn(projectModule, 'readProject'))
170-
.calledWith('/path/to/project', { stderr })
177+
.calledWith('/path/to/project', { stderr, fetchRemote: true })
171178
.mockResolvedValue(project);
172179

173180
const initialParameters = await determineInitialParameters({
@@ -190,12 +197,13 @@ describe('initial-parameters', () => {
190197
reset: false,
191198
backport: false,
192199
defaultBranch: 'main',
200+
fetchRemote: true,
193201
});
194202
jest
195203
.spyOn(envModule, 'getEnvironmentVariables')
196204
.mockReturnValue({ EDITOR: undefined });
197205
when(jest.spyOn(projectModule, 'readProject'))
198-
.calledWith('/path/to/project', { stderr })
206+
.calledWith('/path/to/project', { stderr, fetchRemote: true })
199207
.mockResolvedValue(project);
200208

201209
const initialParameters = await determineInitialParameters({
@@ -218,12 +226,13 @@ describe('initial-parameters', () => {
218226
reset: false,
219227
backport: true,
220228
defaultBranch: 'main',
229+
fetchRemote: true,
221230
});
222231
jest
223232
.spyOn(envModule, 'getEnvironmentVariables')
224233
.mockReturnValue({ EDITOR: undefined });
225234
when(jest.spyOn(projectModule, 'readProject'))
226-
.calledWith('/path/to/project', { stderr })
235+
.calledWith('/path/to/project', { stderr, fetchRemote: true })
227236
.mockResolvedValue(project);
228237

229238
const initialParameters = await determineInitialParameters({
@@ -246,12 +255,13 @@ describe('initial-parameters', () => {
246255
reset: false,
247256
backport: false,
248257
defaultBranch: 'main',
258+
fetchRemote: true,
249259
});
250260
jest
251261
.spyOn(envModule, 'getEnvironmentVariables')
252262
.mockReturnValue({ EDITOR: undefined });
253263
when(jest.spyOn(projectModule, 'readProject'))
254-
.calledWith('/path/to/project', { stderr })
264+
.calledWith('/path/to/project', { stderr, fetchRemote: true })
255265
.mockResolvedValue(project);
256266

257267
const initialParameters = await determineInitialParameters({

src/initial-parameters.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ type InitialParameters = {
2121
reset: boolean;
2222
releaseType: ReleaseType;
2323
defaultBranch: string;
24+
fetchRemote: boolean;
2425
};
2526

2627
/**
@@ -64,5 +65,6 @@ export async function determineInitialParameters({
6465
reset: args.reset,
6566
defaultBranch: args.defaultBranch,
6667
releaseType: args.backport ? 'backport' : 'ordinary',
68+
fetchRemote: args.fetchRemote,
6769
};
6870
}

src/main.test.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ describe('main', () => {
2020
reset: true,
2121
defaultBranch: 'main',
2222
releaseType: 'backport',
23+
fetchRemote: true,
2324
});
2425
const followMonorepoWorkflowSpy = jest
2526
.spyOn(monorepoWorkflowOperations, 'followMonorepoWorkflow')
@@ -40,6 +41,7 @@ describe('main', () => {
4041
defaultBranch: 'main',
4142
stdout,
4243
stderr,
44+
fetchRemote: true,
4345
});
4446
});
4547

@@ -55,6 +57,7 @@ describe('main', () => {
5557
reset: false,
5658
defaultBranch: 'main',
5759
releaseType: 'backport',
60+
fetchRemote: true,
5861
});
5962
const followMonorepoWorkflowSpy = jest
6063
.spyOn(monorepoWorkflowOperations, 'followMonorepoWorkflow')

src/main.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,14 @@ export async function main({
2525
stdout: Pick<WriteStream, 'write'>;
2626
stderr: Pick<WriteStream, 'write'>;
2727
}) {
28-
const { project, tempDirectoryPath, reset, releaseType, defaultBranch } =
29-
await determineInitialParameters({ argv, cwd, stderr });
28+
const {
29+
project,
30+
tempDirectoryPath,
31+
reset,
32+
releaseType,
33+
defaultBranch,
34+
fetchRemote,
35+
} = await determineInitialParameters({ argv, cwd, stderr });
3036

3137
if (project.isMonorepo) {
3238
stdout.write(
@@ -40,6 +46,7 @@ export async function main({
4046
defaultBranch,
4147
stdout,
4248
stderr,
49+
fetchRemote,
4350
});
4451
} else {
4552
stdout.write(

src/monorepo-workflow-operations.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ import {
5959
* @param args.defaultBranch - The name of the default branch in the repository.
6060
* @param args.stdout - A stream that can be used to write to standard out.
6161
* @param args.stderr - A stream that can be used to write to standard error.
62+
* @param args.fetchRemote - Whether to synchronize local tags with remote.
6263
*/
6364
export async function followMonorepoWorkflow({
6465
project,
@@ -68,6 +69,7 @@ export async function followMonorepoWorkflow({
6869
defaultBranch,
6970
stdout,
7071
stderr,
72+
fetchRemote,
7173
}: {
7274
project: Project;
7375
tempDirectoryPath: string;
@@ -76,14 +78,15 @@ export async function followMonorepoWorkflow({
7678
defaultBranch: string;
7779
stdout: Pick<WriteStream, 'write'>;
7880
stderr: Pick<WriteStream, 'write'>;
81+
fetchRemote?: boolean;
7982
}) {
8083
const { version: newReleaseVersion, firstRun } = await createReleaseBranch({
8184
project,
8285
releaseType,
8386
});
8487

8588
if (firstRun) {
86-
await updateChangelogsForChangedPackages({ project, stderr });
89+
await updateChangelogsForChangedPackages({ project, stderr, fetchRemote });
8790
await commitAllChanges(
8891
project.directoryPath,
8992
`Initialize Release ${newReleaseVersion}`,

src/package.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,16 +305,19 @@ export async function formatChangelog(changelog: string) {
305305
* @param args.project - The project.
306306
* @param args.package - A particular package in the project.
307307
* @param args.stderr - A stream that can be used to write to standard error.
308+
* @param args.fetchRemote - Whether to synchronize local tags with remote.
308309
* @returns The result of writing to the changelog.
309310
*/
310311
export async function updatePackageChangelog({
311312
project: { repositoryUrl },
312313
package: pkg,
313314
stderr,
315+
fetchRemote,
314316
}: {
315317
project: Pick<Project, 'directoryPath' | 'repositoryUrl'>;
316318
package: Package;
317319
stderr: Pick<WriteStream, 'write'>;
320+
fetchRemote?: boolean | undefined;
318321
}): Promise<void> {
319322
let changelogContent;
320323

@@ -341,6 +344,7 @@ export async function updatePackageChangelog({
341344
repoUrl: repositoryUrl,
342345
tagPrefixes: [`${pkg.validatedManifest.name}@`, 'v'],
343346
formatter: formatChangelog,
347+
fetchRemote,
344348
});
345349

346350
if (newChangelogContent) {

src/project.test.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ describe('project', () => {
6363
.calledWith(projectDirectoryPath)
6464
.mockResolvedValue(projectRepositoryUrl);
6565
when(jest.spyOn(repoModule, 'getTagNames'))
66-
.calledWith(projectDirectoryPath)
66+
.calledWith(projectDirectoryPath, true)
6767
.mockResolvedValue(projectTagNames);
6868
when(jest.spyOn(packageModule, 'readMonorepoRootPackage'))
6969
.calledWith({
@@ -111,7 +111,10 @@ describe('project', () => {
111111
);
112112

113113
expect(
114-
await readProject(projectDirectoryPath, { stderr }),
114+
await readProject(projectDirectoryPath, {
115+
stderr,
116+
fetchRemote: true,
117+
}),
115118
).toStrictEqual({
116119
directoryPath: projectDirectoryPath,
117120
repositoryUrl: projectRepositoryUrl,

src/project.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,17 +139,20 @@ export async function readProject(
139139
* @param args - The arguments.
140140
* @param args.project - The project.
141141
* @param args.stderr - A stream that can be used to write to standard error.
142+
* @param args.fetchRemote - Whether to synchronize local tags with remote.
142143
* @returns The result of writing to the changelog.
143144
*/
144145
export async function updateChangelogsForChangedPackages({
145146
project,
146147
stderr,
148+
fetchRemote,
147149
}: {
148150
project: Pick<
149151
Project,
150152
'directoryPath' | 'repositoryUrl' | 'workspacePackages'
151153
>;
152154
stderr: Pick<WriteStream, 'write'>;
155+
fetchRemote?: boolean | undefined;
153156
}): Promise<void> {
154157
await Promise.all(
155158
Object.values(project.workspacePackages)
@@ -161,6 +164,7 @@ export async function updateChangelogsForChangedPackages({
161164
project,
162165
package: pkg,
163166
stderr,
167+
fetchRemote,
164168
}),
165169
),
166170
);

src/repo.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ describe('repo', () => {
108108
})
109109
.mockResolvedValue(['tag1', 'tag2', 'tag3']);
110110

111-
expect(await getTagNames('/path/to/repo')).toStrictEqual([
111+
expect(await getTagNames('/path/to/repo', false)).toStrictEqual([
112112
'tag1',
113113
'tag2',
114114
'tag3',

0 commit comments

Comments
 (0)