/// <summary> /// Compile the necessary build jobs. /// </summary> public bool AddBuildJobs(DistroBuildMode buildMode, List <BuildRunner.Job> jobs) { if (buildMode == DistroBuildMode.None) { return(false); } var willBuild = false; foreach (var profile in builds) { if (profile == null) { continue; } foreach (var target in profile.BuildTargets) { var path = profile.GetLastBuildPath(target); if (buildMode == DistroBuildMode.BuildAll || string.IsNullOrEmpty(path) || (!File.Exists(path) && !Directory.Exists(path))) { jobs.Add(new BuildRunner.Job(profile, target)); willBuild = true; } } } return(willBuild); }
/// <summary> /// Process the builds of the linked Build Profiles and build the /// targets where no build exists. /// </summary> /// <param name="buildMode">Build mode to use</param> public void Distribute(DistroBuildMode buildMode) { if (buildMode != DistroBuildMode.None) { Build(buildMode, onComplete: this); return; } RunCoroutine(DistributeCoroutine(buildMode)); }
/// <summary> /// Build the profile's targets with the given build mode. /// Does not run the actual distribution. /// </summary> /// <param name="buildMode">Build mode to use (must not be <see cref="DistroBuildMode.None"/>)</param> /// <param name="onComplete">Listener that will be called when the builds are complete</param> public void Build(DistroBuildMode buildMode = DistroBuildMode.BuildAll, IBuildsCompleteListener onComplete = null) { var jobs = new List <BuildRunner.Job>(); AddBuildJobs(buildMode, jobs); var runner = ScriptableObject.CreateInstance <BuildRunner>(); runner.Run(jobs.ToArray(), onComplete, TrimmerPrefs.RestoreActiveBuildTarget, context: this); }
/// <summary> /// Process the builds of the linked Build Profiles and build the /// targets where no build exists. /// </summary> /// <param name="buildMode">Build mode to use</param> public void Distribute(DistroBuildMode buildMode = DistroBuildMode.BuildMissing, IBuildsCompleteListener onComplete = null) { var jobs = new List <BuildRunner.Job>(); var willBuild = AddBuildJobs(buildMode, jobs); jobs.Add(new BuildRunner.Job(this)); var runner = ScriptableObject.CreateInstance <BuildRunner>(); runner.Run(jobs.ToArray(), onComplete, willBuild && TrimmerPrefs.RestoreActiveBuildTarget, context: this); }
IEnumerator DistributeCoroutine(DistroBuildMode buildMode = DistroBuildMode.BuildMissing) { if (IsRunning) { throw new InvalidOperationException("Distribution '" + this.name + "' is already running."); } IsRunning = true; // Check that all builds are present var paths = GetBuildPaths(); if (!paths.Any()) { Debug.LogError(name + ": Distribution has no targets in any of its profiles"); IsRunning = false; yield break; } var missingBuilds = false; foreach (var path in paths) { if (path.path == null) { Debug.LogError(name + ": Missing build for target '" + path.target + "' of profile '" + path.profile + "'"); missingBuilds = true; } } if (missingBuilds) { IsRunning = false; yield break; } // Run distribution yield return(DistributeCoroutine(paths, buildMode == DistroBuildMode.BuildAll)); IsRunning = false; }
/// <summary> /// Build the profile's targets with the given build mode. /// Does not run the actual distribution. /// </summary> /// <param name="buildMode">Build mode to use (must not be <see cref="DistroBuildMode.None"/>)</param> /// <param name="onComplete">Listener that will be called when the builds are complete</param> public void Build(DistroBuildMode buildMode = DistroBuildMode.BuildMissing, IBuildsCompleteListener onComplete = null) { if (buildMode == DistroBuildMode.None) { throw new ArgumentException("Invalid parameter value DistroBuildMode.None", nameof(buildMode)); } var jobs = new List <BuildRunner.Job>(); foreach (var profile in builds) { if (profile == null) { continue; } foreach (var target in profile.BuildTargets) { var path = profile.GetLastBuildPath(target); if (buildMode == DistroBuildMode.BuildAll || string.IsNullOrEmpty(path) || (!File.Exists(path) && !Directory.Exists(path))) { jobs.Add(new BuildRunner.Job(profile, target)); } } } if (jobs.Count == 0) { onComplete.OnComplete(true, new ProfileBuildResult[0]); return; } var runner = ScriptableObject.CreateInstance <BuildRunner>(); runner.Run(jobs.ToArray(), onComplete, TrimmerPrefs.RestoreActiveBuildTarget); }