public void Execute(Entity dataModel, ChangeObservable observable)
        {
            ProjectEntity project = ProjectEntity.Decorate(dataModel.Root);

            IEnumerable <Entity> targets = project.Targets.ToArray();

            if (!targets.Any())
            {
                throw new FormattableException("Please use --target to specify for which targets the library shall be generated.");
            }

            foreach (Entity target in targets)
            {
                VirtualDirectory deployRoot      = DeployEntity.Decorate(target).DeployDirectory;
                VirtualDirectory deployDirectory = deployRoot.Directory("lib", project.Name);
                BuildEntity      buildEntity     = BuildEntity.Decorate(target);
                if (!buildEntity.HasBuildSystem)
                {
                    TargetEntity targetEntity = TargetEntity.Decorate(target);
                    executionContext.WriteWarning(new CMakeBuildSystemNotFoundException(targetEntity.FullName, buildEntity.BuildType).Message);
                    return;
                }

                foreach (string externalLibrary in buildEntity.BuildSystem.ExternalLibraries)
                {
                    VirtualFile newFile = fileSystem.GetFile(externalLibrary).CopyTo(deployDirectory);
                    executionContext.Observable.OnNext(new Change(() => newFile.Delete(), $"Copied {externalLibrary} to {newFile.FullName}."));
                }
            }
        }
        public override Entity Resolve(Entity owner, string key, bool fallback = false)
        {
            if (key == EntityKeys.InternalDeployPathKey)
            {
                TargetEntity     targetEntity  = TargetEntity.Decorate(owner);
                BuildEntity      buildEntity   = BuildEntity.Decorate(owner);
                Entity           project       = owner.Root;
                CommandEntity    commandOrigin = CommandEntity.Decorate(owner.Origin);
                VirtualDirectory outputRoot    = fileSystem.GetDirectory(commandOrigin.Output, project.Path);
                VirtualDirectory deployRoot    = outputRoot.Directory(targetEntity.FullName.Replace(',', '_'),
                                                                      buildEntity.BuildType);
                return(owner.Create(key, deployRoot.FullName, deployRoot));
            }

            CommandEntity command           = CommandEntity.Decorate(owner);
            FileEntity    projectFileEntity = FileEntity.Decorate(owner.Root);
            string        outputDirectory   = command.GetSingleValueArgument(Constants.OutputArgumentName);

            if (string.IsNullOrEmpty(outputDirectory))
            {
                outputDirectory = projectFileEntity.Directory
                                  .Directory(Constants.LibraryFolderName)
                                  .FullName;
            }

            return(owner.Create(key, outputDirectory));
        }
Пример #3
0
        protected override void WritePreExecutableScript(StreamWriter scriptWriter)
        {
            base.WritePreExecutableScript(scriptWriter);

            foreach (var shellLine in BuildEntity.GetShellLines())
            {
                scriptWriter.WriteLine(shellLine);
            }
        }
Пример #4
0
        public BuildEntity Delete(int BuildId)
        {
            BuildEntity dbEntry = context.BuildEntities.Find(BuildId);

            if (dbEntry != null)
            {
                context.BuildEntities.Remove(dbEntry);
                context.SaveChanges();
            }
            return(dbEntry);
        }
Пример #5
0
        public void DeleteBuild_DeleteBuild_RepositoryMehtodWasCalled()
        {
            //Arrange
            BuildEntity entity = new BuildEntity();

            BuildRepository.Setup(x => x.FindById(It.IsAny <Guid>())).Returns(entity);
            //Act
            buildService.DeleteBuild(new Guid());
            //Assert
            BuildRepository.Verify(x => x.Delete(entity));
        }
Пример #6
0
        private double ComputeBuildCoverage(BuildEntity build)
        {
            if (build.CoverageCollection == null)
            {
                return(0);
            }

            var covered    = build.CoverageCollection.Sum(i => i.BlocksCovered);
            var notCovered = build.CoverageCollection.Sum(i => i.BlocksNotCovered);

            return(((Double)covered * 100) / (notCovered + covered));
        }
Пример #7
0
        public void GetProductManagerTest()
        {
            // Arrange
            var         mock  = new Mock <IHostRepository>();
            BuildEntity build = new BuildEntity();
            //mock.Setup(a => build.NewProductEntity(a.Entity<Product>(product => product.Id != System.Guid.Parse("f5a73537-d0ba-434e-9b08-02ff55465562"))));
            ProductManager productManager = new ProductManager();

            // Act
            var result = productManager.GetProduct(System.Guid.Parse("f5a73537-d0ba-434e-9b08-02ff55465562"));

            // Assert
            Assert.IsNotNull(result);
        }
Пример #8
0
        public void GetAllProductManagerTest()
        {
            // Arrange
            var         mock  = new Mock <IHostRepository>();
            BuildEntity build = new BuildEntity();

            mock.Setup(a => a.Set <Product, Store.Models.Product>(x => build.NewProductEntity(x))).Returns(new List <Store.Models.Product>());
            ProductManager productManager = new ProductManager();

            // Act
            var result = productManager.GetAllProducts().Result.ToList();

            // Assert
            Assert.IsNotNull(result);
            Assert.IsNotNull(mock.Object.Set <Product, Store.Models.Product>(x => build.NewProductEntity(x)));
            Assert.AreEqual(result, mock.Object.Set <Product, Store.Models.Product>(x => build.NewProductEntity(x)));
        }
Пример #9
0
 public void SaveBuild(BuildEntity build)
 {
     if (build.BuildEntityGuid == null)
     {
         context.BuildEntities.Add(build);
     }
     else
     {
         BuildEntity dbEntry = context.BuildEntities.Find(build.BuildEntityGuid);
         if (dbEntry != null)
         {
             dbEntry.CPU   = build.CPU;
             dbEntry.GPU   = build.GPU;
             dbEntry.CPUID = build.CPUID;
             dbEntry.GPUID = build.GPUID;
             //doubtful
             dbEntry.UserID = build.UserID;
             //
         }
     }
     context.SaveChanges();
 }
Пример #10
0
        private double ComputeRatio(BuildEntity buildEntity, ReportingContext context)
        {
            var currentProject = context.Projects.FirstOrDefault(i => i.Name == buildEntity.Definition);

            if (currentProject == null)
            {
                currentProject = new ProjectEntity {
                    Name = buildEntity.Definition
                };
                context.Projects.Add(currentProject);
            }
            if (!buildEntity.CoverageCollection.Any())
            {
                return(0);
            }

            var currentProjectBlock = buildEntity.CoverageCollection.Sum(i => i.BlocksCovered + i.BlocksNotCovered);

            currentProject.Blocks = currentProjectBlock;

            if (!context.Projects.Any())
            {
                return(1);
            }

            var maxBlock   = context.Projects.Max(i => i.Blocks);
            var maxProject = context.Projects.FirstOrDefault(i => i.Blocks == maxBlock);

            if (maxProject == null || maxBlock == 0)
            {
                return(1); // Ratio = 1 : no project to be compared.
            }
            if (maxProject.Id == currentProject.Id)
            {
                return(1); // current projet is the bigest project.
            }
            return((double)currentProjectBlock / maxBlock);
        }
Пример #11
0
        public async Task <IHttpActionResult> Post([FromBody] HttpHookBuild build)
        {
            var knowDefinitionsBuilds = ConfigurationManager.AppSettings["ExpectedBuilds"].Split('|').Where(i => !string.IsNullOrEmpty(i)).ToArray();

            if (knowDefinitionsBuilds.Any() && !knowDefinitionsBuilds.Contains(build.resource.definition.name))
            {
                return(Ok());
            }

            try
            {
                using (var context = new ReportingContext())
                {
                    var request = build.resource.requests.FirstOrDefault();

                    var buildEntity = new BuildEntity
                    {
                        BuildName          = build.resource.buildNumber,
                        Definition         = build.resource.definition.name,
                        Date               = build.resource.finishTime,
                        Status             = build.resource.status,
                        Reason             = build.resource.reason,
                        Link               = build.message.html,
                        User               = request != null ? request.requestedFor.uniqueName : "Unknown user",
                        CoverageCollection = new Collection <CoverageEntity>()
                    };

                    if (buildEntity.User == "Project Collection Service Accounts")
                    {
                        buildEntity.User = "******";
                    }

                    if (buildEntity.User == ConfigurationManager.AppSettings["VsoUsername"])
                    {
                        return(Ok());
                    }

                    if (string.IsNullOrEmpty(ConfigurationManager.AppSettings["VSO.OrganisationName"]) || string.IsNullOrEmpty(ConfigurationManager.AppSettings["VSO.ProjectName"]))
                    {
                        throw new ApplicationException("Please configuration VSO.OrganisationName and VSO.ProjectName first.");
                    }

                    var api      = new ApiWrapper(ConfigurationManager.AppSettings["VSO.OrganisationName"], ConfigurationManager.AppSettings["VSO.ProjectName"]);
                    var coverage = await api.GetBuildCoverageAsync(build);

                    if (coverage != null)
                    {
                        foreach (var moduleCoverage in coverage)
                        {
                            buildEntity.CoverageCollection.Add(new CoverageEntity
                            {
                                Name             = moduleCoverage.Name,
                                ComputedAverage  = moduleCoverage.ComputedAverage,
                                BlocksCovered    = moduleCoverage.BlocksCovered,
                                BlocksNotCovered = moduleCoverage.BlocksNotCovered,
                                Build            = buildEntity
                            });
                        }
                    }

                    double currentRatio = ComputeRatio(buildEntity, context);
                    var    challenge    = ComputeCoverageChanges(buildEntity, context, currentRatio);
                    if (challenge != null)
                    {
                        context.Challenges.Add(challenge);
                    }

                    context.Builds.Add(buildEntity);
                    context.SaveChanges();
                }

                return(Ok());
            }
            catch (Exception e)
            {
                return(BadRequest(e.Message));
            }
        }
Пример #12
0
        private ChallengeEntity ComputeCoverageChanges(BuildEntity buildEntity, ReportingContext context, double currentRatio)
        {
            if (buildEntity.Status != "succeeded")
            {
                return(null);
            }

            var previousBuild = context.Builds
                                .OrderByDescending(i => i.Date)
                                .FirstOrDefault(i => i.Definition == buildEntity.Definition && i.Status == "succeeded" && i.CoverageCollection.Any());

            if (previousBuild == null)
            {
                return(null);
            }

            var challenge = new ChallengeEntity
            {
                User            = buildEntity.User,
                Build           = buildEntity,
                ModuleCoverages = new List <ModuleChallengeCoverage>()
            };

            var allModules = previousBuild.CoverageCollection.Select(i => i.Name).Union(buildEntity.CoverageCollection.Select(i => i.Name));

            foreach (var moduleName in allModules)
            {
                var currentModuleName = moduleName;

                var previousModule = previousBuild.CoverageCollection.FirstOrDefault(i => i.Name == currentModuleName);
                var currentModule  = buildEntity.CoverageCollection.FirstOrDefault(i => i.Name == currentModuleName);

                if (currentModule != null && previousModule != null && (previousModule.BlocksCovered == currentModule.BlocksCovered && previousModule.BlocksNotCovered == currentModule.BlocksNotCovered))
                {
                    continue; // Ignore if no change in the module.
                }
                if (currentModule == null)
                {
                    continue;
                }

                var previousModuleCoverage = ComputeBuildCoverage(previousModule);
                var currentModuleCoverage  = ComputeBuildCoverage(currentModule);

                var deltaCoverage = currentModuleCoverage - previousModuleCoverage;
                var allBlocks     = currentModule.BlocksCovered + currentModule.BlocksNotCovered;

                challenge.ModuleCoverages.Add(new ModuleChallengeCoverage {
                    Module = currentModuleName, DeltaCoverage = deltaCoverage, Blocks = allBlocks
                });
            }

            var previousProjectCoverage = ComputeBuildCoverage(previousBuild);
            var currentProjectCoverage  = ComputeBuildCoverage(buildEntity);

            challenge.Points = (currentProjectCoverage - previousProjectCoverage) * 100 * currentRatio;
            if (double.IsNaN(challenge.Points))
            {
                challenge.Points = 0;
            }

            return(challenge);
        }
Пример #13
0
 public override IEnumerable <string> GetExecutableArguments()
 {
     return(BuildEntity.GetCommandLineArgs());
 }