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"); } }
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"); } }
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"); } }
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); } }
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"); } }
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); }
public void GetTestProjects() { var client = new BuildEngineApi(BaseUrl, ApiAccessKey); var response = client.GetProjects(); Assert.NotNull(response); }
public void DeleteTestProject(int projectId) { var client = new BuildEngineApi(BaseUrl, ApiAccessKey); var response = client.DeleteProject(projectId); Assert.Equal(System.Net.HttpStatusCode.OK, response); }
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); }
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); }
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); }
protected bool SetBuildEngineEndpoint(Organization organization) { var endpoint = GetBuildEngineEndpoint(organization); if (!endpoint.IsValid()) { return(false); } BuildEngineApi.SetEndpoint(endpoint.Url, endpoint.ApiAccessToken); return(true); }
protected ReleaseResponse GetBuildEngineRelease(Product product) { ReleaseResponse releaseResponse = null; if (SetBuildEngineEndpoint(product.Project.Organization)) { releaseResponse = BuildEngineApi.GetRelease(product.WorkflowJobId, product.WorkflowBuildId, product.WorkflowPublishId); } return(releaseResponse); }
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); }
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); }
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"); } }
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"); }
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"); } }
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); } }
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); }
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); }