diff --git a/source/OctopusTools.Tests/OctopusTools.Tests.csproj b/source/OctopusTools.Tests/OctopusTools.Tests.csproj index f6fc3310f..98e32589b 100644 --- a/source/OctopusTools.Tests/OctopusTools.Tests.csproj +++ b/source/OctopusTools.Tests/OctopusTools.Tests.csproj @@ -48,8 +48,8 @@ ..\packages\NUnit.2.6.3\lib\nunit.framework.dll - - ..\packages\Octopus.Client.3.2.0\lib\net40\Octopus.Client.dll + + ..\packages\Octopus.Client.3.2.9\lib\net40\Octopus.Client.dll True diff --git a/source/OctopusTools.Tests/packages.config b/source/OctopusTools.Tests/packages.config index b9ff056b6..e8342490d 100644 --- a/source/OctopusTools.Tests/packages.config +++ b/source/OctopusTools.Tests/packages.config @@ -5,5 +5,5 @@ - + \ No newline at end of file diff --git a/source/OctopusTools/Commands/DeployReleaseCommand.cs b/source/OctopusTools/Commands/DeployReleaseCommand.cs index b43606bbb..e21a3a4cb 100644 --- a/source/OctopusTools/Commands/DeployReleaseCommand.cs +++ b/source/OctopusTools/Commands/DeployReleaseCommand.cs @@ -22,11 +22,13 @@ public DeployReleaseCommand(IOctopusRepositoryFactory repositoryFactory, ILog lo options.Add("project=", "Name of the project", v => ProjectName = v); options.Add("deployto=", "Environment to deploy to, e.g., Production", v => DeployToEnvironmentNames.Add(v)); options.Add("releaseNumber=|version=", "Version number of the release to deploy. Or specify --version=latest for the latest release.", v => VersionNumber = v); + options.Add("channel=", "[Optional] Channel to use when getting the release to deploy", v => ChannelName = v); } public string ProjectName { get; set; } public List DeployToEnvironmentNames { get; set; } public string VersionNumber { get; set; } + public string ChannelName { get; set; } protected override void Execute() { @@ -39,11 +41,41 @@ protected override void Execute() if (project == null) throw new CouldNotFindException("a project named", ProjectName); + var channel = default(ChannelResource); + if (!string.IsNullOrWhiteSpace(ChannelName)) + { + Log.Debug("Finding channel: " + ChannelName); + var channels = Repository.Projects.GetChannels(project).Items; + channel = channels.SingleOrDefault(c => string.Equals(c.Name, ChannelName, StringComparison.OrdinalIgnoreCase)); + if (channel == null) + throw new CouldNotFindException("a channel named", ChannelName); + } + ReleaseResource releaseToPromote; if (string.Equals("latest", VersionNumber, StringComparison.CurrentCultureIgnoreCase)) { - Log.Debug("Finding latest release for project"); - releaseToPromote = Repository.Projects.GetReleases(project).Items.OrderByDescending(r => SemanticVersion.Parse(r.Version)).FirstOrDefault(); + if (channel == null) + { + + Log.Debug("Finding latest release for project"); + releaseToPromote = Repository + .Projects + .GetReleases(project) + .Items + .OrderByDescending(r => SemanticVersion.Parse(r.Version)) + .FirstOrDefault(); + } + else + { + Log.Debug("Finding latest release for channel"); + releaseToPromote = Repository + .Projects + .GetReleases(project) + .Items + .Where(r => r.ChannelId == channel.Id) + .OrderByDescending(r => SemanticVersion.Parse(r.Version)) + .FirstOrDefault(); + } if (releaseToPromote == null) { diff --git a/source/OctopusTools/OctopusTools.csproj b/source/OctopusTools/OctopusTools.csproj index 776fce7e3..a7e5a10aa 100644 --- a/source/OctopusTools/OctopusTools.csproj +++ b/source/OctopusTools/OctopusTools.csproj @@ -69,8 +69,8 @@ ..\packages\NuGet.Core.2.9.0\lib\net40-Client\NuGet.Core.dll True - - ..\packages\Octopus.Client.3.2.0\lib\net40\Octopus.Client.dll + + ..\packages\Octopus.Client.3.2.9\lib\net40\Octopus.Client.dll True diff --git a/source/OctopusTools/packages.config b/source/OctopusTools/packages.config index 46dea8004..9bb9abbd0 100644 --- a/source/OctopusTools/packages.config +++ b/source/OctopusTools/packages.config @@ -9,7 +9,7 @@ - + \ No newline at end of file