github: issue replicating
This commit is contained in:
parent
a94ce60ec5
commit
b942645273
|
@ -53,7 +53,7 @@ export interface RepoManager {
|
||||||
repo: Repo;
|
repo: Repo;
|
||||||
initialize: () => Promise<RepoManager>;
|
initialize: () => Promise<RepoManager>;
|
||||||
getIssue: (id: string) => Promise<Issue>;
|
getIssue: (id: string) => Promise<Issue>;
|
||||||
replicateIssue?: (issue: Issue) => Promise<Issue>;
|
replicateIssue: (issue: Issue) => Promise<Issue>;
|
||||||
getMergeRequest: (id: string) => Promise<MergeRequest>;
|
getMergeRequest: (id: string) => Promise<MergeRequest>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
39
src/vendor/github/repomgr.ts
vendored
39
src/vendor/github/repomgr.ts
vendored
|
@ -18,10 +18,12 @@ import {
|
||||||
} from '../../types';
|
} from '../../types';
|
||||||
import GitHubVendorManager from './vendormgr';
|
import GitHubVendorManager from './vendormgr';
|
||||||
import assert from 'assert';
|
import assert from 'assert';
|
||||||
|
import { GHMutation, GHMutationCreateIssueArgs } from './api-types';
|
||||||
|
|
||||||
export default class GitHubRepoManager implements RepoManager {
|
export default class GitHubRepoManager implements RepoManager {
|
||||||
vendorMgr: GitHubVendorManager;
|
vendorMgr: GitHubVendorManager;
|
||||||
repo: Repo;
|
repo: Repo;
|
||||||
|
repoId: string;
|
||||||
|
|
||||||
constructor(vendorMgr: GitHubVendorManager, repoPath: string) {
|
constructor(vendorMgr: GitHubVendorManager, repoPath: string) {
|
||||||
this.vendorMgr = vendorMgr;
|
this.vendorMgr = vendorMgr;
|
||||||
|
@ -39,6 +41,7 @@ export default class GitHubRepoManager implements RepoManager {
|
||||||
},
|
},
|
||||||
name: repoName,
|
name: repoName,
|
||||||
};
|
};
|
||||||
|
this.repoId = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
public async initialize() {
|
public async initialize() {
|
||||||
|
@ -46,6 +49,7 @@ export default class GitHubRepoManager implements RepoManager {
|
||||||
`
|
`
|
||||||
query Query($owner: String!, $name: String!) {
|
query Query($owner: String!, $name: String!) {
|
||||||
repository(owner: $owner, name: $name) {
|
repository(owner: $owner, name: $name) {
|
||||||
|
id
|
||||||
name
|
name
|
||||||
owner {
|
owner {
|
||||||
login
|
login
|
||||||
|
@ -61,6 +65,7 @@ export default class GitHubRepoManager implements RepoManager {
|
||||||
);
|
);
|
||||||
assert(meta.repository);
|
assert(meta.repository);
|
||||||
assert(meta.repository.owner);
|
assert(meta.repository.owner);
|
||||||
|
this.repoId = meta.repository.id;
|
||||||
this.repo.name = meta.repository.name;
|
this.repo.name = meta.repository.name;
|
||||||
this.repo.owner.username = meta.repository.owner.login;
|
this.repo.owner.username = meta.repository.owner.login;
|
||||||
// @ts-ignore graphql-codegen ignores built-in graphql values
|
// @ts-ignore graphql-codegen ignores built-in graphql values
|
||||||
|
@ -106,6 +111,40 @@ export default class GitHubRepoManager implements RepoManager {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async replicateIssue(issue: Issue) {
|
||||||
|
const resp = await this.vendorMgr._doRequest<GHMutation, GHMutationCreateIssueArgs>(
|
||||||
|
`
|
||||||
|
mutation ($input: CreateIssueInput!) {
|
||||||
|
createIssue(input: $input) {
|
||||||
|
issue {
|
||||||
|
number
|
||||||
|
title
|
||||||
|
body
|
||||||
|
closed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
{
|
||||||
|
input: {
|
||||||
|
repositoryId: this.repoId,
|
||||||
|
title: issue.title,
|
||||||
|
body: issue.content,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
);
|
||||||
|
assert(resp.createIssue, 'creating issue failed');
|
||||||
|
assert(resp.createIssue.issue, 'creating issue failed');
|
||||||
|
const replicated = resp.createIssue.issue;
|
||||||
|
return {
|
||||||
|
id: replicated.number.toString(),
|
||||||
|
content: replicated.body,
|
||||||
|
title: replicated.title,
|
||||||
|
repo: this.repo,
|
||||||
|
state: replicated.closed ? ISSUE_STATE.CLOSED : ISSUE_STATE.OPEN,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
public async getMergeRequest(number: string): Promise<MergeRequest> {
|
public async getMergeRequest(number: string): Promise<MergeRequest> {
|
||||||
const resp = await this.vendorMgr._doRequest(
|
const resp = await this.vendorMgr._doRequest(
|
||||||
`
|
`
|
||||||
|
|
4
src/vendor/github/vendormgr.ts
vendored
4
src/vendor/github/vendormgr.ts
vendored
|
@ -47,13 +47,13 @@ export default class GitHubVendorManager implements VendorManager<GitHubConfig>
|
||||||
}
|
}
|
||||||
|
|
||||||
/** internal and for RepoManager */
|
/** internal and for RepoManager */
|
||||||
public async _doRequest(query: string, variables: any) {
|
public async _doRequest<T = GHQuery, D = any>(query: string, variables: D) {
|
||||||
return got
|
return got
|
||||||
.post(this.gqlEndpoint, {
|
.post(this.gqlEndpoint, {
|
||||||
body: JSON.stringify({ query, variables }),
|
body: JSON.stringify({ query, variables }),
|
||||||
headers: { Authorization: `Bearer ${this.config.token}` },
|
headers: { Authorization: `Bearer ${this.config.token}` },
|
||||||
})
|
})
|
||||||
.then((res) => JSON.parse(res.body))
|
.then((res) => JSON.parse(res.body))
|
||||||
.then((res) => res.data) as Promise<GHQuery>;
|
.then((res) => res.data) as Promise<T>;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue