22#load "components.cake"
33#load "common.cake"
44#load "custom_externals_download.cake"
5+ #load "firebase_release.cake"
56
67var TARGET = Argument ( "t" , Argument ( "target" , "ci" ) ) ;
78var NAMES = Argument ( "names" , "" ) ;
@@ -52,6 +53,40 @@ void BuildCake (string target)
5253 CakeExecuteScript ( "./build.cake" , cakeSettings ) ;
5354}
5455
56+ void AddArtifactInDependencyOrder ( List < Artifact > orderedArtifacts , HashSet < string > visitingArtifacts , HashSet < string > visitedArtifacts , Artifact artifact )
57+ {
58+ if ( artifact == null || artifact . Ignore )
59+ return ;
60+
61+ if ( visitedArtifacts . Contains ( artifact . Id ) )
62+ return ;
63+
64+ if ( visitingArtifacts . Contains ( artifact . Id ) )
65+ throw new Exception ( $ "Dependency cycle detected while preparing { artifact . Id } .") ;
66+
67+ visitingArtifacts . Add ( artifact . Id ) ;
68+
69+ if ( artifact . Dependencies != null )
70+ foreach ( var dependency in artifact . Dependencies )
71+ AddArtifactInDependencyOrder ( orderedArtifacts , visitingArtifacts , visitedArtifacts , dependency ) ;
72+
73+ visitingArtifacts . Remove ( artifact . Id ) ;
74+ visitedArtifacts . Add ( artifact . Id ) ;
75+ orderedArtifacts . Add ( artifact ) ;
76+ }
77+
78+ List < Artifact > OrderArtifactsByDependencies ( IEnumerable < Artifact > artifacts )
79+ {
80+ var orderedArtifacts = new List < Artifact > ( ) ;
81+ var visitingArtifacts = new HashSet < string > ( ) ;
82+ var visitedArtifacts = new HashSet < string > ( ) ;
83+
84+ foreach ( var artifact in artifacts )
85+ AddArtifactInDependencyOrder ( orderedArtifacts , visitingArtifacts , visitedArtifacts , artifact ) ;
86+
87+ return orderedArtifacts ;
88+ }
89+
5590Setup ( context =>
5691{
5792 IS_LOCAL_BUILD = string . IsNullOrWhiteSpace ( EnvironmentVariable ( "AGENT_ID" ) ) ;
@@ -79,12 +114,12 @@ Task("prepare-artifacts")
79114 SetArtifactsExtraPodfileLines ( ) ;
80115 SetArtifactsSamples ( ) ;
81116
82- var orderedArtifactsForBuild = new List < Artifact > ( ) ;
117+ var selectedArtifactsForBuild = new List < Artifact > ( ) ;
83118 var orderedArtifactsForSamples = new List < Artifact > ( ) ;
84119
85120 if ( string . IsNullOrWhiteSpace ( NAMES ) ) {
86121 var artifacts = ARTIFACTS . Values . Where ( a => ! a . Ignore ) ;
87- orderedArtifactsForBuild . AddRange ( artifacts ) ;
122+ selectedArtifactsForBuild . AddRange ( artifacts ) ;
88123 orderedArtifactsForSamples . AddRange ( artifacts ) ;
89124 } else {
90125 var names = NAMES . Split ( ',' ) ;
@@ -95,17 +130,15 @@ Task("prepare-artifacts")
95130 if ( artifact . Ignore )
96131 continue ;
97132
98- orderedArtifactsForBuild . Add ( artifact ) ;
99- AddArtifactDependencies ( orderedArtifactsForBuild , artifact . Dependencies ) ;
133+ selectedArtifactsForBuild . Add ( artifact ) ;
100134 orderedArtifactsForSamples . Add ( artifact ) ;
101135 }
102136
103- orderedArtifactsForBuild = orderedArtifactsForBuild . Distinct ( ) . ToList ( ) ;
137+ selectedArtifactsForBuild = selectedArtifactsForBuild . Distinct ( ) . ToList ( ) ;
104138 orderedArtifactsForSamples = orderedArtifactsForSamples . Distinct ( ) . ToList ( ) ;
105139 }
106140
107- orderedArtifactsForBuild . Sort ( ( f , s ) => s . BuildOrder . CompareTo ( f . BuildOrder ) ) ;
108- orderedArtifactsForSamples . Sort ( ( f , s ) => s . BuildOrder . CompareTo ( f . BuildOrder ) ) ;
141+ var orderedArtifactsForBuild = OrderArtifactsByDependencies ( selectedArtifactsForBuild ) ;
109142 ARTIFACTS_TO_BUILD . AddRange ( orderedArtifactsForBuild ) ;
110143
111144 Information ( "Build order:" ) ;
@@ -213,11 +246,23 @@ Task ("samples")
213246} ) ;
214247
215248Task ( "nuget" )
216- . IsDependentOn ( "libs" )
249+ . IsDependentOn ( "externals" )
250+ . IsDependentOn ( "ci-setup" )
217251 . Does ( ( ) =>
218252{
219253 EnsureDirectoryExists ( "./output/" ) ;
220254
255+ var outputPath = MakeAbsolute ( ( DirectoryPath ) "./output/" ) ;
256+ var dotNetBuildMsBuildSettings = new DotNetMSBuildSettings ( ) ;
257+ dotNetBuildMsBuildSettings . Properties [ "RestoreAdditionalProjectSources" ] = new [ ] { outputPath . FullPath } ;
258+
259+ var dotNetBuildSettings = new DotNetBuildSettings {
260+ Configuration = "Release" ,
261+ Verbosity = DotNetVerbosity . Diagnostic ,
262+ NoRestore = false ,
263+ MSBuildSettings = dotNetBuildMsBuildSettings
264+ } ;
265+
221266 var dotNetPackSettings = new DotNetPackSettings {
222267 Configuration = "Release" ,
223268 NoRestore = true ,
@@ -229,6 +274,8 @@ Task ("nuget")
229274 // Pack each artifact's csproj directly
230275 foreach ( var artifact in ARTIFACTS_TO_BUILD ) {
231276 var csprojPath = $ "./source/{ artifact . ComponentGroup } /{ artifact . CsprojName } /{ artifact . CsprojName } .csproj";
277+ Information ( $ "Building for pack: { csprojPath } ") ;
278+ DotNetBuild ( csprojPath , dotNetBuildSettings ) ;
232279 Information ( $ "Packing: { csprojPath } ") ;
233280 DotNetPack ( csprojPath , dotNetPackSettings ) ;
234281 }
@@ -259,7 +306,9 @@ Task ("ci")
259306
260307Teardown ( context =>
261308{
262- var artifacts = GetFiles ( "./output/**/*" ) ;
309+ var artifacts = GetFiles ( "./output/**/*" )
310+ . Where ( path => ! path . FullPath . Contains ( "/output/firebase-release-check/" ) )
311+ . ToList ( ) ;
263312
264313 if ( artifacts ? . Count ( ) <= 0 )
265314 return ;
0 commit comments