示例#1
0
        public void CreateTestProject()
        {
            var client  = new BuildEngineApi(BaseUrl, ApiAccessKey);
            var project = new Project
            {
                UserId        = this.UserId,
                GroupId       = this.GroupId,
                AppId         = "scriptureappbuilder",
                LanguageCode  = "eng",
                ProjectName   = Guid.NewGuid().ToString(),
                PublishingKey = this.PublishingKey
            };

            var response = client.CreateProject(project);

            Assert.NotNull(response);
            Assert.NotEqual(0, response.Id);
            Assert.Equal(project.UserId, response.UserId);
            Assert.Equal(project.GroupId, response.GroupId);
            Assert.Equal(project.AppId, response.AppId);
            Assert.Equal(project.LanguageCode, response.LanguageCode);
            Assert.Equal("initialized", response.Status);
            Assert.Null(response.Result);
            Assert.Null(response.Error);
            Assert.Null(response.Url);
            Assert.NotEqual(DateTime.MinValue, response.Created);
            Assert.NotEqual(DateTime.MinValue, response.Updated);
        }
        protected async Task CreateBuildEngineBuildAsync(Product product)
        {
            await ResetPreviousBuildAsync(product);

            BuildResponse buildResponse = null;

            if (SetBuildEngineEndpoint(product.Project.Organization))
            {
                buildResponse = BuildEngineApi.CreateBuild(product.WorkflowJobId);
            }
            if ((buildResponse != null) && (buildResponse.Id != 0))
            {
                product.WorkflowBuildId = buildResponse.Id;
                var productBuild = new ProductBuild
                {
                    ProductId = product.Id,
                    BuildId   = product.WorkflowBuildId
                };
                await ProductBuildRepository.CreateAsync(productBuild);

                await ProductRepository.UpdateAsync(product);

                var monitorJob = Job.FromExpression <BuildEngineBuildService>(service => service.CheckBuild(product.Id));
                RecurringJobManager.AddOrUpdate(GetHangfireToken(product.Id), monitorJob, "* * * * *");
            }
            else
            {
                // TODO: Send Notification
                // Throw Exception to force retry
                throw new Exception("Create build failed");
            }
        }
示例#3
0
        public void GetTestProject()
        {
            var client   = new BuildEngineApi(BaseUrl, ApiAccessKey);
            var response = client.SystemCheck();

            Assert.Equal(System.Net.HttpStatusCode.OK, response);
        }
        protected async Task CreateBuildEngineReleaseAsync(Product product, Dictionary <string, object> paramsDictionary, PerformContext context)
        {
            var channel     = GetChannel(paramsDictionary);
            var targets     = GetTargets(paramsDictionary, "google-play");
            var environment = GetEnvironment(paramsDictionary);

            environment["PRODUCT_ID"] = product.Id.ToString();
            environment["PROJECT_ID"] = product.ProjectId.ToString();
            var release = new Release
            {
                Channel     = channel,
                Targets     = targets,
                Environment = environment
            };

            ClearRecurringJob(product.Id);
            ReleaseResponse releaseResponse = null;

            if (SetBuildEngineEndpoint(product.Project.Organization))
            {
                releaseResponse = BuildEngineApi.CreateRelease(product.WorkflowJobId,
                                                               product.WorkflowBuildId,
                                                               release);
            }
            if ((releaseResponse != null) && (releaseResponse.Id != 0))
            {
                product.WorkflowPublishId = releaseResponse.Id;
                await ProductRepository.UpdateAsync(product);

                var build = await BuildRepository.Get().Where(b => b.BuildId == product.WorkflowBuildId).FirstOrDefaultAsync();

                if (build == null)
                {
                    throw new Exception($"Failed to find ProductBuild: {product.WorkflowBuildId}");
                }
                var publish = new ProductPublication
                {
                    ProductId      = product.Id,
                    ProductBuildId = build.Id,
                    ReleaseId      = releaseResponse.Id,
                    Channel        = channel
                };
                await PublicationRepository.CreateAsync(publish);

                var monitorJob = Job.FromExpression <BuildEngineReleaseService>(service => service.CheckRelease(product.Id));
                RecurringJobManager.AddOrUpdate(GetHangfireToken(product.Id), monitorJob, "* * * * *");
            }
            else
            {
                var messageParms = new Dictionary <string, object>()
                {
                    { "projectName", product.Project.Name },
                    { "productName", product.ProductDefinition.Name }
                };
                await SendNotificationOnFinalRetryAsync(context, product.Project.Organization, product.Project.Owner, "releaseFailedUnableToCreate", messageParms);

                // Throw Exception to force retry
                throw new Exception("Create release failed");
            }
        }
示例#5
0
        protected async Task CreateBuildEngineReleaseAsync(Product product, string channel)
        {
            var release = new Release
            {
                Channel = channel
            };

            ClearRecurringJob(product.Id);
            ReleaseResponse releaseResponse = null;

            if (SetBuildEngineEndpoint(product.Project.Organization))
            {
                releaseResponse = BuildEngineApi.CreateRelease(product.WorkflowJobId,
                                                               product.WorkflowBuildId,
                                                               release);
            }
            if ((releaseResponse != null) && (releaseResponse.Id != 0))
            {
                product.WorkflowPublishId = releaseResponse.Id;
                await ProductRepository.UpdateAsync(product);

                var monitorJob = Job.FromExpression <BuildEngineReleaseService>(service => service.CheckRelease(product.Id));
                RecurringJobManager.AddOrUpdate(GetHangfireToken(product.Id), monitorJob, "* * * * *");
            }
            else
            {
                // TODO: Send Notification
                // Throw Exception to force retry
                throw new Exception("Create release failed");
            }
        }
        protected async Task CreateBuildEngineProjectAsync(Project project)
        {
            var buildEngineProject = new BuildEngineProject
            {
                UserId        = project.Owner.Email,
                GroupId       = project.Group.Abbreviation,
                AppId         = project.Type.Name,
                LanguageCode  = project.Language,
                PublishingKey = project.Owner.PublishingKey,
                ProjectName   = project.Name
            };
            ProjectResponse projectResponse = null;

            if (SetBuildEngineEndpoint(project.Organization))
            {
                projectResponse = BuildEngineApi.CreateProject(buildEngineProject);
            }
            if ((projectResponse != null) && (projectResponse.Id != 0))
            {
                // Set state to active?
                project.WorkflowProjectId = projectResponse.Id;
                await ProjectRepository.UpdateAsync(project);

                var monitorJob = Job.FromExpression <BuildEngineProjectService>(service => service.ManageProject(project.Id));
                RecurringJobManager.AddOrUpdate(GetHangfireToken(project.Id), monitorJob, "* * * * *");
            }
            else
            {
                // TODO: Send Notification
                // Throw Exception to force retry
                throw new Exception("Create project failed");
            }
        }
示例#7
0
        public void DeleteTestBuild(int jobId, int buildId)
        {
            var client   = new BuildEngineApi(BaseUrl, ApiAccessKey);
            var response = client.DeleteBuild(jobId, buildId);

            Assert.Equal(System.Net.HttpStatusCode.OK, response);
        }
        public async Task UpdateProjectAsync(int projectId)
        {
            var project = await ProjectRepository.Get()
                          .Where(p => p.Id == projectId)
                          .Include(p => p.Organization)
                          .Include(p => p.Owner)
                          .FirstOrDefaultAsync();

            if (project == null)
            {
                // Can't find the project record whose creation should have
                // triggered this process.  Exception will trigger retry
                // TODO: Send notification record
                // Don't send exception because there doesn't seem to be a point in retrying
                ClearAndExit(projectId);
                return;
            }
            var buildEngineProject = new BuildEngineProject
            {
                UserId        = project.Owner.Email,
                PublishingKey = project.Owner.PublishingKey,
            };

            if (SetBuildEngineEndpoint(project.Organization))
            {
                var projectResponse = BuildEngineApi.UpdateProject(project.WorkflowProjectId, buildEngineProject);
            }
        }
示例#9
0
        protected async Task CreateBuildEngineProductAsync(Product product)
        {
            var buildEngineJob = new BuildEngineJob
            {
                RequestId   = product.Id.ToString(),
                GitUrl      = product.Project.WorkflowProjectUrl,
                AppId       = product.Project.Type.Name,
                PublisherId = product.Store.Name
            };
            JobResponse jobResponse = null;

            if (SetBuildEngineEndpoint(product.Project.Organization))
            {
                jobResponse = BuildEngineApi.CreateJob(buildEngineJob);
            }
            if ((jobResponse != null) && (jobResponse.Id != 0))
            {
                product.WorkflowJobId = jobResponse.Id;
                await ProductRepository.UpdateAsync(product);

                return;
            }
            else
            {
                // TODO: Send Notification
                throw new Exception("Create job failed");
            }
        }
示例#10
0
        public async Task <TokenResponse> GetProjectTokenAsync(int projectId)
        {
            var project = await ProjectRepository.Get()
                          .Where(p => p.Id == projectId)
                          .Include(p => p.Organization)
                          .Include(p => p.Owner)
                          .Include(p => p.Group)
                          .Include(p => p.Type)
                          .FirstOrDefaultAsync();

            if (!(project == null || project.Owner == null))
            {
                if (SetBuildEngineEndpoint(project.Organization))
                {
                    var name = project.Owner.ExternalId.Replace("google-oauth2|", "g2=");
                    name = name.Replace("auth0|", "a0=");
                    var tokenRequest = new TokenRequest
                    {
                        Name = name
                    };
                    var tokenResponse = BuildEngineApi.GetProjectAccessToken(project.WorkflowProjectId, tokenRequest);
                    return(tokenResponse);
                }
            }
            return(null);
        }
示例#11
0
        public void GetTestProjects()
        {
            var client   = new BuildEngineApi(BaseUrl, ApiAccessKey);
            var response = client.GetProjects();

            Assert.NotNull(response);
        }
示例#12
0
        public void DeleteTestProject(int projectId)
        {
            var client   = new BuildEngineApi(BaseUrl, ApiAccessKey);
            var response = client.DeleteProject(projectId);

            Assert.Equal(System.Net.HttpStatusCode.OK, response);
        }
示例#13
0
        public void GetTestProject(int projectId)
        {
            var client   = new BuildEngineApi(BaseUrl, ApiAccessKey);
            var response = client.GetProject(projectId);

            Assert.NotNull(response);
            Assert.NotEqual(0, response.Id);
        }
 protected bool SetBuildEngineEndpoint(Organization organization)
 {
     if (organization.BuildEngineUrl is null || organization.BuildEngineApiAccessToken is null)
     {
         return(false);
     }
     BuildEngineApi.SetEndpoint(organization.BuildEngineUrl, organization.BuildEngineApiAccessToken);
     return(true);
 }
        protected ProjectResponse GetBuildEngineProject(Project project)
        {
            if (!SetBuildEngineEndpoint(project.Organization))
            {
                return(null);
            }
            var projectResponse = BuildEngineApi.GetProject(project.WorkflowProjectId);

            return(projectResponse);
        }
示例#16
0
        public void CreateTestBuild(int jobId)
        {
            var client   = new BuildEngineApi(BaseUrl, ApiAccessKey);
            var response = client.CreateBuild(jobId);

            Assert.NotNull(response);
            Assert.Equal("initialized", response.Status);
            Assert.NotEqual(0, response.Id);
            Assert.Equal(2, response.JobId);
        }
        protected BuildResponse GetBuildEngineBuild(Product product)
        {
            if (!SetBuildEngineEndpoint(product.Project.Organization))
            {
                return(null);
            }
            var buildResponse = BuildEngineApi.GetBuild(product.WorkflowJobId, product.WorkflowBuildId);

            return(buildResponse);
        }
示例#18
0
        public void GetTestJob(int jobId)
        {
            var client   = new BuildEngineApi(BaseUrl, ApiAccessKey);
            var response = client.GetJob(jobId);

            Assert.NotNull(response);
            Assert.Equal(this.GitUrl, response.GitUrl);
            Assert.Equal(this.AppId, response.AppId);
            Assert.Equal(this.PublisherId, response.PublisherId);
            Assert.Equal(jobId, response.Id);
        }
示例#19
0
        protected bool SetBuildEngineEndpoint(Organization organization)
        {
            var endpoint = GetBuildEngineEndpoint(organization);

            if (!endpoint.IsValid())
            {
                return(false);
            }
            BuildEngineApi.SetEndpoint(endpoint.Url, endpoint.ApiAccessToken);
            return(true);
        }
示例#20
0
        protected ReleaseResponse GetBuildEngineRelease(Product product)
        {
            ReleaseResponse releaseResponse = null;

            if (SetBuildEngineEndpoint(product.Project.Organization))
            {
                releaseResponse = BuildEngineApi.GetRelease(product.WorkflowJobId,
                                                            product.WorkflowBuildId,
                                                            product.WorkflowPublishId);
            }
            return(releaseResponse);
        }
示例#21
0
        public void GetTestRelease(int jobId, int buildId, int releaseId)
        {
            var client   = new BuildEngineApi(BaseUrl, ApiAccessKey);
            var response = client.GetRelease(jobId, buildId, releaseId);

            Assert.NotNull(response);
            Assert.Equal(releaseId, response.Id);
            Assert.Equal(buildId, response.BuildId);
            Assert.Equal("completed", response.Status);
            Assert.Equal("SUCCESS", response.Result);
            Assert.Null(response.Error);
        }
示例#22
0
        public void ModifyTestProject(int projectId, string newUserId)
        {
            var client  = new BuildEngineApi(BaseUrl, ApiAccessKey);
            var project = new Project
            {
                UserId        = newUserId,
                PublishingKey = this.PublishingKey
            };
            var response = client.UpdateProject(projectId, project);

            Assert.NotNull(response);
            Assert.Equal(response.Id, projectId);
        }
示例#23
0
        public void CreateTestBuild(int jobId, int buildId)
        {
            var release = new Release
            {
                Channel = "alpha"
            };
            var client   = new BuildEngineApi(BaseUrl, ApiAccessKey);
            var response = client.CreateRelease(jobId, buildId, release);

            Assert.NotNull(response);
            Assert.Equal("initialized", response.Status);
            Assert.NotEqual(0, response.Id);
        }
        protected async Task CreateBuildEngineBuildAsync(Product product, Dictionary <string, object> parmsDictionary, PerformContext context)
        {
            await ResetPreviousBuildAsync(product);

            BuildResponse buildResponse = null;

            if (SetBuildEngineEndpoint(product.Project.Organization))
            {
                var targets     = GetTargets(parmsDictionary, "apk play-listing");
                var environment = GetEnvironment(parmsDictionary);
                environment["PRODUCT_ID"] = product.Id.ToString();
                environment["PROJECT_ID"] = product.ProjectId.ToString();
                var build = new Build
                {
                    Targets     = targets,
                    Environment = environment
                };
                buildResponse = BuildEngineApi.CreateBuild(product.WorkflowJobId, build);
            }
            if ((buildResponse != null) && (buildResponse.Id != 0))
            {
                product.WorkflowBuildId = buildResponse.Id;
                var productBuild = new ProductBuild
                {
                    ProductId = product.Id,
                    BuildId   = product.WorkflowBuildId
                };
                await ProductBuildRepository.CreateAsync(productBuild);

                await ProductRepository.UpdateAsync(product);

                var monitorJob = Job.FromExpression <BuildEngineBuildService>(service => service.CheckBuild(product.Id));
                RecurringJobManager.AddOrUpdate(GetHangfireToken(product.Id), monitorJob, "* * * * *");
            }
            else
            {
                var messageParms = new Dictionary <string, object>()
                {
                    { "projectName", product.Project.Name },
                    { "productName", product.ProductDefinition.Name }
                };
                await SendNotificationOnFinalRetryAsync(context, product.Project.Organization, product.Project.Owner, "buildFailedUnableToCreate", messageParms);

                // Throw Exception to force retry
                throw new Exception("Create build failed");
            }
        }
示例#25
0
        protected async Task CreateBuildEngineProjectAsync(Project project, PerformContext context)
        {
            var buildEngineProject = new BuildEngineProject
            {
                AppId        = project.Type.Name,
                LanguageCode = project.Language,
                ProjectName  = project.Name,
                StorageType  = "s3"
            };
            ProjectResponse projectResponse = null;

            if (SetBuildEngineEndpoint(project.Organization))
            {
                projectResponse = BuildEngineApi.CreateProject(buildEngineProject);
            }
            if ((projectResponse != null) && (projectResponse.Id != 0))
            {
                // Set state to active?
                project.WorkflowProjectId = projectResponse.Id;
                if (projectResponse.Status == "completed")
                {
                    if (projectResponse.Result == "SUCCESS")
                    {
                        await ProjectCompletedAsync(project, projectResponse);
                    }
                    else
                    {
                        await ProjectCreationFailedAsync(project, projectResponse);
                    }
                    return;
                }
            }
            if (IsFinalRetry(context))
            {
                var messageParms = new Dictionary <string, object>()
                {
                    { "projectName", project.Name }
                };
                await SendNotificationSvc.SendNotificationToOrgAdminsAndOwnerAsync(project.Organization, project.Owner,
                                                                                   "projectFailedUnableToCreate",
                                                                                   messageParms);
            }
            // Throw Exception to force retry
            throw new Exception("Create project failed");
        }
示例#26
0
        protected async Task CreateBuildEngineProductAsync(Product product, PerformContext context)
        {
            var buildEngineJob = new BuildEngineJob
            {
                RequestId   = product.Id.ToString(),
                GitUrl      = product.Project.WorkflowProjectUrl,
                AppId       = product.Project.Type.Name,
                PublisherId = product.Store.Name
            };
            JobResponse jobResponse = null;

            if (SetBuildEngineEndpoint(product.Project.Organization))
            {
                jobResponse = BuildEngineApi.CreateJob(buildEngineJob);
            }
            if ((jobResponse != null) && (jobResponse.Id != 0))
            {
                product.WorkflowJobId = jobResponse.Id;

                await ProductRepository.UpdateAsync(product);

                var messageParms = new Dictionary <string, object>()
                {
                    { "projectName", product.Project.Name },
                    { "productName", product.ProductDefinition.Name }
                };
                await sendNotificationService.SendNotificationToUserAsync(product.Project.Owner, "productCreatedSuccessfully", messageParms);

                return;
            }
            else
            {
                var buildEngineUrl = product.Project.Organization.BuildEngineUrl + "/job-admin";
                var messageParms   = new Dictionary <string, object>()
                {
                    { "projectName", product.Project.Name },
                    { "productName", product.ProductDefinition.Name },
                    { "buildEngineUrl", buildEngineUrl }
                };
                await SendNotificationOnFinalRetryAsync(context, product.Project.Organization, product.Project.Owner, "productCreationFailedOwner", "productCreationFailedAdmin", messageParms, buildEngineUrl);

                throw new Exception("Create job failed");
            }
        }
        protected async Task CreateBuildEngineProjectAsync(Project project, PerformContext context)
        {
            var buildEngineProject = new BuildEngineProject
            {
                UserId        = project.Owner.Email,
                GroupId       = project.Group.Abbreviation,
                AppId         = project.Type.Name,
                LanguageCode  = project.Language,
                PublishingKey = project.Owner.PublishingKey,
                ProjectName   = project.Name
            };
            ProjectResponse projectResponse = null;

            if (SetBuildEngineEndpoint(project.Organization))
            {
                projectResponse = BuildEngineApi.CreateProject(buildEngineProject);
            }
            if ((projectResponse != null) && (projectResponse.Id != 0))
            {
                // Set state to active?
                project.WorkflowProjectId = projectResponse.Id;
                await ProjectRepository.UpdateAsync(project);

                var monitorJob = Job.FromExpression <BuildEngineProjectService>(service => service.ManageProject(project.Id, null));
                RecurringJobManager.AddOrUpdate(GetHangfireToken(project.Id), monitorJob, "* * * * *");
            }
            else
            {
                if (IsFinalRetry(context))
                {
                    var messageParms = new Dictionary <string, object>()
                    {
                        { "projectName", project.Name }
                    };
                    await SendNotificationSvc.SendNotificationToOrgAdminsAndOwnerAsync(project.Organization, project.Owner,
                                                                                       "projectFailedUnableToCreate",
                                                                                       messageParms);
                }
                // Throw Exception to force retry
                throw new Exception("Create project failed");
            }
        }
示例#28
0
        public void GetTestBuilds(int jobId)
        {
            var client    = new BuildEngineApi(BaseUrl, ApiAccessKey);
            var responses = client.GetBuilds(jobId);

            Assert.NotNull(responses);
            Assert.True(responses.Count > 0);
            foreach (BuildResponse response in responses)
            {
                Assert.Equal(jobId, response.JobId);
                Assert.Equal(7, response.Artifacts.Count);
                if (response.Status == "completed")
                {
                    Assert.True((response.Result == "SUCCESS") ||
                                (response.Result == "FAILURE") ||
                                (response.Result == "ABORTED"));
                }
                Assert.NotEqual(0, response.Id);
            }
        }
示例#29
0
        public void CreateTestBuild(int jobId, int buildId)
        {
            var env = new Dictionary <string, string>
            {
                { "VAR1", "VALUE1" },
                { "VAR2", "VALUE2" }
            };
            var release = new Release
            {
                Channel     = "alpha",
                Targets     = "google-play",
                Environment = env
            };
            var client   = new BuildEngineApi(BaseUrl, ApiAccessKey);
            var response = client.CreateRelease(jobId, buildId, release);

            Assert.NotNull(response);
            Assert.Equal("initialized", response.Status);
            Assert.NotEqual(0, response.Id);
        }
示例#30
0
        public void GetTokenTest(int projectId)
        {
            var client  = new BuildEngineApi(BaseUrl, ApiAccessKey);
            var request = new TokenRequest
            {
                Name = "g2=123432423142312345678"
            };
            var response = client.GetProjectAccessToken(projectId, request);

            Assert.NotNull(response.AccessKeyId);
            Assert.NotEmpty(response.AccessKeyId);
            Assert.NotNull(response.SessionToken);
            Assert.NotEmpty(response.SessionToken);
            Assert.NotNull(response.SecretAccessKey);
            Assert.NotEmpty(response.SecretAccessKey);
            Assert.NotNull(response.Expiration);
            Assert.NotEmpty(response.Expiration);
            Assert.NotEmpty(response.Region);
            Assert.Equal("us-east-1", response.Region);
        }