From d7d7f42f352762e11f3a773f8db4abe4fe24d05f Mon Sep 17 00:00:00 2001 From: Erik Engervall Date: Thu, 29 Apr 2021 23:16:25 +0200 Subject: [PATCH] Api now :hurray: Signed-off-by: Erik Engervall --- .../src/api/GitReleaseApiClient.test.ts | 6 +- .../src/api/GitReleaseApiClient.ts | 136 ++++++++---------- .../src/features/Patch/hooks/usePatch.ts | 17 ++- .../src/test-helpers/test-helpers.ts | 28 ++-- 4 files changed, 88 insertions(+), 99 deletions(-) diff --git a/plugins/git-release-manager/src/api/GitReleaseApiClient.test.ts b/plugins/git-release-manager/src/api/GitReleaseApiClient.test.ts index 88be0b4306..3cd9728fdb 100644 --- a/plugins/git-release-manager/src/api/GitReleaseApiClient.test.ts +++ b/plugins/git-release-manager/src/api/GitReleaseApiClient.test.ts @@ -54,12 +54,10 @@ describe('GitReleaseApiClient', () => { "getAccessToken": [MockFunction], }, "host": "github.com", - "patch": Object { - "merge": [Function], - "updateRelease": [Function], - }, + "merge": [Function], "promoteRelease": [Function], "updateRef": [Function], + "updateRelease": [Function], } `); }); diff --git a/plugins/git-release-manager/src/api/GitReleaseApiClient.ts b/plugins/git-release-manager/src/api/GitReleaseApiClient.ts index 57d1a66d3b..573010f5f0 100644 --- a/plugins/git-release-manager/src/api/GitReleaseApiClient.ts +++ b/plugins/git-release-manager/src/api/GitReleaseApiClient.ts @@ -18,10 +18,8 @@ import { ConfigApi, OAuthApi } from '@backstage/core'; import { Octokit } from '@octokit/rest'; import { readGitHubIntegrationConfigs } from '@backstage/integration'; -import { CalverTagParts } from '../helpers/tagParts/getCalverTagParts'; import { DISABLE_CACHE } from '../constants/constants'; import { Project } from '../contexts/ProjectContext'; -import { SemverTagParts } from '../helpers/tagParts/getSemverTagParts'; import { UnboxArray, UnboxReturnedPromise } from '../types/helpers'; export class GitReleaseApiClient implements GitReleaseApi { @@ -377,54 +375,47 @@ export class GitReleaseApiClient implements GitReleaseApi { }; }; - patch: GitReleaseApi['patch'] = { - merge: async ({ owner, repo, base, head }) => { - const { octokit } = await this.getOctokit(); - const { data: merge } = await octokit.repos.merge({ - owner, - repo, - base, - head, - }); - - return { - htmlUrl: merge.html_url, - commit: { - message: merge.commit.message, - tree: { - sha: merge.commit.tree.sha, - }, - }, - }; - }, - - updateRelease: async ({ + merge: GitReleaseApi['merge'] = async ({ owner, repo, base, head }) => { + const { octokit } = await this.getOctokit(); + const { data: merge } = await octokit.repos.merge({ owner, repo, - bumpedTag, - latestRelease, - tagParts, - selectedPatchCommit, - }) => { - const { octokit } = await this.getOctokit(); - const { data: updatedRelease } = await octokit.repos.updateRelease({ - owner, - repo, - release_id: latestRelease.id, - tag_name: bumpedTag, - body: `${latestRelease.body} + base, + head, + }); -#### [Patch ${tagParts.patch}](${selectedPatchCommit.htmlUrl}) - -${selectedPatchCommit.commit.message}`, - }); + return { + htmlUrl: merge.html_url, + commit: { + message: merge.commit.message, + tree: { + sha: merge.commit.tree.sha, + }, + }, + }; + }; - return { - name: updatedRelease.name, - tagName: updatedRelease.tag_name, - htmlUrl: updatedRelease.html_url, - }; - }, + updateRelease: GitReleaseApi['updateRelease'] = async ({ + owner, + repo, + releaseId, + body, + tagName, + }) => { + const { octokit } = await this.getOctokit(); + const { data: updatedRelease } = await octokit.repos.updateRelease({ + owner, + repo, + release_id: releaseId, + tag_name: tagName, + body, + }); + + return { + name: updatedRelease.name, + tagName: updatedRelease.tag_name, + htmlUrl: updatedRelease.html_url, + }; }; promoteRelease: GitReleaseApi['promoteRelease'] = async ({ @@ -674,35 +665,32 @@ export interface GitReleaseApi { }; }>; - patch: { - merge: ( - args: { - base: string; - head: string; - } & OwnerRepo, - ) => Promise<{ - htmlUrl: string; - commit: { - message: string; - tree: { - sha: string; - }; + merge: ( + args: { + base: string; + head: string; + } & OwnerRepo, + ) => Promise<{ + htmlUrl: string; + commit: { + message: string; + tree: { + sha: string; }; - }>; + }; + }>; - updateRelease: ( - args: { - bumpedTag: string; - latestRelease: NonNullable; - tagParts: SemverTagParts | CalverTagParts; - selectedPatchCommit: GetRecentCommitsResultSingle; - } & OwnerRepo, - ) => Promise<{ - name: string | null; + updateRelease: ( + args: { + releaseId: number; + body: string; tagName: string; - htmlUrl: string; - }>; - }; + } & OwnerRepo, + ) => Promise<{ + name: string | null; + tagName: string; + htmlUrl: string; + }>; promoteRelease: ( args: { @@ -784,12 +772,12 @@ export type GetComparisonResult = UnboxReturnedPromise< export type CreateReleaseResult = UnboxReturnedPromise< GitReleaseApi['createRelease'] >; -export type MergeResult = UnboxReturnedPromise; +export type MergeResult = UnboxReturnedPromise; export type CreateTagObjectResult = UnboxReturnedPromise< GitReleaseApi['createTagObject'] >; export type UpdateReleaseResult = UnboxReturnedPromise< - GitReleaseApi['patch']['updateRelease'] + GitReleaseApi['updateRelease'] >; export type PromoteReleaseResult = UnboxReturnedPromise< GitReleaseApi['promoteRelease'] diff --git a/plugins/git-release-manager/src/features/Patch/hooks/usePatch.ts b/plugins/git-release-manager/src/features/Patch/hooks/usePatch.ts index 2eb410625a..ff6c8dc38d 100644 --- a/plugins/git-release-manager/src/features/Patch/hooks/usePatch.ts +++ b/plugins/git-release-manager/src/features/Patch/hooks/usePatch.ts @@ -154,7 +154,7 @@ export function usePatch({ abortIfError(forceBranchRes.error); if (!forceBranchRes.value || !releaseBranchRes.value) return undefined; - const merge = await pluginApiClient.patch + const merge = await pluginApiClient .merge({ owner: project.owner, repo: project.repo, @@ -299,14 +299,19 @@ export function usePatch({ abortIfError(createdReferenceRes.error); if (!createdReferenceRes.value || !releaseBranchRes.value) return undefined; - const updatedRelease = await pluginApiClient.patch + const selectedPatchCommit = releaseBranchRes.value.selectedPatchCommit; + + const updatedRelease = await pluginApiClient .updateRelease({ owner: project.owner, repo: project.repo, - bumpedTag, - latestRelease, - selectedPatchCommit: releaseBranchRes.value.selectedPatchCommit, - tagParts, + releaseId: latestRelease.id, + tagName: bumpedTag, + body: `${latestRelease.body} + +#### [Patch ${tagParts.patch}](${selectedPatchCommit.htmlUrl}) + +${selectedPatchCommit.commit.message}`, }) .catch(asyncCatcher); diff --git a/plugins/git-release-manager/src/test-helpers/test-helpers.ts b/plugins/git-release-manager/src/test-helpers/test-helpers.ts index 8234872368..b1b5fbb7c9 100644 --- a/plugins/git-release-manager/src/test-helpers/test-helpers.ts +++ b/plugins/git-release-manager/src/test-helpers/test-helpers.ts @@ -253,23 +253,21 @@ export const mockApiClient: GitReleaseApi = { }, })), - patch: { - merge: jest.fn(async () => ({ - htmlUrl: 'mock_merge_html_url', - commit: { - message: 'mock_merge_commit_message', - tree: { - sha: 'mock_merge_commit_tree_sha', - }, + merge: jest.fn(async () => ({ + htmlUrl: 'mock_merge_html_url', + commit: { + message: 'mock_merge_commit_message', + tree: { + sha: 'mock_merge_commit_tree_sha', }, - })), + }, + })), - updateRelease: jest.fn(async () => ({ - name: 'mock_update_release_name', - tagName: 'mock_update_release_tag_name', - htmlUrl: 'mock_update_release_html_url', - })), - }, + updateRelease: jest.fn(async () => ({ + name: 'mock_update_release_name', + tagName: 'mock_update_release_tag_name', + htmlUrl: 'mock_update_release_html_url', + })), promoteRelease: jest.fn(async () => ({ name: 'mock_release_name',