From 06330c8e15e76c4d6d17c14327f559dc11d3c31c Mon Sep 17 00:00:00 2001 From: Haacked Date: Tue, 5 Nov 2013 12:18:54 -0800 Subject: [PATCH 1/6] Update release notes for 0.1.3 --- ReleaseNotes.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ReleaseNotes.md b/ReleaseNotes.md index d5ed7c7b..f215b162 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -6,4 +6,10 @@ ### New in 0.1.2 (Released 2013/10/31) * New default constructors in Octokit.Reactive -* New IObservableAssigneesClient in Octokit.Reactive \ No newline at end of file +* New IObservableAssigneesClient in Octokit.Reactive + +### New in 0.1.3 (Released 2013/11/5) +* New Xamarin Component store versions of Octokit.net +* New clients for managing assignees, milestones, and tags +* New clients for managing issues, issue events, and issue comments. +* New client for managing organization members. From 2653668945bfd729e88ef83919693d8461eac2ec Mon Sep 17 00:00:00 2001 From: Haacked Date: Tue, 5 Nov 2013 12:27:23 -0800 Subject: [PATCH 2/6] Add notes on deploying a new release --- README.md | 13 +++++++++++++ ReleaseNotes.md | 5 +++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 52bc0674..706e0234 100644 --- a/README.md +++ b/README.md @@ -86,3 +86,16 @@ for more details. Copyright 2013 GitHub, Inc. Licensed under the [MIT License](https://github.com/octokit/octokit.net/blob/master/LICENSE.txt) + +## Deploying a new release + +When we're ready to deploy a new release, we need to do the following steps. + +1. Create a branch named `release`. +2. Update [`ReleaseNotes.md`](ReleaseNotes.md). Note that the format is important as we parse the version out and use that for the NuGet packages. +3. Push the branch to GitHub and create a pull request. This will kick off the MyGet build of the NuGet package with this new version. +4. Test! +5. When you're satisfied with this release, push the package from MyGet to NuGet. +6. Create a tag `git tag v#.#.#`. For example, to create a tag for 1.0.0 `git tag v1.0.0` +7. Accept the pull request. +8. Create a [new release](https://github.com/octokit/octokit.net/releases/new) using the tag you just created and pasting in the release notes you just wrote up diff --git a/ReleaseNotes.md b/ReleaseNotes.md index f215b162..c20ccfb5 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -11,5 +11,6 @@ ### New in 0.1.3 (Released 2013/11/5) * New Xamarin Component store versions of Octokit.net * New clients for managing assignees, milestones, and tags -* New clients for managing issues, issue events, and issue comments. -* New client for managing organization members. +* New clients for managing issues, issue events, and issue comments +* New client for managing organization members +* Fixed bug in applying query parameters that could cause paging to continually request the same page From 304d2be843bfdf0afc5b36f8a99a2ca22ead3035 Mon Sep 17 00:00:00 2001 From: Haacked Date: Tue, 5 Nov 2013 15:06:13 -0800 Subject: [PATCH 3/6] Add link to Octokit on MyGet --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 706e0234..06785aca 100644 --- a/README.md +++ b/README.md @@ -95,7 +95,7 @@ When we're ready to deploy a new release, we need to do the following steps. 2. Update [`ReleaseNotes.md`](ReleaseNotes.md). Note that the format is important as we parse the version out and use that for the NuGet packages. 3. Push the branch to GitHub and create a pull request. This will kick off the MyGet build of the NuGet package with this new version. 4. Test! -5. When you're satisfied with this release, push the package from MyGet to NuGet. +5. When you're satisfied with this release, push the package [from MyGet](https://www.myget.org/feed/Packages/octokit) to NuGet. 6. Create a tag `git tag v#.#.#`. For example, to create a tag for 1.0.0 `git tag v1.0.0` 7. Accept the pull request. 8. Create a [new release](https://github.com/octokit/octokit.net/releases/new) using the tag you just created and pasting in the release notes you just wrote up From 34d0fac09a943d5a5abc87e8db6ee4478beec6c2 Mon Sep 17 00:00:00 2001 From: Haacked Date: Tue, 5 Nov 2013 15:18:12 -0800 Subject: [PATCH 4/6] Update version --- SolutionInfo.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/SolutionInfo.cs b/SolutionInfo.cs index eec89dbe..8c52dd1f 100644 --- a/SolutionInfo.cs +++ b/SolutionInfo.cs @@ -3,11 +3,11 @@ using System.Reflection; using System.Runtime.InteropServices; [assembly: AssemblyProductAttribute("Octokit")] -[assembly: AssemblyVersionAttribute("0.1.2")] -[assembly: AssemblyFileVersionAttribute("0.1.2")] +[assembly: AssemblyVersionAttribute("0.1.3")] +[assembly: AssemblyFileVersionAttribute("0.1.3")] [assembly: ComVisibleAttribute(false)] namespace System { internal static class AssemblyVersionInformation { - internal const string Version = "0.1.2"; + internal const string Version = "0.1.3"; } } From 920b911f4f291120c7183964bbc39c57d7c6ab11 Mon Sep 17 00:00:00 2001 From: Haacked Date: Tue, 5 Nov 2013 15:57:01 -0800 Subject: [PATCH 5/6] fix integration tests --- .../Reactive/ObservableIssuesClientTests.cs | 119 +++++++++--------- 1 file changed, 59 insertions(+), 60 deletions(-) diff --git a/Octokit.Tests.Integration/Reactive/ObservableIssuesClientTests.cs b/Octokit.Tests.Integration/Reactive/ObservableIssuesClientTests.cs index f4e0420b..24210354 100644 --- a/Octokit.Tests.Integration/Reactive/ObservableIssuesClientTests.cs +++ b/Octokit.Tests.Integration/Reactive/ObservableIssuesClientTests.cs @@ -1,85 +1,84 @@ -using Octokit.Reactive; +using Octokit; +using Octokit.Reactive; using System; -using System.Linq; using System.Net.Http.Headers; using System.Reactive.Linq; using System.Threading.Tasks; +using Octokit.Tests.Integration; using Xunit; -namespace Octokit.Tests.Integration +public class ObservableIssuesClientTests : IDisposable { - public class ObservableIssuesClientTests : IDisposable + readonly ObservableIssuesClient _client; + readonly string _repoName; + readonly Repository _createdRepository; + + public ObservableIssuesClientTests() { - readonly ObservableIssuesClient client; - readonly string repoName; - readonly Repository createdRepository; - - public ObservableIssuesClientTests() + var github = new GitHubClient(new ProductHeaderValue("OctokitTests")) { - var github = new GitHubClient(new ProductHeaderValue("OctokitTests")) - { - Credentials = Helper.Credentials - }; + Credentials = Helper.Credentials + }; - client = new ObservableIssuesClient(github); - repoName = Helper.MakeNameWithTimestamp("public-repo"); - var result = github.Repository.Create(new NewRepository { Name = repoName }).Result; - createdRepository = result; - } + _client = new ObservableIssuesClient(github); + _repoName = Helper.MakeNameWithTimestamp("public-repo"); + var result = github.Repository.Create(new NewRepository { Name = _repoName }).Result; + _createdRepository = result; + } - [IntegrationTest] - public async Task ReturnsSpecifiedIssue() - { - var observable = client.Get("libgit2", "libgit2sharp", 1); - var issue = await observable; + [IntegrationTest] + public async Task ReturnsSpecifiedIssue() + { + var observable = _client.Get("libgit2", "libgit2sharp", 1); + var issue = await observable; - Assert.Equal(1, issue.Number); - Assert.Equal("Change License ", issue.Title); - } + Assert.Equal(1, issue.Number); + Assert.Equal("Change License ", issue.Title); + } - [IntegrationTest] - public void ReturnsAllIssuesForARepository() - { - var issues = client.GetForRepository("libgit2", "libgit2sharp").ToList().Wait(); + [IntegrationTest] + public async Task ReturnsAllIssuesForARepository() + { + var issues = await _client.GetForRepository("libgit2", "libgit2sharp").ToList(); - Assert.NotEmpty(issues); - } + Assert.NotEmpty(issues); + } - [IntegrationTest] - public async void ReturnsAllIssuesForCurrentUser() - { - var newIssue = new NewIssue("Integration test issue"); - var createResult = await client.Create(createdRepository.Owner.Name, repoName, newIssue); + [IntegrationTest] + public async Task ReturnsAllIssuesForCurrentUser() + { + var newIssue = new NewIssue("Integration test issue"); + await _client.Create(_createdRepository.Owner.Name, _repoName, newIssue); - var issues = client.GetAllForCurrent().ToList().Wait(); + var issues = await _client.GetAllForCurrent().ToList(); - Assert.NotEmpty(issues); - } + Assert.NotEmpty(issues); + } - [IntegrationTest] - public async void ReturnsAllIssuesForOwnedAndMemberRepositories() - { - var newIssue = new NewIssue("Integration test issue"); - var createResult = await client.Create(createdRepository.Owner.Name, repoName, newIssue); - var result = client.GetAllForOwnedAndMemberRepositories().ToList().Wait(); + [IntegrationTest] + public async Task ReturnsAllIssuesForOwnedAndMemberRepositories() + { + var newIssue = new NewIssue("Integration test issue"); + await _client.Create(_createdRepository.Owner.Name, _repoName, newIssue); + var result = await _client.GetAllForOwnedAndMemberRepositories().ToList(); - Assert.NotEmpty(result); - } + Assert.NotEmpty(result); + } - [IntegrationTest] - public async void CanCreateAndUpdateIssues() - { - var newIssue = new NewIssue("Integration test issue"); + [IntegrationTest] + public async Task CanCreateAndUpdateIssues() + { + var newIssue = new NewIssue("Integration test issue"); - var createResult = await client.Create(createdRepository.Owner.Name, repoName, newIssue); - var updateResult = await client.Update(createdRepository.Owner.Name, repoName, createResult.Number, new IssueUpdate { Title = "Modified integration test issue" }); + var createResult = await _client.Create(_createdRepository.Owner.Name, _repoName, newIssue); + var updateResult = await _client.Update(_createdRepository.Owner.Name, _repoName, createResult.Number, new IssueUpdate { Title = "Modified integration test issue" }); - Assert.Equal("Modified integration test issue", updateResult.Title); - } + Assert.Equal("Modified integration test issue", updateResult.Title); + } - public void Dispose() - { - Helper.DeleteRepo(createdRepository); - } + public void Dispose() + { + Helper.DeleteRepo(_createdRepository); } } + From 3c3febaf7749f257ef7104ca20373a0cc6f0d66d Mon Sep 17 00:00:00 2001 From: Haacked Date: Tue, 5 Nov 2013 16:02:33 -0800 Subject: [PATCH 6/6] Remove use of .Wait() from tests --- .../ObservableMilestonesClientTests.cs | 4 +-- .../Reactive/ObservableIssuesClientTests.cs | 26 +++++++++---------- .../ObservableMilestonesClientTests.cs | 8 +++--- .../ObservableRepositoriesClientTests.cs | 8 +++--- 4 files changed, 22 insertions(+), 24 deletions(-) diff --git a/Octokit.Tests.Integration/Reactive/ObservableMilestonesClientTests.cs b/Octokit.Tests.Integration/Reactive/ObservableMilestonesClientTests.cs index 2b28cd6f..ab7f232d 100644 --- a/Octokit.Tests.Integration/Reactive/ObservableMilestonesClientTests.cs +++ b/Octokit.Tests.Integration/Reactive/ObservableMilestonesClientTests.cs @@ -28,14 +28,14 @@ namespace Octokit.Tests.Integration } [IntegrationTest] - public void ReturnsAllMilestones() + public async Task ReturnsAllMilestones() { var github = new GitHubClient(new ProductHeaderValue("OctokitTests")) { Credentials = Helper.Credentials }; var client = new ObservableMilestonesClient(github); - var milestones = client.GetForRepository("libgit2", "libgit2sharp", new MilestoneRequest { State = ItemState.Closed }).ToList().Wait(); + var milestones = await client.GetForRepository("libgit2", "libgit2sharp", new MilestoneRequest { State = ItemState.Closed }).ToList(); Assert.NotEmpty(milestones); Assert.True(milestones.All(m => m.State == ItemState.Closed)); diff --git a/Octokit.Tests/Reactive/ObservableIssuesClientTests.cs b/Octokit.Tests/Reactive/ObservableIssuesClientTests.cs index 0814934d..8e2fef83 100644 --- a/Octokit.Tests/Reactive/ObservableIssuesClientTests.cs +++ b/Octokit.Tests/Reactive/ObservableIssuesClientTests.cs @@ -1,4 +1,5 @@ using NSubstitute; +using Octokit; using Octokit.Internal; using Octokit.Reactive; using Octokit.Tests.Helpers; @@ -8,8 +9,6 @@ using System.Reactive.Linq; using System.Threading.Tasks; using Xunit; -namespace Octokit.Tests.Reactive -{ public class ObservableIssuesClientTests { public class TheGetMethod @@ -40,7 +39,7 @@ namespace Octokit.Tests.Reactive public class TheGetForRepositoryMethod { [Fact] - public void ReturnsEveryPageOfIssues() + public async Task ReturnsEveryPageOfIssues() { var firstPageUrl = new Uri("repos/fake/repo/issues", UriKind.Relative); var secondPageUrl = new Uri("https://example.com/page/2"); @@ -89,7 +88,7 @@ namespace Octokit.Tests.Reactive .Returns(Task.Factory.StartNew>>(() => lastPageResponse)); var client = new ObservableIssuesClient(gitHubClient); - var results = client.GetForRepository("fake", "repo").ToArray().Wait(); + var results = await client.GetForRepository("fake", "repo").ToArray(); Assert.Equal(7, results.Length); Assert.Equal(firstPageResponse.BodyAsObject[0].Number, results[0].Number); @@ -101,7 +100,7 @@ namespace Octokit.Tests.Reactive public class TheGetAllForOwnedAndMemberRepositoriesMethod { [Fact] - public void ReturnsEveryPageOfIssues() + public async Task ReturnsEveryPageOfIssues() { var firstPageUrl = new Uri("user/issues", UriKind.Relative); var secondPageUrl = new Uri("https://example.com/page/2"); @@ -150,7 +149,7 @@ namespace Octokit.Tests.Reactive .Returns(Task.Factory.StartNew>>(() => lastPageResponse)); var client = new ObservableIssuesClient(gitHubClient); - var results = client.GetAllForOwnedAndMemberRepositories().ToArray().Wait(); + var results = await client.GetAllForOwnedAndMemberRepositories().ToArray(); Assert.Equal(7, results.Length); Assert.Equal(firstPageResponse.BodyAsObject[0].Number, results[0].Number); @@ -162,7 +161,7 @@ namespace Octokit.Tests.Reactive public class TheGetAllForOrganizationMethod { [Fact] - public void ReturnsEveryPageOfIssues() + public async Task ReturnsEveryPageOfIssues() { var firstPageUrl = new Uri("orgs/test/issues", UriKind.Relative); var secondPageUrl = new Uri("https://example.com/page/2"); @@ -211,7 +210,7 @@ namespace Octokit.Tests.Reactive .Returns(Task.Factory.StartNew>>(() => lastPageResponse)); var client = new ObservableIssuesClient(gitHubClient); - var results = client.GetAllForOrganization("test").ToArray().Wait(); + var results = await client.GetAllForOrganization("test").ToArray(); Assert.Equal(7, results.Length); Assert.Equal(firstPageResponse.BodyAsObject[0].Number, results[0].Number); @@ -223,7 +222,7 @@ namespace Octokit.Tests.Reactive public class TheGetAllForCurrentMethod { [Fact] - public void ReturnsEveryPageOfIssues() + public async Task ReturnsEveryPageOfIssues() { var firstPageUrl = new Uri("issues", UriKind.Relative); var secondPageUrl = new Uri("https://example.com/page/2"); @@ -272,7 +271,7 @@ namespace Octokit.Tests.Reactive .Returns(Task.Factory.StartNew>>(() => lastPageResponse)); var client = new ObservableIssuesClient(gitHubClient); - var results = client.GetAllForCurrent().ToArray().Wait(); + var results = await client.GetAllForCurrent().ToArray(); Assert.Equal(7, results.Length); Assert.Equal(firstPageResponse.BodyAsObject[0].Number, results[0].Number); @@ -319,13 +318,13 @@ namespace Octokit.Tests.Reactive [Fact] public void UpdatesClientIssueIssue() { - var IssueUpdate = new IssueUpdate(); + var issueUpdate = new IssueUpdate(); var gitHubClient = Substitute.For(); var client = new ObservableIssuesClient(gitHubClient); - client.Update("fake", "repo", 42, IssueUpdate); + client.Update("fake", "repo", 42, issueUpdate); - gitHubClient.Issue.Received().Update("fake", "repo", 42, IssueUpdate); + gitHubClient.Issue.Received().Update("fake", "repo", 42, issueUpdate); } [Fact] @@ -361,4 +360,3 @@ namespace Octokit.Tests.Reactive return new ApiInfo(links, new List(), new List(), "etag", new RateLimit(new Dictionary())); } } -} diff --git a/Octokit.Tests/Reactive/ObservableMilestonesClientTests.cs b/Octokit.Tests/Reactive/ObservableMilestonesClientTests.cs index baa18f30..d0216d85 100644 --- a/Octokit.Tests/Reactive/ObservableMilestonesClientTests.cs +++ b/Octokit.Tests/Reactive/ObservableMilestonesClientTests.cs @@ -41,7 +41,7 @@ namespace Octokit.Tests.Reactive public class TheGetForRepositoryMethod { [Fact] - public void ReturnsEveryPageOfMilestones() + public async Task ReturnsEveryPageOfMilestones() { var firstPageUrl = new Uri("repos/fake/repo/milestones", UriKind.Relative); var secondPageUrl = new Uri("https://example.com/page/2"); @@ -85,7 +85,7 @@ namespace Octokit.Tests.Reactive .Returns(Task.Factory.StartNew>>(() => lastPageResponse)); var client = new ObservableMilestonesClient(gitHubClient); - var results = client.GetForRepository("fake", "repo").ToArray().Wait(); + var results = await client.GetForRepository("fake", "repo").ToArray(); Assert.Equal(7, results.Length); Assert.Equal(firstPageResponse.BodyAsObject[0].Number, results[0].Number); @@ -94,7 +94,7 @@ namespace Octokit.Tests.Reactive } [Fact] - public void SendsAppropriateParameters() + public async Task SendsAppropriateParameters() { var firstPageUrl = new Uri("repos/fake/repo/milestones", UriKind.Relative); var secondPageUrl = new Uri("https://example.com/page/2"); @@ -142,7 +142,7 @@ namespace Octokit.Tests.Reactive .Returns(Task.Factory.StartNew>>(() => lastPageResponse)); var client = new ObservableMilestonesClient(gitHubClient); - var results = client.GetForRepository("fake", "repo", new MilestoneRequest { SortDirection = SortDirection.Descending }).ToArray().Wait(); + var results = await client.GetForRepository("fake", "repo", new MilestoneRequest { SortDirection = SortDirection.Descending }).ToArray(); Assert.Equal(7, results.Length); Assert.Equal(firstPageResponse.BodyAsObject[0].Number, results[0].Number); diff --git a/Octokit.Tests/Reactive/ObservableRepositoriesClientTests.cs b/Octokit.Tests/Reactive/ObservableRepositoriesClientTests.cs index dbbe60bf..c48ceb0e 100644 --- a/Octokit.Tests/Reactive/ObservableRepositoriesClientTests.cs +++ b/Octokit.Tests/Reactive/ObservableRepositoriesClientTests.cs @@ -43,7 +43,7 @@ namespace Octokit.Tests.Reactive public class TheGetAllForCurrentMethod { [Fact] - public void ReturnsEveryPageOfRepositories() + public async Task ReturnsEveryPageOfRepositories() { var firstPageUrl = new Uri("user/repos", UriKind.Relative); var secondPageUrl = new Uri("https://example.com/page/2"); @@ -87,7 +87,7 @@ namespace Octokit.Tests.Reactive .Returns(Task.Factory.StartNew>>(() => lastPageResponse)); var repositoriesClient = new ObservableRepositoriesClient(gitHubClient); - var results = repositoriesClient.GetAllForCurrent().ToArray().Wait(); + var results = await repositoriesClient.GetAllForCurrent().ToArray(); Assert.Equal(7, results.Length); gitHubClient.Connection.Received(1).GetAsync>(firstPageUrl, null, null); @@ -96,7 +96,7 @@ namespace Octokit.Tests.Reactive } [Fact] - public void StopsMakingNewRequestsWhenTakeIsFulfilled() + public async Task StopsMakingNewRequestsWhenTakeIsFulfilled() { var firstPageUrl = new Uri("user/repos", UriKind.Relative); var secondPageUrl = new Uri("https://example.com/page/2"); @@ -152,7 +152,7 @@ namespace Octokit.Tests.Reactive .Returns(Task.Factory.StartNew>>(() => lastPageResponse)); var repositoriesClient = new ObservableRepositoriesClient(gitHubClient); - var results = repositoriesClient.GetAllForCurrent().Take(4).ToArray().Wait(); + var results = await repositoriesClient.GetAllForCurrent().Take(4).ToArray(); Assert.Equal(4, results.Length); gitHubClient.Connection.Received(1).GetAsync>(firstPageUrl, null, null);