ln.build/ln.build/pipeline/DeployCommand.cs

94 lines
4.1 KiB
C#

using System;
using System.IO;
using ln.build.repositories;
using ln.build.semver;
using ln.logging;
namespace ln.build.pipeline
{
public static class DeployCommand
{
public static void Deploy(Stage stage,params string[] arguments)
{
stage.CommandEnvironment.Logger.Log(LogLevel.WARNING, "stage command: deploy not yet implemented");
}
public static void Release(Stage stage,params string[] arguments)
{
if (stage.CommandEnvironment.CIJob.Repository is Repository repository)
{
SemVersion releaseVersion = (SemVersion)stage.CommandEnvironment.Get("RELEASE_VERSION");
if (releaseVersion != null)
{
Release release = repository.GetRelease(releaseVersion.ToString());
if (release != null)
{
stage.CommandEnvironment.Logger.Log(LogLevel.WARNING, "source repository already has release {0}", releaseVersion);
} else
{
string releaseBody = "";
string release_ref = stage.CommandEnvironment.Get("REPO_REF");
if (release_ref == null)
{
stage.CommandEnvironment.Logger.Log(LogLevel.WARNING,"release: no source repository reference found. can't create release!");
} else
{
release = repository.CreateRelease(releaseVersion, releaseBody, release_ref);
foreach (string artefact in stage.CommandEnvironment.Get("RELEASE_ARTEFACTS","").Split(':'))
{
release.CreateOrReplaceAttachment(artefact,Path.GetFileName(artefact));
}
}
}
}
} else
{
stage.CommandEnvironment.Logger.Log(LogLevel.WARNING, "release: no repository interface attached to CIJob");
}
}
/*
if (stage.CommandEnvironment.Get("REPO_EVENT","").Equals("release"))
{
Repository repository = stage.CommandEnvironment.CIJob?.Repository;
if (repository != null)
{
Release release = repository.GetRelease(int.Parse(stage.CommandEnvironment.Get("RELEASE_ID")));
foreach (string arg in Arguments)
{
string localPath, remoteFileName;
int ie = arg.IndexOf('=');
if (ie == -1)
{
localPath = Path.Combine(stage.CommandEnvironment.WorkingDirectory, arg);
remoteFileName = Path.GetFileName(arg);
} else {
localPath = Path.Combine(stage.CommandEnvironment.WorkingDirectory, arg.Substring(0, ie));
remoteFileName = arg.Substring(ie + 1);
}
stage.CommandEnvironment.Logger.Log(LogLevel.INFO, "Adding {0} to release as {1}", localPath, remoteFileName);
Attachment attachment = release.CreateOrReplaceAttachment( localPath, remoteFileName );
// Cleanup attachments
foreach (Attachment b in release.GetAttachments())
{
if (!b.Equals(attachment) && b.Name.Equals(attachment.Name))
b.Delete();
}
}
} else {
stage.CommandEnvironment.Logger.Log(LogLevel.ERROR, "RELEASE: no repository interface found!");
throw new Exception("Respository needed!");
}
} else {
stage.CommandEnvironment.Logger.Log(LogLevel.INFO, "RELEASE: build is no release build. Ignoring.");
}
*/
}
}