public ProjectState GetProjectState(int projectId) { return(TaskRunnerContext.GetProjectVersionState(projectId)); }
private static void BuildProjects(AspNetDeployEntities entities) { List <BundleVersion> bundleVersions = entities.BundleVersion .Include("Properties") .Include("ProjectVersions.SourceControlVersion.Properties") .ToList(); foreach (BundleVersion bundleVersion in bundleVersions) { List <ProjectVersion> projectVersions = bundleVersion.ProjectVersions.Where(pv => ( pv.ProjectType.HasFlag(ProjectType.Database) || pv.ProjectType.HasFlag(ProjectType.WindowsApplication) || pv.ProjectType.HasFlag(ProjectType.Service) || pv.ProjectType.HasFlag(ProjectType.Console) || pv.ProjectType.HasFlag(ProjectType.Web) || pv.ProjectType.HasFlag(ProjectType.GulpFile) || pv.ProjectType.HasFlag(ProjectType.Test) )) .ToList(); IList <ProjectVersion> errorProjects = projectVersions.Where(pv => pv.GetStringProperty("LastBuildResult") == "Error").ToList(); foreach (ProjectVersion projectVersion in errorProjects) { TaskRunnerContext.SetProjectVersionState(projectVersion.Id, ProjectState.Error); } List <ProjectVersion> projectVersionsToRebuild = projectVersions.Where(pv => pv.SourceControlVersion.GetStringProperty("Revision") != pv.GetStringProperty("LastBuildRevision")).ToList(); if (projectVersionsToRebuild.Count == 0) { if (errorProjects.Count > 0) { TaskRunnerContext.SetBundleVersionState(bundleVersion.Id, BundleState.Error); } continue; } List <BundleVersion> affectedBundleVersions = projectVersionsToRebuild .SelectMany(pv => pv.BundleVersions) .Where(bv => !bv.IsDeleted) .ToList(); DateTime buildStartDate = DateTime.UtcNow; foreach (BundleVersion affectedBundleVersion in affectedBundleVersions) { TaskRunnerContext.SetBundleVersionState(affectedBundleVersion.Id, BundleState.Building); } bundleVersion.SetStringProperty("LastBuildStartDate", DateTime.UtcNow.ToString(CultureInfo.InvariantCulture)); entities.SaveChanges(); ProjectsBuildStrategy buildStrategy = new ProjectsBuildStrategy(entities); buildStrategy.Build(projectVersionsToRebuild); bool buildFailed = projectVersionsToRebuild.Any(pv => pv.GetStringProperty("LastBuildResult") == "Error"); foreach (BundleVersion affectedBundleVersion in affectedBundleVersions) { if (buildFailed) { TaskRunnerContext.SetBundleVersionState(affectedBundleVersion.Id, BundleState.Error); continue; } TaskRunnerContext.SetBundleVersionState(affectedBundleVersion.Id, BundleState.Idle); } if (bundleVersion.ProjectVersions.All(pv => TaskRunnerContext.GetProjectVersionState(pv.Id) == ProjectState.Idle)) { bundleVersion.SetStringProperty("LastBuildDuration", (DateTime.UtcNow - buildStartDate).TotalSeconds.ToString(CultureInfo.InvariantCulture)); } entities.SaveChanges(); } }