1
- #tool dotnet : ? package= GitVersion . Tool & version = 5.12 .0 // 6.0.0-beta.7 supports . NET 8, 7, 6
1
+ #tool dotnet : ? package= GitVersion . Tool & version = 6.2 .0 // . NET 8-9
2
2
#tool dotnet: ? package = coveralls . net & version = 4.0 .1
3
3
#tool nuget: ? package = ReportGenerator & version = 5.2 .4
4
4
#addin nuget: ? package = Newtonsoft . Json & version = 13.0 .3
@@ -14,6 +14,7 @@ using System.Linq;
14
14
using System. Text. RegularExpressions;
15
15
16
16
const string Release = "Release" ; // task name, target, and Release config name
17
+ const string PullRequest = "PullRequest" ; // task name, target, and PullRequest config name
17
18
const string AllFrameworks = "net8.0;net9.0" ;
18
19
const string LatestFramework = "net9.0" ;
19
20
@@ -50,7 +51,7 @@ var releaseNotes = new List<string>();
50
51
// internal build variables - don't change these.
51
52
string committedVersion = "0.0.0-dev" ;
52
53
GitVersion versioning = null ;
53
- bool IsTechnicalRelease = false ;
54
+ bool IsTechnicalRelease = true ;
54
55
55
56
var target = Argument( "target" , "Default" ) ;
56
57
var slnFile = ( target = = Release ) ? $"./Ocelot.{Release}.sln" : "./Ocelot.sln" ;
@@ -88,13 +89,14 @@ Task("Compile")
88
89
. IsDependentOn ( "Version" )
89
90
. Does ( ( ) =>
90
91
{
92
+ Information ( "Branch: " + GetBranchName ( ) ) ;
91
93
Information ( "Build: " + compileConfig ) ;
92
94
Information ( "Solution: " + slnFile ) ;
93
95
var settings = new DotNetBuildSettings
94
96
{
95
97
Configuration = compileConfig ,
96
98
} ;
97
- if ( target != Release )
99
+ if ( target == PullRequest )
98
100
{
99
101
settings . Framework = LatestFramework ; // build using .NET 9 SDK only
100
102
}
@@ -121,13 +123,20 @@ Task("Version")
121
123
. Does ( ( ) =>
122
124
{
123
125
versioning = GetNuGetVersionForCommit ( ) ;
124
- var nugetVersion = versioning . NuGetVersion ;
125
- Information ( "SemVer version number: " + nugetVersion ) ;
126
-
127
- if ( IsRunningOnCircleCI ( ) )
126
+ Information ( "#########################" ) ;
127
+ Information ( "# SemVer Information" ) ;
128
+ Information ( "#========================" ) ;
129
+ Information ( $ "# { nameof ( versioning . NuGetVersion ) } : { versioning . NuGetVersion } ") ;
130
+ Information ( $ "# { nameof ( versioning . BranchName ) } : { versioning . BranchName } ") ;
131
+ Information ( $ "# { nameof ( versioning . MajorMinorPatch ) } : { versioning . MajorMinorPatch } ") ;
132
+ Information ( $ "# { nameof ( versioning . SemVer ) } : { versioning . SemVer } ") ;
133
+ Information ( $ "# { nameof ( versioning . InformationalVersion ) } : { versioning . InformationalVersion } ") ;
134
+ Information ( "#########################" ) ;
135
+
136
+ if ( IsRunningInCICD ( ) )
128
137
{
129
138
Information ( "Persisting version number..." ) ;
130
- PersistVersion ( committedVersion , nugetVersion ) ;
139
+ PersistVersion ( committedVersion , versioning . SemVer ) ;
131
140
}
132
141
else
133
142
{
@@ -139,7 +148,7 @@ Task("GitLogUniqContributors")
139
148
. Does ( ( ) =>
140
149
{
141
150
var command = "log --format=\" %aN|%aE\" " ;
142
- // command += IsRunningOnCircleCI () ? "| sort | uniq" :
151
+ // command += IsRunningInCICD () ? "| sort | uniq" :
143
152
// IsRunningInPowershell() ? "| Sort-Object -Unique" : "| sort | uniq";
144
153
List < string > output = GitHelper ( command ) ;
145
154
output . Sort ( ) ;
@@ -164,7 +173,7 @@ Task("CreateReleaseNotes")
164
173
Information ( $ "Generating release notes at { releaseNotesFile } ") ;
165
174
var lastReleaseTags = GitHelper ( "describe --tags --abbrev=0 --exclude net*" ) ;
166
175
var lastRelease = lastReleaseTags . First ( t => ! t . StartsWith ( "net" ) ) ; // skip 'net*-vX.Y.Z' tag and take 'major.minor.build'
167
- var releaseVersion = versioning . NuGetVersion ;
176
+ var releaseVersion = versioning . SemVer ;
168
177
169
178
// Read main header from Git file, substitute version in header, and add content further...
170
179
Information ( "{0} New release tag is " + releaseVersion ) ;
@@ -465,7 +474,7 @@ Task("RunUnitTests")
465
474
. Append ( "--verbosity:detailed" )
466
475
. Append ( "--consoleLoggerParameters:ErrorsOnly" )
467
476
} ;
468
- if ( target != Release )
477
+ if ( target == PullRequest )
469
478
{
470
479
settings . Framework = LatestFramework ; // .NET 9 SDK only
471
480
}
@@ -482,7 +491,7 @@ Task("RunUnitTests")
482
491
483
492
GenerateReport ( coverageSummaryFile ) ;
484
493
485
- if ( IsRunningOnCircleCI ( ) && IsMainOrDevelop ( ) )
494
+ if ( IsRunningInCICD ( ) && IsMainOrDevelop ( ) )
486
495
{
487
496
var repoToken = EnvironmentVariable ( coverallsRepoToken ) ;
488
497
if ( string . IsNullOrEmpty ( repoToken ) )
@@ -512,9 +521,9 @@ Task("RunUnitTests")
512
521
513
522
Information ( "Sequence Coverage: " + sequenceCoverage ) ;
514
523
515
- if ( double . Parse ( sequenceCoverage ) < minCodeCoverage )
524
+ if ( double . Parse ( sequenceCoverage ) < minCodeCoverage )
516
525
{
517
- var whereToCheck = ! IsRunningOnCircleCI ( ) ? coverallsRepo : artifactsForUnitTestsDir ;
526
+ var whereToCheck = ! IsRunningInCICD ( ) ? coverallsRepo : artifactsForUnitTestsDir ;
518
527
throw new Exception ( string . Format ( "Code coverage fell below the threshold of {0}%. You can find the code coverage report at {1}" , minCodeCoverage , whereToCheck ) ) ;
519
528
} ;
520
529
} ) ;
@@ -530,7 +539,7 @@ Task("RunAcceptanceTests")
530
539
. Append ( "--no-restore" )
531
540
. Append ( "--no-build" )
532
541
} ;
533
- if ( target != Release )
542
+ if ( target == PullRequest )
534
543
{
535
544
settings . Framework = LatestFramework ; // .NET 9 SDK only
536
545
}
@@ -551,7 +560,7 @@ Task("RunIntegrationTests")
551
560
. Append ( "--no-restore" )
552
561
. Append ( "--no-build" )
553
562
} ;
554
- if ( target != Release )
563
+ if ( target == PullRequest )
555
564
{
556
565
settings . Framework = LatestFramework ; // .NET 9 SDK only
557
566
}
@@ -602,7 +611,7 @@ Task("PublishGitHubRelease")
602
611
. IsDependentOn ( "CreateArtifacts" )
603
612
. Does ( ( ) =>
604
613
{
605
- if ( ! IsRunningOnCircleCI ( ) ) return ;
614
+ if ( ! IsRunningInCICD ( ) ) return ;
606
615
607
616
dynamic release = CreateGitHubRelease ( ) ;
608
617
var path = packagesDir . ToString ( ) + @"/**/*" ;
@@ -619,9 +628,9 @@ Task("EnsureStableReleaseRequirements")
619
628
{
620
629
Information ( "Check if stable release..." ) ;
621
630
622
- if ( ! IsRunningOnCircleCI ( ) )
631
+ if ( ! IsRunningInCICD ( ) )
623
632
{
624
- throw new Exception ( "Stable release should happen via circleci " ) ;
633
+ throw new Exception ( "Stable release should happen via CI/CD " ) ;
625
634
}
626
635
627
636
Information ( "Release is stable..." ) ;
@@ -636,7 +645,7 @@ Task("DownloadGitHubReleaseArtifacts")
636
645
System . Threading . Thread . Sleep ( 5000 ) ;
637
646
EnsureDirectoryExists ( packagesDir ) ;
638
647
639
- var releaseUrl = "https://api.github.com/repos/ThreeMammals/ocelot/releases/tags/" + versioning . NuGetVersion ;
648
+ var releaseUrl = "https://api.github.com/repos/ThreeMammals/ocelot/releases/tags/" + versioning . SemVer ;
640
649
var releaseInfo = await GetResourceAsync ( releaseUrl ) ;
641
650
var assets_url = Newtonsoft . Json . Linq . JObject . Parse ( releaseInfo )
642
651
. Value < string > ( "assets_url" ) ;
@@ -665,7 +674,7 @@ Task("PublishToNuget")
665
674
return ;
666
675
}
667
676
668
- if ( IsRunningOnCircleCI ( ) )
677
+ if ( IsRunningInCICD ( ) )
669
678
{
670
679
// stable releases
671
680
var nugetFeedStableKey = EnvironmentVariable ( "OCELOT_NUGET_API_KEY_3Mammals" ) ;
@@ -762,7 +771,7 @@ private void SetupGitHubClient(System.Net.Http.HttpClient client)
762
771
763
772
private dynamic CreateGitHubRelease( )
764
773
{
765
- var json = $ "{{ \" tag_name\" : \" { versioning . NuGetVersion } \" , \" target_commitish\" : \" main\" , \" name\" : \" { versioning . NuGetVersion } \" , \" body\" : \" { ReleaseNotesAsJson ( ) } \" , \" draft\" : true, \" prerelease\" : true, \" generate_release_notes\" : false }}";
774
+ var json = $ "{{ \" tag_name\" : \" { versioning . SemVer } \" , \" target_commitish\" : \" main\" , \" name\" : \" { versioning . SemVer } \" , \" body\" : \" { ReleaseNotesAsJson ( ) } \" , \" draft\" : true, \" prerelease\" : true, \" generate_release_notes\" : false }}";
766
775
var content = new System. Net . Http . StringContent ( json , System . Text . Encoding . UTF8 , "application/json" ) ;
767
776
768
777
using ( var client = new System . Net . Http . HttpClient ( ) )
@@ -816,7 +825,7 @@ private void CompleteGitHubRelease(dynamic release)
816
825
{
817
826
int releaseId = release. id ;
818
827
string url = release . url . ToString ( ) ;
819
- var json = $ "{{ \" tag_name\" : \" { versioning . NuGetVersion } \" , \" target_commitish\" : \" main\" , \" name\" : \" { versioning . NuGetVersion } \" , \" body\" : \" { ReleaseNotesAsJson ( ) } \" , \" draft\" : false, \" prerelease\" : false }}";
828
+ var json = $ "{{ \" tag_name\" : \" { versioning . SemVer } \" , \" target_commitish\" : \" main\" , \" name\" : \" { versioning . SemVer } \" , \" body\" : \" { ReleaseNotesAsJson ( ) } \" , \" draft\" : false, \" prerelease\" : false }}";
820
829
var request = new System. Net . Http . HttpRequestMessage ( new System . Net . Http . HttpMethod ( "Patch" ) , url ) ; // $"https://api.github.com/repos/ThreeMammals/Ocelot/releases/{releaseId}");
821
830
request. Content = new System . Net . Http . StringContent ( json , System . Text . Encoding . UTF8 , "application/json" ) ;
822
831
@@ -856,14 +865,34 @@ private async Task<string> GetResourceAsync(string url)
856
865
}
857
866
}
858
867
868
+ private bool IsRunningInCICD( )
869
+ => IsRunningOnCircleCI( ) || IsRunningInGitHubActions ( ) ;
859
870
private bool IsRunningOnCircleCI ( )
860
- {
861
- return ! string . IsNullOrWhiteSpace ( Environment . GetEnvironmentVariable ( "CIRCLECI" ) ) ;
862
- }
871
+ => ! string . IsNullOrWhiteSpace ( Environment . GetEnvironmentVariable ( "CIRCLECI" ) ) ;
872
+ private bool IsRunningInGitHubActions ( )
873
+ => Environment . GetEnvironmentVariable ( "GITHUB_ACTIONS" ) == "true" ;
863
874
864
875
private bool IsMainOrDevelop ( )
865
876
{
866
- var env = Environment. GetEnvironmentVariable ( "CIRCLE_BRANCH" ) . ToLower ( ) ;
867
-
868
- return env == "main" || env == "develop" ;
877
+ var br = GetBranchName( ) . ToLower( ) ;
878
+ return br = = "main" || br == "develop" ;
879
+ }
880
+ private string GetBranchName ( )
881
+ {
882
+ if ( IsRunningOnCircleCI ( ) )
883
+ {
884
+ return Environment. GetEnvironmentVariable( "CIRCLE_BRANCH");
885
+ }
886
+ else if ( IsRunningInGitHubActions ( ) )
887
+ {
888
+ return GetGitHubBranchName ( ) ;
889
+ }
890
+ return versioning . BranchName ;
891
+ }
892
+ private string GetGitHubBranchName ( )
893
+ {
894
+ string githubRef = Environment . GetEnvironmentVariable ( "GITHUB_REF") ;
895
+ return ( ! string . IsNullOrEmpty ( githubRef ) && githubRef . StartsWith ( "refs/heads/" ) )
896
+ ? githubRef . Substring ( "refs/heads/" . Length )
897
+ : "Unknown Branch" ;
869
898
}
0 commit comments