Я работаю над сценарием Cake, который должен создать сайт Wyam и развернуть его на сайтах Github. Это означает, что весь контент основной ветки должен быть заменен новой сборкой Wyam.
Пока что я создал скрипт Cake ниже, который работает как надо. Но мне интересно, есть ли более простой способ заменить все содержимое главной ветви новой сборкой Wyam, чем выполнять эти задачи вручную.
Задачи, которые я хотел бы упростить: EmptyMasterBranch
и CopyToMasterBranch
.
Task("Build")
.Does(() =>
{
Wyam();
});
Task("Preview")
.Does(() =>
{
Wyam(new WyamSettings
{
Preview = true,
Watch = true
});
});
Task("CloneMasterBranch")
.Does(() => {
Information("Cloning master branch into temp directory");
GitClone(
repositoryUrl,
new DirectoryPath(tempDir),
githubUserName,
githubAccessToken,
new GitCloneSettings {
BranchName = "master"
}
);
});
Task("EmptyMasterBranch")
.IsDependentOn("CloneMasterBranch")
.Does(() => {
Information("Emptying master branch");
string[] filePaths = System.IO.Directory.GetFiles(tempDir);
foreach (string filePath in filePaths)
{
var fileName = new FileInfo(filePath).Name;
fileName = fileName.ToLower();
if(System.IO.File.Exists(filePath))
{
DeleteFile(filePath);
}
}
string[] directoryPaths = System.IO.Directory.GetDirectories(tempDir);
foreach (string directoryPath in directoryPaths)
{
var directoryName = new FileInfo(directoryPath).Name;
directoryName = directoryName.ToLower();
if(directoryName == ".git")
{
// Do not delete the .git directory
continue;
}
if (System.IO.Directory.Exists(directoryPath))
{
DeleteDirectory(
directoryPath,
new DeleteDirectorySettings{
Recursive = true,
Force = true
});
}
}
});
Task("CopyToMasterBranch")
.IsDependentOn("Build")
.IsDependentOn("EmptyMasterBranch")
.Does(() => {
var sourcePath = "./output";
Information("Copying files to master branch");
// Now Create all of the directories
foreach (string dirPath in System.IO.Directory.GetDirectories(sourcePath, "*", SearchOption.AllDirectories))
{
System.IO.Directory.CreateDirectory(dirPath.Replace(sourcePath, tempDir));
}
//Copy all the files & Replaces any files with the same name
foreach (string newPath in System.IO.Directory.GetFiles(sourcePath, "*.*", SearchOption.AllDirectories))
System.IO.File.Copy(newPath, newPath.Replace(sourcePath, tempDir), true);
});
Task("CommitMasterBranch")
.IsDependentOn("CopyToMasterBranch")
.Does(() => {
Information("Performing Git commit on master branch");
GitAddAll(tempDir);
GitCommit(tempDir, "Johan Vergeer", "johanvergeer@gmail.com", $"Automated release {gitVersion.InformationalVersion}");
});
Task("PushMasterBranch")
.IsDependentOn("CommitMasterBranch")
.Does(() => {
Information("Pushing master branch to origin");
GitPush(tempDir, githubUserName, githubAccessToken, "master");
});