private static IEnumerable<string> FormatReleasePropertiesAsStrings(Release release)
 {
     return new List<string>{
         "Version: " + release.Version,
         "Assembled: "+release.Assembled,
         "Package Versions: " + GetPackageVersionsAsString(release.PackageVersions),
         "Release Notes: " + ((release.ReleaseNotes != null) ? release.ReleaseNotes.Replace(System.Environment.NewLine,@"\n"): "")
     };
 }
    public static Deployment DeployRelease(this IOctopusSession session, Release release, DeploymentEnvironment environment, bool forceRedeploymentOfExistingPackages = false)
    {
        var deployment = new Deployment();
        deployment.EnvironmentId = environment.Id;
        deployment.ReleaseId = release.Id;
        deployment.ForceRedeployment = forceRedeploymentOfExistingPackages;

        return session.Create(release.Link("Deployments"), deployment);
    }
    public static Release CreateRelease(this IOctopusSession session, Project project, IList<SelectedPackage> latestVersions, string version, string releaseNotes)
    {
        var release = new Release();
        release.Assembled = DateTimeOffset.UtcNow;
        release.AssembledBy = Environment.UserName;
        release.Version = version;
        release.SelectedPackages = latestVersions.ToArray();
        release.ReleaseNotes = releaseNotes ?? string.Empty;

        return session.Create(project.Link("Releases"), release);
    }
        void DeployRelease(Release release, DeploymentEnvironment environment)
        {
            var deployment = new Deployment();
            deployment.EnvironmentId = environment.Id;
            deployment.ReleaseId = release.Id;
            deployment.ForceRedeployment = Force;

            var result = Client.Create(release.Link("Deployments"), deployment).Execute();

            Log.InfoFormat("Successfully scheduled release '{0}' for deployment to environment '{1}'" + result.Name, release.Version, environment.Name);
        }
    public static IEnumerable<string> GetDeployments(this IOctopusSession session, Release release, IEnumerable<DeploymentEnvironment> environments, bool force, ILog log)
    {
        var linksToDeploymentTasks = new List<string>();
        foreach (var environment in environments)
        {
            var deployment = session.DeployRelease(release, environment, force);
            var linkToTask = deployment.Link("Task");
            linksToDeploymentTasks.Add(linkToTask);

            log.InfoFormat("Successfully scheduled release {0} for deployment to environment {1}", release.Version, environment.Name);
        }
        return linksToDeploymentTasks;
    }
        IEnumerable<string> RequestDeployments(Release release, IEnumerable<DeploymentEnvironment> environments)
        {
            var linksToDeploymentTasks = new List<string>();
            foreach (var environment in environments)
            {
                var deployment = Session.DeployRelease(release, environment, Force);
                var linkToTask = deployment.Link("Task");
                linksToDeploymentTasks.Add(linkToTask);

                Log.InfoFormat("Successfully scheduled release '{0}' for deployment to environment '{1}'" + deployment.Name, release.Version, environment.Name);
            }
            return linksToDeploymentTasks;
        }
        Release CreateNewRelease(Project project, List<PackageVersion> latestVersions)
        {
            var version = VersionNumber;
            var releaseNotes = ReleaseNotes;
            if (string.IsNullOrWhiteSpace(version))
            {
                version = latestVersions.Select(p => SemanticVersion.Parse(p.Version)).OrderByDescending(v => v).First().ToString();
                Log.Warn("A --version parameter was not specified, so we will infer the version number from the packages. The highest version number is: " + version);
            }

            var release = new Release();
            release.Assembled = DateTime.UtcNow;
            release.AssembledBy = Environment.UserName;
            release.Version = version;
            release.ReleaseNotes = releaseNotes;
            release.PackageVersions = latestVersions.ToArray();

            Log.Debug("Creating release: " + version);

            var result = Client.Create(project.Link("Releases"), release).Execute();

            Log.Info("Release created successfully!");

            return result;
        }