Skip to content
This repository has been archived by the owner on Jul 12, 2022. It is now read-only.

Commit

Permalink
Added BitBucket "default reviewers" to Pull Requests (#634)
Browse files Browse the repository at this point in the history
* Added GitHub "default reviewers" to Pull Requests

* Refactor after review
  • Loading branch information
Jens-H-Eriksen authored and MarcBruins committed Jan 7, 2019
1 parent 68c7706 commit 98f09c3
Show file tree
Hide file tree
Showing 8 changed files with 67 additions and 12 deletions.
4 changes: 2 additions & 2 deletions NuKeeper/Collaboration/CollaborationFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ private ISettingsReader FindPlatformSettingsReader(

if (reader != null)
{
_nuKeeperLogger.Normal($"Collaboration platform specified as '{_platform}'");
_nuKeeperLogger.Normal($"Collaboration platform specified as '{reader.Platform}'");
}

return reader;
Expand All @@ -86,7 +86,7 @@ private ISettingsReader FindPlatformSettingsReader(

if (reader != null)
{
_nuKeeperLogger.Normal($"Matched uri '{apiEndpoint}' to collaboration platform '{_platform}'");
_nuKeeperLogger.Normal($"Matched uri '{apiEndpoint}' to collaboration platform '{reader.Platform}'");
}

return reader;
Expand Down
12 changes: 8 additions & 4 deletions Nukeeper.BitBucketLocal/BitBucketLocalPlatform.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using NuKeeper.Abstractions.CollaborationModels;
using NuKeeper.Abstractions.CollaborationPlatform;
Expand All @@ -11,6 +10,7 @@
using NuKeeper.BitBucketLocal.Models;
using Repository = NuKeeper.Abstractions.CollaborationModels.Repository;


namespace NuKeeper.BitBucketLocal
{
public class BitBucketLocalPlatform : ICollaborationPlatform
Expand All @@ -29,8 +29,9 @@ public void Initialise(AuthSettings settings)
_settings = settings;
var httpClient = new HttpClient
{
BaseAddress = settings.ApiBase
};
BaseAddress = new Uri($"{settings.ApiBase.Scheme}://{settings.ApiBase.Authority}")
};

_client = new BitbucketLocalRestClient(httpClient, _logger, settings.Username, settings.Token);
}

Expand All @@ -44,6 +45,8 @@ public async Task OpenPullRequest(ForkData target, PullRequestRequest request, I
var repositories = await _client.GetGitRepositories(target.Owner);
var targetRepository = repositories.FirstOrDefault(x => x.Name.Equals(target.Name, StringComparison.InvariantCultureIgnoreCase));

var reviewers = await _client.GetBitBucketReviewers(target.Owner, targetRepository.Name);

var pullReq = new PullRequest
{
Title = request.Title,
Expand All @@ -55,7 +58,8 @@ public async Task OpenPullRequest(ForkData target, PullRequestRequest request, I
ToRef = new Ref
{
Id = request.BaseRef
}
},
Reviewers = reviewers.ToList()
};

await _client.CreatePullRequest(pullReq, target.Owner, targetRepository.Name);
Expand Down
4 changes: 3 additions & 1 deletion Nukeeper.BitBucketLocal/BitBucketLocalSettingsReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public RepositorySettings RepositorySettings(Uri repositoryUri)

return new RepositorySettings
{
ApiUri = new Uri($"{repositoryUri.Scheme}://{repositoryUri.Authority}/rest/api/1.0"),
ApiUri = new Uri($"{repositoryUri.Scheme}://{repositoryUri.Authority}"),
RepositoryUri = repositoryUri,
RepositoryName = repoName,
RepositoryOwner = project
Expand All @@ -65,3 +65,5 @@ private static void UpdateTokenSettings(CollaborationPlatformSettings settings)
}
}
}


19 changes: 14 additions & 5 deletions Nukeeper.BitBucketLocal/BitbucketLocalRestClient.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
Expand All @@ -17,6 +18,8 @@ public class BitbucketLocalRestClient
{
private readonly HttpClient _client;
private readonly INuKeeperLogger _logger;
private const string ApiPath = @"rest/api/1.0";
private const string ApiReviewersPath = @"rest/default-reviewers/1.0";

public BitbucketLocalRestClient(HttpClient client, INuKeeperLogger logger, string username, string appPassword)
{
Expand Down Expand Up @@ -83,26 +86,26 @@ private async Task<T> HandleResponse<T>(HttpResponseMessage response, [CallerMem

public async Task<IEnumerable<Repository>> GetProjects([CallerMemberName] string caller = null)
{
var response = await GetResourceOrEmpty<IteratorBasedPage<Repository>>("projects?limit=999", caller);
var response = await GetResourceOrEmpty<IteratorBasedPage<Repository>>($@"{ApiPath}/projects?limit=999", caller);
return response.Values;
}


public async Task<IEnumerable<Repository>> GetGitRepositories(string projectName, [CallerMemberName] string caller = null)
{
var response = await GetResourceOrEmpty<IteratorBasedPage<Repository>>($"projects/{projectName}/repos?limit=999", caller);
var response = await GetResourceOrEmpty<IteratorBasedPage<Repository>>($@"{ApiPath}/projects/{projectName}/repos?limit=999", caller);
return response.Values;
}

public async Task<IEnumerable<string>> GetGitRepositoryFileNames(string projectName, string repositoryName, [CallerMemberName] string caller = null)
{
var response = await GetResourceOrEmpty<IteratorBasedPage<string>>($"projects/{projectName}/repos/{repositoryName}/files?limit=9999", caller);
var response = await GetResourceOrEmpty<IteratorBasedPage<string>>($@"{ApiPath}/projects/{projectName}/repos/{repositoryName}/files?limit=9999", caller);
return response.Values;
}

public async Task<IEnumerable<Branch>> GetGitRepositoryBranches(string projectName, string repositoryName, [CallerMemberName] string caller = null)
{
var response = await GetResourceOrEmpty<IteratorBasedPage<Branch>>($"projects/{projectName}/repos/{repositoryName}/branches", caller);
var response = await GetResourceOrEmpty<IteratorBasedPage<Branch>>($@"{ApiPath}/projects/{projectName}/repos/{repositoryName}/branches", caller);
return response.Values;
}

Expand All @@ -111,9 +114,15 @@ public async Task<PullRequest> CreatePullRequest(PullRequest pullReq, string pro
var requestJson = JsonConvert.SerializeObject(pullReq, Formatting.None, new JsonSerializerSettings {NullValueHandling = NullValueHandling.Ignore});
var requestBody = new StringContent(requestJson, Encoding.UTF8, "application/json");

var response = await _client.PostAsync($@"projects/{projectName}/repos/{repositoryName}/pull-requests", requestBody);
var response = await _client.PostAsync($@"{ApiPath}/projects/{projectName}/repos/{repositoryName}/pull-requests", requestBody);

return await HandleResponse<PullRequest>(response, caller);
}

public async Task<IEnumerable<PullRequestReviewer>> GetBitBucketReviewers(string projectName, string repositoryName, [CallerMemberName] string caller = null)
{
var response = await GetResourceOrEmpty<List<Conditions>>($@"{ApiReviewersPath}/projects/{projectName}/repos/{repositoryName}/conditions", caller);
return response.SelectMany(c => c.Reviewers).Select(usr => new PullRequestReviewer() {User = usr} );
}
}
}
14 changes: 14 additions & 0 deletions Nukeeper.BitBucketLocal/Models/Conditions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using System.Collections.Generic;
using Newtonsoft.Json;

namespace NuKeeper.BitBucketLocal.Models
{
public class Conditions
{
[JsonProperty("id")]
public int Id { get; set; }

[JsonProperty("reviewers")]
public List<Reviewer> Reviewers { get; set; }
}
}
6 changes: 6 additions & 0 deletions Nukeeper.BitBucketLocal/Models/PullRequest.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System.Collections.Generic;
using Newtonsoft.Json;

namespace NuKeeper.BitBucketLocal.Models
Expand Down Expand Up @@ -27,5 +28,10 @@ public class PullRequest

[JsonProperty("locked")]
public bool Locked { get; set; } = false;

[JsonProperty("reviewers")]
public List<PullRequestReviewer> Reviewers { get; set; }
}
}


10 changes: 10 additions & 0 deletions Nukeeper.BitBucketLocal/Models/PullRequestReviewer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using Newtonsoft.Json;

namespace NuKeeper.BitBucketLocal.Models
{
public class PullRequestReviewer
{
[JsonProperty("user")]
public Reviewer User { get; set; }
}
}
10 changes: 10 additions & 0 deletions Nukeeper.BitBucketLocal/Models/Reviewer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using Newtonsoft.Json;

namespace NuKeeper.BitBucketLocal.Models
{
public class Reviewer
{
[JsonProperty("name")]
public string Name { get; set; }
}
}

0 comments on commit 98f09c3

Please sign in to comment.