2016-03-07 14:24:36 -06:00
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
2016-07-15 19:09:38 -05:00
using Microsoft.DotNet.Cli.Utils ;
using Microsoft.DotNet.VersionTools ;
using Microsoft.DotNet.VersionTools.Automation ;
using Microsoft.DotNet.VersionTools.Dependencies ;
using System ;
using System.Collections.Generic ;
using System.IO ;
using System.Linq ;
using System.Text.RegularExpressions ;
2016-03-07 14:24:36 -06:00
namespace Microsoft.DotNet.Scripts
{
public class Program
{
2016-07-15 19:09:38 -05:00
private static readonly Config s_config = Config . Instance ;
public static void Main ( string [ ] args )
2016-03-07 14:24:36 -06:00
{
DebugHelper . HandleDebugSwitch ( ref args ) ;
2017-02-09 16:25:48 -06:00
bool onlyUpdate = args . Length > 0 & & string . Equals ( "--Update" , args [ 0 ] , StringComparison . OrdinalIgnoreCase ) ;
2016-07-15 19:09:38 -05:00
List < BuildInfo > buildInfos = new List < BuildInfo > ( ) ;
2017-02-20 14:20:27 -08:00
buildInfos . Add ( GetBuildInfo ( "CoreSetup" , s_config . CoreSetupVersionFragment , fetchLatestReleaseFile : false ) ) ;
2016-07-15 19:09:38 -05:00
IEnumerable < IDependencyUpdater > updaters = GetUpdaters ( ) ;
2017-02-10 11:32:22 -06:00
var dependencyBuildInfos = buildInfos . Select ( buildInfo = >
2017-02-09 16:25:48 -06:00
new DependencyBuildInfo (
2017-02-10 11:32:22 -06:00
buildInfo ,
2017-02-09 16:25:48 -06:00
upgradeStableVersions : true ,
disabledPackages : Enumerable . Empty < string > ( ) ) ) ;
DependencyUpdateResults updateResults = DependencyUpdateUtils . Update ( updaters , dependencyBuildInfos ) ;
2017-02-28 11:33:37 -08:00
if ( ! onlyUpdate & & updateResults . ChangesDetected ( ) )
2016-07-15 19:09:38 -05:00
{
2017-02-09 16:25:48 -06:00
GitHubAuth gitHubAuth = new GitHubAuth ( s_config . Password , s_config . UserName , s_config . Email ) ;
GitHubProject origin = new GitHubProject ( s_config . GitHubProject , s_config . UserName ) ;
GitHubBranch upstreamBranch = new GitHubBranch (
s_config . GitHubUpstreamBranch ,
new GitHubProject ( s_config . GitHubProject , s_config . GitHubUpstreamOwner ) ) ;
string suggestedMessage = updateResults . GetSuggestedCommitMessage ( ) ;
string body = string . Empty ;
2017-02-10 11:32:22 -06:00
if ( s_config . GitHubPullRequestNotifications . Any ( ) )
2017-02-09 16:25:48 -06:00
{
body + = PullRequestCreator . NotificationString ( s_config . GitHubPullRequestNotifications ) ;
}
new PullRequestCreator ( gitHubAuth , origin , upstreamBranch )
. CreateOrUpdateAsync (
suggestedMessage ,
suggestedMessage + $" ({upstreamBranch.Name})" ,
body )
. Wait ( ) ;
2016-07-15 19:09:38 -05:00
}
}
2017-02-20 14:20:27 -08:00
private static BuildInfo GetBuildInfo ( string name , string buildInfoFragment , bool fetchLatestReleaseFile = true )
{
const string FileUrlProtocol = "file://" ;
if ( s_config . DotNetVersionUrl . StartsWith ( FileUrlProtocol , StringComparison . Ordinal ) )
{
return BuildInfo . LocalFileGetAsync (
name ,
s_config . DotNetVersionUrl . Substring ( FileUrlProtocol . Length ) ,
buildInfoFragment . Replace ( '/' , Path . DirectorySeparatorChar ) ,
fetchLatestReleaseFile )
. Result ;
}
else
{
return BuildInfo . Get ( name , $"{s_config.DotNetVersionUrl}/{buildInfoFragment}" , fetchLatestReleaseFile ) ;
}
}
2016-07-15 19:09:38 -05:00
private static IEnumerable < IDependencyUpdater > GetUpdaters ( )
{
2017-04-21 13:04:19 -05:00
string dependencyVersionsPath = Path . Combine ( "build" , "DependencyVersions.props" ) ;
yield return CreateRegexUpdater ( dependencyVersionsPath , "CLI_SharedFrameworkVersion" , "Microsoft.NETCore.App" ) ;
yield return CreateRegexUpdater ( dependencyVersionsPath , "PlatformAbstractionsVersion" , "Microsoft.DotNet.PlatformAbstractions" ) ;
yield return CreateRegexUpdater ( dependencyVersionsPath , "DependencyModelVersion" , "Microsoft.Extensions.DependencyModel" ) ;
2016-07-15 19:09:38 -05:00
}
2017-02-09 16:25:48 -06:00
private static IDependencyUpdater CreateRegexUpdater ( string repoRelativePath , string propertyName , string packageId )
2016-07-15 19:09:38 -05:00
{
return new FileRegexPackageUpdater ( )
{
Path = Path . Combine ( Dirs . RepoRoot , repoRelativePath ) ,
PackageId = packageId ,
2017-02-09 16:25:48 -06:00
Regex = new Regex ( $@"<{propertyName}>(?<version>.*)</{propertyName}>" ) ,
2016-07-15 19:09:38 -05:00
VersionGroupName = "version"
} ;
2016-03-07 14:24:36 -06:00
}
}
}