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..16306b5b 100644 --- a/samples/samples.json +++ b/samples/samples.json @@ -3,5 +3,7 @@ "buildArtifact", "creation", "task", - "filecontainer" + "filecontainer", + "git", + "wiki" ] \ No newline at end of file diff --git a/samples/tsconfig.json b/samples/tsconfig.json index 6ac126c2..eda0c3d5 100644 --- a/samples/tsconfig.json +++ b/samples/tsconfig.json @@ -10,6 +10,8 @@ "buildArtifact.ts", "creation.ts", "task.ts", - "filecontainer.ts" + "filecontainer.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..b80a5454 --- /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() { + 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'); + const project: string = common.getProject(); + const 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; + 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 pageText: NodeJS.ReadableStream = await wikiApiObject.getPageText(project, wikiId) + console.log("Wiki text", pageText.read().toString()); + + if (createNewWiki) { + common.heading("Delete the created wiki"); + const deletedWiki: WikiInterfaces.WikiV2 = await wikiApiObject.deleteWiki(wikiId, project); + console.log("Wiki", deletedWiki.name, "deleted"); + } +} \ No newline at end of file