diff --git a/plugins/github-release-manager/src/GitHubReleaseManager.tsx b/plugins/github-release-manager/src/GitHubReleaseManager.tsx
index 692b43baa1..cde0a846d3 100644
--- a/plugins/github-release-manager/src/GitHubReleaseManager.tsx
+++ b/plugins/github-release-manager/src/GitHubReleaseManager.tsx
@@ -66,15 +66,16 @@ export function GitHubReleaseManager({
}: GitHubReleaseManagerProps) {
const pluginApiClient = useApi(githubReleaseManagerApiRef);
const classes = useStyles();
- const usernameResponse = useAsync(() => pluginApiClient.getUsername());
const query = useQuery();
-
const parsedQuery = getParsedQuery({ query });
const project: Project = {
owner: parsedQuery.owner ?? '',
repo: parsedQuery.repo ?? '',
versioningStrategy: parsedQuery.versioningStrategy ?? 'semver',
};
+ const usernameResponse = useAsync(() =>
+ pluginApiClient.getUsername({ owner: project.owner, repo: project.repo }),
+ );
if (usernameResponse.error) {
return {usernameResponse.error.message};
diff --git a/plugins/github-release-manager/src/api/PluginApiClient.ts b/plugins/github-release-manager/src/api/PluginApiClient.ts
index 3b7e0da80f..291749b217 100644
--- a/plugins/github-release-manager/src/api/PluginApiClient.ts
+++ b/plugins/github-release-manager/src/api/PluginApiClient.ts
@@ -19,6 +19,7 @@ import { Octokit } from '@octokit/rest';
import { readGitHubIntegrationConfigs } from '@backstage/integration';
import { CalverTagParts } from '../helpers/tagParts/getCalverTagParts';
+import { DISABLE_CACHE } from '../constants/constants';
import { getRcGitHubInfo } from '../cards/createRc/getRcGitHubInfo';
import { Project } from '../contexts/ProjectContext';
import { SemverTagParts } from '../helpers/tagParts/getSemverTagParts';
@@ -27,258 +28,296 @@ type UnboxPromise> = T extends Promise
? U
: never;
-export type ApiMethodRetval<
+type UnboxReturnedPromise<
T extends (...args: any) => Promise
> = UnboxPromise>;
-export type UnboxArray = T extends (infer U)[] ? U : T;
+type UnboxArray = T extends (infer U)[] ? U : T;
-type PartialProject = Omit;
+type OwnerRepo = {
+ owner: Project['owner'];
+ repo: Project['repo'];
+};
-export interface IPluginApiClient {
- getHost: () => string;
+type GetHost = () => string;
- getRepoPath: (args: PartialProject) => string;
+type GetRepoPath = (args: OwnerRepo) => string;
- getOwners: () => Promise<{ owners: string[] }>;
+type GetOwners = () => Promise<{
+ owners: string[];
+}>;
+export type GetOwnersResult = UnboxReturnedPromise;
- getRepositories: (args: {
- owner: string;
- }) => Promise<{ repositories: string[] }>;
+type GetRepositories = (args: {
+ owner: string;
+}) => Promise<{
+ repositories: string[];
+}>;
+export type GetRepositoriesResult = UnboxReturnedPromise;
- getUsername: () => Promise<{ username: string }>;
+type GetUsername = (
+ args: OwnerRepo,
+) => Promise<{
+ username: string;
+}>;
+export type GetUsernameResult = UnboxReturnedPromise;
- getRecentCommits: (
- args: { releaseBranchName?: string } & PartialProject,
- ) => Promise<
- {
- htmlUrl: string;
- sha: string;
- author: {
- htmlUrl?: string;
- login?: string;
- };
- commit: {
- message: string;
- };
- firstParentSha?: string;
- }[]
- >;
-
- getLatestRelease: (
- args: PartialProject,
- ) => Promise<{
- latestRelease: {
- targetCommitish: string;
- tagName: string;
- prerelease: boolean;
- id: number;
- htmlUrl: string;
- body?: string | null;
- } | null;
- }>;
-
- getRepository: (
- args: PartialProject,
- ) => Promise<{
- repository: {
- pushPermissions: boolean | undefined;
- defaultBranch: string;
- name: string;
- };
- }>;
-
- getLatestCommit: (
- args: {
- defaultBranch: string;
- } & PartialProject,
- ) => Promise<{
- sha: string;
+type GetRecentCommits = (
+ args: {
+ releaseBranchName?: string;
+ } & OwnerRepo,
+) => Promise<
+ {
htmlUrl: string;
+ sha: string;
+ author: {
+ htmlUrl?: string;
+ login?: string;
+ };
commit: {
message: string;
};
- }>;
+ firstParentSha?: string;
+ }[]
+>;
+export type GetRecentCommitsResult = UnboxReturnedPromise;
+export type GetRecentCommitsResultSingle = UnboxArray;
- getBranch: (
- args: {
- branchName: string;
- } & PartialProject,
- ) => Promise<{
- name: string;
- links: {
- html: string;
- };
- commit: {
- sha: string;
- commit: {
- tree: {
- sha: string;
- };
- };
- };
- }>;
+type GetLatestRelease = (
+ args: OwnerRepo,
+) => Promise<{
+ targetCommitish: string;
+ tagName: string;
+ prerelease: boolean;
+ id: number;
+ htmlUrl: string;
+ body?: string | null;
+} | null>;
+export type GetLatestReleaseResult = UnboxReturnedPromise;
- createRc: {
- createRef: (
- args: {
- mostRecentSha: string;
- targetBranch: string;
- } & PartialProject,
- ) => Promise<{ ref: string }>;
+type GetRepository = (
+ args: OwnerRepo,
+) => Promise<{
+ pushPermissions: boolean | undefined;
+ defaultBranch: string;
+ name: string;
+}>;
+export type GetRepositoryResult = UnboxReturnedPromise;
- getComparison: (
- args: {
- previousReleaseBranch: string;
- nextReleaseBranch: string;
- } & PartialProject,
- ) => Promise<{ htmlUrl: string; aheadBy: number }>;
-
- createRelease: (
- args: {
- nextGitHubInfo: ReturnType;
- releaseBody: string;
- } & PartialProject,
- ) => Promise<{
- createReleaseResponse: {
- name: string | null;
- htmlUrl: string;
- tagName: string;
- };
- }>;
+type GetLatestCommit = (
+ args: {
+ defaultBranch: string;
+ } & OwnerRepo,
+) => Promise<{
+ sha: string;
+ htmlUrl: string;
+ commit: {
+ message: string;
};
+}>;
+export type GetLatestCommitResult = UnboxReturnedPromise;
- patch: {
- createTempCommit: (
- args: {
- tagParts: SemverTagParts | CalverTagParts;
- releaseBranchTree: string;
- selectedPatchCommit: UnboxArray<
- ApiMethodRetval
- >;
- } & PartialProject,
- ) => Promise<{
- message: string;
- sha: string;
- }>;
-
- forceBranchHeadToTempCommit: (
- args: {
- releaseBranchName: string;
- tempCommit: ApiMethodRetval<
- IPluginApiClient['patch']['createTempCommit']
- >;
- } & PartialProject,
- ) => Promise;
-
- merge: ({
- base,
- head,
- }: {
- base: string;
- head: string;
- } & PartialProject) => Promise<{
- htmlUrl: string;
- commit: {
- message: string;
- tree: {
- sha: string;
- };
- };
- }>;
-
- createCherryPickCommit: (
- args: {
- bumpedTag: string;
- selectedPatchCommit: UnboxArray<
- ApiMethodRetval
- >;
- mergeTree: string;
- releaseBranchSha: string;
- } & PartialProject,
- ) => Promise<{
- message: string;
- sha: string;
- }>;
-
- replaceTempCommit: (
- args: {
- releaseBranchName: string;
- cherryPickCommit: ApiMethodRetval<
- IPluginApiClient['patch']['createCherryPickCommit']
- >;
- } & PartialProject,
- ) => Promise<{
- ref: string;
- object: {
+type GetBranch = (
+ args: {
+ branchName: string;
+ } & OwnerRepo,
+) => Promise<{
+ name: string;
+ links: {
+ html: string;
+ };
+ commit: {
+ sha: string;
+ commit: {
+ tree: {
sha: string;
};
- }>;
-
- createTagObject: ({
- bumpedTag,
- updatedReference,
- }: {
- bumpedTag: string;
- updatedReference: ApiMethodRetval<
- IPluginApiClient['patch']['replaceTempCommit']
- >;
- } & PartialProject) => Promise<{
- tag: string;
- sha: string;
- }>;
-
- createReference: (
- args: {
- bumpedTag: string;
- createdTagObject: ApiMethodRetval<
- IPluginApiClient['patch']['createTagObject']
- >;
- } & PartialProject,
- ) => Promise<{
- ref: string;
- }>;
-
- updateRelease: (
- args: {
- bumpedTag: string;
- latestRelease: NonNullable<
- ApiMethodRetval['latestRelease']
- >;
- tagParts: SemverTagParts | CalverTagParts;
- selectedPatchCommit: UnboxArray<
- ApiMethodRetval
- >;
- } & PartialProject,
- ) => Promise<{
- name: string | null;
- tagName: string;
- htmlUrl: string;
- }>;
+ };
};
+}>;
+export type GetBranchResult = UnboxReturnedPromise;
+type CreateRef = (
+ args: {
+ mostRecentSha: string;
+ targetBranch: string;
+ } & OwnerRepo,
+) => Promise<{
+ ref: string;
+}>;
+export type CreateRefResult = UnboxReturnedPromise;
+
+type GetComparison = (
+ args: {
+ previousReleaseBranch: string;
+ nextReleaseBranch: string;
+ } & OwnerRepo,
+) => Promise<{
+ htmlUrl: string;
+ aheadBy: number;
+}>;
+export type GetComparisonResult = UnboxReturnedPromise;
+
+type CreateRelease = (
+ args: {
+ nextGitHubInfo: ReturnType;
+ releaseBody: string;
+ } & OwnerRepo,
+) => Promise<{
+ name: string | null;
+ htmlUrl: string;
+ tagName: string;
+}>;
+export type CreateReleaseResult = UnboxReturnedPromise;
+
+type CreateTempCommit = (
+ args: {
+ tagParts: SemverTagParts | CalverTagParts;
+ releaseBranchTree: string;
+ selectedPatchCommit: UnboxArray<
+ UnboxReturnedPromise
+ >;
+ } & OwnerRepo,
+) => Promise<{
+ message: string;
+ sha: string;
+}>;
+export type CreateTempCommitResult = UnboxReturnedPromise;
+
+type ForceBranchHeadToTempCommit = (
+ args: {
+ releaseBranchName: string;
+ tempCommit: CreateTempCommitResult;
+ } & OwnerRepo,
+) => Promise;
+export type ForceBranchHeadToTempCommitResult = UnboxReturnedPromise;
+
+type Merge = ({
+ base,
+ head,
+}: {
+ base: string;
+ head: string;
+} & OwnerRepo) => Promise<{
+ htmlUrl: string;
+ commit: {
+ message: string;
+ tree: {
+ sha: string;
+ };
+ };
+}>;
+export type MergeResult = UnboxReturnedPromise;
+
+type CreateCherryPickCommit = (
+ args: {
+ bumpedTag: string;
+ selectedPatchCommit: UnboxArray<
+ UnboxReturnedPromise
+ >;
+ mergeTree: string;
+ releaseBranchSha: string;
+ } & OwnerRepo,
+) => Promise<{
+ message: string;
+ sha: string;
+}>;
+export type CreateCherryPickCommitResult = UnboxReturnedPromise;
+
+type ReplaceTempCommit = (
+ args: {
+ releaseBranchName: string;
+ cherryPickCommit: UnboxReturnedPromise<
+ IPluginApiClient['patch']['createCherryPickCommit']
+ >;
+ } & OwnerRepo,
+) => Promise<{
+ ref: string;
+ object: {
+ sha: string;
+ };
+}>;
+export type ReplaceTempCommitResult = UnboxReturnedPromise;
+
+type CreateTagObject = ({
+ bumpedTag,
+ updatedReference,
+}: {
+ bumpedTag: string;
+ updatedReference: ReplaceTempCommitResult;
+} & OwnerRepo) => Promise<{
+ tag: string;
+ sha: string;
+}>;
+export type CreateTagObjectResult = UnboxReturnedPromise;
+
+type CreateReference = (
+ args: {
+ bumpedTag: string;
+ createdTagObject: CreateTagObjectResult;
+ } & OwnerRepo,
+) => Promise<{
+ ref: string;
+}>;
+export type CreateReferenceResult = UnboxReturnedPromise;
+
+type UpdateRelease = (
+ args: {
+ bumpedTag: string;
+ latestRelease: NonNullable;
+ tagParts: SemverTagParts | CalverTagParts;
+ selectedPatchCommit: GetRecentCommitsResultSingle;
+ } & OwnerRepo,
+) => Promise<{
+ name: string | null;
+ tagName: string;
+ htmlUrl: string;
+}>;
+export type UpdateReleaseResult = UnboxReturnedPromise;
+
+type PromoteRelease = (
+ args: {
+ releaseId: NonNullable['id'];
+ releaseVersion: string;
+ } & OwnerRepo,
+) => Promise<{
+ name: string | null;
+ tagName: string;
+ htmlUrl: string;
+}>;
+export type PromoteReleaseResult = UnboxReturnedPromise;
+
+export interface IPluginApiClient {
+ getHost: GetHost;
+ getRepoPath: GetRepoPath;
+ getOwners: GetOwners;
+ getRepositories: GetRepositories;
+ getUsername: GetUsername;
+ getRecentCommits: GetRecentCommits;
+ getLatestRelease: GetLatestRelease;
+ getRepository: GetRepository;
+ getLatestCommit: GetLatestCommit;
+ getBranch: GetBranch;
+ createRc: {
+ createRef: CreateRef;
+ getComparison: GetComparison;
+ createRelease: CreateRelease;
+ };
+ patch: {
+ createTempCommit: CreateTempCommit;
+ forceBranchHeadToTempCommit: ForceBranchHeadToTempCommit;
+ merge: Merge;
+ createCherryPickCommit: CreateCherryPickCommit;
+ replaceTempCommit: ReplaceTempCommit;
+ createTagObject: CreateTagObject;
+ createReference: CreateReference;
+ updateRelease: UpdateRelease;
+ };
promoteRc: {
- promoteRelease: (
- args: {
- releaseId: NonNullable<
- ApiMethodRetval['latestRelease']
- >['id'];
- releaseVersion: string;
- } & PartialProject,
- ) => Promise<{
- name: string | null;
- tagName: string;
- htmlUrl: string;
- }>;
+ promoteRelease: PromoteRelease;
};
}
-const DISABLE_CACHE = {
- headers: {
- 'If-None-Match': '',
- },
-};
-
export class PluginApiClient implements IPluginApiClient {
private readonly githubAuthApi: OAuthApi;
private readonly baseUrl: string;
@@ -331,7 +370,7 @@ export class PluginApiClient implements IPluginApiClient {
return this.host;
}
- public getRepoPath({ owner, repo }: PartialProject) {
+ public getRepoPath({ owner, repo }: OwnerRepo) {
return `${owner}/${repo}`;
}
@@ -385,7 +424,7 @@ export class PluginApiClient implements IPluginApiClient {
releaseBranchName,
}: {
releaseBranchName?: string;
- } & PartialProject) {
+ } & OwnerRepo) {
const { octokit } = await this.getOctokit();
const recentCommitsResponse = await octokit.repos.listCommits({
owner,
@@ -408,7 +447,7 @@ export class PluginApiClient implements IPluginApiClient {
}));
}
- async getLatestRelease({ owner, repo }: PartialProject) {
+ async getLatestRelease({ owner, repo }: OwnerRepo) {
const { octokit } = await this.getOctokit();
const { data: latestReleases } = await octokit.repos.listReleases({
owner,
@@ -418,26 +457,22 @@ export class PluginApiClient implements IPluginApiClient {
});
if (latestReleases.length === 0) {
- return {
- latestRelease: null,
- };
+ return null;
}
const latestRelease = latestReleases[0];
return {
- latestRelease: {
- targetCommitish: latestRelease.target_commitish,
- tagName: latestRelease.tag_name,
- prerelease: latestRelease.prerelease,
- id: latestRelease.id,
- htmlUrl: latestRelease.html_url,
- body: latestRelease.body,
- },
+ targetCommitish: latestRelease.target_commitish,
+ tagName: latestRelease.tag_name,
+ prerelease: latestRelease.prerelease,
+ id: latestRelease.id,
+ htmlUrl: latestRelease.html_url,
+ body: latestRelease.body,
};
}
- async getRepository({ owner, repo }: PartialProject) {
+ async getRepository({ owner, repo }: OwnerRepo) {
const { octokit } = await this.getOctokit();
const { data: repository } = await octokit.repos.get({
owner,
@@ -446,11 +481,9 @@ export class PluginApiClient implements IPluginApiClient {
});
return {
- repository: {
- pushPermissions: repository.permissions?.push,
- defaultBranch: repository.default_branch,
- name: repository.name,
- },
+ pushPermissions: repository.permissions?.push,
+ defaultBranch: repository.default_branch,
+ name: repository.name,
};
}
@@ -458,7 +491,9 @@ export class PluginApiClient implements IPluginApiClient {
owner,
repo,
defaultBranch,
- }: { defaultBranch: string } & PartialProject) {
+ }: {
+ defaultBranch: GetRepositoryResult['defaultBranch'];
+ } & OwnerRepo) {
const { octokit } = await this.getOctokit();
const { data: latestCommit } = await octokit.repos.getCommit({
owner,
@@ -480,7 +515,9 @@ export class PluginApiClient implements IPluginApiClient {
owner,
repo,
branchName,
- }: { branchName: string } & PartialProject) {
+ }: {
+ branchName: string;
+ } & OwnerRepo) {
const { octokit } = await this.getOctokit();
const { data: branch } = await octokit.repos.getBranch({
@@ -515,7 +552,7 @@ export class PluginApiClient implements IPluginApiClient {
}: {
mostRecentSha: string;
targetBranch: string;
- } & PartialProject) => {
+ } & OwnerRepo) => {
const { octokit } = await this.getOctokit();
const createRefResponse = await octokit.git.createRef({
owner,
@@ -537,7 +574,7 @@ export class PluginApiClient implements IPluginApiClient {
}: {
previousReleaseBranch: string;
nextReleaseBranch: string;
- } & PartialProject) => {
+ } & OwnerRepo) => {
const { octokit } = await this.getOctokit();
const compareCommitsResponse = await octokit.repos.compareCommits({
owner,
@@ -560,7 +597,7 @@ export class PluginApiClient implements IPluginApiClient {
}: {
nextGitHubInfo: ReturnType;
releaseBody: string;
- } & PartialProject) => {
+ } & OwnerRepo) => {
const { octokit } = await this.getOctokit();
const createReleaseResponse = await octokit.repos.createRelease({
owner,
@@ -573,11 +610,9 @@ export class PluginApiClient implements IPluginApiClient {
});
return {
- createReleaseResponse: {
- name: createReleaseResponse.data.name,
- htmlUrl: createReleaseResponse.data.html_url,
- tagName: createReleaseResponse.data.tag_name,
- },
+ name: createReleaseResponse.data.name,
+ htmlUrl: createReleaseResponse.data.html_url,
+ tagName: createReleaseResponse.data.tag_name,
};
},
};
@@ -592,10 +627,8 @@ export class PluginApiClient implements IPluginApiClient {
}: {
tagParts: SemverTagParts | CalverTagParts;
releaseBranchTree: string;
- selectedPatchCommit: UnboxArray<
- ApiMethodRetval
- >;
- } & PartialProject) => {
+ selectedPatchCommit: GetRecentCommitsResultSingle;
+ } & OwnerRepo) => {
const { octokit } = await this.getOctokit();
const { data: tempCommit } = await octokit.git.createCommit({
owner,
@@ -618,15 +651,14 @@ export class PluginApiClient implements IPluginApiClient {
tempCommit,
}: {
releaseBranchName: string;
- tempCommit: ApiMethodRetval<
- IPluginApiClient['patch']['createTempCommit']
- >;
- } & PartialProject) => {
+ tempCommit: CreateTempCommitResult;
+ } & OwnerRepo) => {
const { octokit } = await this.getOctokit();
+ // await octokit.request("PATCH reposrefs")
await octokit.git.updateRef({
owner,
repo,
- ref: releaseBranchName,
+ ref: `heads/${releaseBranchName}`,
sha: tempCommit.sha,
force: true,
});
@@ -637,7 +669,7 @@ export class PluginApiClient implements IPluginApiClient {
repo,
base,
head,
- }: { base: string; head: string } & PartialProject) => {
+ }: { base: string; head: string } & OwnerRepo) => {
const { octokit } = await this.getOctokit();
const { data: merge } = await octokit.repos.merge({
owner,
@@ -666,12 +698,10 @@ export class PluginApiClient implements IPluginApiClient {
releaseBranchSha,
}: {
bumpedTag: string;
- selectedPatchCommit: UnboxArray<
- ApiMethodRetval
- >;
+ selectedPatchCommit: GetRecentCommitsResultSingle;
mergeTree: string;
releaseBranchSha: string;
- } & PartialProject) => {
+ } & OwnerRepo) => {
const { octokit } = await this.getOctokit();
const { data: cherryPickCommit } = await octokit.git.createCommit({
owner,
@@ -694,15 +724,13 @@ export class PluginApiClient implements IPluginApiClient {
cherryPickCommit,
}: {
releaseBranchName: string;
- cherryPickCommit: ApiMethodRetval<
- IPluginApiClient['patch']['createCherryPickCommit']
- >;
- } & PartialProject) => {
+ cherryPickCommit: CreateCherryPickCommitResult;
+ } & OwnerRepo) => {
const { octokit } = await this.getOctokit();
const { data: updatedReference } = await octokit.git.updateRef({
owner,
repo,
- ref: releaseBranchName,
+ ref: `heads/${releaseBranchName}`,
sha: cherryPickCommit.sha,
force: true,
});
@@ -722,10 +750,8 @@ export class PluginApiClient implements IPluginApiClient {
updatedReference,
}: {
bumpedTag: string;
- updatedReference: ApiMethodRetval<
- IPluginApiClient['patch']['replaceTempCommit']
- >;
- } & PartialProject) => {
+ updatedReference: ReplaceTempCommitResult;
+ } & OwnerRepo) => {
const { octokit } = await this.getOctokit();
const { data: createdTagObject } = await octokit.git.createTag({
owner,
@@ -750,10 +776,8 @@ export class PluginApiClient implements IPluginApiClient {
createdTagObject,
}: {
bumpedTag: string;
- createdTagObject: ApiMethodRetval<
- IPluginApiClient['patch']['createTagObject']
- >;
- } & PartialProject) => {
+ createdTagObject: CreateTagObjectResult;
+ } & OwnerRepo) => {
const { octokit } = await this.getOctokit();
const { data: reference } = await octokit.git.createRef({
owner,
@@ -776,14 +800,10 @@ export class PluginApiClient implements IPluginApiClient {
selectedPatchCommit,
}: {
bumpedTag: string;
- latestRelease: NonNullable<
- ApiMethodRetval['latestRelease']
- >;
+ latestRelease: NonNullable;
tagParts: SemverTagParts | CalverTagParts;
- selectedPatchCommit: UnboxArray<
- ApiMethodRetval
- >;
- } & PartialProject) => {
+ selectedPatchCommit: GetRecentCommitsResultSingle;
+ } & OwnerRepo) => {
const { octokit } = await this.getOctokit();
const { data: updatedRelease } = await octokit.repos.updateRelease({
owner,
@@ -792,9 +812,9 @@ export class PluginApiClient implements IPluginApiClient {
tag_name: bumpedTag,
body: `${latestRelease.body}
- #### [Patch ${tagParts.patch}](${selectedPatchCommit.htmlUrl})
+#### [Patch ${tagParts.patch}](${selectedPatchCommit.htmlUrl})
- ${selectedPatchCommit.commit.message}`,
+${selectedPatchCommit.commit.message}`,
});
return {
@@ -812,11 +832,9 @@ export class PluginApiClient implements IPluginApiClient {
releaseId,
releaseVersion,
}: {
- releaseId: NonNullable<
- ApiMethodRetval['latestRelease']
- >['id'];
+ releaseId: NonNullable['id'];
releaseVersion: string;
- } & PartialProject) => {
+ } & OwnerRepo) => {
const { octokit } = await this.getOctokit();
const { data: promotedRelease } = await octokit.repos.updateRelease({
owner,
diff --git a/plugins/github-release-manager/src/cards/createRc/CreateRc.test.tsx b/plugins/github-release-manager/src/cards/createRc/CreateRc.test.tsx
index f200a29fc5..f9d6c9a248 100644
--- a/plugins/github-release-manager/src/cards/createRc/CreateRc.test.tsx
+++ b/plugins/github-release-manager/src/cards/createRc/CreateRc.test.tsx
@@ -18,13 +18,13 @@ import React from 'react';
import { render } from '@testing-library/react';
import {
+ mockApiClient,
mockCalverProject,
mockNextGitHubInfo,
- mockRcRelease,
+ mockReleaseCandidate,
mockReleaseBranch,
- mockReleaseVersion,
+ mockReleaseVersionCalver,
mockSemverProject,
- mockApiClient,
} from '../../test-helpers/test-helpers';
import { TEST_IDS } from '../../test-helpers/test-ids';
@@ -46,7 +46,7 @@ describe('CreateRc', () => {
const { getByTestId } = render(
,
);
@@ -60,7 +60,7 @@ describe('CreateRc', () => {
const { getByTestId } = render(
,
);
diff --git a/plugins/github-release-manager/src/cards/createRc/CreateRc.tsx b/plugins/github-release-manager/src/cards/createRc/CreateRc.tsx
index ba3733e88f..a71359af06 100644
--- a/plugins/github-release-manager/src/cards/createRc/CreateRc.tsx
+++ b/plugins/github-release-manager/src/cards/createRc/CreateRc.tsx
@@ -26,27 +26,27 @@ import {
} from '@material-ui/core';
import { useAsyncFn } from 'react-use';
+import { ComponentConfigCreateRc } from '../../types/types';
import { createRc } from './sideEffects/createRc';
import { Differ } from '../../components/Differ';
import { getRcGitHubInfo } from './getRcGitHubInfo';
import { InfoCardPlus } from '../../components/InfoCardPlus';
-import { ComponentConfigCreateRc } from '../../types/types';
import { ResponseStepList } from '../../components/ResponseStepList/ResponseStepList';
import { SEMVER_PARTS } from '../../constants/constants';
import { TEST_IDS } from '../../test-helpers/test-ids';
import { usePluginApiClientContext } from '../../contexts/PluginApiClientContext';
import { useProjectContext } from '../../contexts/ProjectContext';
import { useStyles } from '../../styles/styles';
-import { ApiMethodRetval, IPluginApiClient } from '../../api/PluginApiClient';
+import {
+ GetBranchResult,
+ GetLatestReleaseResult,
+ GetRepositoryResult,
+} from '../../api/PluginApiClient';
interface CreateRcProps {
- defaultBranch: ApiMethodRetval<
- IPluginApiClient['getRepository']
- >['repository']['defaultBranch'];
- latestRelease: ApiMethodRetval<
- IPluginApiClient['getLatestRelease']
- >['latestRelease'];
- releaseBranch: ApiMethodRetval | null;
+ defaultBranch: GetRepositoryResult['defaultBranch'];
+ latestRelease: GetLatestReleaseResult;
+ releaseBranch: GetBranchResult | null;
successCb?: ComponentConfigCreateRc['successCb'];
}
diff --git a/plugins/github-release-manager/src/cards/createRc/getRcGitHubInfo.test.ts b/plugins/github-release-manager/src/cards/createRc/getRcGitHubInfo.test.ts
index 31f9b6a4f4..6b1feca055 100644
--- a/plugins/github-release-manager/src/cards/createRc/getRcGitHubInfo.test.ts
+++ b/plugins/github-release-manager/src/cards/createRc/getRcGitHubInfo.test.ts
@@ -16,10 +16,11 @@
import { DateTime } from 'luxon';
-import { ApiMethodRetval, IPluginApiClient } from '../../api/PluginApiClient';
import {
mockSemverProject,
mockCalverProject,
+ mockReleaseVersionCalver,
+ mockReleaseVersionSemver,
} from '../../test-helpers/test-helpers';
import { getRcGitHubInfo } from './getRcGitHubInfo';
@@ -33,15 +34,11 @@ describe('getRcGitHubInfo', () => {
});
describe('calver', () => {
- const latestRelease = {
- tagName: 'rc-2020.01.01_0',
- } as ApiMethodRetval['latestRelease'];
-
it('should return correct GitHub info', () => {
expect(
getRcGitHubInfo({
project: mockCalverProject,
- latestRelease,
+ latestRelease: mockReleaseVersionCalver,
semverBumpLevel: 'minor',
injectedDate: '2021.01.28',
}),
@@ -56,22 +53,18 @@ describe('getRcGitHubInfo', () => {
});
describe('semver', () => {
- const latestRelease = {
- tagName: 'rc-1.1.1',
- } as ApiMethodRetval['latestRelease'];
-
it("should return correct GitHub info when there's previous releases", () => {
expect(
getRcGitHubInfo({
project: mockSemverProject,
- latestRelease,
+ latestRelease: mockReleaseVersionSemver,
semverBumpLevel: 'minor',
}),
).toMatchInlineSnapshot(`
Object {
- "rcBranch": "rc/1.2.0",
- "rcReleaseTag": "rc-1.2.0",
- "releaseName": "Version 1.2.0",
+ "rcBranch": "rc/1.3.0",
+ "rcReleaseTag": "rc-1.3.0",
+ "releaseName": "Version 1.3.0",
}
`);
});
diff --git a/plugins/github-release-manager/src/cards/createRc/getRcGitHubInfo.ts b/plugins/github-release-manager/src/cards/createRc/getRcGitHubInfo.ts
index de70da6f9c..d7e63740c2 100644
--- a/plugins/github-release-manager/src/cards/createRc/getRcGitHubInfo.ts
+++ b/plugins/github-release-manager/src/cards/createRc/getRcGitHubInfo.ts
@@ -17,10 +17,10 @@
import { DateTime } from 'luxon';
import { getBumpedSemverTagParts } from '../../helpers/getBumpedTag';
+import { GetLatestReleaseResult } from '../../api/PluginApiClient';
import { getSemverTagParts } from '../../helpers/tagParts/getSemverTagParts';
-import { SEMVER_PARTS } from '../../constants/constants';
import { Project } from '../../contexts/ProjectContext';
-import { ApiMethodRetval, IPluginApiClient } from '../../api/PluginApiClient';
+import { SEMVER_PARTS } from '../../constants/constants';
export const getRcGitHubInfo = ({
project,
@@ -29,9 +29,7 @@ export const getRcGitHubInfo = ({
injectedDate = DateTime.now().toFormat('yyyy.MM.dd'),
}: {
project: Project;
- latestRelease: ApiMethodRetval<
- IPluginApiClient['getLatestRelease']
- >['latestRelease'];
+ latestRelease: GetLatestReleaseResult;
semverBumpLevel: keyof typeof SEMVER_PARTS;
injectedDate?: string;
}) => {
diff --git a/plugins/github-release-manager/src/cards/createRc/sideEffects/createRc.test.ts b/plugins/github-release-manager/src/cards/createRc/sideEffects/createRc.test.ts
index 2f0b351973..824290bbb7 100644
--- a/plugins/github-release-manager/src/cards/createRc/sideEffects/createRc.test.ts
+++ b/plugins/github-release-manager/src/cards/createRc/sideEffects/createRc.test.ts
@@ -19,7 +19,7 @@ import {
mockCalverProject,
mockDefaultBranch,
mockNextGitHubInfo,
- mockReleaseVersion,
+ mockReleaseVersionCalver,
} from '../../../test-helpers/test-helpers';
import { createRc } from './createRc';
@@ -29,7 +29,7 @@ describe('createRc', () => {
it('should work', async () => {
const result = await createRc({
defaultBranch: mockDefaultBranch,
- latestRelease: mockReleaseVersion,
+ latestRelease: mockReleaseVersionCalver,
nextGitHubInfo: mockNextGitHubInfo,
pluginApiClient: mockApiClient,
project: mockCalverProject,
diff --git a/plugins/github-release-manager/src/cards/createRc/sideEffects/createRc.ts b/plugins/github-release-manager/src/cards/createRc/sideEffects/createRc.ts
index b7b37bd143..06c408f022 100644
--- a/plugins/github-release-manager/src/cards/createRc/sideEffects/createRc.ts
+++ b/plugins/github-release-manager/src/cards/createRc/sideEffects/createRc.ts
@@ -17,19 +17,16 @@
import { getRcGitHubInfo } from '../getRcGitHubInfo';
import { ComponentConfigCreateRc, ResponseStep } from '../../../types/types';
import {
- ApiMethodRetval,
+ GetLatestReleaseResult,
+ GetRepositoryResult,
IPluginApiClient,
} from '../../../api/PluginApiClient';
import { GitHubReleaseManagerError } from '../../../errors/GitHubReleaseManagerError';
import { Project } from '../../../contexts/ProjectContext';
interface CreateRC {
- defaultBranch: ApiMethodRetval<
- IPluginApiClient['getRepository']
- >['repository']['defaultBranch'];
- latestRelease: ApiMethodRetval<
- IPluginApiClient['getLatestRelease']
- >['latestRelease'];
+ defaultBranch: GetRepositoryResult['defaultBranch'];
+ latestRelease: GetLatestReleaseResult;
nextGitHubInfo: ReturnType;
pluginApiClient: IPluginApiClient;
project: Project;
@@ -50,7 +47,8 @@ export async function createRc({
* 1. Get the default branch's most recent commit
*/
const latestCommit = await pluginApiClient.getLatestCommit({
- ...project,
+ owner: project.owner,
+ repo: project.repo,
defaultBranch,
});
responseSteps.push({
@@ -65,7 +63,8 @@ export async function createRc({
const mostRecentSha = latestCommit.sha;
const createdRef = await pluginApiClient.createRc
.createRef({
- ...project,
+ owner: project.owner,
+ repo: project.repo,
mostRecentSha,
targetBranch: nextGitHubInfo.rcBranch,
})
@@ -90,7 +89,8 @@ export async function createRc({
: defaultBranch;
const nextReleaseBranch = nextGitHubInfo.rcBranch;
const comparison = await pluginApiClient.createRc.getComparison({
- ...project,
+ owner: project.owner,
+ repo: project.repo,
previousReleaseBranch,
nextReleaseBranch,
});
@@ -112,25 +112,24 @@ export async function createRc({
/**
* 4. Creates the release itself in GitHub
*/
- const {
- createReleaseResponse,
- } = await pluginApiClient.createRc.createRelease({
- ...project,
+ const createReleaseResult = await pluginApiClient.createRc.createRelease({
+ owner: project.owner,
+ repo: project.repo,
nextGitHubInfo: nextGitHubInfo,
releaseBody,
});
responseSteps.push({
- message: `Created Release Candidate "${createReleaseResponse.name}"`,
+ message: `Created Release Candidate "${createReleaseResult.name}"`,
secondaryMessage: `with tag "${nextGitHubInfo.rcReleaseTag}"`,
- link: createReleaseResponse.htmlUrl,
+ link: createReleaseResult.htmlUrl,
});
await successCb?.({
- gitHubReleaseUrl: createReleaseResponse.htmlUrl,
- gitHubReleaseName: createReleaseResponse.name,
+ gitHubReleaseUrl: createReleaseResult.htmlUrl,
+ gitHubReleaseName: createReleaseResult.name,
comparisonUrl: comparison.htmlUrl,
previousTag: latestRelease?.tagName,
- createdTag: createReleaseResponse.tagName,
+ createdTag: createReleaseResult.tagName,
});
return responseSteps;
diff --git a/plugins/github-release-manager/src/cards/info/Info.tsx b/plugins/github-release-manager/src/cards/info/Info.tsx
index 05902162d4..a34a249917 100644
--- a/plugins/github-release-manager/src/cards/info/Info.tsx
+++ b/plugins/github-release-manager/src/cards/info/Info.tsx
@@ -23,13 +23,14 @@ import { TEST_IDS } from '../../test-helpers/test-ids';
import { useProjectContext } from '../../contexts/ProjectContext';
import { useStyles } from '../../styles/styles';
import flowImage from './flow.png';
-import { ApiMethodRetval, IPluginApiClient } from '../../api/PluginApiClient';
+import {
+ GetBranchResult,
+ GetLatestReleaseResult,
+} from '../../api/PluginApiClient';
interface InfoCardProps {
- releaseBranch: ApiMethodRetval | null;
- latestRelease: ApiMethodRetval<
- IPluginApiClient['getLatestRelease']
- >['latestRelease'];
+ releaseBranch: GetBranchResult | null;
+ latestRelease: GetLatestReleaseResult;
}
export const Info = ({ releaseBranch, latestRelease }: InfoCardProps) => {
diff --git a/plugins/github-release-manager/src/cards/patchRc/Patch.tsx b/plugins/github-release-manager/src/cards/patchRc/Patch.tsx
index 822c1b09ea..2f184277a1 100644
--- a/plugins/github-release-manager/src/cards/patchRc/Patch.tsx
+++ b/plugins/github-release-manager/src/cards/patchRc/Patch.tsx
@@ -17,7 +17,10 @@
import React from 'react';
import { Typography } from '@material-ui/core';
-import { ApiMethodRetval, IPluginApiClient } from '../../api/PluginApiClient';
+import {
+ GetBranchResult,
+ GetLatestReleaseResult,
+} from '../../api/PluginApiClient';
import { ComponentConfigPatch } from '../../types/types';
import { getBumpedTag } from '../../helpers/getBumpedTag';
import { InfoCardPlus } from '../../components/InfoCardPlus';
@@ -27,10 +30,8 @@ import { useProjectContext } from '../../contexts/ProjectContext';
import { useStyles } from '../../styles/styles';
interface PatchProps {
- latestRelease: ApiMethodRetval<
- IPluginApiClient['getLatestRelease']
- >['latestRelease'];
- releaseBranch: ApiMethodRetval | null;
+ latestRelease: GetLatestReleaseResult;
+ releaseBranch: GetBranchResult | null;
successCb?: ComponentConfigPatch['successCb'];
}
diff --git a/plugins/github-release-manager/src/cards/patchRc/PatchBody.test.tsx b/plugins/github-release-manager/src/cards/patchRc/PatchBody.test.tsx
index 2e0642402d..8562635f82 100644
--- a/plugins/github-release-manager/src/cards/patchRc/PatchBody.test.tsx
+++ b/plugins/github-release-manager/src/cards/patchRc/PatchBody.test.tsx
@@ -21,9 +21,9 @@ import {
mockApiClient,
mockBumpedTag,
mockCalverProject,
- mockRcRelease,
+ mockReleaseCandidate,
mockReleaseBranch,
- mockReleaseVersion,
+ mockReleaseVersionCalver,
mockTagParts,
} from '../../test-helpers/test-helpers';
@@ -48,7 +48,7 @@ describe('PatchBody', () => {
const { getByTestId } = render(
,
@@ -64,7 +64,7 @@ describe('PatchBody', () => {
it('should render not-prerelease description', async () => {
const { getByTestId } = render(
['latestRelease']
- >;
- releaseBranch: ApiMethodRetval;
+ latestRelease: NonNullable;
+ releaseBranch: GetBranchResult;
successCb?: ComponentConfigPatch['successCb'];
tagParts: NonNullable;
}
@@ -95,9 +93,7 @@ export const PatchBody = ({
});
const [patchReleaseResponse, patchReleaseFn] = useAsyncFn(async (...args) => {
- const selectedPatchCommit: UnboxArray<
- ApiMethodRetval
- > = args[0];
+ const selectedPatchCommit: GetRecentCommitsResultSingle = args[0];
const patchResponseSteps = await patch({
project,
pluginApiClient,
@@ -242,7 +238,8 @@ export const PatchBody = ({
disabled={commitExistsOnReleaseBranch || !releaseBranch}
onClick={() => {
const repoPath = pluginApiClient.getRepoPath({
- ...project,
+ owner: project.owner,
+ repo: project.repo,
});
const host = pluginApiClient.getHost();
@@ -277,16 +274,16 @@ export const PatchBody = ({
);
}
- const selectedPatchCommit =
- githubDataResponse.value?.recentCommitsOnDefaultBranch[
- checkedCommitIndex
- ];
return (