Changes to support reseting master to release

This commit is contained in:
Pranav K 2014-08-13 16:49:37 -07:00
parent 6f7e62201b
commit f3d544bc1f
1 changed files with 96 additions and 91 deletions

View File

@ -6,15 +6,15 @@ use namespace='System'
use namespace='System.IO' use namespace='System.IO'
use namespace='System.Collections.Generic' use namespace='System.Collections.Generic'
use namespace='System.Net' use namespace='System.Net'
use namespace='System.Linq'
use namespace='System.Text.RegularExpressions' use namespace='System.Text.RegularExpressions'
use import="BuildEnv" use import="BuildEnv"
default BASE_DIR='${Directory.GetCurrentDirectory()}' functions
default TARGET_DIR='${Path.Combine(BASE_DIR, "artifacts", "build")}' @{
static string BASE_DIR = Directory.GetCurrentDirectory();
var useHttps='${UseHttps(BASE_DIR)}' static string TARGET_DIR = Path.Combine(BASE_DIR, "artifacts", "build");
var gitHubUriPrefix='${useHttps ? "https://github.com/aspnet/" : "git@github.com:aspnet/"}' string[] repos = new[] {
var repos='${new[] {
// The repos list is topologically sorted based on build order // The repos list is topologically sorted based on build order
"Configuration", "Configuration",
"DataCommon", "DataCommon",
@ -43,7 +43,11 @@ var repos='${new[] {
"KestrelHttpServer", "KestrelHttpServer",
"WebSockets", "WebSockets",
"Entropy", "Entropy",
}}' };
static bool useHttps = UseHttps(BASE_DIR);
static string gitHubUriPrefix = useHttps ? "https://github.com/aspnet/" : "git@github.com:aspnet/";
}
@{ @{
var kBuildVersion = Environment.GetEnvironmentVariable("K_BUILD_VERSION"); var kBuildVersion = Environment.GetEnvironmentVariable("K_BUILD_VERSION");
@ -74,33 +78,7 @@ var repos='${new[] {
@{ @{
foreach(var repo in repos) foreach(var repo in repos)
{ {
var repoUrl = gitHubUriPrefix + repo + ".git"; CloneOrUpdate(repo);
if(Directory.Exists(repo))
{
GitPull(repoUrl, "dev", repo);
}
else
{
if (useHttps &&
!IsAccessible(repo))
{
Log.Warn(string.Format("The repo at '{0}' is not accessible. If you do not have access to this repository, skip the git prompt" +
" for credentials to skip cloning this repository. To avoid this prompt, re-clone the Universe repository over ssh.",
repoUrl));
}
try
{
GitClone(repoUrl, "dev");
}
catch (Exception ex)
{
Log.Warn(string.Format("Unable to clone repository at '{0}': {1}", repoUrl, ex.Message));
continue;
}
GitConfig("bugtraq.url", "http://github.com/aspnet/" + repo + "/issues/%BUGID%", repo);
GitConfig("bugtraq.logregex", @"#(\d+)", repo);
}
} }
} }
@ -132,32 +110,14 @@ var repos='${new[] {
} }
} }
#init-release #reset-master
var templatePath = '${Path.Combine(BASE_DIR, "build-template")}' -// Resets master branch to release
var fileName = 'NuGet.Config' for each='var repo in GetAllRepos()'
for each='var repo in repos' -CloneOrUpdate(repo);
var targetFile = '${Path.Combine(Directory.GetCurrentDirectory(), repo, fileName)}'
var sourceFile = '${Path.Combine(Directory.GetCurrentDirectory(), templatePath, fileName)}'
var gitFolder = '${repo}' var gitFolder = '${repo}'
git gitCommand='fetch origin'
-// get latest dev and create new release git gitCommand='checkout origin/release -B master'
git gitCommand='checkout dev'
git gitCommand='pull origin dev'
git gitCommand='checkout -b release dev'
-// alter and commit release NuGet.Config
-File.Copy(sourceFile, targetFile, true);
update-file updateFile="${targetFile}"
-updateText = updateText.Replace("/F/aspnetvnext/", "/F/aspnetrelease/");
git gitCommand='add NuGet.Config'
git gitCommand='commit -m "Updating release Nuget.config"'
-// alter dev NuGet.Config and phantom merge release branch
git gitCommand='checkout dev'
git gitCommand='merge release'
-File.Copy(sourceFile, targetFile, true);
git gitCommand='add NuGet.Config'
git gitCommand='commit -m "Updating dev Nuget.config"'
#only-compile target='compile' #only-compile target='compile'
@{ @{
@ -265,12 +225,12 @@ macro name='Exec' program='string' commandline='string' workingdir='string'
functions functions
@{ @{
bool UseHttps(string directory) static bool UseHttps(string directory)
{ {
var filename = Path.Combine(directory, ".git", "config"); var filename = Path.Combine(directory, ".git", "config");
if (!File.Exists(filename)) if (!File.Exists(filename))
{ {
Log.Warn(string.Format("Unable to find '{0}' file", filename)); Console.WriteLine("Unable to find '{0}' file", filename);
return false; return false;
} }
@ -280,7 +240,7 @@ functions
// Perform equivalent of `git config remote.origin.url` but directly // Perform equivalent of `git config remote.origin.url` but directly
// read config file to get value. // read config file to get value.
string ReadOriginUrl(string filename) static string ReadOriginUrl(string filename)
{ {
// Subsection portion of configuration name is case-sensitive; rest // Subsection portion of configuration name is case-sensitive; rest
// of name is case-insensitive. // of name is case-insensitive.
@ -313,7 +273,7 @@ functions
} }
} }
Log.Warn(string.Format("Unable to parse '{0}' file", filename)); Console.WriteLine("Unable to parse '{0}' file", filename);
return null; return null;
} }
@ -347,4 +307,49 @@ functions
} }
return true; return true;
} }
IEnumerable<string> GetAllRepos()
{
var nonDefaultRepos = new[]
{
"KRuntime",
"Claims",
"DataAnnotations",
"SqlClient",
"MusicStore"
};
return Enumerable.Concat(repos, nonDefaultRepos);
}
void CloneOrUpdate(string repo)
{
var repoUrl = gitHubUriPrefix + repo + ".git";
if(Directory.Exists(repo))
{
GitPull(repoUrl, "dev", repo);
}
else
{
if (useHttps &&
!IsAccessible(repo))
{
Log.Warn(string.Format("The repo at '{0}' is not accessible. If you do not have access to this repository, skip the git prompt" +
" for credentials to skip cloning this repository. To avoid this prompt, re-clone the Universe repository over ssh.",
repoUrl));
}
try
{
GitClone(repoUrl, "dev");
}
catch (Exception ex)
{
Log.Warn(string.Format("Unable to clone repository at '{0}': {1}", repoUrl, ex.Message));
return;
}
GitConfig("bugtraq.url", "http://github.com/aspnet/" + repo + "/issues/%BUGID%", repo);
GitConfig("bugtraq.logregex", @"#(\d+)", repo);
}
}
} }