2019-07-13 04:07:31 +03:00
|
|
|
#tool nuget:?package=XamarinComponent&version=1.1.0.65
|
|
|
|
|
|
|
|
#addin nuget:?package=Cake.XCode&version=4.0.0
|
2018-08-14 07:32:24 +03:00
|
|
|
#addin nuget:?package=Cake.Xamarin.Build&version=4.0.1
|
2019-07-13 04:07:31 +03:00
|
|
|
#addin nuget:?package=Cake.Xamarin&version=3.0.0
|
2018-08-14 07:32:24 +03:00
|
|
|
#addin nuget:?package=Cake.FileHelpers&version=3.0.0
|
2016-04-20 21:40:45 +03:00
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
#load "poco.cake"
|
|
|
|
#load "components.cake"
|
|
|
|
#load "common.cake"
|
|
|
|
#load "custom_externals_download.cake"
|
|
|
|
|
|
|
|
var TARGET = Argument ("t", Argument ("target", "build"));
|
|
|
|
var SDKS = Argument ("sdks", "");
|
|
|
|
|
|
|
|
var SOLUTION_PATH = "./Xamarin.Google.sln";
|
|
|
|
|
|
|
|
// Artifacts that need to be built from pods or be copied from pods
|
|
|
|
var ARTIFACTS_TO_BUILD = new List<Artifact> ();
|
|
|
|
|
|
|
|
var SOURCES_TARGETS = new List<string> ();
|
|
|
|
var SAMPLES_TARGETS = new List<string> {
|
|
|
|
@"Firebase\\AdMobSample",
|
|
|
|
@"Firebase\\AnalyticsSample",
|
|
|
|
@"Firebase\\AuthSample",
|
|
|
|
@"Firebase\\CloudFirestoreSample",
|
|
|
|
@"Firebase\\CloudMessagingSample",
|
|
|
|
@"Firebase\\CrashlyticsSample",
|
|
|
|
@"Firebase\\DatabaseSample",
|
|
|
|
@"Firebase\\DynamicLinksSample",
|
|
|
|
@"Firebase\\InvitesSample",
|
|
|
|
@"Firebase\\ModelInterpreterSample",
|
|
|
|
@"Firebase\\MLKitSample",
|
|
|
|
@"Firebase\\PerformanceMonitoringSample",
|
|
|
|
@"Firebase\\RemoteConfigSample",
|
|
|
|
@"Firebase\\StorageSample",
|
|
|
|
@"Google\\CuteAnimalsiOS",
|
|
|
|
@"Google\\AppIndexingSample",
|
|
|
|
@"Google\\CastSample",
|
|
|
|
@"Google\\InstanceIDSample",
|
|
|
|
@"Google\\GoogleMapsAdvSample",
|
|
|
|
@"Google\\GoogleMapsSample",
|
|
|
|
@"Google\\MobileAdsExample",
|
|
|
|
@"Google\\GooglePlacesSample",
|
|
|
|
@"Google\\SignInExample",
|
|
|
|
@"Google\\TagManagerSample"
|
|
|
|
};
|
|
|
|
|
|
|
|
// Podfile basic structure
|
|
|
|
var PODFILE_BEGIN = new [] {
|
|
|
|
"platform :ios, '{0}'",
|
|
|
|
"install! 'cocoapods', :integrate_targets => false",
|
|
|
|
"use_frameworks!",
|
|
|
|
"target 'XamarinGoogle' do",
|
|
|
|
};
|
|
|
|
var PODFILE_END = new [] {
|
|
|
|
"end",
|
|
|
|
};
|
2016-04-20 21:40:45 +03:00
|
|
|
|
|
|
|
FilePath GetCakeToolPath ()
|
|
|
|
{
|
|
|
|
var possibleExe = GetFiles ("./**/tools/Cake/Cake.exe").FirstOrDefault ();
|
|
|
|
if (possibleExe != null)
|
|
|
|
return possibleExe;
|
|
|
|
|
|
|
|
var p = System.Diagnostics.Process.GetCurrentProcess ();
|
|
|
|
return new FilePath (p.Modules[0].FileName);
|
|
|
|
}
|
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
void BuildCake (string target)
|
2016-04-20 21:40:45 +03:00
|
|
|
{
|
2019-07-13 04:07:31 +03:00
|
|
|
var cakeSettings = new CakeSettings {
|
|
|
|
ToolPath = GetCakeToolPath (),
|
|
|
|
Arguments = new Dictionary<string, string> { { "target", target }, { "sdks", SDKS } },
|
|
|
|
Verbosity = Verbosity.Diagnostic
|
|
|
|
};
|
2016-04-20 21:40:45 +03:00
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
// Run the script from the subfolder
|
|
|
|
CakeExecuteScript ("./build.cake", cakeSettings);
|
2016-04-20 21:40:45 +03:00
|
|
|
}
|
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
// From Cake.Xamarin.Build, dumps out versions of things
|
|
|
|
LogSystemInfo ();
|
|
|
|
|
|
|
|
Task("build")
|
|
|
|
.Does(() =>
|
2016-04-20 21:40:45 +03:00
|
|
|
{
|
2019-07-13 04:07:31 +03:00
|
|
|
BuildCake ("nuget");
|
|
|
|
BuildCake ("samples");
|
|
|
|
});
|
2016-04-20 21:40:45 +03:00
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
// Prepares the artifacts to be built.
|
|
|
|
// From CI will always build everything but, locally you can customize what
|
|
|
|
// you build, just to save some time when testing locally.
|
|
|
|
Task("prepare-artifacts")
|
|
|
|
.IsDependeeOf("externals")
|
|
|
|
.Does(() =>
|
|
|
|
{
|
|
|
|
SetArtifactsDependencies ();
|
|
|
|
SetArtifactsPodSpecs ();
|
2016-04-20 21:40:45 +03:00
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
var orderedArtifactsForBuild = new List<Artifact> ();
|
2016-04-20 21:40:45 +03:00
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
if (string.IsNullOrWhiteSpace (SDKS) || TARGET == "samples") {
|
|
|
|
orderedArtifactsForBuild.AddRange (ARTIFACTS.Values);
|
2016-04-20 21:40:45 +03:00
|
|
|
} else {
|
2019-07-13 04:07:31 +03:00
|
|
|
var sdks = SDKS.Split (',');
|
|
|
|
foreach (var sdk in sdks) {
|
|
|
|
if (!(ARTIFACTS.ContainsKey (sdk) && ARTIFACTS [sdk] is Artifact artifact))
|
|
|
|
throw new Exception($"The {sdk} component does not exist.");
|
2018-03-19 23:00:48 +03:00
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
orderedArtifactsForBuild.Add (artifact);
|
|
|
|
AddArtifactDependencies (orderedArtifactsForBuild, artifact.Dependencies);
|
2018-03-19 23:00:48 +03:00
|
|
|
}
|
2016-04-20 21:40:45 +03:00
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
orderedArtifactsForBuild = orderedArtifactsForBuild.Distinct ().ToList ();
|
2016-04-20 21:40:45 +03:00
|
|
|
}
|
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
orderedArtifactsForBuild.Sort ((f, s) => s.BuildOrder.CompareTo (f.BuildOrder));
|
|
|
|
ARTIFACTS_TO_BUILD.AddRange (orderedArtifactsForBuild);
|
2016-04-20 21:40:45 +03:00
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
Information ("Build order:");
|
2016-04-20 21:40:45 +03:00
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
foreach (var artifact in ARTIFACTS_TO_BUILD) {
|
|
|
|
SOURCES_TARGETS.Add($@"{artifact.ComponentGroup}\\{artifact.CsprojName.Replace ('.', '_')}");
|
|
|
|
Information (artifact.Id);
|
|
|
|
}
|
|
|
|
});
|
2016-04-20 21:40:45 +03:00
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
Task ("externals")
|
|
|
|
.WithCriteria (!DirectoryExists ("./externals/"))
|
|
|
|
.Does (() =>
|
2016-04-20 21:40:45 +03:00
|
|
|
{
|
2019-07-13 04:07:31 +03:00
|
|
|
EnsureDirectoryExists ("./externals/");
|
2016-04-20 21:40:45 +03:00
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
Information ("////////////////////////////////////////");
|
|
|
|
Information ("// Pods Repo Update Started //");
|
|
|
|
Information ("////////////////////////////////////////");
|
2016-04-20 21:40:45 +03:00
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
Information ("\nUpdating Cocoapods repo...");
|
|
|
|
CocoaPodRepoUpdate ();
|
2016-04-20 21:40:45 +03:00
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
Information ("////////////////////////////////////////");
|
|
|
|
Information ("// Pods Repo Update Ended //");
|
|
|
|
Information ("////////////////////////////////////////");
|
2016-04-20 21:40:45 +03:00
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
foreach (var artifact in ARTIFACTS_TO_BUILD) {
|
|
|
|
UpdateVersionInCsproj (artifact);
|
|
|
|
CreateAndInstallPodfile (artifact);
|
|
|
|
BuildSdkOnPodfile (artifact);
|
2016-04-20 21:40:45 +03:00
|
|
|
}
|
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
// Call here custom methods created at custom_externals_download.cake file
|
|
|
|
// to download frameworks and/or bundles for the artifact
|
|
|
|
});
|
2016-04-20 21:40:45 +03:00
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
Task ("libs")
|
|
|
|
.IsDependentOn("externals")
|
|
|
|
.Does(() =>
|
|
|
|
{
|
|
|
|
CleanVisualStudioSolution ();
|
2016-04-20 21:40:45 +03:00
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
var targets = $@"source\\{string.Join (@";source\\", SOURCES_TARGETS)}";
|
2016-04-20 21:40:45 +03:00
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
MSBuild(SOLUTION_PATH, c => {
|
|
|
|
c.Configuration = "Release";
|
|
|
|
c.Restore = true;
|
|
|
|
c.MaxCpuCount = 0;
|
|
|
|
c.Targets.Clear();
|
|
|
|
c.Targets.Add(targets);
|
|
|
|
});
|
|
|
|
});
|
2018-03-19 23:00:48 +03:00
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
Task ("samples")
|
|
|
|
.IsDependentOn("libs")
|
|
|
|
.Does(() =>
|
|
|
|
{
|
|
|
|
var targets = $@"samples\\{string.Join (@";samples\\", SAMPLES_TARGETS)}";
|
|
|
|
|
|
|
|
MSBuild(SOLUTION_PATH, c => {
|
|
|
|
c.Configuration = "Release";
|
|
|
|
c.Restore = true;
|
|
|
|
c.MaxCpuCount = 0;
|
|
|
|
c.Targets.Clear();
|
|
|
|
c.Targets.Add(targets);
|
|
|
|
});
|
2016-04-20 21:40:45 +03:00
|
|
|
});
|
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
Task ("nuget")
|
|
|
|
.IsDependentOn("libs")
|
|
|
|
.Does(() =>
|
2018-12-05 23:49:27 +03:00
|
|
|
{
|
2019-07-13 04:07:31 +03:00
|
|
|
EnsureDirectoryExists("./output");
|
|
|
|
|
|
|
|
var targets = $@"source\\{string.Join (@":Pack;source\\", SOURCES_TARGETS)}:Pack";
|
|
|
|
|
|
|
|
MSBuild(SOLUTION_PATH, c => {
|
|
|
|
c.Configuration = "Release";
|
|
|
|
c.Restore = true;
|
|
|
|
c.MaxCpuCount = 0;
|
|
|
|
c.Targets.Clear();
|
|
|
|
c.Targets.Add(targets);
|
|
|
|
c.Properties.Add("PackageOutputPath", new [] { "../../../output/" });
|
|
|
|
});
|
|
|
|
});
|
2018-12-05 23:49:27 +03:00
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
Task ("clean")
|
|
|
|
.Does (() =>
|
|
|
|
{
|
|
|
|
CleanVisualStudioSolution ();
|
2018-12-05 23:49:27 +03:00
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
var deleteDirectorySettings = new DeleteDirectorySettings {
|
|
|
|
Recursive = true,
|
|
|
|
Force = true
|
|
|
|
};
|
2018-12-05 23:49:27 +03:00
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
if (DirectoryExists ("./externals/"))
|
|
|
|
DeleteDirectory ("./externals", deleteDirectorySettings);
|
2018-12-05 23:49:27 +03:00
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
if (DirectoryExists ("./output/"))
|
|
|
|
DeleteDirectory ("./output", deleteDirectorySettings);
|
|
|
|
});
|
2018-12-05 23:49:27 +03:00
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
Teardown (context =>
|
|
|
|
{
|
|
|
|
var artifacts = GetFiles ("./output/**/*");
|
2018-12-05 23:49:27 +03:00
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
if (artifacts?.Count () <= 0)
|
|
|
|
return;
|
2018-12-05 23:49:27 +03:00
|
|
|
|
2019-07-13 04:07:31 +03:00
|
|
|
Information ($"Found Artifacts ({artifacts.Count ()})");
|
|
|
|
foreach (var a in artifacts)
|
|
|
|
Information ("{0}", a);
|
2018-12-05 23:49:27 +03:00
|
|
|
});
|
|
|
|
|
2016-04-20 21:40:45 +03:00
|
|
|
RunTarget (TARGET);
|