Octopus Deploy – deleting release

Download Octo tools from octopus.

From command line list the project:


octo.exe list-projects --server=http://my.devops.server/Octopus --apiKey=myApiKey  --user=admin --pass=12345678

To delete a range of releases:


octo.exe delete-releases --server=http://my.devops.server/Octopus --apiKey=myApiKey --minversion=5.1.9.2 --maxversion=5.1.9.3   --project="My Project QA" --user=admin --pass=12345678

Run MsTest from C#


public void Run(string testDllFullPath, string testCategory, string individualTestName)
{
try
{
var msTestPath = @"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\MSTest.exe";
string testDllFolder = new FileInfo(testDllFullPath).DirectoryName;

var msTestArgs = string.Format("/testcontainer:{0}", testDllFullPath);
if (!string.IsNullOrWhiteSpace(testCategory))
{
msTestArgs = string.Format("{0} /testcategory:{1}", msTestArgs, testCategory);
}
else if (!string.IsNullOrWhiteSpace(individualTestName))
{
msTestArgs = string.Format("{0} /test:{1}", msTestArgs, individualTestName);

}

var myProcess = new Process();
var myProcessStartInfo = new ProcessStartInfo(msTestPath, msTestArgs)
{
WindowStyle = ProcessWindowStyle.Normal,
WorkingDirectory = testDllFolder,
UseShellExecute = false,
RedirectStandardError = true,
RedirectStandardOutput = true
};

myProcess.StartInfo = myProcessStartInfo;
myProcess.Start();
string outputErrors = myProcess.StandardError.ReadToEnd();
string output = myProcess.StandardOutput.ReadToEnd();
myProcess.WaitForExit();

if (output.Contains("For switch syntax, type \"MSTest /help\""))
{
throw new ApplicationException(string.Format("MSTest invoked with invalid command line: [{0}]", msTestArgs));
}
if (!string.IsNullOrWhiteSpace(outputErrors))
{
throw new ApplicationException(string.Format("MSTest standard error: args=[{0}] stderr=[{1}]", msTestArgs, outputErrors));
}

}
catch (Exception e)
{
Trace.WriteLine("ERROR: " + e.Message);
throw;
}
}

 

To parse results file:


public void ParseResultsFile(string fullResultsFilePath)

{

var resultsDoc = XDocument.Load(fullResultsFilePath);

 

var ns = resultsDoc.Root.Name.Namespace;

 

var summary = resultsDoc.Descendants(ns + "ResultSummary").FirstOrDefault();

 

if (summary != null)

{

var overallOutcome = summary.Attribute("outcome");

var counters = summary.Element(ns + "Counters");

if (counters != null)

{

var countTotal = counters.Attribute("total");

var countExecuted = counters.Attribute("executed");

var countPassed = counters.Attribute("passed");

var countError = counters.Attribute("error");

var countFailed = counters.Attribute("failed");

var countTimeout = counters.Attribute("timeout");

var countAborted = counters.Attribute("aborted");

var countInconclusive = counters.Attribute("inconclusive");

}

}

 

 

var testResults = resultsDoc.Descendants(ns + "UnitTestResult");

 

foreach (var testResult in testResults)

{

var testName = testResult.Attribute("testName");

var testOutcome = testResult.Attribute("outcome");

foreach (var error in testResult.Descendants(ns + "ErrorInfo"))

{

var message = error.Element(ns + "Message").Value;

var stackTrace = error.Element(ns + "StackTrace").Value;

 

}

foreach (var debugTrace in testResult.Descendants(ns + "DebugTrace"))

{

var traceMessage = debugTrace.Value;

 

}

 

}

 

}