/// <summary> /// Determines the build server on which the build is running. /// </summary> /// <param name="context">The Cake context.</param> /// <returns>The build server on which the build is running or <c>null</c> if unknown build server.</returns> private static IIssuesBuildServer DetermineBuildServer(IssuesContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } // Could be simplified once https://github.com/cake-build/cake/issues/1684 / https://github.com/cake-build/cake/issues/1580 are fixed. if (!string.IsNullOrWhiteSpace(context.EnvironmentVariable("TF_BUILD")) && !string.IsNullOrWhiteSpace(context.EnvironmentVariable("SYSTEM_COLLECTIONURI")) && ( new Uri(context.EnvironmentVariable("SYSTEM_COLLECTIONURI")).Host == "dev.azure.com" || new Uri(context.EnvironmentVariable("SYSTEM_COLLECTIONURI")).Host.EndsWith("visualstudio.com", StringComparison.InvariantCulture) )) { context.Information("Build server detected: {0}", "Azure Pipelines"); return(new AzureDevOpsBuildServer()); } if (context.AppVeyor().IsRunningOnAppVeyor) { context.Information("Build server detected: {0}", "AppVeyor"); return(new AppVeyorBuildServer()); } if (context.GitHubActions().IsRunningOnGitHubActions) { context.Information("Build server detected: {0}", "GitHub Actions"); return(new GitHubActionsBuildServer()); } return(null); }
/// <summary> /// Determines the pull request system. /// </summary> /// <param name="context">The Cake context.</param> /// <param name="repositoryUrl">The URL of the remote repository.</param> /// <returns>The pull request system or <c>null</c> if unknown pull request system.</returns> private static IIssuesPullRequestSystem DeterminePullRequestSystem(IssuesContext context, Uri repositoryUrl) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (repositoryUrl == null) { throw new ArgumentNullException(nameof(repositoryUrl)); } if (repositoryUrl.Host == "dev.azure.com" || repositoryUrl.Host.EndsWith("visualstudio.com", StringComparison.InvariantCulture)) { context.Information("Pull request system detected: {0}", "Azure Repos"); return(new AzureDevOpsPullRequestSystem()); } if (repositoryUrl.Host == "github.com") { return(new GitHubPullRequestSystem()); } return(null); }
/// <summary> /// Determines the repository info provider to use. /// </summary> /// <param name="context">The Cake context.</param> /// <param name="repositoryInfoProviderType">Defines how information about the Git repository should be determined.</param> /// <returns>The repository info provider which should be used.</returns> private static IRepositoryInfoProvider DetermineRepositoryInfoProvider( IssuesContext context, RepositoryInfoProviderType repositoryInfoProviderType) { if (context == null) { throw new ArgumentNullException(nameof(context)); } switch (repositoryInfoProviderType) { case RepositoryInfoProviderType.CakeGit: context.Information("Using Cake.Git for providing repository information"); return(new CliRepositoryInfoProvider()); case RepositoryInfoProviderType.Cli: context.Information("Using Git CLI for providing repository information"); return(new CliRepositoryInfoProvider()); default: throw new NotImplementedException("Unsupported repository info provider"); } }
/// <summary> /// Creates a new instance of the <see cref="IssuesState"/> class. /// </summary> /// <param name="context">The Cake context.</param> /// <param name="repositoryInfoProviderType">Defines how information about the Git repository should be determined.</param> public IssuesState( IssuesContext context, RepositoryInfoProviderType repositoryInfoProviderType) { if (context == null) { throw new ArgumentNullException(nameof(context)); } this.BuildRootDirectory = context.MakeAbsolute(context.Directory("./")); context.Information("Build script root directory: {0}", this.BuildRootDirectory); this.ProjectRootDirectory = this.BuildRootDirectory.Combine("..").Collapse(); context.Information("Project root directory: {0}", this.ProjectRootDirectory); this.RepositoryInfo = DetermineRepositoryInfoProvider(context, repositoryInfoProviderType); this.RepositoryRootDirectory = this.RepositoryInfo.GetRepositoryRootDirectory(context, this.BuildRootDirectory); context.Information("Repository root directory: {0}", this.RepositoryRootDirectory); this.BuildServer = DetermineBuildServer(context); if (this.BuildServer != null) { this.RepositoryRemoteUrl = BuildServer.DetermineRepositoryRemoteUrl(context, this.RepositoryRootDirectory); context.Information("Repository remote URL: {0}", this.RepositoryRemoteUrl); this.CommitId = BuildServer.DetermineCommitId(context, this.RepositoryRootDirectory); context.Information("CommitId: {0}", this.CommitId); this.PullRequestSystem = DeterminePullRequestSystem( context, this.RepositoryRemoteUrl); } }