From 5cd0f8f794462621056ad0359217677511fa056e Mon Sep 17 00:00:00 2001 From: Andrew Lisowski Date: Tue, 25 Apr 2023 17:57:20 -0700 Subject: [PATCH 1/2] Add --from latest option to release and changelog commands --- packages/cli/src/parse-args.ts | 11 ++++++----- packages/core/src/auto.ts | 8 ++++++-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/packages/cli/src/parse-args.ts b/packages/cli/src/parse-args.ts index 3d7d67774..758398088 100644 --- a/packages/cli/src/parse-args.ts +++ b/packages/cli/src/parse-args.ts @@ -236,7 +236,7 @@ const useVersion: AutoOption = { group: "main", description: "Version number to publish as. Defaults to reading from the package definition for the platform.", -} +}; interface AutoCommand extends Command { /** Options for the command */ @@ -455,7 +455,7 @@ export const commands: AutoCommand[] = [ type: String, group: "main", description: - "Tag to start changelog generation on. Defaults to latest tag.", + "Tag to start changelog generation on. Defaults to latest tag or if a prerelease the latest tag in the branch. Provide latest to override.", }, { name: "to", @@ -498,7 +498,7 @@ export const commands: AutoCommand[] = [ type: String, group: "main", description: - "Git revision (tag, commit sha, ...) to start release notes from. Defaults to latest tag.", + "Tag to start changelog generation on. Defaults to latest tag or if a prerelease the latest tag in the branch. Provide latest to override.", }, { name: "to", @@ -518,7 +518,8 @@ export const commands: AutoCommand[] = [ }, { desc: "Create a GitHub release using provided commit range and version", - example: "{green $} auto release --from v0.20.1 --to HEAD --use-version v0.21.0", + example: + "{green $} auto release --from v0.20.1 --to HEAD --use-version v0.21.0", }, ], }, @@ -538,7 +539,7 @@ export const commands: AutoCommand[] = [ ...latestCommandArgs, { ...useVersion, - description: `${useVersion.description} Currently only supported for the **npm plugin**.` + description: `${useVersion.description} Currently only supported for the **npm plugin**.`, }, { name: "only-graduate-with-release-label", diff --git a/packages/core/src/auto.ts b/packages/core/src/auto.ts index 2dc75958e..4e265d12e 100644 --- a/packages/core/src/auto.ts +++ b/packages/core/src/auto.ts @@ -1913,7 +1913,9 @@ export default class Auto { ); } - const lastRelease = from || (await this.git.getLatestRelease()); + const latestRelease = await this.git.getLatestRelease(); + const lastRelease = + (from === "latest" && latestRelease) || from || latestRelease; const bump = await this.release.getSemverBump(lastRelease, to); const releaseNotes = await this.release.generateReleaseNotes( lastRelease, @@ -1995,11 +1997,13 @@ export default class Auto { return process.exit(1); } + const latestRelease = await this.git.getLatestRelease(); const isPrerelease = prerelease || this.inPrereleaseBranch(); let lastRelease = + (from === "latest" && latestRelease) || from || (isPrerelease && (await this.git.getPreviousTagInBranch())) || - (await this.git.getLatestRelease()); + latestRelease; // Find base commit or latest release to generate the changelog to HEAD (new tag) this.logger.veryVerbose.info(`Using ${lastRelease} as previous release.`); From b9aa3db0718a3af87373fd9cfc0d43293835c82b Mon Sep 17 00:00:00 2001 From: Andrew Lisowski Date: Tue, 25 Apr 2023 18:13:27 -0700 Subject: [PATCH 2/2] fix tests --- packages/core/src/__tests__/auto-make-changelog.test.ts | 1 + packages/core/src/__tests__/auto.test.ts | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/core/src/__tests__/auto-make-changelog.test.ts b/packages/core/src/__tests__/auto-make-changelog.test.ts index 0ef180820..4511b552d 100644 --- a/packages/core/src/__tests__/auto-make-changelog.test.ts +++ b/packages/core/src/__tests__/auto-make-changelog.test.ts @@ -39,6 +39,7 @@ jest.mock("@octokit/rest", () => { repos = { get: jest.fn().mockReturnValue(Promise.resolve({})), + getLatestRelease: jest.fn().mockReturnValue({ data: { tag_name: "" } }), }; hook = { diff --git a/packages/core/src/__tests__/auto.test.ts b/packages/core/src/__tests__/auto.test.ts index ef3df3196..1a40732c6 100644 --- a/packages/core/src/__tests__/auto.test.ts +++ b/packages/core/src/__tests__/auto.test.ts @@ -54,6 +54,7 @@ jest.mock("@octokit/rest", () => { repos = { get: jest.fn().mockReturnValue({}), + getLatestRelease: jest.fn().mockReturnValue({ data: { tag_name: "" } }), }; hook = { @@ -976,7 +977,6 @@ describe("Auto", () => { ); }); - test("should use --to commit target", async () => { const auto = new Auto({ ...defaults, plugins: [] }); auto.logger = dummyLog(); @@ -995,7 +995,7 @@ describe("Auto", () => { auto.hooks.afterRelease.tap("test", afterRelease); jest.spyOn(auto.release!, "getCommits").mockImplementation(); - await auto.runRelease({ to: 'abc'}); + await auto.runRelease({ to: "abc" }); expect(auto.git!.publish).toHaveBeenCalledWith( "releaseNotes",