Api now <flattened> :hurray:

Signed-off-by: Erik Engervall <erik.engervall@gmail.com>
This commit is contained in:
Erik Engervall
2021-04-29 23:16:25 +02:00
parent 378fb83ed2
commit d7d7f42f35
4 changed files with 88 additions and 99 deletions
@@ -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],
}
`);
});
@@ -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<GetLatestReleaseResult>;
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<GitReleaseApi['patch']['merge']>;
export type MergeResult = UnboxReturnedPromise<GitReleaseApi['merge']>;
export type CreateTagObjectResult = UnboxReturnedPromise<
GitReleaseApi['createTagObject']
>;
export type UpdateReleaseResult = UnboxReturnedPromise<
GitReleaseApi['patch']['updateRelease']
GitReleaseApi['updateRelease']
>;
export type PromoteReleaseResult = UnboxReturnedPromise<
GitReleaseApi['promoteRelease']
@@ -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);
@@ -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',