94 lines
4.2 KiB
C#
94 lines
4.2 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?.IsRelease ?? false)
|
|
{
|
|
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.Format("automatic release by ln.build.server");
|
|
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, String.Format("CI Release {0}", releaseVersion.ToString()), 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.");
|
|
}
|
|
*/
|
|
}
|
|
} |