public BuildRepositoryTests() { _request = Substitute.For <IRequest>(); _requestFactory = Substitute.For <IRequestFactory>(); _requestFactory.Create(Arg.Any <string>(), Arg.Any <Method>(), Arg.Any <bool>()).Returns(_request); _sut = new BuildRepository(_requestFactory); }
public async Task StartAsync(CancellationToken cancellationToken) { // set provider instances for legacy code (task manager, preview provider) Services.AddSenseNetProviderInstances(); var configuration = Services.GetService <IConfiguration>(); var repositoryBuilder = new RepositoryBuilder() .UseConfiguration(configuration) .UseLogger(new SnFileSystemEventLogger()) .UseTracer(new SnFileSystemTracer()) .UseAccessProvider(new UserAccessProvider()) .UseDataProvider(new MsSqlDataProvider()) .StartWorkflowEngine(false) .UseTraceCategories("Event", "Custom", "System", "Security") as RepositoryBuilder; // hook for developers to modify the repository builder before start BuildRepository?.Invoke(repositoryBuilder, Services); try { Repository = ContentRepository.Repository.Start(repositoryBuilder); if (OnRepositoryStartedAsync != null) { await OnRepositoryStartedAsync.Invoke(Repository, Services); } } catch (Exception ex) { SnLog.WriteException(ex, $"Error during repository start: {ex.Message}"); throw; } }
/* static void StreamDeclaredSystemsValue<TDoc, TCursor>(IO.TagElementStream<TDoc, TCursor, string> s, * BlamEngine engine, * ref string externsFile) * where TDoc : class * where TCursor : class * { * s.StreamAttributeOpt("externs", ref externsFile, Predicates.IsNotNullOrEmpty); * }*/ public void Serialize <TDoc, TCursor>(IO.TagElementStream <TDoc, TCursor, string> s) where TDoc : class where TCursor : class { Contract.Assert(s.Owner == null); s.Owner = this; using (s.EnterUserDataBookmark(this)) { BuildRepository.Serialize(s); using (var bm = s.EnterCursorBookmarkOpt("Systems", mSystemPrototypes, Predicates.HasItems)) if (bm.IsNotNull) { s.StreamableElements("System", mSystemPrototypes, this, StreamSystemPrototypeKey); } } /* using (var bm = s.EnterCursorBookmarkOpt("Systems", mDeclaredSystems, Predicates.HasItems)) if (bm.IsNotNull) * s.StreamElements("System", mDeclaredSystems, this, * StreamSystemPrototypeKey, StreamDeclaredSystemsValue, * _ctxt => null);*/ if (s.IsReading) { if (mSystemPrototypes.Count > 0) { mActiveSystems = new Dictionary <Values.KGuid, EngineSystemBase>(mSystemPrototypes.Count); } } }
public async Task <ActionResult> migrate() { BuildRepository _bModel = new BuildRepository(); await _bModel.MigrateAddedModifiedToHistory(); return(RedirectToAction("index")); }
public async Task <ActionResult> cache() { BuildRepository _bModel = new BuildRepository(); await _bModel.RegenerateCachedProperties(); return(RedirectToAction("index")); }
public void GetLastFailedBuildAsync_WithFailedBuilds_ReturnsLastBuild() { // Arrange var data = new List <Build> { new Build { BuildNumber = "bn0", Id = 0, CreatedAt = new DateTime(2014, 01, 01), Status = BuildStatus.PartiallySucceeded }, new Build { BuildNumber = "bn1", Id = 1, CreatedAt = new DateTime(2014, 01, 02), Status = BuildStatus.Failed }, new Build { BuildNumber = "bn2", Id = 2, CreatedAt = new DateTime(2014, 01, 03), Status = BuildStatus.Succeeded } } .AsQueryable(); var mockContext = BuildBuildContext(data); var target = new BuildRepository(mockContext.Object); // Act var act = target.GetLastFailedBuildAsync().Result; // Assert Assert.AreEqual(1, act.Id); }
public async Task <ActionResult> RegenerateCache() { var bRepo = new BuildRepository(); await bRepo.RegenerateCachedProperties(); return(RedirectToAction(nameof(Index))); }
public BuildTasksService(PriorityQueue <BuildTask> queue, BuildStepRepository buildStepRepository, ILogger <BuildTasksService> logger, ProjectRepository projectRepository, BuildRepository buildRepository) { this.queue = queue; this.buildStepRepository = buildStepRepository; this.logger = logger; this.projectRepository = projectRepository; this.buildRepository = buildRepository; }
protected override async System.Threading.Tasks.Task InitializeAsync(CancellationToken cancellationToken, IProgress <ServiceProgressData> progress) { // Switches to the UI thread, which most of this package requires. Even joining the main thread here improves // the load time of the package, and it stops a warning popping up when you load vs2019 with the package installed. await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken); await base.InitializeAsync(cancellationToken, progress); output = new OutputWindowWrapper(this); SettingsManager settingsManager = new ShellSettingsManager(ServiceProvider.GlobalProvider); WritableSettingsStore settingsStore = settingsManager.GetWritableSettingsStore(SettingsScope.UserSettings); Settings.Instance = new Settings(settingsStore); var factory = new BuildFactory(); var repository = new BuildRepository(Settings.Instance.RepositoryPath); monitor = new BuildMonitor.Domain.Monitor(factory, repository); dataAdjuster = new DataAdjusterWithLogging(repository, output.WriteLine); //if invalid data, adjust it dataAdjuster.Adjust(); // Get solution build manager sbm = ServiceProvider.GlobalProvider.GetService(typeof(SVsSolutionBuildManager)) as IVsSolutionBuildManager2; if (sbm != null) { sbm.AdviseUpdateSolutionEvents(this, out updateSolutionEventsCookie); } // Must hold a reference to the solution events object or the events wont fire, garbage collection related events = GetDTE().Events.SolutionEvents; events.Opened += Solution_Opened; GetDTE().Events.BuildEvents.OnBuildBegin += Build_Begin; output.WriteLine("Build monitor initialized"); output.WriteLine("Path to persist data: {0}", Settings.Instance.RepositoryPath); monitor.SolutionBuildFinished = b => { output.Write("[{0}] Time Elapsed: {1} \t\t", b.SessionBuildCount, b.SolutionBuildTime.ToTime()); output.WriteLine("Session build time: {0}\n", b.SessionMillisecondsElapsed.ToTime()); output.WriteLine("Rebuild All: {0}\n", b.SolutionBuild.IsRebuildAll); //System.Threading.Tasks.Task.Factory.StartNew(() => SaveToDatabase(b)); }; monitor.ProjectBuildFinished = b => output.WriteLine(" - {0}\t-- {1} --", b.MillisecondsElapsed.ToTime(), b.ProjectName); // In vs 2017 and earlier, this event was always called, but in 2019 it isn't called if you open a solution on startup. // I imagine this is because the solution has already loaded before we connect to the events. To get over it we just // manually call the event here. Solution_Opened(); AnalyseBuildTimesCommand.Initialize(this); }
protected PullRequestUpdaterBase(IPullRequestRepository pullRequestRepository, RequestData requestData, RepositoryRepository repositoryRepository, UpdateStatusRepository updateStatusRepository, BuildRepository buildRepository, ILogger <PullRequestUpdaterBase> logger) : base(logger) { RequestData = requestData; this.repositoryRepository = repositoryRepository; this.updateStatusRepository = updateStatusRepository; this.buildRepository = buildRepository; PullRequestRepository = pullRequestRepository; }
public PullRequestUpdater(PullRequestRepository pullRequestRepository, RequestData requestData, RepositoryRepository repositoryRepository, UpdateStatusRepository updateStatusRepository, BuildRepository buildRepository, ILogger <PullRequestUpdater> logger) : base(logger) { this.requestData = requestData; this.repositoryRepository = repositoryRepository; this.updateStatusRepository = updateStatusRepository; this.buildRepository = buildRepository; this.pullRequestRepository = pullRequestRepository; }
public BuildUpdater(BuildRepository buildRepository, RequestData requestData, ProjectRepository projectRepository, UpdateStatusRepository updateStatusRepository, ILogger <BuildUpdater> logger, RepositoryRepository repositoryRepository, BuildDefinitionRepository buildDefinitionRepository) : base(logger) { this.buildRepository = buildRepository; this.requestData = requestData; this.projectRepository = projectRepository; this.updateStatusRepository = updateStatusRepository; this.repositoryRepository = repositoryRepository; this.buildDefinitionRepository = buildDefinitionRepository; }
public BuildMonitorPackage() { Settings.CreateApplicationFolderIfNotExist(); var factory = new BuildFactory(); var repository = new BuildRepository(Settings.RepositoryPath); monitor = new Monitor(factory, repository); dataAdjuster = new DataAdjusterWithLogging(repository, PrintLine); }
private async Task <BuildDefinition> CreateDefinitionAsync(string definitionName, SdkComponent component, CancellationToken cancellationToken) { var serviceEndpoint = await Context.GetServiceEndpointAsync(cancellationToken); var repository = Context.Repository; var buildRepository = new BuildRepository { DefaultBranch = Context.Branch, Id = repository, Name = repository, Type = "GitHub", Url = new Uri($"https://github.com/{repository}.git"), Properties = { ["connectedServiceId"] = serviceEndpoint.Id.ToString() } }; var projectReference = await Context.GetProjectReferenceAsync(cancellationToken); var agentPoolQueue = await Context.GetAgentPoolQueue(cancellationToken); var normalizedRelativeYamlPath = component.RelativeYamlPath.Replace("\\", "/"); var definition = new BuildDefinition() { Name = definitionName, Project = projectReference, Path = Context.DevOpsPath, Repository = buildRepository, Process = new YamlProcess() { YamlFilename = normalizedRelativeYamlPath }, Queue = agentPoolQueue }; if (!Context.WhatIf) { Logger.LogDebug("Creating definition named '{0}'.", definitionName); var buildClient = await Context.GetBuildHttpClientAsync(cancellationToken); definition = await buildClient.CreateDefinitionAsync( definition : definition, cancellationToken : cancellationToken ); Logger.LogInformation("Created definition '{0}' at: {1}", definitionName, definition.GetWebUrl()); } else { Logger.LogWarning("Skipping creating definition '{0}' (--whatif).", definitionName); } return(definition); }
public void GetCurrentBuildReturnsIsCurrentlyBuilding() { SetupMockConnectionHelper(MockUrl, SetUpExpectedResultXml()); SetupMockConnectionHelper(ExpectedResult.ApiLink, XDocument.Parse("<build><building>true</building><result>Unstable</result></build>")); _buildRepositoryToTest = new BuildRepository(_mockHelper.Object); var buildToTest = _buildRepositoryToTest.GetCurrentBuild(MockUrl); Assert.IsTrue(buildToTest.IsBuilding); }
private async Task <BuildDefinition> CreateDefinitionAsync(string definitionName, SdkComponent component, CancellationToken cancellationToken) { var sourceRepository = await Context.GetSourceRepositoryAsync(cancellationToken); var buildRepository = new BuildRepository() { DefaultBranch = Context.Branch, Id = sourceRepository.Id, Name = sourceRepository.FullName, Type = "GitHub", Url = new Uri(sourceRepository.Properties["cloneUrl"]), }; buildRepository.Properties.AddRangeIfRangeNotNull(sourceRepository.Properties); var projectReference = await Context.GetProjectReferenceAsync(cancellationToken); var agentPoolQueue = await Context.GetAgentPoolQueue(cancellationToken); var normalizedRelativeYamlPath = component.RelativeYamlPath.Replace("\\", "/"); var definition = new BuildDefinition() { Name = definitionName, Project = projectReference, Path = Context.DevOpsPath, Repository = buildRepository, Process = new YamlProcess() { YamlFilename = normalizedRelativeYamlPath }, Queue = agentPoolQueue }; if (!Context.WhatIf) { Logger.LogDebug("Creating definition named '{0}'.", definitionName); var buildClient = await Context.GetBuildHttpClientAsync(cancellationToken); definition = await buildClient.CreateDefinitionAsync( definition : definition, cancellationToken : cancellationToken ); Logger.LogInformation("Created definition '{0}' at: {1}", definitionName, definition.GetWebUrl()); } else { Logger.LogWarning("Skipping creating definition '{0}' (--whatif).", definitionName); } return(definition); }
public JobRequestUpdater(JobRequestRepository jobRequestRepository, RequestData requestData, PoolRepository poolRepository, BuildRepository buildRepository, UpdateStatusRepository updateStatusRepository, BuildDefinitionRepository buildDefinitionRepository, ProjectRepository projectRepository, ReleaseDefinitionRepository releaseDefinitionRepository, ILogger <JobRequestUpdater> logger) : base(logger) { this.jobRequestRepository = jobRequestRepository; this.requestData = requestData; this.poolRepository = poolRepository; this.buildRepository = buildRepository; this.updateStatusRepository = updateStatusRepository; this.buildDefinitionRepository = buildDefinitionRepository; this.projectRepository = projectRepository; this.releaseDefinitionRepository = releaseDefinitionRepository; }
private static void Main(string[] args) { Task.Run(async() => { BuildRepository bModel = new BuildRepository(); foreach (Build build in await bModel.SelectBuildsByOrder()) { await bModel.Update(build); } }).Wait(); }
public void GetCurrentBuildReturnsBuildDetails() { SetupMockConnectionHelper(MockUrl, SetUpExpectedResultXml()); SetupMockConnectionHelper(ExpectedResult.ApiLink, new XDocument()); _buildRepositoryToTest = new BuildRepository(_mockHelper.Object); var buildToTest = _buildRepositoryToTest.GetCurrentBuild(MockUrl); Assert.AreEqual(ExpectedResult.BuildNumber, buildToTest.BuildNumber); Assert.AreEqual(ExpectedResult.Link, buildToTest.Link); }
public void GetMonthlyHighlitedBuilds_OnTakeTwo_GetTwoBuildsFromDifferentProjects() { // Arrange var mockContext = BuildHighlitedBuildContext(); var target = new BuildRepository(mockContext.Object); // Act var act = target.GetMonthHighlitedBuilds(2014, 1, true, 2, null).Result; // Assert Assert.AreNotEqual(act[0].Project.Name, act[1].Project.Name); }
public void GetMonthlyHighlitedBuilds_OnTakeTwo_GetTwoBuilds() { // Arrange var mockContext = BuildHighlitedBuildContext(); var target = new BuildRepository(mockContext.Object); // Act var act = target.GetMonthHighlitedBuilds(2014, 1, true, 2, null).Result; // Assert Assert.AreEqual(2, act.Count()); }
public void GetCurrentBuildWithUnrecognizedBuildState() { SetupMockConnectionHelper(MockUrl, SetUpExpectedResultXml()); SetupMockConnectionHelper(ExpectedResult.ApiLink, XDocument.Parse("<build><result>Succeed</result></build>")); _buildRepositoryToTest = new BuildRepository(_mockHelper.Object); var buildToTest = _buildRepositoryToTest.GetCurrentBuild(MockUrl); Assert.AreEqual(Build.BuildState.Unknown, buildToTest.State); }
public void GetMonthlyHighlitedBuilds_OnFilterByDashboard_GetDashboardProject() { // Arrange var mockContext = BuildHighlitedBuildContext(); var target = new BuildRepository(mockContext.Object); // Act var act = target.GetMonthHighlitedBuilds(2014, 1, true, 1, "DS1").Result; // Assert Assert.AreNotEqual("project1", act[0].Project.Name); }
public async Task<ActionResult> BuildLog(string projectId, string buildType) { if (!string.IsNullOrEmpty(projectId)) { var buildRepo = new BuildRepository(); if (!string.IsNullOrEmpty(projectId)) { var builds = await buildRepo.GetByProject(projectId); return View(builds); } } return View(new List<Build>()); }
public void GetHighlitedBuilds_OnTop_GetHighestScoreBuilds() { // Arrange var mockContext = BuildHighlitedBuildContext(); var target = new BuildRepository(mockContext.Object); // Act var act = target.GetHighlitedBuilds(true, 1).Result; // Assert Assert.AreEqual(1, act.Count()); Assert.AreEqual(4, act.First().Id); }
public void GetCurrentBuildReturnsBuildState() { SetupMockConnectionHelper(MockUrl, SetUpExpectedResultXml()); SetupMockConnectionHelper(ExpectedResult.ApiLink, XDocument.Parse("<build><result>Success</result></build>")); _buildRepositoryToTest = new BuildRepository(_mockHelper.Object); var buildToTest = _buildRepositoryToTest.GetCurrentBuild(MockUrl); Assert.AreEqual(ExpectedResult.State, buildToTest.State); Assert.IsFalse(buildToTest.IsBuilding); }
public void GetMonthlyHighlitedBuilds_OnTopFalse_GetLowestScoreBuilds() { // Arrange var mockContext = BuildHighlitedBuildContext(); var target = new BuildRepository(mockContext.Object); // Act var act = target.GetMonthHighlitedBuilds(2014, 1, false, 1, null).Result; // Assert Assert.AreEqual(1, act.Count()); Assert.AreEqual(12, act.First().Id); }
public void GetBuildStateShouldIgnoreCase() { SetupMockConnectionHelper(MockUrl, SetUpExpectedResultXml(String.Format("<lastBuild><number>{0}</number><url>{1}</url></lastBuild>", ExpectedResult.BuildNumber, ExpectedResult.Link))); SetupMockConnectionHelper(ExpectedResult.ApiLink, XDocument.Parse("<build><result>FAILURE</result></build>")); _buildRepositoryToTest = new BuildRepository(_mockHelper.Object); var buildToTest = _buildRepositoryToTest.GetCurrentBuild(MockUrl); Assert.AreNotEqual(Build.BuildState.Unknown, buildToTest.State); Assert.AreEqual(Build.BuildState.Failure, buildToTest.State); }
public void GetLastBuild_WithNoBuilds_ReturnsNull() { // Arrange var data = new List <Build>().AsQueryable(); var mockContext = BuildBuildContext(data); var target = new BuildRepository(mockContext.Object); /// Act var act = target.GetLastBuild(); // Assert Assert.IsNull(act); }
public async Task <BuildDefinition> CreatePipeline(string name, string projectName, string repositoryName, string filename, string folderPath) { BuildDefinition definition = new BuildDefinition { Name = name, Description = $"A pipeline for {name} based on {filename}" }; BuildRepository repository = new BuildRepository { Name = repositoryName, Type = "tfsgit", DefaultBranch = "master" }; definition.Repository = repository; definition.Path = folderPath; var process = new YamlProcess { YamlFilename = filename }; definition.Process = process; definition.Queue = new AgentPoolQueue { Id = await GetAgentQueueByHeuristic(projectName) }; ContinuousIntegrationTrigger ciTrigger = new ContinuousIntegrationTrigger(); ciTrigger.SettingsSourceType = 2; definition.Triggers.Add(ciTrigger); BuildDefinition pipeline = null; try { pipeline = await Build.CreateDefinitionAsync(definition, projectName); } catch (DefinitionExistsException) { pipeline = await GetPipeline(projectName, name); } return(pipeline); }
protected override void Initialize() { base.Initialize(); output = new OutputWindowWrapper(this); SettingsManager settingsManager = new ShellSettingsManager(ServiceProvider.GlobalProvider); WritableSettingsStore settingsStore = settingsManager.GetWritableSettingsStore(SettingsScope.UserSettings); Settings.Instance = new Settings(settingsStore); var factory = new BuildFactory(); var repository = new BuildRepository(Settings.Instance.RepositoryPath); monitor = new Monitor(factory, repository); dataAdjuster = new DataAdjusterWithLogging(repository, output.WriteLine); //if invalid data, adjust it dataAdjuster.Adjust(); // Get solution build manager sbm = ServiceProvider.GlobalProvider.GetService(typeof(SVsSolutionBuildManager)) as IVsSolutionBuildManager2; if (sbm != null) { sbm.AdviseUpdateSolutionEvents(this, out updateSolutionEventsCookie); } // Must hold a reference to the solution events object or the events wont fire, garbage collection related events = GetDTE().Events.SolutionEvents; events.Opened += Solution_Opened; GetDTE().Events.BuildEvents.OnBuildBegin += Build_Begin; output.WriteLine("Build monitor initialized"); output.WriteLine("Path to persist data: {0}", Settings.Instance.RepositoryPath); monitor.SolutionBuildFinished = b => { output.Write("[{0}] Time Elapsed: {1} \t\t", b.SessionBuildCount, b.SolutionBuildTime.ToTime()); output.WriteLine("Session build time: {0}\n", b.SessionMillisecondsElapsed.ToTime()); output.WriteLine("Rebuild All: {0}\n", b.SolutionBuild.IsRebuildAll); //System.Threading.Tasks.Task.Factory.StartNew(() => SaveToDatabase(b)); }; monitor.ProjectBuildFinished = b => output.WriteLine(" - {0}\t-- {1} --", b.MillisecondsElapsed.ToTime(), b.ProjectName); AnalyseBuildTimesCommand.Initialize(this); }
private async Task<Task> ProcessBuild(Project project, string buildType, string user) { var buildRepo = new BuildRepository(); var ticks = DateTime.Now.Ticks.ToString(); var build = new Build { ProjectId = project.Id, BuildType = buildType, Status = "Pulling source files", BuildDateTime = Helper.SetDateForMongo(DateTime.Now), BuildFileLog = string.Format("{0}{1}_{2}Build.txt", user, ticks, buildType), GitFileLog = string.Format("{0}{1}_{2}GitPull.txt", user, ticks, buildType), OutputZipFile = string.Format("{0}{1}_{2}Build.zip", user, ticks, buildType), }; await buildRepo.CreateSync(build); return Task.Factory.StartNew(() => { var startDateTime = DateTime.Now; var baseWorkingDirectory = ConfigurationManager.AppSettings["WorkingDirectory"].ToString(); var baseOutputDirectory = ConfigurationManager.AppSettings["OutputDirectory"].ToString(); var workingDirectory = Path.Combine(baseWorkingDirectory, DateTime.Now.Ticks.ToString()); if (!Directory.Exists(workingDirectory)) { Directory.CreateDirectory(workingDirectory); } var outputDirectory = Path.Combine(baseOutputDirectory, string.Format("{0}\\{1}\\{2}", user, project.Id.ToString(), buildType)); if (!Directory.Exists(outputDirectory)) { Directory.CreateDirectory(outputDirectory); } var gitCommand = string.Format("git clone https://{0}:{1}@{2}", project.GitUsername, project.GitPassword, project.GitUrl.Replace("https://", "")); ExecuteCommand(gitCommand, workingDirectory, outputDirectory, build.GitFileLog); var workingDirectoryInfo = new DirectoryInfo(workingDirectory); var projectFolderName = (workingDirectoryInfo.GetDirectories()).FirstOrDefault().ToString(); if (!string.IsNullOrEmpty(projectFolderName)) { var projectFolder = Path.Combine(workingDirectory, projectFolderName); var cordovaAddPlatformCommand = string.Format("cordova platform add {0}", buildType); ExecuteCommand(cordovaAddPlatformCommand, projectFolder, outputDirectory, build.BuildFileLog); var cordovaBuildCommand = string.Format("cordova build {0}", buildType); Task.Run(async () => { var timeDifference = DateTime.Now - startDateTime; buildRepo.UpdateStatus("Building project", build.Id.ToString(), (int)timeDifference.TotalSeconds); }); ExecuteCommand(cordovaBuildCommand, projectFolder, outputDirectory, build.BuildFileLog); var buildDirectory = Path.Combine(workingDirectory, projectFolder, string.Format("platforms\\{0}", buildType)); var zipFullPath = Path.Combine(outputDirectory, build.OutputZipFile); Task.Run(async () => { var timeDifference = DateTime.Now - startDateTime; buildRepo.UpdateStatus("Completed", build.Id.ToString(), (int)timeDifference.TotalSeconds); }); ZipFile.CreateFromDirectory(buildDirectory, zipFullPath, CompressionLevel.Fastest, true); } }); }