From 88063af689dc1bf208bbea996d22f5b6e2aae70d Mon Sep 17 00:00:00 2001 From: Danny McCormick Date: Wed, 12 Sep 2018 13:44:46 -0400 Subject: [PATCH 1/3] Added gitApi sample --- samples/git.ts | 69 +++++++++++++++++++++++++++++++++++++++++++ samples/samples.json | 3 +- samples/tsconfig.json | 3 +- 3 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 samples/git.ts diff --git a/samples/git.ts b/samples/git.ts new file mode 100644 index 00000000..a163d2a1 --- /dev/null +++ b/samples/git.ts @@ -0,0 +1,69 @@ +import * as common from './common'; +import * as nodeApi from 'azure-devops-node-api'; + +import * as GitApi from 'azure-devops-node-api/GitApi'; +import * as GitInterfaces from 'azure-devops-node-api/interfaces/GitInterfaces'; + +export async function run() { + let webApi: nodeApi.WebApi = await common.getWebApi(); + let gitApiObject: GitApi.IGitApi = await webApi.getGitApi(); + + common.banner('Git Samples'); + let project: string = common.getProject(); + console.log('Project:', project); + + common.heading("Get Repositories"); + const repos: GitInterfaces.GitRepository[] = await gitApiObject.getRepositories(project); + console.log("There are", repos.length, "repositories in this project"); + + common.heading("Create a repository"); + const createOptions: GitInterfaces.GitRepositoryCreateOptions = {name: 'new repo'}; + let newRepo: GitInterfaces.GitRepository = await gitApiObject.createRepository(createOptions, project); + console.log("New repo:", newRepo.name); + + common.heading("Delete repository"); + await gitApiObject.deleteRepository(newRepo.id); + console.log("Repo deleted"); + + common.heading("Get commits for a repository"); + if (repos.length > 0) { + const firstRepo = repos[0] + console.log("The first repository in this project is named", firstRepo.name); + const commitCriteria: GitInterfaces.GitQueryCommitsCriteria = {$skip: 0, $top: 10}; + const commits: GitInterfaces.GitCommitRef[] = await gitApiObject.getCommits(firstRepo.id, commitCriteria, project); + const commitNames: string[] = commits.map((commit) => {return commit.comment}); + console.log("Top 10 commits in this repo:", commitNames); + } + else { + console.log("Must have an active repository for this part of the sample"); + } + + common.heading("Get pull requests for a repository"); + if (repos.length > 0) { + const firstRepo = repos[0] + const pullRequestCriteria: GitInterfaces.GitPullRequestSearchCriteria = {}; + const pullRequests = await gitApiObject.getPullRequests(firstRepo.id, pullRequestCriteria); + const pullRequestTitles = pullRequests.map((request) => {return request.title}); + console.log("Pull requests on this repo:", pullRequestTitles); + + common.heading("Create comment on a pull request"); + let threads: GitInterfaces.GitPullRequestCommentThread[] = []; + if (pullRequests.length > 0) { + threads = await gitApiObject.getThreads(firstRepo.id, pullRequests[0].pullRequestId); + } + if (pullRequests.length > 0 && threads.length > 0) { + let comment: GitInterfaces.Comment = {content: 'Hello comment'}; + comment = await gitApiObject.createComment(comment, firstRepo.id, pullRequests[0].pullRequestId, threads[0].id); + console.log("Comment created:", comment.content); + common.heading("Delete a comment on a pull request"); + await gitApiObject.deleteComment(firstRepo.id, pullRequests[0].pullRequestId, threads[0].id, comment.id); + console.log("Comment deleted"); + } + else { + console.log("Must have an active pull request in repo with an active comment thread", firstRepo.name, "for this part of the sample"); + } + } + else { + console.log("Must have an active repository for this part of the sample"); + } +} \ No newline at end of file diff --git a/samples/samples.json b/samples/samples.json index bfc5969e..2c5b873c 100644 --- a/samples/samples.json +++ b/samples/samples.json @@ -3,5 +3,6 @@ "buildArtifact", "creation", "task", - "filecontainer" + "filecontainer", + "git" ] \ No newline at end of file diff --git a/samples/tsconfig.json b/samples/tsconfig.json index 6ac126c2..0290a1b6 100644 --- a/samples/tsconfig.json +++ b/samples/tsconfig.json @@ -10,6 +10,7 @@ "buildArtifact.ts", "creation.ts", "task.ts", - "filecontainer.ts" + "filecontainer.ts", + "git.ts" ] } \ No newline at end of file From 2870b5d2ef1b1518e7833856a394738e7c5427a2 Mon Sep 17 00:00:00 2001 From: Danny McCormick Date: Wed, 12 Sep 2018 14:51:55 -0400 Subject: [PATCH 2/3] Added wiki sample --- samples/samples.json | 3 ++- samples/tsconfig.json | 3 ++- samples/wiki.ts | 44 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 samples/wiki.ts diff --git a/samples/samples.json b/samples/samples.json index 2c5b873c..16306b5b 100644 --- a/samples/samples.json +++ b/samples/samples.json @@ -4,5 +4,6 @@ "creation", "task", "filecontainer", - "git" + "git", + "wiki" ] \ No newline at end of file diff --git a/samples/tsconfig.json b/samples/tsconfig.json index 0290a1b6..eda0c3d5 100644 --- a/samples/tsconfig.json +++ b/samples/tsconfig.json @@ -11,6 +11,7 @@ "creation.ts", "task.ts", "filecontainer.ts", - "git.ts" + "git.ts", + "wiki.ts" ] } \ No newline at end of file diff --git a/samples/wiki.ts b/samples/wiki.ts new file mode 100644 index 00000000..0195b62f --- /dev/null +++ b/samples/wiki.ts @@ -0,0 +1,44 @@ +import * as common from './common'; +import * as nodeApi from 'azure-devops-node-api'; + +import * as CoreApi from 'azure-devops-node-api/CoreApi' +import * as CoreInterfaces from 'azure-devops-node-api/interfaces/CoreInterfaces' +import * as WikiApi from 'azure-devops-node-api/WikiApi'; +import * as WikiInterfaces from 'azure-devops-node-api/interfaces/WikiInterfaces'; + +export async function run() { + let webApi: nodeApi.WebApi = await common.getWebApi(); + let wikiApiObject: WikiApi.IWikiApi = await webApi.getWikiApi(); + let coreApiObject: CoreApi.ICoreApi = await webApi.getCoreApi(); + + common.banner('Wiki Samples'); + let project: string = common.getProject(); + let projectObject: CoreInterfaces.TeamProject = await coreApiObject.getProject(project); + console.log('Project:', project); + + common.heading('Get all wikis'); + const wikis: WikiInterfaces.WikiV2[] = await wikiApiObject.getAllWikis(project); + console.log("Wikis", wikis.map((wiki) => wiki.name)); + + let wikiId: string; + if (wikis.length > 0) { + wikiId = wikis[0].id; + } + else { + common.heading("Create a wiki"); + const wikiParams: WikiInterfaces.WikiCreateParametersV2 = {name: "Hello Wiki", projectId: projectObject.id}; + const newWiki = await wikiApiObject.createWiki(wikiParams, project); + console.log("Wiki created:", newWiki.name); + wikiId = newWiki.id; + } + + common.heading("Get the text from a wiki"); + const textStream: NodeJS.ReadableStream = await wikiApiObject.getPageText(project, wikiId) + console.log("Wiki text", textStream.read().toString()); + + if (wikis.length == 0) { + common.heading("Delete the created wiki"); + await wikiApiObject.deleteWiki(wikiId, project); + console.log("Wiki deleted"); + } +} \ No newline at end of file From 0f463e29365d492ebe74cbdc178478ba05604a1a Mon Sep 17 00:00:00 2001 From: Danny McCormick Date: Wed, 12 Sep 2018 16:17:02 -0400 Subject: [PATCH 3/3] Responding to feedback --- samples/wiki.ts | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/samples/wiki.ts b/samples/wiki.ts index 0195b62f..b80a5454 100644 --- a/samples/wiki.ts +++ b/samples/wiki.ts @@ -7,13 +7,13 @@ import * as WikiApi from 'azure-devops-node-api/WikiApi'; import * as WikiInterfaces from 'azure-devops-node-api/interfaces/WikiInterfaces'; export async function run() { - let webApi: nodeApi.WebApi = await common.getWebApi(); - let wikiApiObject: WikiApi.IWikiApi = await webApi.getWikiApi(); - let coreApiObject: CoreApi.ICoreApi = await webApi.getCoreApi(); + const webApi: nodeApi.WebApi = await common.getWebApi(); + const wikiApiObject: WikiApi.IWikiApi = await webApi.getWikiApi(); + const coreApiObject: CoreApi.ICoreApi = await webApi.getCoreApi(); common.banner('Wiki Samples'); - let project: string = common.getProject(); - let projectObject: CoreInterfaces.TeamProject = await coreApiObject.getProject(project); + const project: string = common.getProject(); + const projectObject: CoreInterfaces.TeamProject = await coreApiObject.getProject(project); console.log('Project:', project); common.heading('Get all wikis'); @@ -21,24 +21,24 @@ export async function run() { console.log("Wikis", wikis.map((wiki) => wiki.name)); let wikiId: string; - if (wikis.length > 0) { - wikiId = wikis[0].id; - } - else { + const createNewWiki: boolean = (wikis.length === 0); + if (createNewWiki) { common.heading("Create a wiki"); const wikiParams: WikiInterfaces.WikiCreateParametersV2 = {name: "Hello Wiki", projectId: projectObject.id}; const newWiki = await wikiApiObject.createWiki(wikiParams, project); console.log("Wiki created:", newWiki.name); wikiId = newWiki.id; + } else { + wikiId = wikis[0].id; } common.heading("Get the text from a wiki"); - const textStream: NodeJS.ReadableStream = await wikiApiObject.getPageText(project, wikiId) - console.log("Wiki text", textStream.read().toString()); + const pageText: NodeJS.ReadableStream = await wikiApiObject.getPageText(project, wikiId) + console.log("Wiki text", pageText.read().toString()); - if (wikis.length == 0) { + if (createNewWiki) { common.heading("Delete the created wiki"); - await wikiApiObject.deleteWiki(wikiId, project); - console.log("Wiki deleted"); + const deletedWiki: WikiInterfaces.WikiV2 = await wikiApiObject.deleteWiki(wikiId, project); + console.log("Wiki", deletedWiki.name, "deleted"); } } \ No newline at end of file