Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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));
        }
Exemplo n.º 3
0
        /// <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);
        }
Exemplo n.º 4
0
        /// <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);
        }
Exemplo n.º 5
0
        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;
        }
Exemplo n.º 6
0
        /// <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);
        }