Skip to content

Commit 86df19a

Browse files
[codex] Add Firebase release updater tooling (#181)
* Add Firebase release updater tooling * Use peeled Firebase tag SHA for release tooling
1 parent e89bd9a commit 86df19a

5 files changed

Lines changed: 1053 additions & 23 deletions

File tree

build.cake

Lines changed: 58 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#load "components.cake"
33
#load "common.cake"
44
#load "custom_externals_download.cake"
5+
#load "firebase_release.cake"
56

67
var TARGET = Argument ("t", Argument ("target", "ci"));
78
var 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+
5590
Setup (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

215248
Task ("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

260307
Teardown (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

Comments
 (0)