The build script now matches with the new structure
This commit is contained in:
Родитель
238e6ad123
Коммит
68277c6987
529
build.cake
529
build.cake
|
@ -1,62 +1,65 @@
|
|||
#addin nuget:?package=Cake.Xamarin.Build&version=4.0.1
|
||||
#addin nuget:?package=Cake.FileHelpers&version=3.0.0
|
||||
#addin nuget:?package=Cake.Yaml&version=2.1.0
|
||||
#addin nuget:?package=Cake.Json&version=3.0.1
|
||||
#tool nuget:?package=XamarinComponent&version=1.1.0.65
|
||||
|
||||
#addin nuget:?package=Cake.XCode&version=4.0.0
|
||||
#addin nuget:?package=Newtonsoft.Json&version=9.0.1
|
||||
#addin nuget:?package=YamlDotNet&version=4.2.1
|
||||
#addin nuget:?package=Xamarin.Nuget.Validator&version=1.1.1
|
||||
#addin nuget:?package=Cake.Xamarin.Build&version=4.0.1
|
||||
#addin nuget:?package=Cake.Xamarin&version=3.0.0
|
||||
#addin nuget:?package=Cake.FileHelpers&version=3.0.0
|
||||
|
||||
var TARGET = Argument ("target", Argument ("t", Argument ("Target", "build")));
|
||||
#load "poco.cake"
|
||||
#load "components.cake"
|
||||
#load "common.cake"
|
||||
#load "custom_externals_download.cake"
|
||||
|
||||
var GIT_PREVIOUS_COMMIT = EnvironmentVariable ("GIT_PREVIOUS_SUCCESSFUL_COMMIT") ?? Argument ("gitpreviouscommit", "");
|
||||
var GIT_COMMIT = EnvironmentVariable ("GIT_COMMIT") ?? EnvironmentVariable ("GIT_CLONE_COMMIT_HASH") ?? Argument("gitcommit", "");
|
||||
var GIT_BRANCH = EnvironmentVariable ("GIT_BRANCH") ?? EnvironmentVariable ("BITRISE_GIT_BRANCH") ?? "origin/master";
|
||||
var GIT_PATH = EnvironmentVariable ("GIT_EXE") ?? (IsRunningOnWindows () ? "C:\\Program Files (x86)\\Git\\bin\\git.exe" : "git");
|
||||
var TARGET = Argument ("t", Argument ("target", "build"));
|
||||
var SDKS = Argument ("sdks", "");
|
||||
|
||||
var BUILD_GROUPS = DeserializeYamlFromFile<List<BuildGroup>> ("./manifest.yaml");
|
||||
var BUILD_NAMES = Argument ("names", Argument ("name", Argument ("n", "")))
|
||||
.Split (new [] { ",", ";" }, StringSplitOptions.RemoveEmptyEntries);
|
||||
var BUILD_TARGETS = Argument ("targets", Argument ("build-targets", Argument ("build-targets", Argument ("build", ""))))
|
||||
.Split (new [] { ",", ";" }, StringSplitOptions.RemoveEmptyEntries);
|
||||
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 FORCE_BUILD = Argument ("force", Argument ("forcebuild", Argument ("force-build", "false"))).ToLower ().Equals ("true");
|
||||
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"
|
||||
};
|
||||
|
||||
var POD_REPO_UPDATE = Argument ("update", Argument ("repo-update", Argument ("pod-repo-update", false)));
|
||||
|
||||
// Print out environment variables to console
|
||||
var ENV_VARS = EnvironmentVariables ();
|
||||
Information ("Environment Variables: {0}", "");
|
||||
foreach (var ev in ENV_VARS)
|
||||
Information ("\t{0} = {1}", ev.Key, ev.Value);
|
||||
|
||||
CakeStealer.CakeContext = Context;
|
||||
|
||||
// From Cake.Xamarin.Build, dumps out versions of things
|
||||
LogSystemInfo ();
|
||||
|
||||
// Print out git commit info
|
||||
Information ("Git Path: {0}", GIT_PATH);
|
||||
Information ("Git Previous Commit: {0}", GIT_PREVIOUS_COMMIT);
|
||||
Information ("Git Commit: {0}", GIT_COMMIT);
|
||||
Information ("Force Build: {0}", FORCE_BUILD);
|
||||
|
||||
public enum PodRepoUpdate {
|
||||
NotRequired,
|
||||
Required,
|
||||
Forced
|
||||
}
|
||||
|
||||
public class CakeStealer
|
||||
{
|
||||
static public ICakeContext CakeContext { get; set; }
|
||||
}
|
||||
// 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",
|
||||
};
|
||||
|
||||
FilePath GetCakeToolPath ()
|
||||
{
|
||||
var possibleExe = GetFiles ("./**/tools/Cake/Cake.exe").FirstOrDefault ();
|
||||
|
||||
if (possibleExe != null)
|
||||
return possibleExe;
|
||||
|
||||
|
@ -64,294 +67,170 @@ FilePath GetCakeToolPath ()
|
|||
return new FilePath (p.Modules[0].FileName);
|
||||
}
|
||||
|
||||
void BuildSingleGroup (BuildGroup buildGroup)
|
||||
void BuildCake (string target)
|
||||
{
|
||||
foreach (var target in buildGroup.BuildTargets) {
|
||||
// TODO: Actually build this thing
|
||||
var cakeSettings = new CakeSettings {
|
||||
ToolPath = GetCakeToolPath (),
|
||||
Arguments = new Dictionary<string, string> { { "target", target } },
|
||||
Verbosity = Verbosity.Diagnostic
|
||||
};
|
||||
|
||||
// Run the script from the subfolder
|
||||
CakeExecuteScript (buildGroup.BuildScript, cakeSettings);
|
||||
}
|
||||
}
|
||||
|
||||
IEnumerable<string> ExecuteProcess (string file, string args)
|
||||
{
|
||||
IEnumerable<string> stdout;
|
||||
StartProcess (file, new ProcessSettings {
|
||||
Arguments = args,
|
||||
RedirectStandardOutput = true },
|
||||
out stdout);
|
||||
|
||||
return stdout;
|
||||
}
|
||||
|
||||
void BuildGroups (List<BuildGroup> buildGroups, List<string> names, List<string> buildTargets, string gitPath, string gitBranch, string gitPreviousCommit, string gitCommit, bool forceBuild, PodRepoUpdate podRepoUpdate)
|
||||
{
|
||||
bool runningOnMac = IsRunningOnUnix ();
|
||||
bool runningOnWin = IsRunningOnWindows ();
|
||||
|
||||
var groupsToBuild = new List<BuildGroup> ();
|
||||
|
||||
if (!forceBuild) {
|
||||
// If neither commit hash was found, we can't detect changes
|
||||
if (string.IsNullOrWhiteSpace (gitPreviousCommit) && string.IsNullOrWhiteSpace (gitCommit))
|
||||
throw new CakeException ("GIT Commit/Previous Commit hashes were invalid, can't find affected files");
|
||||
|
||||
// Get all the changed files in this commit
|
||||
IEnumerable<string> changedFiles = new List<string> ();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace (gitPreviousCommit)) {
|
||||
// We have both commit hashes (previous and current) so do a diff on them
|
||||
changedFiles = ExecuteProcess (gitPath, "--no-pager diff --name-only " + gitPreviousCommit + " " + gitCommit);
|
||||
|
||||
// // TODO: This should be fixed in cake 0.7.0, right now it may hang on output
|
||||
// StartProcess (gitPath, new ProcessSettings {
|
||||
// Arguments = "--no-pager diff --name-only " + gitPreviousCommit + " " + gitCommit,
|
||||
// RedirectStandardOutput = true,
|
||||
// }, out changedFiles);
|
||||
} else {
|
||||
// We only have the current commit hash, so list files for this commit only
|
||||
changedFiles = ExecuteProcess (gitPath, "--no-pager show --pretty=\"format:\" --name-only " + gitCommit);
|
||||
|
||||
// // TODO: This should be fixed in cake 0.7.0, right now it may hang on output
|
||||
// StartProcess (gitPath, new ProcessSettings {
|
||||
// Arguments = "--no-pager show --pretty=\"format:\" --name-only " + gitCommit,
|
||||
// RedirectStandardOutput = true,
|
||||
// }, out changedFiles);
|
||||
}
|
||||
|
||||
Information ("Changed Files:");
|
||||
foreach (var file in changedFiles) {
|
||||
Information ("\t{0}", file);
|
||||
|
||||
if (podRepoUpdate == PodRepoUpdate.NotRequired && file.EndsWith ("Podfile"))
|
||||
podRepoUpdate = PodRepoUpdate.Required;
|
||||
|
||||
foreach (var buildGroup in buildGroups) {
|
||||
// If ignore triggers for the platform this is running on, do not add the group even if the trigger is matched
|
||||
if ((buildGroup.IgnoreTriggersOnMac && runningOnMac) || (buildGroup.IgnoreTriggersOnWindows && runningOnWin))
|
||||
continue;
|
||||
|
||||
foreach (var triggerPath in buildGroup.TriggerPaths) {
|
||||
if (file.StartsWith (triggerPath.ToString ())) {
|
||||
Information ("\t\tMatched: {0}", triggerPath);
|
||||
if (!groupsToBuild.Contains (buildGroup))
|
||||
groupsToBuild.Add (buildGroup);
|
||||
break;
|
||||
}
|
||||
}
|
||||
foreach (var triggerFile in buildGroup.TriggerFiles) {
|
||||
if (file.Equals (triggerFile.ToString ())) {
|
||||
Information ("\t\tMatched: {0}", triggerFile);
|
||||
if (!groupsToBuild.Contains (buildGroup))
|
||||
groupsToBuild.Add (buildGroup);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
podRepoUpdate = PodRepoUpdate.Forced;
|
||||
Information ("Groups To Build: {0}", string.Join (", ", buildGroups));
|
||||
groupsToBuild.AddRange (buildGroups);
|
||||
}
|
||||
|
||||
// If a filter was specified use it
|
||||
if (names != null && names.Any (n => !string.IsNullOrWhiteSpace (n))) {
|
||||
Information ("Only building groups: {0}", string.Join (",", names));
|
||||
groupsToBuild = groupsToBuild.Where (bg => names.Any (n => n.ToLower ().Trim () == bg.Name.ToLower ().Trim ())).ToList ();
|
||||
}
|
||||
|
||||
if (groupsToBuild.Any ()) {
|
||||
|
||||
// Logging about the jobs and what platforms they can run on
|
||||
Information ("Running On: Mac? {0} Win? {1}", runningOnMac, runningOnWin);
|
||||
foreach (var gtb in groupsToBuild)
|
||||
Information ("{0} Build on: Mac? {1} Win? {2}", gtb.Name, gtb.BuildOnMac, gtb.BuildOnWindows);
|
||||
|
||||
groupsToBuild = groupsToBuild.Where (bg => (bg.BuildOnMac && runningOnMac) || (bg.BuildOnWindows && runningOnWin)).ToList ();
|
||||
|
||||
|
||||
// Replace build targets with custom specified build targets if any were specified
|
||||
if (buildTargets != null && buildTargets.Any (bt => !string.IsNullOrWhiteSpace (bt))) {
|
||||
foreach (var buildGroup in groupsToBuild) {
|
||||
buildGroup.BuildTargets.Clear ();
|
||||
buildGroup.BuildTargets.AddRange (buildTargets);
|
||||
}
|
||||
}
|
||||
|
||||
if (podRepoUpdate != PodRepoUpdate.NotRequired) {
|
||||
string message = string.Empty;
|
||||
if (podRepoUpdate == PodRepoUpdate.Forced)
|
||||
message = "Forcing Cocoapods repo update...";
|
||||
else
|
||||
message = "A modified Podfile was found...";
|
||||
|
||||
Information ("////////////////////////////////////////");
|
||||
Information ("// Pods Repo Update Started //");
|
||||
Information ("////////////////////////////////////////");
|
||||
|
||||
Information ($"{message}\nUpdating Cocoapods repo...");
|
||||
CocoaPodRepoUpdate ();
|
||||
|
||||
Information ("////////////////////////////////////////");
|
||||
Information ("// Pods Repo Update Ended //");
|
||||
Information ("////////////////////////////////////////");
|
||||
}
|
||||
|
||||
if (!DirectoryExists ("./output/"))
|
||||
CreateDirectory ("./output/");
|
||||
|
||||
// Write out some build information
|
||||
SerializeJsonToFile ("./output/buildinfo.json", new BuildInfo {
|
||||
BuiltGroups = groupsToBuild,
|
||||
ManifestGroups = buildGroups
|
||||
});
|
||||
|
||||
var groupsNameList = string.Join (", ", from gtb in groupsToBuild select gtb.Name);
|
||||
if (groupsNameList.Length > 100)
|
||||
groupsNameList = groupsNameList.Substring (0, 97) + "...";
|
||||
|
||||
var branchInfo = "";
|
||||
if (gitBranch != "origin/master")
|
||||
branchInfo = " (" + gitBranch + ")";
|
||||
|
||||
Information ("[BUILD_DESC]{0}{1}[/BUILD_DESC]", groupsNameList, branchInfo);
|
||||
|
||||
foreach (var buildGroup in groupsToBuild) {
|
||||
Information ("Building {0} with Targets {1}", buildGroup.Name, string.Join (",", buildGroup.BuildTargets));
|
||||
|
||||
BuildSingleGroup (buildGroup);
|
||||
}
|
||||
|
||||
} else {
|
||||
Information ("No changed files affected any of the paths from the manifest.yaml! {0}", "Skipping Builds");
|
||||
}
|
||||
|
||||
var artifacts = GetFiles ("./**/output/**/*");
|
||||
|
||||
Information ("Found Artifacts ({0})", artifacts.Count ());
|
||||
foreach (var a in artifacts)
|
||||
Information ("{0}", a);
|
||||
|
||||
var dlls = GetFiles ("./**/*.dll");
|
||||
|
||||
Information ("Found DLL's ({0})", dlls.Count ());
|
||||
foreach (var d in dlls)
|
||||
Information ("{0}", d);
|
||||
}
|
||||
|
||||
|
||||
public class BuildInfo
|
||||
{
|
||||
public List<BuildGroup> ManifestGroups { get; set; }
|
||||
public List<BuildGroup> BuiltGroups { get; set; }
|
||||
}
|
||||
|
||||
public class BuildGroup
|
||||
{
|
||||
public BuildGroup ()
|
||||
{
|
||||
Name = string.Empty;
|
||||
TriggerPaths = new List<string> ();
|
||||
TriggerFiles = new List<string> ();
|
||||
WindowsBuildTargets = new List<string> ();
|
||||
MacBuildTargets = new List<string> ();
|
||||
IgnoreTriggersOnMac = false;
|
||||
IgnoreTriggersOnWindows = false;
|
||||
}
|
||||
|
||||
public string Name { get; set; }
|
||||
public string BuildScript { get; set; }
|
||||
public List<string> TriggerPaths { get; set; }
|
||||
public List<string> TriggerFiles { get; set; }
|
||||
public bool IgnoreTriggersOnMac { get; set; }
|
||||
public bool IgnoreTriggersOnWindows { get; set; }
|
||||
public List<string> WindowsBuildTargets { get; set; }
|
||||
public List<string> MacBuildTargets { get; set; }
|
||||
|
||||
public bool BuildOnWindows { get { return WindowsBuildTargets != null && WindowsBuildTargets.Any (); } }
|
||||
public bool BuildOnMac { get { return MacBuildTargets != null && MacBuildTargets.Any (); } }
|
||||
|
||||
public List<string> BuildTargets {
|
||||
get {
|
||||
return CakeStealer.CakeContext.IsRunningOnWindows () ? WindowsBuildTargets : MacBuildTargets;
|
||||
}
|
||||
}
|
||||
|
||||
public override string ToString ()
|
||||
{
|
||||
return Name;
|
||||
}
|
||||
}
|
||||
|
||||
Task ("build").Does (() =>
|
||||
{
|
||||
var buildTargets = new List<string> ();
|
||||
if (BUILD_TARGETS != null && BUILD_TARGETS.Any ())
|
||||
buildTargets.AddRange (BUILD_TARGETS);
|
||||
|
||||
if (FileExists ("./output/buildinfo.json") && FORCE_BUILD) {
|
||||
Information ("Found {0} from Upstream project, overriding build group names...", "./output/buildinfo.json");
|
||||
|
||||
GIT_PREVIOUS_COMMIT = "";
|
||||
GIT_COMMIT = "";
|
||||
|
||||
var buildInfo = DeserializeJsonFromFile<BuildInfo> ("./output/buildinfo.json");
|
||||
BUILD_NAMES = (from bg in buildInfo.BuiltGroups select bg.Name).ToArray ();
|
||||
|
||||
Information ("Overriding build group names to: {0}", string.Join (", ", BUILD_NAMES));
|
||||
}
|
||||
|
||||
PodRepoUpdate podRepoUpdate = POD_REPO_UPDATE ? PodRepoUpdate.Forced : PodRepoUpdate.NotRequired;
|
||||
|
||||
BuildGroups (BUILD_GROUPS, BUILD_NAMES.ToList (), buildTargets, GIT_PATH, GIT_BRANCH, GIT_PREVIOUS_COMMIT, GIT_COMMIT, FORCE_BUILD, podRepoUpdate);
|
||||
});
|
||||
|
||||
Task("nuget-validation")
|
||||
.Does(()=>
|
||||
{
|
||||
//setup validation options
|
||||
var options = new Xamarin.Nuget.Validator.NugetValidatorOptions()
|
||||
{
|
||||
Copyright = "© Microsoft Corporation. All rights reserved.",
|
||||
Author = "Microsoft",
|
||||
Owner = "Microsoft",
|
||||
NeedsProjectUrl = true,
|
||||
NeedsLicenseUrl = true,
|
||||
ValidateRequireLicenseAcceptance = true,
|
||||
ValidPackageNamespace = new [] { "Xamarin", "Mono", "SkiaSharp", "HarfBuzzSharp", "mdoc" },
|
||||
var cakeSettings = new CakeSettings {
|
||||
ToolPath = GetCakeToolPath (),
|
||||
Arguments = new Dictionary<string, string> { { "target", target }, { "sdks", SDKS } },
|
||||
Verbosity = Verbosity.Diagnostic
|
||||
};
|
||||
|
||||
var nupkgFiles = GetFiles ("./**/output/*.nupkg");
|
||||
// Run the script from the subfolder
|
||||
CakeExecuteScript ("./build.cake", cakeSettings);
|
||||
}
|
||||
|
||||
Information ("Found ({0}) Nuget's to validate", nupkgFiles.Count ());
|
||||
// From Cake.Xamarin.Build, dumps out versions of things
|
||||
LogSystemInfo ();
|
||||
|
||||
foreach (var nupkgFile in nupkgFiles)
|
||||
{
|
||||
Information ("Verifiying Metadata of {0}", nupkgFile.GetFilename ());
|
||||
Task("build")
|
||||
.Does(() =>
|
||||
{
|
||||
BuildCake ("nuget");
|
||||
BuildCake ("samples");
|
||||
});
|
||||
|
||||
var result = Xamarin.Nuget.Validator.NugetValidator.Validate(MakeAbsolute(nupkgFile).FullPath, options);
|
||||
// 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 ();
|
||||
|
||||
if (!result.Success)
|
||||
{
|
||||
Information ("Metadata validation failed for: {0} \n\n", nupkgFile.GetFilename ());
|
||||
Information (string.Join("\n ", result.ErrorMessages));
|
||||
throw new Exception ($"Invalid Metadata for: {nupkgFile.GetFilename ()}");
|
||||
var orderedArtifactsForBuild = new List<Artifact> ();
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
Information ("Metadata validation passed for: {0}", nupkgFile.GetFilename ());
|
||||
}
|
||||
if (string.IsNullOrWhiteSpace (SDKS) || TARGET == "samples") {
|
||||
orderedArtifactsForBuild.AddRange (ARTIFACTS.Values);
|
||||
} else {
|
||||
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.");
|
||||
|
||||
orderedArtifactsForBuild.Add (artifact);
|
||||
AddArtifactDependencies (orderedArtifactsForBuild, artifact.Dependencies);
|
||||
}
|
||||
|
||||
orderedArtifactsForBuild = orderedArtifactsForBuild.Distinct ().ToList ();
|
||||
}
|
||||
|
||||
orderedArtifactsForBuild.Sort ((f, s) => s.BuildOrder.CompareTo (f.BuildOrder));
|
||||
ARTIFACTS_TO_BUILD.AddRange (orderedArtifactsForBuild);
|
||||
|
||||
Information ("Build order:");
|
||||
|
||||
foreach (var artifact in ARTIFACTS_TO_BUILD) {
|
||||
SOURCES_TARGETS.Add($@"{artifact.ComponentGroup}\\{artifact.CsprojName.Replace ('.', '_')}");
|
||||
Information (artifact.Id);
|
||||
}
|
||||
});
|
||||
|
||||
Task ("externals")
|
||||
.WithCriteria (!DirectoryExists ("./externals/"))
|
||||
.Does (() =>
|
||||
{
|
||||
EnsureDirectoryExists ("./externals/");
|
||||
|
||||
Information ("////////////////////////////////////////");
|
||||
Information ("// Pods Repo Update Started //");
|
||||
Information ("////////////////////////////////////////");
|
||||
|
||||
Information ("\nUpdating Cocoapods repo...");
|
||||
CocoaPodRepoUpdate ();
|
||||
|
||||
Information ("////////////////////////////////////////");
|
||||
Information ("// Pods Repo Update Ended //");
|
||||
Information ("////////////////////////////////////////");
|
||||
|
||||
foreach (var artifact in ARTIFACTS_TO_BUILD) {
|
||||
UpdateVersionInCsproj (artifact);
|
||||
CreateAndInstallPodfile (artifact);
|
||||
BuildSdkOnPodfile (artifact);
|
||||
}
|
||||
|
||||
// Call here custom methods created at custom_externals_download.cake file
|
||||
// to download frameworks and/or bundles for the artifact
|
||||
});
|
||||
|
||||
Task ("libs")
|
||||
.IsDependentOn("externals")
|
||||
.Does(() =>
|
||||
{
|
||||
CleanVisualStudioSolution ();
|
||||
|
||||
var targets = $@"source\\{string.Join (@";source\\", SOURCES_TARGETS)}";
|
||||
|
||||
MSBuild(SOLUTION_PATH, c => {
|
||||
c.Configuration = "Release";
|
||||
c.Restore = true;
|
||||
c.MaxCpuCount = 0;
|
||||
c.Targets.Clear();
|
||||
c.Targets.Add(targets);
|
||||
});
|
||||
});
|
||||
|
||||
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);
|
||||
});
|
||||
});
|
||||
|
||||
Task ("nuget")
|
||||
.IsDependentOn("libs")
|
||||
.Does(() =>
|
||||
{
|
||||
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/" });
|
||||
});
|
||||
});
|
||||
|
||||
Task ("clean")
|
||||
.Does (() =>
|
||||
{
|
||||
CleanVisualStudioSolution ();
|
||||
|
||||
var deleteDirectorySettings = new DeleteDirectorySettings {
|
||||
Recursive = true,
|
||||
Force = true
|
||||
};
|
||||
|
||||
if (DirectoryExists ("./externals/"))
|
||||
DeleteDirectory ("./externals", deleteDirectorySettings);
|
||||
|
||||
if (DirectoryExists ("./output/"))
|
||||
DeleteDirectory ("./output", deleteDirectorySettings);
|
||||
});
|
||||
|
||||
Teardown (context =>
|
||||
{
|
||||
var artifacts = GetFiles ("./output/**/*");
|
||||
|
||||
if (artifacts?.Count () <= 0)
|
||||
return;
|
||||
|
||||
Information ($"Found Artifacts ({artifacts.Count ()})");
|
||||
foreach (var a in artifacts)
|
||||
Information ("{0}", a);
|
||||
});
|
||||
|
||||
RunTarget (TARGET);
|
||||
|
|
243
common.cake
243
common.cake
|
@ -1,73 +1,212 @@
|
|||
#tool nuget:?package=XamarinComponent&version=1.1.0.65
|
||||
#load "poco.cake"
|
||||
|
||||
#addin nuget:?package=Cake.XCode&version=4.0.0
|
||||
#addin nuget:?package=Cake.Xamarin.Build&version=4.0.1
|
||||
#addin nuget:?package=Cake.Xamarin&version=3.0.0
|
||||
#addin nuget:?package=Cake.FileHelpers&version=3.0.0
|
||||
|
||||
BuildSpec buildSpec = null;
|
||||
|
||||
void InvokeOtherGoogleModules (string [] otherPaths, string target)
|
||||
void AddArtifactDependencies (List<Artifact> list, Artifact [] dependencies)
|
||||
{
|
||||
if (otherPaths == null)
|
||||
if (dependencies == null)
|
||||
return;
|
||||
|
||||
list.AddRange (dependencies);
|
||||
|
||||
var cakeSettings = new CakeSettings {
|
||||
ToolPath = GetCakeToolPath (),
|
||||
Arguments = new Dictionary<string, string> { { "target", target } },
|
||||
};
|
||||
|
||||
// Run the script from the subfolder
|
||||
foreach (var module in otherPaths)
|
||||
CakeExecuteScript ("../" + module + "/build.cake", cakeSettings);
|
||||
foreach (var dependency in dependencies)
|
||||
AddArtifactDependencies (list, dependency.Dependencies);
|
||||
}
|
||||
|
||||
string [] MyDependencies = null;
|
||||
|
||||
Task ("externals")
|
||||
.Does (() =>
|
||||
void UpdateVersionInCsproj (Artifact artifact)
|
||||
{
|
||||
if (DirectoryExists ("./externals/Pods/"))
|
||||
return;
|
||||
var componentGroup = artifact.ComponentGroup.ToString ();
|
||||
var csprojPath = $"./source/{componentGroup}/{artifact.CsprojName}/{artifact.CsprojName}.csproj";
|
||||
XmlPoke(csprojPath, "/Project/PropertyGroup/FileVersion", artifact.NugetVersion);
|
||||
XmlPoke(csprojPath, "/Project/PropertyGroup/PackageVersion", artifact.NugetVersion);
|
||||
}
|
||||
|
||||
InvokeOtherGoogleModules (MyDependencies, "externals");
|
||||
RunMake ("./externals/", "all");
|
||||
});
|
||||
|
||||
Task ("tmp-nuget").IsDependentOn ("libs").Does (() =>
|
||||
void CreateAndInstallPodfile (Artifact artifact)
|
||||
{
|
||||
InvokeOtherGoogleModules (MyDependencies, "tmp-nuget");
|
||||
|
||||
if (buildSpec.NuGets == null || buildSpec.NuGets.Length == 0)
|
||||
if (artifact.PodSpecs?.Length == 0)
|
||||
return;
|
||||
|
||||
var podfile = new List<string> ();
|
||||
var podfileBegin = new List<string> (PODFILE_BEGIN);
|
||||
|
||||
podfileBegin [0] = string.Format (podfileBegin [0], artifact.MinimunSupportedVersion);
|
||||
podfile.AddRange (podfileBegin);
|
||||
|
||||
var newList = new List<NuGetInfo> ();
|
||||
foreach (var podSpec in artifact.PodSpecs) {
|
||||
if (podSpec.FrameworkSource != FrameworkSource.Pods)
|
||||
continue;
|
||||
|
||||
foreach (var nuget in buildSpec.NuGets) {
|
||||
newList.Add (new NuGetInfo {
|
||||
BuildsOn = nuget.BuildsOn,
|
||||
NuSpec = nuget.NuSpec,
|
||||
RequireLicenseAcceptance = nuget.RequireLicenseAcceptance,
|
||||
Version = nuget.Version,
|
||||
OutputDirectory = "../tmp-nugets",
|
||||
});
|
||||
if (podSpec.SubSpecs == null) {
|
||||
podfile.Add ($"\tpod '{podSpec.Name}', '{podSpec.Version}'");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (podSpec.UseDefaultSubspecs)
|
||||
podfile.Add ($"\tpod '{podSpec.Name}', '{podSpec.Version}'");
|
||||
|
||||
foreach (var subSpec in podSpec.SubSpecs)
|
||||
podfile.Add ($"\tpod '{podSpec.Name}/{subSpec}', '{podSpec.Version}'");
|
||||
}
|
||||
|
||||
PackNuGets (newList.ToArray ());
|
||||
});
|
||||
if (podfile.Count == PODFILE_BEGIN.Length)
|
||||
return;
|
||||
|
||||
Task ("component").IsDependentOn ("nuget").IsDependentOn ("tmp-nuget").IsDependentOn ("component-base");
|
||||
podfile.AddRange (PODFILE_END);
|
||||
|
||||
FilePath GetCakeToolPath ()
|
||||
{
|
||||
var possibleExe = GetFiles ("../**/tools/Cake/Cake.exe").FirstOrDefault ();
|
||||
var podfilePath = $"./externals/{artifact.Id}";
|
||||
EnsureDirectoryExists (podfilePath);
|
||||
|
||||
if (possibleExe != null)
|
||||
return possibleExe;
|
||||
|
||||
var p = System.Diagnostics.Process.GetCurrentProcess ();
|
||||
return new FilePath (p.Modules[0].FileName);
|
||||
FileWriteLines ($"{podfilePath}/Podfile", podfile.ToArray ());
|
||||
CocoaPodInstall (podfilePath);
|
||||
}
|
||||
|
||||
void BuildSdkOnPodfile (Artifact artifact)
|
||||
{
|
||||
if (artifact.PodSpecs?.Length == 0)
|
||||
return;
|
||||
|
||||
var platforms = new [] { Platform.iOSArm64, Platform.iOSArmV7, Platform.iOSSimulator64, Platform.iOSSimulator };
|
||||
var podsProject = "./Pods/Pods.xcodeproj";
|
||||
var workingDirectory = (DirectoryPath)$"./externals/{artifact.Id}";
|
||||
|
||||
foreach (var podSpec in artifact.PodSpecs)
|
||||
{
|
||||
if (podSpec.FrameworkSource != FrameworkSource.Pods || !podSpec.CanBeBuild)
|
||||
continue;
|
||||
|
||||
var framework = $"{podSpec.FrameworkName}.framework";
|
||||
var paths = GetDirectories($"{workingDirectory}/Pods/**/{framework}");
|
||||
|
||||
if (paths?.Count <= 0) {
|
||||
BuildXcodeFatFramework (podsProject, podSpec.TargetName, platforms, libraryTitle: podSpec.FrameworkName, workingDirectory: workingDirectory);
|
||||
CopyDirectory ($"{workingDirectory}/{framework}", $"./externals/{framework}");
|
||||
} else {
|
||||
foreach (var path in paths)
|
||||
CopyDirectory (path, $"./externals/{framework}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CleanVisualStudioSolution ()
|
||||
{
|
||||
MSBuild(SOLUTION_PATH, c => {
|
||||
c.Configuration = "Release";
|
||||
c.Restore = true;
|
||||
c.MaxCpuCount = 0;
|
||||
c.Targets.Add("Clean");
|
||||
});
|
||||
|
||||
var deleteDirectorySettings = new DeleteDirectorySettings {
|
||||
Recursive = true,
|
||||
Force = true
|
||||
};
|
||||
|
||||
var bins = GetDirectories("./**/bin");
|
||||
DeleteDirectories (bins, deleteDirectorySettings);
|
||||
|
||||
var objs = GetDirectories("./**/obj");
|
||||
DeleteDirectories (objs, deleteDirectorySettings);
|
||||
}
|
||||
|
||||
void BuildXcodeFatLibrary (FilePath xcodeProject, string target, Platform [] platforms, string libraryTitle = null, string librarySuffix = null, DirectoryPath workingDirectory = null)
|
||||
{
|
||||
if (!IsRunningOnUnix())
|
||||
{
|
||||
Warning("{0} is not available on the current platform.", "xcodebuild");
|
||||
return;
|
||||
}
|
||||
|
||||
libraryTitle = libraryTitle ?? target;
|
||||
workingDirectory = workingDirectory ?? Directory("./externals/");
|
||||
var libraryFile = (FilePath)(librarySuffix != null ? $"{libraryTitle}.{librarySuffix}" : $"{libraryTitle}");
|
||||
var archsFiles = new List<FilePath> ();
|
||||
|
||||
var buildArch = new Action<string, string, FilePath>((sdk, arch, dest) => {
|
||||
if (FileExists(dest))
|
||||
return;
|
||||
|
||||
XCodeBuild(new XCodeBuildSettings
|
||||
{
|
||||
Project = workingDirectory.CombineWithFilePath(xcodeProject).ToString(),
|
||||
Target = target,
|
||||
Sdk = sdk,
|
||||
Arch = arch,
|
||||
Configuration = "Release",
|
||||
});
|
||||
|
||||
var outputPath = workingDirectory.Combine("build").Combine($"Release-{sdk}").Combine (target).CombineWithFilePath($"lib{libraryTitle}.a");
|
||||
CopyFile(outputPath, dest);
|
||||
});
|
||||
|
||||
foreach (var platform in platforms) {
|
||||
var archFile = $"{libraryTitle}-{platform.Arch}";
|
||||
archsFiles.Add (archFile);
|
||||
buildArch (platform.Sdk, platform.Arch, workingDirectory.CombineWithFilePath (archFile));
|
||||
}
|
||||
|
||||
RunLipoCreate (workingDirectory, libraryTitle, archsFiles.ToArray ());
|
||||
}
|
||||
|
||||
void BuildXcodeFatFramework (FilePath xcodeProject, string target, Platform [] platforms, string libraryTitle = null, string librarySuffix = null, DirectoryPath workingDirectory = null)
|
||||
{
|
||||
if (!IsRunningOnUnix ()) {
|
||||
Warning("{0} is not available on the current platform.", "xcodebuild");
|
||||
return;
|
||||
}
|
||||
|
||||
libraryTitle = libraryTitle ?? target;
|
||||
workingDirectory = workingDirectory ?? Directory("./externals/");
|
||||
var libraryFile = (FilePath)(librarySuffix != null ? $"{libraryTitle}.{librarySuffix}" : $"{libraryTitle}");
|
||||
var fatFramework = (DirectoryPath)$"{libraryTitle}.framework";
|
||||
var fatFrameworkPath = workingDirectory.Combine (fatFramework);
|
||||
var archsPaths = new List<FilePath> ();
|
||||
|
||||
var buildArch = new Action<string, string, DirectoryPath> ((sdk, arch, dest) => {
|
||||
if (DirectoryExists (dest))
|
||||
return;
|
||||
|
||||
XCodeBuild (new XCodeBuildSettings {
|
||||
Project = workingDirectory.CombineWithFilePath (xcodeProject).ToString (),
|
||||
Target = target,
|
||||
Sdk = sdk,
|
||||
Arch = arch,
|
||||
Configuration = "Release",
|
||||
});
|
||||
|
||||
var outputPath = workingDirectory.Combine ("build").Combine ($"Release-{sdk}").Combine (target).Combine (fatFramework);
|
||||
CopyDirectory (outputPath, dest);
|
||||
});
|
||||
|
||||
foreach (var platform in platforms) {
|
||||
var archPath = (DirectoryPath)$"{libraryTitle}-{platform.Arch}.framework";
|
||||
archsPaths.Add (archPath.CombineWithFilePath (libraryTitle));
|
||||
buildArch (platform.Sdk, platform.Arch, workingDirectory.Combine (archPath));
|
||||
|
||||
if (!DirectoryExists (fatFrameworkPath))
|
||||
CopyDirectory (workingDirectory.Combine (archPath), fatFrameworkPath);
|
||||
}
|
||||
|
||||
RunLipoCreate (workingDirectory, fatFramework.CombineWithFilePath (libraryFile), archsPaths.ToArray ());
|
||||
|
||||
if (libraryTitle != target && FileExists (fatFrameworkPath.CombineWithFilePath (target)))
|
||||
DeleteFile (fatFrameworkPath.CombineWithFilePath (target));
|
||||
}
|
||||
|
||||
bool TargetExistsInXcodeProject (FilePath xcodeProject, string target, DirectoryPath workingDirectory = null)
|
||||
{
|
||||
workingDirectory = workingDirectory ?? Directory("./externals/");
|
||||
|
||||
var processSettings = new ProcessSettings {
|
||||
Arguments = $"-project {workingDirectory.CombineWithFilePath (xcodeProject)} -list",
|
||||
RedirectStandardOutput = true
|
||||
};
|
||||
|
||||
using(var process = StartAndReturnProcess("xcodebuild", processSettings))
|
||||
{
|
||||
process.WaitForExit();
|
||||
|
||||
foreach (var line in process.GetStandardOutput ())
|
||||
if (line.Contains (target))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,207 @@
|
|||
// Firebase artifacts available to be built. These artifacts generate NuGets.
|
||||
Artifact FIREBASE_AB_TESTING_ARTIFACT = new Artifact ("Firebase.ABTesting", "2.0.0.2", "8.0", ComponentGroup.Firebase, csprojName: "ABTesting");
|
||||
Artifact FIREBASE_AD_MOB_ARTIFACT = new Artifact ("Firebase.AdMob", "7.38.0", "8.0", ComponentGroup.Firebase, csprojName: "AdMob");
|
||||
Artifact FIREBASE_ANALYTICS_ARTIFACT = new Artifact ("Firebase.Analytics", "5.5.0", "8.0", ComponentGroup.Firebase, csprojName: "Analytics");
|
||||
Artifact FIREBASE_AUTH_ARTIFACT = new Artifact ("Firebase.Auth", "5.0.4.1", "8.0", ComponentGroup.Firebase, csprojName: "Auth");
|
||||
Artifact FIREBASE_CLOUD_FIRESTORE_ARTIFACT = new Artifact ("Firebase.CloudFirestore", "0.13.3", "8.0", ComponentGroup.Firebase, csprojName: "CloudFirestore");
|
||||
Artifact FIREBASE_CLOUD_MESSAGING_ARTIFACT = new Artifact ("Firebase.CloudMessaging", "3.1.2", "8.0", ComponentGroup.Firebase, csprojName: "CloudMessaging");
|
||||
Artifact FIREBASE_CORE_ARTIFACT = new Artifact ("Firebase.Core", "5.2.0", "8.0", ComponentGroup.Firebase, csprojName: "Core");
|
||||
Artifact FIREBASE_CRASHLYTICS_ARTIFACT = new Artifact ("Firebase.Crashlytics", "3.10.9", "8.0", ComponentGroup.Firebase, csprojName: "Crashlytics");
|
||||
Artifact FIREBASE_DATABASE_ARTIFACT = new Artifact ("Firebase.Database", "5.0.3", "8.0", ComponentGroup.Firebase, csprojName: "Database");
|
||||
Artifact FIREBASE_DYNAMIC_LINKS_ARTIFACT = new Artifact ("Firebase.DynamicLinks", "3.0.2.1", "8.0", ComponentGroup.Firebase, csprojName: "DynamicLinks");
|
||||
Artifact FIREBASE_INSTANCE_ID_ARTIFACT = new Artifact ("Firebase.InstanceID", "3.4.0", "8.0", ComponentGroup.Firebase, csprojName: "InstanceID");
|
||||
Artifact FIREBASE_INVITES_ARTIFACT = new Artifact ("Firebase.Invites", "3.0.1.2", "8.0", ComponentGroup.Firebase, csprojName: "Invites");
|
||||
Artifact FIREBASE_MLKIT_ARTIFACT = new Artifact ("Firebase.MLKit", "0.13.0.1", "9.0", ComponentGroup.Firebase, csprojName: "MLKit");
|
||||
Artifact FIREBASE_MLKIT_COMMON_ARTIFACT = new Artifact ("Firebase.MLCommon", "0.13.0", "9.0", ComponentGroup.Firebase, csprojName: "MLKit.Common");
|
||||
Artifact FIREBASE_MLKIT_MODEL_INTERPRETER_ARTIFACT = new Artifact ("Firebase.MLModelInterpreter", "0.13.0", "9.0", ComponentGroup.Firebase, csprojName: "MLKit.ModelInterpreter");
|
||||
Artifact FIREBASE_PERFORMANCE_MONITORING_ARTIFACT = new Artifact ("Firebase.PerformanceMonitoring", "2.1.2.1", "8.0", ComponentGroup.Firebase, csprojName: "PerformanceMonitoring");
|
||||
Artifact FIREBASE_REMOTE_CONFIG_ARTIFACT = new Artifact ("Firebase.RemoteConfig", "3.0.1.1", "8.0", ComponentGroup.Firebase, csprojName: "RemoteConfig");
|
||||
Artifact FIREBASE_STORAGE_ARTIFACT = new Artifact ("Firebase.Storage", "3.0.2", "8.0", ComponentGroup.Firebase, csprojName: "Storage");
|
||||
|
||||
// Google artifacts available to be built. These artifacts generate NuGets.
|
||||
Artifact GOOGLE_ANALYTICS_ARTIFACT = new Artifact ("Google.Analytics", "3.17.0.3", "5.0", ComponentGroup.Google, csprojName: "Analytics");
|
||||
Artifact GOOGLE_APP_INDEXING_ARTIFACT = new Artifact ("Google.AppIndexing", "2.0.3.5", "7.0", ComponentGroup.Google, csprojName: "AppIndexing");
|
||||
Artifact GOOGLE_CAST_ARTIFACT = new Artifact ("Google.Casr", "4.4.2", "8.0", ComponentGroup.Google, csprojName: "Cast");
|
||||
Artifact GOOGLE_CORE_ARTIFACT = new Artifact ("Google.Core", "3.1.0.1", "7.0", ComponentGroup.Google, csprojName: "Core");
|
||||
Artifact GOOGLE_INSTANCE_ID_ARTIFACT = new Artifact ("Google.InstanceID", "1.2.1.15", "7.0", ComponentGroup.Google, csprojName: "InstanceID");
|
||||
Artifact GOOGLE_MAPS_ARTIFACT = new Artifact ("Google.Maps", "3.1.0", "9.0", ComponentGroup.Google, csprojName: "Maps");
|
||||
Artifact GOOGLE_MOBILE_ADS_ARTIFACT = new Artifact ("Google.MobileAds", "7.38.0", "8.0", ComponentGroup.Google, csprojName: "MobileAds");
|
||||
Artifact GOOGLE_PLACES_ARTIFACT = new Artifact ("Google.Places", "3.1.0", "9.0", ComponentGroup.Google, csprojName: "Places");
|
||||
Artifact GOOGLE_SIGN_IN_ARTIFACT = new Artifact ("Google.SignIn", "4.4.0", "8.0", ComponentGroup.Google, csprojName: "SignIn");
|
||||
Artifact GOOGLE_TAG_MANAGER_ARTIFACT = new Artifact ("Google.TagManager", "7.1.1.2", "8.0", ComponentGroup.Google, csprojName: "TagManager");
|
||||
|
||||
var ARTIFACTS = new Dictionary<string, Artifact> {
|
||||
{ "Firebase.ABTesting", FIREBASE_AB_TESTING_ARTIFACT },
|
||||
{ "Firebase.AdMob", FIREBASE_AD_MOB_ARTIFACT },
|
||||
{ "Firebase.Analytics", FIREBASE_ANALYTICS_ARTIFACT },
|
||||
{ "Firebase.Auth", FIREBASE_AUTH_ARTIFACT },
|
||||
{ "Firebase.CloudFirestore", FIREBASE_CLOUD_FIRESTORE_ARTIFACT },
|
||||
{ "Firebase.CloudMessaging", FIREBASE_CLOUD_MESSAGING_ARTIFACT },
|
||||
{ "Firebase.Core", FIREBASE_CORE_ARTIFACT },
|
||||
{ "Firebase.Crashlytics", FIREBASE_CRASHLYTICS_ARTIFACT },
|
||||
{ "Firebase.Database", FIREBASE_DATABASE_ARTIFACT },
|
||||
{ "Firebase.DynamicLinks", FIREBASE_DYNAMIC_LINKS_ARTIFACT },
|
||||
{ "Firebase.InstanceID", FIREBASE_INSTANCE_ID_ARTIFACT },
|
||||
{ "Firebase.Invites", FIREBASE_INVITES_ARTIFACT },
|
||||
{ "Firebase.MLKit", FIREBASE_MLKIT_ARTIFACT },
|
||||
{ "Firebase.MLKit.Common", FIREBASE_MLKIT_COMMON_ARTIFACT },
|
||||
{ "Firebase.MLKit.ModelInterpreter", FIREBASE_MLKIT_MODEL_INTERPRETER_ARTIFACT },
|
||||
{ "Firebase.PerformanceMonitoring", FIREBASE_PERFORMANCE_MONITORING_ARTIFACT },
|
||||
{ "Firebase.RemoteConfig", FIREBASE_REMOTE_CONFIG_ARTIFACT },
|
||||
{ "Firebase.Storage", FIREBASE_STORAGE_ARTIFACT },
|
||||
|
||||
{ "Google.Analytics", GOOGLE_ANALYTICS_ARTIFACT },
|
||||
{ "Google.Appindexing", GOOGLE_APP_INDEXING_ARTIFACT },
|
||||
{ "Google.Cast", GOOGLE_CAST_ARTIFACT },
|
||||
{ "Google.Core", GOOGLE_CORE_ARTIFACT },
|
||||
{ "Google.InstanceID", GOOGLE_INSTANCE_ID_ARTIFACT },
|
||||
{ "Google.Maps", GOOGLE_MAPS_ARTIFACT },
|
||||
{ "Google.MobileAds", GOOGLE_MOBILE_ADS_ARTIFACT },
|
||||
{ "Google.Places", GOOGLE_PLACES_ARTIFACT },
|
||||
{ "Google.SignIn", GOOGLE_SIGN_IN_ARTIFACT },
|
||||
{ "Google.TagManager", GOOGLE_TAG_MANAGER_ARTIFACT },
|
||||
};
|
||||
|
||||
void SetArtifactsDependencies ()
|
||||
{
|
||||
FIREBASE_AB_TESTING_ARTIFACT.Dependencies = new [] { FIREBASE_CORE_ARTIFACT, FIREBASE_INSTANCE_ID_ARTIFACT, FIREBASE_ANALYTICS_ARTIFACT };
|
||||
FIREBASE_AD_MOB_ARTIFACT.Dependencies = new [] { FIREBASE_CORE_ARTIFACT, FIREBASE_INSTANCE_ID_ARTIFACT, FIREBASE_ANALYTICS_ARTIFACT, GOOGLE_MOBILE_ADS_ARTIFACT };
|
||||
FIREBASE_ANALYTICS_ARTIFACT.Dependencies = new [] { FIREBASE_CORE_ARTIFACT, FIREBASE_INSTANCE_ID_ARTIFACT };
|
||||
FIREBASE_AUTH_ARTIFACT.Dependencies = new [] { FIREBASE_CORE_ARTIFACT };
|
||||
FIREBASE_CLOUD_FIRESTORE_ARTIFACT.Dependencies = new [] { FIREBASE_CORE_ARTIFACT, FIREBASE_INSTANCE_ID_ARTIFACT };
|
||||
FIREBASE_CLOUD_MESSAGING_ARTIFACT.Dependencies = new [] { FIREBASE_CORE_ARTIFACT };
|
||||
FIREBASE_CORE_ARTIFACT.Dependencies = null;
|
||||
FIREBASE_CRASHLYTICS_ARTIFACT.Dependencies = null;
|
||||
FIREBASE_DATABASE_ARTIFACT.Dependencies = new [] { FIREBASE_CORE_ARTIFACT };
|
||||
FIREBASE_DYNAMIC_LINKS_ARTIFACT.Dependencies = new [] { FIREBASE_CORE_ARTIFACT, FIREBASE_INSTANCE_ID_ARTIFACT, FIREBASE_ANALYTICS_ARTIFACT };
|
||||
FIREBASE_INSTANCE_ID_ARTIFACT.Dependencies = new [] { FIREBASE_CORE_ARTIFACT };
|
||||
FIREBASE_INVITES_ARTIFACT.Dependencies = new [] { FIREBASE_CORE_ARTIFACT, FIREBASE_INSTANCE_ID_ARTIFACT, FIREBASE_ANALYTICS_ARTIFACT, FIREBASE_DYNAMIC_LINKS_ARTIFACT, GOOGLE_SIGN_IN_ARTIFACT };
|
||||
FIREBASE_MLKIT_ARTIFACT.Dependencies = new [] { FIREBASE_CORE_ARTIFACT, FIREBASE_MLKIT_COMMON_ARTIFACT };
|
||||
FIREBASE_MLKIT_COMMON_ARTIFACT.Dependencies = new [] { FIREBASE_CORE_ARTIFACT };
|
||||
FIREBASE_MLKIT_MODEL_INTERPRETER_ARTIFACT.Dependencies = new [] { FIREBASE_CORE_ARTIFACT, FIREBASE_INSTANCE_ID_ARTIFACT, FIREBASE_MLKIT_COMMON_ARTIFACT };
|
||||
FIREBASE_PERFORMANCE_MONITORING_ARTIFACT.Dependencies = new [] { FIREBASE_CORE_ARTIFACT, FIREBASE_INSTANCE_ID_ARTIFACT, FIREBASE_ANALYTICS_ARTIFACT };
|
||||
FIREBASE_REMOTE_CONFIG_ARTIFACT.Dependencies = new [] { FIREBASE_CORE_ARTIFACT, FIREBASE_INSTANCE_ID_ARTIFACT, FIREBASE_ANALYTICS_ARTIFACT, FIREBASE_AB_TESTING_ARTIFACT };
|
||||
FIREBASE_STORAGE_ARTIFACT.Dependencies = new [] { FIREBASE_CORE_ARTIFACT };
|
||||
|
||||
GOOGLE_ANALYTICS_ARTIFACT.Dependencies = null;
|
||||
GOOGLE_APP_INDEXING_ARTIFACT.Dependencies = null;
|
||||
GOOGLE_CAST_ARTIFACT.Dependencies = new [] { FIREBASE_CORE_ARTIFACT };
|
||||
GOOGLE_CORE_ARTIFACT.Dependencies = new [] { FIREBASE_CORE_ARTIFACT, FIREBASE_INSTANCE_ID_ARTIFACT, FIREBASE_ANALYTICS_ARTIFACT };
|
||||
GOOGLE_INSTANCE_ID_ARTIFACT.Dependencies = new [] { FIREBASE_CORE_ARTIFACT, FIREBASE_INSTANCE_ID_ARTIFACT, FIREBASE_ANALYTICS_ARTIFACT, GOOGLE_CORE_ARTIFACT };
|
||||
GOOGLE_MAPS_ARTIFACT.Dependencies = null;
|
||||
GOOGLE_MOBILE_ADS_ARTIFACT.Dependencies = null;
|
||||
GOOGLE_PLACES_ARTIFACT.Dependencies = new [] { GOOGLE_MAPS_ARTIFACT };
|
||||
GOOGLE_SIGN_IN_ARTIFACT.Dependencies = new [] { FIREBASE_CORE_ARTIFACT };
|
||||
GOOGLE_TAG_MANAGER_ARTIFACT.Dependencies = new [] { FIREBASE_CORE_ARTIFACT, FIREBASE_INSTANCE_ID_ARTIFACT, FIREBASE_ANALYTICS_ARTIFACT, GOOGLE_ANALYTICS_ARTIFACT };
|
||||
}
|
||||
|
||||
void SetArtifactsPodSpecs ()
|
||||
{
|
||||
// Firebase components
|
||||
FIREBASE_AB_TESTING_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("Firebase", "5.8.1", subSpecs: new [] { "ABTesting" })
|
||||
};
|
||||
FIREBASE_AD_MOB_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("Firebase", "5.16.0", subSpecs: new [] { "AdMob" })
|
||||
};
|
||||
FIREBASE_ANALYTICS_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("Firebase", "5.16.0", subSpecs: new [] { "Analytics" }),
|
||||
new PodSpec ("GoogleAppMeasurement", "5.5.0")
|
||||
};
|
||||
FIREBASE_AUTH_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("Firebase", "5.8.1", frameworkSource: FrameworkSource.Pods, frameworkName: "FirebaseAuth", targetName: "FirebaseAuth", subSpecs: new [] { "Auth" })
|
||||
};
|
||||
FIREBASE_CLOUD_FIRESTORE_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("Firebase", "5.8.1", frameworkSource: FrameworkSource.Pods, frameworkName: "FirebaseFirestore", targetName: "FirebaseFirestore", subSpecs: new [] { "Firestore" }),
|
||||
new PodSpec ("BoringSSL", "10.0.6", frameworkSource: FrameworkSource.Pods, frameworkName: "openssl"),
|
||||
new PodSpec ("gRPC-ProtoRPC", "1.14.0", frameworkSource: FrameworkSource.Pods, frameworkName: "ProtoRPC"),
|
||||
new PodSpec ("gRPC", "1.14.0", frameworkSource: FrameworkSource.Pods, frameworkName: "GRPCClient"),
|
||||
new PodSpec ("gRPC-Core", "1.14.0", frameworkSource: FrameworkSource.Pods, frameworkName: "grpc"),
|
||||
new PodSpec ("gRPC-RxLibrary", "1.14.0", frameworkSource: FrameworkSource.Pods, frameworkName: "RxLibrary"),
|
||||
new PodSpec ("gRPC-C++", "0.0.3", frameworkSource: FrameworkSource.Pods, frameworkName: "grpcpp"),
|
||||
};
|
||||
FIREBASE_CLOUD_MESSAGING_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("Firebase", "5.8.1", frameworkSource: FrameworkSource.Pods, frameworkName: "FirebaseMessaging", targetName: "FirebaseMessaging", subSpecs: new [] { "Messaging" })
|
||||
};
|
||||
FIREBASE_CORE_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("Firebase", "5.16.0", frameworkSource: FrameworkSource.Pods, frameworkName: "FirebaseCore", targetName: "FirebaseCore", subSpecs: new [] { "CoreOnly" }),
|
||||
new PodSpec ("FirebaseAuthInterop", "1.0.0", frameworkSource: FrameworkSource.Pods, canBeBuild: false),
|
||||
new PodSpec ("GoogleUtilities", "5.3.7", frameworkSource: FrameworkSource.Pods, subSpecs: new [] { "AppDelegateSwizzler", "Environment", "ISASwizzler", "Logger", "MethodSwizzler", "Network", "NSData+zlib", "Reachability", "UserDefaults" }),
|
||||
new PodSpec ("GoogleToolboxForMac", "2.1.4", frameworkSource: FrameworkSource.Pods, subSpecs: new [] { "NSData+zlib", "NSDictionary+URLArguments", "Logger", "StringEncoding", "URLBuilder" }),
|
||||
new PodSpec ("GoogleAPIClientForREST", "1.3.7", frameworkSource: FrameworkSource.Pods, subSpecs: new [] { "Vision" }, useDefaultSubspecs: true),
|
||||
new PodSpec ("GTMSessionFetcher", "1.2.1", frameworkSource: FrameworkSource.Pods, subSpecs: new [] { "Full" }),
|
||||
new PodSpec ("leveldb-library", "1.20.0", frameworkSource: FrameworkSource.Pods, frameworkName: "leveldb"),
|
||||
new PodSpec ("nanopb", "0.3.901", frameworkSource: FrameworkSource.Pods),
|
||||
new PodSpec ("Protobuf", "3.6.1", frameworkSource: FrameworkSource.Pods),
|
||||
};
|
||||
FIREBASE_CRASHLYTICS_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("Crashlytics", "3.10.9"),
|
||||
new PodSpec ("Fabric", "1.7.13")
|
||||
};
|
||||
FIREBASE_DATABASE_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("Firebase", "5.8.1", frameworkSource: FrameworkSource.Pods, frameworkName: "FirebaseDatabase", targetName: "FirebaseDatabase", subSpecs: new [] { "Database" })
|
||||
};
|
||||
FIREBASE_DYNAMIC_LINKS_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("Firebase", "5.8.1", subSpecs: new [] { "DynamicLinks" })
|
||||
};
|
||||
FIREBASE_INSTANCE_ID_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("FirebaseInstanceID", "3.4.0")
|
||||
};
|
||||
FIREBASE_INVITES_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("Firebase", "5.8.1", subSpecs: new [] { "Invites" })
|
||||
};
|
||||
FIREBASE_MLKIT_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("Firebase", "5.13.0", subSpecs: new [] { "MLVision", "MLVisionBarcodeModel", "MLVisionFaceModel", "MLVisionLabelModel", "MLVisionTextModel" }),
|
||||
new PodSpec ("GoogleMobileVision", "1.5.0")
|
||||
};
|
||||
FIREBASE_MLKIT_COMMON_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("Firebase", "5.13.0", subSpecs: new [] { "MLCommon" })
|
||||
};
|
||||
FIREBASE_MLKIT_MODEL_INTERPRETER_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("Firebase", "5.13.0", subSpecs: new [] { "MLModelInterpreter" }),
|
||||
new PodSpec ("TensorFlowLite", "1.10.1")
|
||||
};
|
||||
FIREBASE_PERFORMANCE_MONITORING_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("Firebase", "5.8.1", subSpecs: new [] { "Performance" })
|
||||
};
|
||||
FIREBASE_REMOTE_CONFIG_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("Firebase", "5.8.1", subSpecs: new [] { "RemoteConfig" })
|
||||
};
|
||||
FIREBASE_STORAGE_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("Firebase", "5.8.1", frameworkSource: FrameworkSource.Pods, frameworkName: "FirebaseStorage", targetName: "FirebaseStorage", subSpecs: new [] { "Storage" })
|
||||
};
|
||||
|
||||
// Google components
|
||||
GOOGLE_ANALYTICS_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("GoogleAnalytics", "3.17.0")
|
||||
};
|
||||
GOOGLE_APP_INDEXING_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("GoogleAppIndexing", "2.0.3")
|
||||
};
|
||||
GOOGLE_CAST_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("google-cast-sdk", "4.3.2")
|
||||
};
|
||||
GOOGLE_CORE_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("Google", "3.1.0", subSpecs: new [] { "Core" })
|
||||
};
|
||||
GOOGLE_INSTANCE_ID_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("GGLInstanceID", "1.2.1"),
|
||||
new PodSpec ("GoogleIPhoneUtilities", "1.2.0")
|
||||
};
|
||||
GOOGLE_MAPS_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("GoogleMaps", "3.1.0")
|
||||
};
|
||||
GOOGLE_MOBILE_ADS_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("Google-Mobile-Ads-SDK", "7.38.0"),
|
||||
new PodSpec ("PersonalizedAdConsent", "1.0.3", frameworkSource: FrameworkSource.Pods)
|
||||
};
|
||||
GOOGLE_PLACES_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("GooglePlaces", "3.1.0")
|
||||
};
|
||||
GOOGLE_SIGN_IN_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("GoogleSignIn", "4.4.0")
|
||||
};
|
||||
GOOGLE_TAG_MANAGER_ARTIFACT.PodSpecs = new [] {
|
||||
new PodSpec ("GoogleTagManager", "7.1.1")
|
||||
};
|
||||
}
|
509
poco.cake
509
poco.cake
|
@ -1,394 +1,143 @@
|
|||
/////////////////////////////////////////////////////////////////////
|
||||
// Objects used to update a Google Component with its dependencies //
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
|
||||
public abstract class GoogleBase
|
||||
enum ComponentGroup
|
||||
{
|
||||
public virtual string Name { get; }
|
||||
public virtual string NuGetId { get; }
|
||||
public string CurrentVersion { get; set; }
|
||||
public string NewVersion { get; set; }
|
||||
public bool Bumped { get; set; }
|
||||
public virtual string [] BaseOf {
|
||||
get { return new string[] { }; }
|
||||
Firebase,
|
||||
Google
|
||||
}
|
||||
|
||||
enum FrameworkSource
|
||||
{
|
||||
Targets,
|
||||
Pods,
|
||||
Custom
|
||||
}
|
||||
|
||||
struct Platform
|
||||
{
|
||||
#region Properties
|
||||
|
||||
public string Arch { get; private set; }
|
||||
public string Sdk { get; private set; }
|
||||
|
||||
public static Platform iOSSimulator { get; } = new Platform ("i386", "iphonesimulator");
|
||||
public static Platform iOSSimulator64 { get; } = new Platform ("x86_64", "iphonesimulator");
|
||||
public static Platform iOSArmV7 { get; } = new Platform ("armv7", "iphoneos");
|
||||
public static Platform iOSArmV7s { get; } = new Platform ("armv7s", "iphoneos");
|
||||
public static Platform iOSArm64 { get; } = new Platform ("arm64", "iphoneos");
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
|
||||
Platform (string arch, string sdk) {
|
||||
Arch = arch;
|
||||
Sdk = sdk;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Public Functionality
|
||||
|
||||
public static Platform Create (string arch, string sdk) => new Platform (arch, sdk);
|
||||
public override string ToString () => $"{Arch} => {Sdk}";
|
||||
|
||||
#endregion
|
||||
|
||||
#region Operations
|
||||
|
||||
public static bool operator == (Platform first, Platform second) =>
|
||||
string.Equals (first.ToString (), second.ToString ());
|
||||
|
||||
public static bool operator != (Platform first, Platform second) =>
|
||||
!string.Equals (first.ToString (), second.ToString ());
|
||||
|
||||
public override bool Equals (object obj) =>
|
||||
obj is Platform platform && this == platform;
|
||||
|
||||
public override int GetHashCode () =>
|
||||
base.GetHashCode ();
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
class PodSpec
|
||||
{
|
||||
// The podspec name
|
||||
public string Name { get; set; }
|
||||
// The podspec version if any, the component version otherwise.
|
||||
public string Version { get; set; }
|
||||
// Target used to build the Xcode Pods project.
|
||||
// If null, Name property value will be used.
|
||||
public string TargetName { get; set; }
|
||||
// Overrides the default framework's name built with Pods project and Xcode.
|
||||
// If null, Name property value will be used.
|
||||
public string FrameworkName { get; set; }
|
||||
// The desired subspec to be used.
|
||||
// If null, default subspecs defined within the podspec will be used.
|
||||
public string [] SubSpecs { get; set; }
|
||||
// If true and when Subspecs property is not null, default subspecs
|
||||
// defined within the podspec will added to the Podfile. Otherwise,
|
||||
// only subSpecs specified in Subspecs will be used. False by default.
|
||||
public bool UseDefaultSubspecs { get; set; }
|
||||
// Specify the source where the framework will be gotten.
|
||||
// From a .targets file by default.
|
||||
public FrameworkSource FrameworkSource { get; set; }
|
||||
// If true, the podspec can be built using Xcode. True by default.
|
||||
public bool CanBeBuild { get; set; }
|
||||
|
||||
public PodSpec (string name, string version, string targetName = null, string frameworkName = null, FrameworkSource frameworkSource = FrameworkSource.Targets, string [] subSpecs = null, bool useDefaultSubspecs = false, bool canBeBuild = true)
|
||||
{
|
||||
Name = name;
|
||||
Version = version;
|
||||
TargetName = targetName ?? name;
|
||||
FrameworkName = frameworkName ?? name;
|
||||
FrameworkSource = frameworkSource;
|
||||
SubSpecs = subSpecs;
|
||||
UseDefaultSubspecs = useDefaultSubspecs;
|
||||
CanBeBuild = canBeBuild;
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class Firebase
|
||||
class Artifact : IEquatable<Artifact>
|
||||
{
|
||||
public class ABTesting : GoogleBase
|
||||
// The id of the component.
|
||||
public string Id { get; set; }
|
||||
// The version to be published on NuGet.
|
||||
public string NugetVersion { get; set; }
|
||||
// The minimun iOS supported version of the component.
|
||||
public string MinimunSupportedVersion { get; set; }
|
||||
// If it's a Firebase or Google component.
|
||||
public ComponentGroup ComponentGroup { get; set; }
|
||||
// The C# project name. This will have the Id property value if not specified.
|
||||
public string CsprojName { get; set; }
|
||||
// Other Google/Firebase components that make this component work.
|
||||
public Artifact [] Dependencies { get; set; }
|
||||
// The component build order.
|
||||
public int BuildOrder { get => Dependencies?.Length + 1 ?? 1; }
|
||||
// The specs used in the Podfile.
|
||||
public PodSpec [] PodSpecs { get; set; }
|
||||
|
||||
public Artifact (string id, string nugetVersion, string minimunSupportedVersion, ComponentGroup componentType, string csprojName = null, Artifact [] dependencies = null, PodSpec [] podSpecs = null)
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Firebase.ABTesting"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Firebase.iOS.ABTesting"; }
|
||||
}
|
||||
public override string [] BaseOf {
|
||||
get { return new [] { new Firebase.RemoteConfig ().Name }; }
|
||||
}
|
||||
Id = id;
|
||||
NugetVersion = nugetVersion;
|
||||
MinimunSupportedVersion = minimunSupportedVersion;
|
||||
ComponentGroup = componentType;
|
||||
CsprojName = csprojName ?? id;
|
||||
Dependencies = dependencies;
|
||||
PodSpecs = podSpecs;
|
||||
}
|
||||
|
||||
public class AdMob : GoogleBase
|
||||
public bool Equals (Artifact other)
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Firebase.AdMob"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Firebase.iOS.AdMob"; }
|
||||
}
|
||||
if (Object.ReferenceEquals(other, null)) return false;
|
||||
if (Object.ReferenceEquals(this, other)) return true;
|
||||
|
||||
return Id == other.Id;
|
||||
}
|
||||
|
||||
public class Analytics : GoogleBase
|
||||
public override int GetHashCode()
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Firebase.Analytics"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Firebase.iOS.Analytics"; }
|
||||
}
|
||||
public override string [] BaseOf {
|
||||
get { return new [] { new Firebase.ABTesting ().Name, new Firebase.AdMob ().Name, new Firebase.DynamicLinks ().Name,
|
||||
new Firebase.Invites ().Name, new Firebase.PerformanceMonitoring ().Name, new Firebase.RemoteConfig ().Name,
|
||||
new Google.InstanceID ().Name, new Google.TagManager ().Name };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class Auth : GoogleBase
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Firebase.Auth"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Firebase.iOS.Auth"; }
|
||||
}
|
||||
}
|
||||
|
||||
public class CloudFirestore : GoogleBase
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Firebase.CloudFirestore"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Firebase.iOS.CloudFirestore"; }
|
||||
}
|
||||
}
|
||||
|
||||
public class CloudMessaging : GoogleBase
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Firebase.CloudMessaging"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Firebase.iOS.CloudMessaging"; }
|
||||
}
|
||||
}
|
||||
|
||||
public class Core : GoogleBase
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Firebase.Core"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Firebase.iOS.Core"; }
|
||||
}
|
||||
public override string [] BaseOf {
|
||||
get { return new [] { new Firebase.ABTesting ().Name, new Firebase.AdMob ().Name, new Firebase.Analytics ().Name,
|
||||
new Firebase.Auth ().Name, new Firebase.CloudFirestore ().Name, new Firebase.CloudMessaging ().Name,
|
||||
new Firebase.Database ().Name, new Firebase.DynamicLinks ().Name, new Firebase.InstanceID ().Name,
|
||||
new Firebase.Invites ().Name, new Firebase.MLKit ().Name, new Firebase.MLKit.Common ().Name,
|
||||
new Firebase.MLKit.ModelInterpreter ().Name, new Firebase.PerformanceMonitoring ().Name, new Firebase.RemoteConfig ().Name,
|
||||
new Firebase.Storage ().Name, new Google.Cast ().Name, new Google.InstanceID ().Name,
|
||||
new Google.PlayGames ().Name, new Google.SignIn ().Name, new Google.TagManager ().Name };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class Crashlytics : GoogleBase
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Firebase.Crashlytics"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Firebase.iOS.Crashlytics"; }
|
||||
}
|
||||
}
|
||||
|
||||
public class CrashReporting : GoogleBase
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Firebase.CrashReporting"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Firebase.iOS.CrashReporting"; }
|
||||
}
|
||||
}
|
||||
|
||||
public class Database : GoogleBase
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Firebase.Database"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Firebase.iOS.Database"; }
|
||||
}
|
||||
}
|
||||
|
||||
public class DynamicLinks : GoogleBase
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Firebase.DynamicLinks"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Firebase.iOS.DynamicLinks"; }
|
||||
}
|
||||
public override string [] BaseOf {
|
||||
get { return new [] { new Firebase.Invites ().Name }; }
|
||||
}
|
||||
}
|
||||
|
||||
public class InstanceID : GoogleBase
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Firebase.InstanceID"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Firebase.iOS.InstanceID"; }
|
||||
}
|
||||
public override string [] BaseOf {
|
||||
get { return new [] { new Firebase.ABTesting ().Name, new Firebase.AdMob ().Name, new Firebase.Analytics ().Name,
|
||||
new Firebase.CloudMessaging ().Name, new Firebase.DynamicLinks ().Name, new Firebase.Invites ().Name,
|
||||
new Firebase.MLKit.ModelInterpreter ().Name, new Firebase.PerformanceMonitoring ().Name, new Firebase.RemoteConfig ().Name,
|
||||
new Google.InstanceID ().Name, new Google.TagManager ().Name };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class Invites : GoogleBase
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Firebase.Invites"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Firebase.iOS.Invites"; }
|
||||
}
|
||||
}
|
||||
|
||||
public class MLKit : GoogleBase
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Firebase.MLKit"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Firebase.iOS.MLKit"; }
|
||||
}
|
||||
|
||||
public class Common : MLKit
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Firebase.MLKit.Common"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Firebase.iOS.MLKit.Common"; }
|
||||
}
|
||||
public override string [] BaseOf {
|
||||
get { return new [] { new Firebase.MLKit ().Name, new Firebase.MLKit.ModelInterpreter ().Name }; }
|
||||
}
|
||||
}
|
||||
|
||||
public class ModelInterpreter : MLKit
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Firebase.MLKit.ModelInterpreter"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Firebase.iOS.MLKit.ModelInterpreter"; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class PerformanceMonitoring : GoogleBase
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Firebase.PerformanceMonitoring"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Firebase.iOS.PerformanceMonitoring"; }
|
||||
}
|
||||
}
|
||||
|
||||
public class RemoteConfig : GoogleBase
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Firebase.RemoteConfig"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Firebase.iOS.RemoteConfig"; }
|
||||
}
|
||||
}
|
||||
|
||||
public class Storage : GoogleBase
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Firebase.Storage"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Firebase.iOS.Storage"; }
|
||||
}
|
||||
int hashCode = Id.GetHashCode();
|
||||
return hashCode ^ hashCode;
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class Google
|
||||
{
|
||||
public class Analytics : GoogleBase
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Google.Analytics"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Google.iOS.Analytics"; }
|
||||
}
|
||||
public override string [] BaseOf {
|
||||
get { return new [] { new Google.TagManager ().Name }; }
|
||||
}
|
||||
}
|
||||
|
||||
public class AppIndexing : GoogleBase
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Google.AppIndexing"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Google.iOS.AppIndexing"; }
|
||||
}
|
||||
}
|
||||
|
||||
public class Cast : GoogleBase
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Google.Cast"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Google.iOS.Cast"; }
|
||||
}
|
||||
}
|
||||
|
||||
public class Core : GoogleBase
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Google.Core"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Google.iOS.Core"; }
|
||||
}
|
||||
public override string [] BaseOf {
|
||||
get { return new [] { new Firebase.Invites ().Name, new Google.InstanceID ().Name, new Google.PlayGames ().Name, new Google.SignIn ().Name }; }
|
||||
}
|
||||
}
|
||||
|
||||
public class InstanceID : GoogleBase
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Google.InstanceID"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Google.iOS.InstanceID"; }
|
||||
}
|
||||
}
|
||||
|
||||
public class Maps : GoogleBase
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Google.Maps"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Google.iOS.Maps"; }
|
||||
}
|
||||
}
|
||||
|
||||
public class MobileAds : GoogleBase
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Google.MobileAds"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Google.iOS.MobileAds"; }
|
||||
}
|
||||
public override string [] BaseOf {
|
||||
get { return new [] { new Firebase.AdMob ().Name }; }
|
||||
}
|
||||
}
|
||||
|
||||
public class Places : GoogleBase
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Google.Places"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Google.iOS.Places"; }
|
||||
}
|
||||
}
|
||||
|
||||
public class PlayGames : GoogleBase
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Google.PlayGames"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Google.iOS.PlayGames"; }
|
||||
}
|
||||
}
|
||||
|
||||
public class SignIn : GoogleBase
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Google.SignIn"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Google.iOS.SignIn"; }
|
||||
}
|
||||
public override string [] BaseOf {
|
||||
get { return new [] { new Firebase.Invites ().Name, new Google.PlayGames ().Name }; }
|
||||
}
|
||||
}
|
||||
|
||||
public class TagManager : GoogleBase
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Google.TagManager"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Google.iOS.TagManager"; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class Xamarin
|
||||
{
|
||||
public abstract class Build
|
||||
{
|
||||
public class Download : GoogleBase
|
||||
{
|
||||
public override string Name {
|
||||
get { return "Xamarin.Build.Download"; }
|
||||
}
|
||||
public override string NuGetId {
|
||||
get { return "Xamarin.Build.Download"; }
|
||||
}
|
||||
public override string [] BaseOf {
|
||||
get { return new [] { new Firebase.ABTesting ().Name, new Firebase.AdMob ().Name, new Firebase.Analytics ().Name,
|
||||
new Firebase.Auth ().Name, new Firebase.CloudFirestore ().Name, new Firebase.CloudMessaging ().Name,
|
||||
new Firebase.Core ().Name, new Firebase.Crashlytics ().Name, new Firebase.Database ().Name,
|
||||
new Firebase.DynamicLinks ().Name, new Firebase.InstanceID ().Name, new Firebase.Invites ().Name,
|
||||
new Firebase.PerformanceMonitoring ().Name, new Firebase.RemoteConfig ().Name, new Firebase.Storage ().Name,
|
||||
new Google.Analytics ().Name, new Google.AppIndexing ().Name, new Google.Cast ().Name,
|
||||
new Google.InstanceID ().Name, new Firebase.MLKit ().Name, new Firebase.MLKit.Common ().Name,
|
||||
new Firebase.MLKit.ModelInterpreter ().Name, new Google.Maps ().Name, new Google.MobileAds ().Name,
|
||||
new Google.Places ().Name, new Google.PlayGames ().Name, new Google.SignIn ().Name,
|
||||
new Google.TagManager ().Name };
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,95 +0,0 @@
|
|||
///////////////////////////////////////////////
|
||||
// Objects used to represent a *.nuspec file //
|
||||
///////////////////////////////////////////////
|
||||
|
||||
public class NuspecFile
|
||||
{
|
||||
[System.Xml.Serialization.XmlAttribute ("src")]
|
||||
public string Source { get; set; }
|
||||
|
||||
[System.Xml.Serialization.XmlAttribute ("target")]
|
||||
public string Target { get; set; }
|
||||
}
|
||||
|
||||
[XmlRoot ("dependency")]
|
||||
public class Dependency
|
||||
{
|
||||
[System.Xml.Serialization.XmlAttribute ("id")]
|
||||
public string Id { get; set; }
|
||||
|
||||
[System.Xml.Serialization.XmlAttribute ("version")]
|
||||
public string Version { get; set; }
|
||||
}
|
||||
|
||||
|
||||
public class Group
|
||||
{
|
||||
[System.Xml.Serialization.XmlAttribute ("targetFramework")]
|
||||
public string TargetFramework { get; set; }
|
||||
|
||||
[System.Xml.Serialization.XmlElement ("dependency")]
|
||||
public List<Dependency> Dependencies { get; set; }
|
||||
}
|
||||
|
||||
[XmlRoot ("metadata")]
|
||||
public class Metadata
|
||||
{
|
||||
[System.Xml.Serialization.XmlElement ("id")]
|
||||
public string Id { get; set; }
|
||||
|
||||
[System.Xml.Serialization.XmlElement ("title")]
|
||||
public string Title { get; set; }
|
||||
|
||||
[System.Xml.Serialization.XmlElement ("version")]
|
||||
public string Version { get; set; }
|
||||
|
||||
[System.Xml.Serialization.XmlElement ("authors")]
|
||||
public string Authors { get; set; }
|
||||
|
||||
[System.Xml.Serialization.XmlElement ("owners")]
|
||||
public string Owners { get; set; }
|
||||
|
||||
[System.Xml.Serialization.XmlElement ("requireLicenseAcceptance", Type = typeof (bool))]
|
||||
public bool RequireLicenseAcceptance { get; set; }
|
||||
|
||||
[System.Xml.Serialization.XmlElement ("description")]
|
||||
public string Description { get; set; }
|
||||
|
||||
[System.Xml.Serialization.XmlElement ("copyright")]
|
||||
public string Copyright { get; set; }
|
||||
|
||||
[System.Xml.Serialization.XmlElement ("projectUrl")]
|
||||
public string ProjectUrl { get; set; }
|
||||
|
||||
[System.Xml.Serialization.XmlElement ("licenseUrl")]
|
||||
public string LicenseUrl { get; set; }
|
||||
|
||||
[System.Xml.Serialization.XmlElement ("iconUrl")]
|
||||
public string IconUrl { get; set; }
|
||||
|
||||
[System.Xml.Serialization.XmlArray ("dependencies")]
|
||||
[System.Xml.Serialization.XmlArrayItem ("group")]
|
||||
public List<Group> DependenciesGroups { get; set; }
|
||||
}
|
||||
|
||||
[System.Xml.Serialization.XmlRoot ("package")]
|
||||
public class Nuspec
|
||||
{
|
||||
[System.Xml.Serialization.XmlElement ("metadata")]
|
||||
public Metadata Metadata { get; set; }
|
||||
|
||||
[System.Xml.Serialization.XmlArray ("files")]
|
||||
[System.Xml.Serialization.XmlArrayItem ("file")]
|
||||
public List<NuspecFile> Files { get; set; }
|
||||
}
|
||||
|
||||
public class NoEncodingStreamWriter : System.IO.StreamWriter
|
||||
{
|
||||
public override System.Text.Encoding Encoding {
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
public NoEncodingStreamWriter (string path) : base (path)
|
||||
{
|
||||
}
|
||||
}
|
254
poco.yaml.cake
254
poco.yaml.cake
|
@ -1,254 +0,0 @@
|
|||
/////////////////////////////////////////////////////
|
||||
// Objects used to represent a component.yaml file //
|
||||
/////////////////////////////////////////////////////
|
||||
|
||||
// public abstract class PathsBase
|
||||
// {
|
||||
// [YamlMember(Alias = "ios-unified")]
|
||||
// public List<string> iOSUnifiedPaths { get; set; }
|
||||
|
||||
// [YamlMember(Alias = "ios")]
|
||||
// public List<string> iOSPaths { get; set; }
|
||||
|
||||
// [YamlMember(Alias = "android")]
|
||||
// public List<string> AndroidPaths { get; set; }
|
||||
// }
|
||||
|
||||
// public class Libraries : PathsBase
|
||||
// {
|
||||
// }
|
||||
|
||||
// public class Packages : PathsBase
|
||||
// {
|
||||
// }
|
||||
|
||||
// public class AdditionalFile
|
||||
// {
|
||||
// [YamlMember(Alias = "source")]
|
||||
// public string SourcePath { get; set; }
|
||||
|
||||
// [YamlMember(Alias = "destination")]
|
||||
// public string DestinationPath { get; set; }
|
||||
// }
|
||||
|
||||
// public class NuGetInstaller
|
||||
// {
|
||||
// [YamlMember(Alias = "project")]
|
||||
// public string ProjectName { get; set; }
|
||||
|
||||
// [YamlMember(Alias = "packages")]
|
||||
// public List<string> PackagesNames { get; set; }
|
||||
// }
|
||||
|
||||
// public class Sample
|
||||
// {
|
||||
// [YamlMember(Alias = "name")]
|
||||
// public string Name { get; set; }
|
||||
|
||||
// [YamlMember(Alias = "path")]
|
||||
// public string Path { get; set; }
|
||||
|
||||
// [YamlMember(Alias = "removeProjects")]
|
||||
// public List<string> ProjectsToRemove { get; set; }
|
||||
|
||||
// [YamlMember(Alias = "installNuGets")]
|
||||
// public NuGetInstaller NuGetsToInstall { get; set; }
|
||||
|
||||
// [YamlMember(Alias = "removeFiles")]
|
||||
// public List<string> FilesToRemove { get; set; }
|
||||
|
||||
// [YamlMember(Alias = "removeNodes")]
|
||||
// public List<string> NodesToRemove { get; set; }
|
||||
// }
|
||||
|
||||
// public class Component
|
||||
// {
|
||||
// [YamlMember(Alias = "version")]
|
||||
// public string Version { get; set; }
|
||||
|
||||
// [YamlMember(Alias = "name")]
|
||||
// public string Name { get; set; }
|
||||
|
||||
// [YamlMember(Alias = "id")]
|
||||
// public string Id { get; set; }
|
||||
|
||||
// [YamlMember(Alias = "publisher")]
|
||||
// public string Publisher { get; set; }
|
||||
|
||||
// [YamlMember(Alias = "license")]
|
||||
// public string LicensePath { get; set; }
|
||||
|
||||
// [YamlMember(Alias = "publisher-url")]
|
||||
// public string PublisherUrl { get; set; }
|
||||
|
||||
// [YamlMember(Alias = "src-url")]
|
||||
// public string SourceUrl { get; set; }
|
||||
|
||||
// [YamlMember(Alias = "summary")]
|
||||
// public string Summary { get; set; }
|
||||
|
||||
// [YamlMember(Alias = "icons")]
|
||||
// public List<string> IconsPath { get; set; }
|
||||
|
||||
// [YamlMember(Alias = "docs-url")]
|
||||
// public string DocsUrl { get; set; }
|
||||
|
||||
// [YamlMember(Alias = "libraries")]
|
||||
// public Libraries Libraries { get; set; }
|
||||
|
||||
// [YamlMember(Alias = "is_shell")]
|
||||
// public bool IsShell { get; set; }
|
||||
|
||||
// [YamlMember(Alias = "packages")]
|
||||
// public Packages Packages { get; set; }
|
||||
|
||||
// [YamlMember(Alias = "samples")]
|
||||
// public List<Sample> Samples { get; set; }
|
||||
|
||||
// [YamlMember(Alias = "local-nuget-repo")]
|
||||
// public string LocalNuGetRepoPath { get; set; }
|
||||
|
||||
// [YamlMember(Alias = "no_build")]
|
||||
// public bool NoBuild { get; set; }
|
||||
|
||||
// [YamlMember(Alias = "additional-files")]
|
||||
// public List<AdditionalFile> AdditionalFiles { get; set; }
|
||||
// }
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Temporary objects with JsonProperty attribute used to //
|
||||
// represent a component.yaml file due YamlDotNet bug in //
|
||||
// v3.8.0 //
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
public abstract class PathsBase
|
||||
{
|
||||
[JsonProperty ("ios-unified")]
|
||||
[YamlMember(Alias = "ios-unified")]
|
||||
public List<string> iOSUnifiedPaths { get; set; }
|
||||
|
||||
[JsonProperty ("ios")]
|
||||
[YamlMember(Alias = "ios")]
|
||||
public List<string> iOSPaths { get; set; }
|
||||
|
||||
[JsonProperty ("android")]
|
||||
[YamlMember(Alias = "android")]
|
||||
public List<string> AndroidPaths { get; set; }
|
||||
}
|
||||
|
||||
public class Libraries : PathsBase
|
||||
{
|
||||
}
|
||||
|
||||
public class Packages : PathsBase
|
||||
{
|
||||
}
|
||||
|
||||
public class AdditionalFile
|
||||
{
|
||||
[JsonProperty ("source")]
|
||||
[YamlMember(Alias = "source")]
|
||||
public string SourcePath { get; set; }
|
||||
|
||||
[JsonProperty ("destination")]
|
||||
[YamlMember(Alias = "destination")]
|
||||
public string DestinationPath { get; set; }
|
||||
}
|
||||
|
||||
public class NuGetInstaller
|
||||
{
|
||||
[JsonProperty ("project")]
|
||||
[YamlMember(Alias = "project")]
|
||||
public string ProjectName { get; set; }
|
||||
|
||||
[JsonProperty ("packages")]
|
||||
[YamlMember(Alias = "packages")]
|
||||
public List<string> PackagesNames { get; set; }
|
||||
}
|
||||
|
||||
public class Sample
|
||||
{
|
||||
[YamlMember(Alias = "name")]
|
||||
public string Name { get; set; }
|
||||
|
||||
[YamlMember(Alias = "path")]
|
||||
public string Path { get; set; }
|
||||
|
||||
[JsonProperty ("removeProjects")]
|
||||
[YamlMember(Alias = "removeProjects")]
|
||||
public List<string> ProjectsToRemove { get; set; }
|
||||
|
||||
[JsonProperty ("installNuGets")]
|
||||
[YamlMember(Alias = "installNuGets")]
|
||||
public List<NuGetInstaller> NuGetsToInstall { get; set; }
|
||||
|
||||
[JsonProperty ("removeFiles")]
|
||||
[YamlMember(Alias = "removeFiles")]
|
||||
public List<string> FilesToRemove { get; set; }
|
||||
|
||||
[JsonProperty ("removeNodes")]
|
||||
[YamlMember(Alias = "removeNodes")]
|
||||
public List<string> NodesToRemove { get; set; }
|
||||
}
|
||||
|
||||
public class Component
|
||||
{
|
||||
[YamlMember(Alias = "version")]
|
||||
public string Version { get; set; }
|
||||
|
||||
[YamlMember(Alias = "name")]
|
||||
public string Name { get; set; }
|
||||
|
||||
[YamlMember(Alias = "id")]
|
||||
public string Id { get; set; }
|
||||
|
||||
[YamlMember(Alias = "publisher")]
|
||||
public string Publisher { get; set; }
|
||||
|
||||
[JsonProperty ("publisher-url")]
|
||||
[YamlMember(Alias = "publisher-url")]
|
||||
public string PublisherUrl { get; set; }
|
||||
|
||||
[YamlMember(Alias = "license")]
|
||||
public string LicensePath { get; set; }
|
||||
|
||||
[JsonProperty ("src-url")]
|
||||
[YamlMember(Alias = "src-url")]
|
||||
public string SourceUrl { get; set; }
|
||||
|
||||
[YamlMember(Alias = "summary")]
|
||||
public string Summary { get; set; }
|
||||
|
||||
[JsonProperty ("icons")]
|
||||
[YamlMember(Alias = "icons")]
|
||||
public List<string> IconsPath { get; set; }
|
||||
|
||||
[JsonProperty ("docs-url")]
|
||||
[YamlMember(Alias = "docs-url")]
|
||||
public string DocsUrl { get; set; }
|
||||
|
||||
[YamlMember(Alias = "libraries")]
|
||||
public Libraries Libraries { get; set; }
|
||||
|
||||
[JsonProperty ("is_shell")]
|
||||
[YamlMember(Alias = "is_shell")]
|
||||
public bool IsShell { get; set; }
|
||||
|
||||
[YamlMember(Alias = "packages")]
|
||||
public Packages Packages { get; set; }
|
||||
|
||||
[YamlMember(Alias = "samples")]
|
||||
public List<Sample> Samples { get; set; }
|
||||
|
||||
[JsonProperty ("local-nuget-repo")]
|
||||
[YamlMember(Alias = "local-nuget-repo")]
|
||||
public string LocalNuGetRepoPath { get; set; }
|
||||
|
||||
[JsonProperty ("no_build")]
|
||||
[YamlMember(Alias = "no_build")]
|
||||
public bool NoBuild { get; set; }
|
||||
|
||||
[JsonProperty ("additional-files")]
|
||||
[YamlMember(Alias = "additional-files")]
|
||||
public List<AdditionalFile> AdditionalFiles { get; set; }
|
||||
}
|
Загрузка…
Ссылка в новой задаче