public static BuildPipelineCodes Build(BuildSettings settings, BuildCompression compression, string outputFolder, BuildDependencyInfo buildInfo, BuildWriteInfo writeInfo, out BuildResultInfo result, bool useCache = false, BuildProgressTracker progressTracker = null)
        {
            result = new BuildResultInfo();

            // Write out resource files
            var commandSetWriter = new BuildWriteWriter(useCache, progressTracker);
            var exitCode         = commandSetWriter.Convert(writeInfo, settings, buildInfo.buildGlobalUsage, out result);

            if (exitCode < BuildPipelineCodes.Success)
            {
                return(exitCode);
            }

            // Archive and compress resource files
            var resourceArchiver = new ResourceFileArchiver(useCache, progressTracker);

            exitCode = resourceArchiver.Convert(result, compression, outputFolder, out result.bundleCRCs);
            if (exitCode < BuildPipelineCodes.Success)
            {
                return(exitCode);
            }

            // Generate Unity5 compatible manifest files
            //string[] manifestfiles;
            //var manifestWriter = new Unity5ManifestWriter(useCache, true);
            //if (!manifestWriter.Convert(commandSet, output, crc, outputFolder, out manifestfiles))
            //    return false;

            return(exitCode);
        }
Example #2
0
 public SearchBuildLogsResult(BuildResultInfo buildInfo, string jobName, TimelineRecord record, BuildLogReference buildLogReference, string line)
 {
     BuildInfo         = buildInfo;
     JobName           = jobName;
     Record            = record;
     BuildLogReference = buildLogReference;
     Line = line;
 }
Example #3
0
 public SearchTimelineResult(
     TimelineRecordItem record,
     BuildResultInfo buildInfo,
     string line)
 {
     Record          = record;
     BuildResultInfo = buildInfo;
     Line            = line;
 }
Example #4
0
        public IEnumerable <SearchTimelineResult> SearchTimeline(
            BuildResultInfo buildInfo,
            Timeline timeline,
            string text,
            string?name = null,
            string?task = null,
            int?attempt = null)
        {
            var textRegex = CreateSearchRegex(text);
            var nameRegex = CreateSearchRegex(name);
            var taskRegex = CreateSearchRegex(task);

            return(SearchTimeline(buildInfo, timeline, textRegex, nameRegex, taskRegex));
        }
Example #5
0
        public async Task <ModelBuild> EnsureBuildAsync(BuildResultInfo buildInfo)
        {
            var modelBuildId = GetModelBuildId(buildInfo.BuildKey);
            var modelBuild   = Context.ModelBuilds
                               .Where(x => x.Id == modelBuildId)
                               .FirstOrDefault();

            if (modelBuild is object)
            {
                // This code accounts for the fact that we will see multiple attempts of a build and that will
                // change the result. When those happens we should update all of the following values. It may
                // seem strange to update start and finish time here but that is how the AzDO APIs work and it's
                // best to model them in that way.
                if (modelBuild.BuildResult != buildInfo.BuildResult)
                {
                    modelBuild.StartTime   = buildInfo.StartTime;
                    modelBuild.FinishTime  = buildInfo.FinishTime;
                    modelBuild.BuildResult = buildInfo.BuildResult;
                    await Context.SaveChangesAsync().ConfigureAwait(false);
                }

                return(modelBuild);
            }

            var prKey = buildInfo.PullRequestKey;
            var modelBuildDefinition = await EnsureBuildDefinitionAsync(buildInfo.DefinitionInfo).ConfigureAwait(false);

            modelBuild = new ModelBuild()
            {
                Id = modelBuildId,
                ModelBuildDefinitionId = modelBuildDefinition.Id,
                AzureOrganization      = modelBuildDefinition.AzureOrganization,
                AzureProject           = modelBuildDefinition.AzureProject,
                GitHubOrganization     = buildInfo.GitHubBuildInfo?.Organization,
                GitHubRepository       = buildInfo.GitHubBuildInfo?.Repository,
                GitHubTargetBranch     = buildInfo.GitHubBuildInfo?.TargetBranch,
                PullRequestNumber      = prKey?.Number,
                StartTime      = buildInfo.StartTime,
                FinishTime     = buildInfo.FinishTime,
                QueueTime      = buildInfo.QueueTime,
                BuildNumber    = buildInfo.Number,
                BuildResult    = buildInfo.BuildResult,
                DefinitionName = buildInfo.DefinitionName,
                DefinitionId   = buildInfo.DefinitionInfo.Id,
            };
            Context.ModelBuilds.Add(modelBuild);
            Context.SaveChanges();
            return(modelBuild);
        }
Example #6
0
        public IEnumerable <SearchTimelineResult> SearchTimeline(
            BuildResultInfo buildInfo,
            Timeline timeline,
            Regex text,
            Regex?name  = null,
            Regex?task  = null,
            int?attempt = null)
        {
            var timelineTree = TimelineTree.Create(timeline);
            var records      = timeline.Records
                               .Where(r => name is null || name.IsMatch(r.Name))
                               .Where(r => r.Task is null || task is null || task.IsMatch(r.Task.Name));

            foreach (var record in records)
            {
                if (record.Issues is null)
                {
                    continue;
                }

                string?line = null;
                foreach (var issue in record.Issues)
                {
                    if (text.IsMatch(issue.Message))
                    {
                        line = issue.Message;
                        break;
                    }
                }

                if (line is object)
                {
                    yield return(new SearchTimelineResult(
                                     new TimelineRecordItem(record, timelineTree),
                                     buildInfo,
                                     line));
                }
            }
        }
Example #7
0
 public static BuildKey GetBuildKey(BuildResultInfo buildInfo) =>
 new BuildKey(buildInfo.Organization, buildInfo.Project, buildInfo.Number);
Example #8
0
        public async Task <ModelBuildAttempt> EnsureBuildAttemptAsync(BuildResultInfo buildInfo, Timeline timeline)
        {
            var modelBuild = await EnsureBuildAsync(buildInfo).ConfigureAwait(false);

            return(await EnsureBuildAttemptAsync(modelBuild, buildInfo.BuildResult, timeline).ConfigureAwait(false));
        }