Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Azure pipelines #373

Closed
wants to merge 6 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions Cake.Recipe/Content/analyzing.cake
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,9 @@ BuildParameters.Tasks.DupFinderTask = Task("DupFinder")
BuildParameters.Paths.Directories.DupFinderTestResults.CombineWithFilePath("dupfinder.xml"),
outputHtmlFile);

if(BuildParameters.IsRunningOnAppVeyor && FileExists(outputHtmlFile))
if(!BuildParameters.IsLocalBuild && FileExists(outputHtmlFile))
{
AppVeyor.UploadArtifact(outputHtmlFile);
BuildParameters.BuildProvider.UploadArtifact(outputHtmlFile);
}

if(BuildParameters.IsLocalBuild)
Expand Down Expand Up @@ -114,9 +114,9 @@ BuildParameters.Tasks.InspectCodeTask = Task("CreateIssuesReport")
"./",
issueReportFile);

if(BuildParameters.IsRunningOnAppVeyor && FileExists(issueReportFile))
if(!BuildParameters.IsLocalBuild && FileExists(issueReportFile))
{
AppVeyor.UploadArtifact(issueReportFile);
BuildParameters.BuildProvider.UploadArtifact(issueReportFile);
}
});

Expand Down
32 changes: 13 additions & 19 deletions Cake.Recipe/Content/appveyor.cake
Original file line number Diff line number Diff line change
Expand Up @@ -34,21 +34,6 @@ BuildParameters.Tasks.PrintAppVeyorEnvironmentVariablesTask = Task("Print-AppVey
Information("CONFIGURATION: {0}", EnvironmentVariable("CONFIGURATION"));
});

BuildParameters.Tasks.UploadAppVeyorArtifactsTask = Task("Upload-AppVeyor-Artifacts")
.IsDependentOn("Package")
.WithCriteria(() => BuildParameters.IsRunningOnAppVeyor)
.WithCriteria(() => DirectoryExists(BuildParameters.Paths.Directories.NuGetPackages) || DirectoryExists(BuildParameters.Paths.Directories.ChocolateyPackages))
.Does(() =>
{
// Concatenating FilePathCollections should make sure we get unique FilePaths
foreach(var package in GetFiles(BuildParameters.Paths.Directories.Packages + "/**/*") +
GetFiles(BuildParameters.Paths.Directories.NuGetPackages + "/*") +
GetFiles(BuildParameters.Paths.Directories.ChocolateyPackages + "/*"))
{
AppVeyor.UploadArtifact(package);
}
});

BuildParameters.Tasks.ClearAppVeyorCacheTask = Task("Clear-AppVeyor-Cache")
.Does(() =>
RequireAddin(@"#addin nuget:?package=Cake.AppVeyor&version=3.0.0&loaddependencies=true
Expand All @@ -75,7 +60,7 @@ public class AppVeyorTagInfo : ITagInfo

public bool IsTag { get; }

public string Name { get; }
public string Name { get; }
}

public class AppVeyorRepositoryInfo : IRepositoryInfo
Expand All @@ -101,17 +86,17 @@ public class AppVeyorPullRequestInfo : IPullRequestInfo
IsPullRequest = appVeyor.Environment.PullRequest.IsPullRequest;
}

public bool IsPullRequest { get; }
public bool IsPullRequest { get; }
}

public class AppVeyorBuildInfo : IBuildInfo
{
public AppVeyorBuildInfo(IAppVeyorProvider appVeyor)
{
Number = appVeyor.Environment.Build.Number;
Number = appVeyor.Environment.Build.Number.ToString();
}

public int Number { get; }
public string Number { get; }
}

public class AppVeyorBuildProvider : IBuildProvider
Expand All @@ -121,11 +106,20 @@ public class AppVeyorBuildProvider : IBuildProvider
Repository = new AppVeyorRepositoryInfo(appVeyor);
PullRequest = new AppVeyorPullRequestInfo(appVeyor);
Build = new AppVeyorBuildInfo(appVeyor);

_appVeyor = appVeyor;
}

public IRepositoryInfo Repository { get; }

public IPullRequestInfo PullRequest { get; }

public IBuildInfo Build { get; }

private readonly IAppVeyorProvider _appVeyor;

public void UploadArtifact(FilePath file)
{
_appVeyor.UploadArtifact(file);
}
}
86 changes: 86 additions & 0 deletions Cake.Recipe/Content/azurepipelines.cake
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
///////////////////////////////////////////////////////////////////////////////
// BUILD PROVIDER
///////////////////////////////////////////////////////////////////////////////

public class AzurePipelinesTagInfo : ITagInfo
{
public AzurePipelinesTagInfo(ITFBuildProvider tfBuild)
{
const string refTags = "refs/tags/";
// at the moment, there is no ability to know is it tag or not
IsTag = tfBuild.Environment.Repository.Branch.StartsWith(refTags);
Name = IsTag
? tfBuild.Environment.Repository.Branch.Substring(refTags.Length)
: string.Empty;
}

public bool IsTag { get; }

public string Name { get; }
}

public class AzurePipelinesRepositoryInfo : IRepositoryInfo
{
public AzurePipelinesRepositoryInfo(ITFBuildProvider tfBuild)
{
Branch = tfBuild.Environment.Repository.Branch;
Name = tfBuild.Environment.Repository.RepoName;
Tag = new AzurePipelinesTagInfo(tfBuild);
}

public string Branch { get; }

public string Name { get; }

public ITagInfo Tag { get; }
}

public class AzurePipelinesPullRequestInfo : IPullRequestInfo
{
public AzurePipelinesPullRequestInfo(ITFBuildProvider tfBuild, ICakeEnvironment environment)
{
//todo: update to `tfBuild.Environment.PullRequest.IsPullRequest` after upgrade to 0.33.0
var value = environment.GetEnvironmentVariable("SYSTEM_PULLREQUEST_PULLREQUESTID");

IsPullRequest = !string.IsNullOrWhiteSpace(value) && int.TryParse(value, out var id)
? id > 0
: false;
}

public bool IsPullRequest { get; }
}

public class AzurePipelinesBuildInfo : IBuildInfo
{
public AzurePipelinesBuildInfo(ITFBuildProvider tfBuild)
{
Number = tfBuild.Environment.Build.Number;
}

public string Number { get; }
}

public class AzurePipelinesBuildProvider : IBuildProvider
{
public AzurePipelinesBuildProvider(ITFBuildProvider tfBuild, ICakeEnvironment environment)
{
Build = new AzurePipelinesBuildInfo(tfBuild);
PullRequest = new AzurePipelinesPullRequestInfo(tfBuild, environment);
Repository = new AzurePipelinesRepositoryInfo(tfBuild);

_tfBuild = tfBuild;
}

public IRepositoryInfo Repository { get; }

public IPullRequestInfo PullRequest { get; }

public IBuildInfo Build { get; }

private readonly ITFBuildProvider _tfBuild;

public void UploadArtifact(FilePath file)
{
_tfBuild.Commands.UploadArtifact("artifacts", file, file.GetFilename().FullPath);
}
}
17 changes: 16 additions & 1 deletion Cake.Recipe/Content/build.cake
Original file line number Diff line number Diff line change
Expand Up @@ -408,8 +408,23 @@ BuildParameters.Tasks.PackageTask = Task("Package")
BuildParameters.Tasks.DefaultTask = Task("Default")
.IsDependentOn("Package");

BuildParameters.Tasks.UploadArtifactsTask = Task("Upload-Artifacts")
.IsDependentOn("Package")
.WithCriteria(() => !BuildParameters.IsLocalBuild)
.WithCriteria(() => DirectoryExists(BuildParameters.Paths.Directories.NuGetPackages) || DirectoryExists(BuildParameters.Paths.Directories.ChocolateyPackages))
.Does(() =>
{
// Concatenating FilePathCollections should make sure we get unique FilePaths
foreach(var package in GetFiles(BuildParameters.Paths.Directories.Packages + "/**/*") +
GetFiles(BuildParameters.Paths.Directories.NuGetPackages + "/*") +
GetFiles(BuildParameters.Paths.Directories.ChocolateyPackages + "/*"))
{
BuildParameters.BuildProvider.UploadArtifact(package);
}
});

BuildParameters.Tasks.AppVeyorTask = Task("AppVeyor")
.IsDependentOn("Upload-AppVeyor-Artifacts")
.IsDependentOn("Upload-Artifacts")
.IsDependentOn("Publish-MyGet-Packages")
.IsDependentOn("Publish-Nuget-Packages")
.IsDependentOn("Publish-GitHub-Release")
Expand Down
10 changes: 9 additions & 1 deletion Cake.Recipe/Content/buildProvider.cake
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public interface IPullRequestInfo

public interface IBuildInfo
{
int Number { get; }
string Number { get; }
}

public interface IBuildProvider
Expand All @@ -31,10 +31,18 @@ public interface IBuildProvider
IPullRequestInfo PullRequest { get; }

IBuildInfo Build { get; }

void UploadArtifact(FilePath file);
}

public static IBuildProvider GetBuildProvider(ICakeContext context, BuildSystem buildSystem)
{
//todo: need to be replaced to `IsRunningOnAzurePipelines || IsRunningOnAzurePipelinesHosted` after update to Cake 0.33.0
if (buildSystem.IsRunningOnTFS || buildSystem.IsRunningOnVSTS)
{
return new AzurePipelinesBuildProvider(buildSystem.TFBuild, context.Environment);
}

// always fallback to AppVeyor
return new AppVeyorBuildProvider(buildSystem.AppVeyor);
}
2 changes: 1 addition & 1 deletion Cake.Recipe/Content/tasks.cake
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ public class BuildTasks
public CakeTaskBuilder InspectCodeTask { get; set; }
public CakeTaskBuilder AnalyzeTask { get; set; }
public CakeTaskBuilder PrintAppVeyorEnvironmentVariablesTask { get; set; }
public CakeTaskBuilder UploadAppVeyorArtifactsTask { get; set; }
public CakeTaskBuilder UploadArtifactsTask { get; set; }
public CakeTaskBuilder ClearAppVeyorCacheTask { get; set; }
public CakeTaskBuilder ShowInfoTask { get; set; }
public CakeTaskBuilder CleanTask { get; set; }
Expand Down