public IEnumerable <BuildTargetConfig> GetSupportedTargets(BuildContextSettings contextSettings)
        {
            // Filter targets for CI
            var targetConfigs = BuildTargets
                                .Where(t => t.Enabled && contextSettings.Matches(t.Target))
                                .ToList();

            // Filter out any deprecated targets
            var supportedTargets = targetConfigs
                                   .Where(c => !c.Deprecated)
                                   .ToList();

            // Which build targets are not supported by current install?
            var missingTargets = supportedTargets
                                 .Where(c => !BuildSupportChecker.CanBuildTarget(c.Target))
                                 .ToList();

            // Error on missing required build support
            if (missingTargets.Any(c => c.Required))
            {
                var targetNames = string.Join(", ", missingTargets
                                              .Where(c => c.Required)
                                              .Select(c => c.Target.ToString()));
                throw new BuildFailedException($"Cannot build for required ({targetNames}) because build support is not installed in the Unity Editor.");
            }

            // Log builds we're skipping
            if (missingTargets.Count > 0)
            {
                var targetNames = string.Join(", ", missingTargets.Select(c => c.Target.ToString()));
                Debug.LogWarning(
                    $"Skipping ({targetNames}) because build support is not installed in the Unity Editor and the build target is not marked as 'Required'.");

                supportedTargets.RemoveAll(t => missingTargets.Contains(t));
            }

            return(supportedTargets);
        }
Exemplo n.º 2
0
        public static List <BuildContext> GetBuildContexts(BuildConfig buildConfig, BuildContextSettings contextSettings)
        {
            var result = new List <BuildContext>();

            foreach (var workerType in contextSettings.WantedWorkerTypes)
            {
                var environmentConfig =
                    buildConfig.GetEnvironmentConfigForWorker(workerType, contextSettings.BuildEnvironment);

                if (environmentConfig == null)
                {
                    continue;
                }

                IEnumerable <BuildTargetConfig> supportedTargets;
                try
                {
                    supportedTargets = environmentConfig.GetSupportedTargets(contextSettings);
                }
                catch (BuildFailedException exception)
                {
                    throw new BuildFailedException($"Build failed for {workerType}. {exception.Message}");
                }

                result.AddRange(supportedTargets.Select(targetConfig => new BuildContext
                {
                    WorkerType              = workerType,
                    BuildEnvironment        = contextSettings.BuildEnvironment,
                    ScriptingImplementation = contextSettings.ScriptImplementation ?? targetConfig.ScriptingImplementation,
                    BuildTargetConfig       = targetConfig,
                    IOSSdkVersion           = (targetConfig.Target == BuildTarget.iOS) ? contextSettings.IOSSdkVersion : null
                }));
            }

            return(result);
        }