public DarcRemoteFactory( BuildAssetRegistryContext context, IKustoClientProvider kustoClientProvider) { Context = context; KustoClientProvider = (KustoClientProvider)kustoClientProvider; }
static Startup() { Triggers <BuildChannel> .Inserted += entry => { BuildAssetRegistryContext context = entry.Context as BuildAssetRegistryContext; ILogger <Startup> logger = context.GetService <ILogger <Startup> >(); BuildChannel entity = entry.Entity; Build build = context.Builds .Include(b => b.Assets) .ThenInclude(a => a.Locations) .FirstOrDefault(b => b.Id == entity.BuildId); if (build == null) { logger.LogError($"Could not find build with id {entity.BuildId} in BAR. Skipping dependency update."); } else { bool hasAssetsWithPublishedLocations = build.Assets .Any(a => a.Locations.Any(al => al.Type != LocationType.None && !al.Location.EndsWith("/artifacts"))); if (hasAssetsWithPublishedLocations || ReposWithoutAssetLocationAllowList.Contains(build.GitHubRepository)) { var queue = context.GetService <IBackgroundQueue>(); queue.Post <StartDependencyUpdate>(StartDependencyUpdate.CreateArgs(entity)); } else { logger.LogInformation($"Skipping Dependency update for Build {entity.BuildId} because it contains no assets in valid locations"); } } }; }
public BuildTimeController( BuildAssetRegistryContext context, IKustoClientProvider kustoClientProvider) { _context = context; _kustoClientProvider = (KustoClientProvider)kustoClientProvider; }
public SubscriptionsController( BuildAssetRegistryContext context, IBackgroundQueue queue) : base(context, queue) { _context = context; }
static Startup() { Triggers <BuildChannel> .Inserting += entry => { BuildAssetRegistryContext context = entry.Context as BuildAssetRegistryContext; BuildChannel entity = entry.Entity; Build build = context.Builds.Find(entity.BuildId); if (build == null) { ILogger <Startup> logger = context.GetService <ILogger <Startup> >(); logger.LogError($"Could not find build with id {entity.BuildId} in BAR. Skipping pipeline triggering."); } else { if (build.PublishUsingPipelines && ChannelHasAssociatedReleasePipeline(entity.ChannelId, context)) { entry.Cancel = true; var queue = context.GetService <BackgroundQueue>(); var releasePipelineRunner = context.GetService <IReleasePipelineRunner>(); queue.Post(() => releasePipelineRunner.StartAssociatedReleasePipelinesAsync(entity.BuildId, entity.ChannelId)); } } }; Triggers <BuildChannel> .Inserted += entry => { DbContext context = entry.Context; BuildChannel entity = entry.Entity; var queue = context.GetService <BackgroundQueue>(); var dependencyUpdater = context.GetService <IDependencyUpdater>(); queue.Post(() => dependencyUpdater.StartUpdateDependenciesAsync(entity.BuildId, entity.ChannelId)); }; }
private async Task UpdateUserAsync( ApplicationUser user, BuildAssetRegistryContext dbContext, UserManager <ApplicationUser> userManager, SignInManager <ApplicationUser> signInManager) { using (IDbContextTransaction txn = await dbContext.Database.BeginTransactionAsync()) { string token = await userManager.GetAuthenticationTokenAsync(user, GitHubScheme, "access_token"); var roles = new HashSet <string>(await GetGithubRolesAsync(token)); List <Claim> currentRoles = (await userManager.GetClaimsAsync(user)) .Where(c => c.Type == ClaimTypes.Role) .ToList(); // remove claims where github doesn't have the role anymore await userManager.RemoveClaimsAsync(user, currentRoles.Where(c => !roles.Contains(c.Value))); // add new claims await userManager.AddClaimsAsync( user, roles.Where(r => currentRoles.All(c => c.Value != r)) .Select(r => new Claim(ClaimTypes.Role, r, ClaimValueTypes.String, GitHubScheme))); user.LastUpdated = DateTimeOffset.UtcNow; await dbContext.SaveChangesAsync(); txn.Commit(); } }
public BuildsController( BuildAssetRegistryContext context, ISystemClock clock) : base(context) { _clock = clock; }
private async Task UpdateUserAsync(ApplicationUser user, BuildAssetRegistryContext dbContext, UserManager <ApplicationUser> userManager, SignInManager <ApplicationUser> signInManager, GitHubClaimResolver gitHubClaimResolver) { using (IDbContextTransaction txn = await dbContext.Database.BeginTransactionAsync()) { string token = await userManager.GetAuthenticationTokenAsync(user, GitHubScheme, "access_token"); var newClaims = (await gitHubClaimResolver.GetUserInformationClaims(token)).Concat( await gitHubClaimResolver.GetMembershipClaims(token) ).Where(AccountController.ShouldAddClaimToUser); var currentClaims = (await userManager.GetClaimsAsync(user)).ToList(); // remove old claims await userManager.RemoveClaimsAsync(user, currentClaims); // add new claims await userManager.AddClaimsAsync(user, newClaims); user.LastUpdated = DateTimeOffset.UtcNow; await dbContext.SaveChangesAsync(); txn.Commit(); } }
private async Task UpdateUserIfNeededAsync(ApplicationUser user, BuildAssetRegistryContext dbContext, UserManager <ApplicationUser> userManager, SignInManager <ApplicationUser> signInManager, GitHubClaimResolver gitHubClaimResolver) { while (true) { try { if (ShouldUpdateUser(user)) { await UpdateUserAsync(user, dbContext, userManager, signInManager, gitHubClaimResolver); } break; } catch (DbUpdateConcurrencyException) { // If we have a concurrent modification exception reload the data from the DB and try again foreach (EntityEntry entry in dbContext.ChangeTracker.Entries()) { await entry.ReloadAsync(); } } } }
static Startup() { Triggers <BuildChannel> .Inserting += entry => { BuildAssetRegistryContext context = entry.Context as BuildAssetRegistryContext; BuildChannel entity = entry.Entity; Build build = context.Builds.Find(entity.BuildId); if (build == null) { ILogger <Startup> logger = context.GetService <ILogger <Startup> >(); logger.LogError($"Could not find build with id {entity.BuildId} in BAR. Skipping pipeline triggering."); } else { if (build.PublishUsingPipelines && ChannelHasAssociatedReleasePipeline(entity.ChannelId, context)) { entry.Cancel = true; var queue = context.GetService <BackgroundQueue>(); var releasePipelineRunner = context.GetService <IReleasePipelineRunner>(); queue.Post(() => releasePipelineRunner.StartAssociatedReleasePipelinesAsync(entity.BuildId, entity.ChannelId)); } } }; Triggers <BuildChannel> .Inserted += entry => { BuildAssetRegistryContext context = entry.Context as BuildAssetRegistryContext; ILogger <Startup> logger = context.GetService <ILogger <Startup> >(); BuildChannel entity = entry.Entity; Build build = context.Builds .Include(b => b.Assets) .ThenInclude(a => a.Locations) .FirstOrDefault(b => b.Id == entity.BuildId); if (build == null) { logger.LogError($"Could not find build with id {entity.BuildId} in BAR. Skipping dependency update."); } else { bool hasAssetsWithPublishedLocations = build.Assets .Any(a => a.Locations.Any(al => al.Type != LocationType.None && !al.Location.EndsWith("/artifacts"))); if (hasAssetsWithPublishedLocations) { var queue = context.GetService <BackgroundQueue>(); var dependencyUpdater = context.GetService <IDependencyUpdater>(); queue.Post(() => dependencyUpdater.StartUpdateDependenciesAsync(entity.BuildId, entity.ChannelId)); } else { logger.LogInformation($"Skipping Dependency update for Build {entity.BuildId} because it contains no assets in valid locations"); } } }; }
public BuildsController( BuildAssetRegistryContext context, IBackgroundQueue queue, ISystemClock clock) : base(context, clock) { Queue = queue; }
private static bool ChannelHasAssociatedReleasePipeline(int channelId, BuildAssetRegistryContext context) { return(context.Channels .Where(ch => ch.Id == channelId) .Include(ch => ch.ChannelReleasePipelines) .ThenInclude(crp => crp.ReleasePipeline) .FirstOrDefault(c => c.ChannelReleasePipelines.Count > 0) != null); }
public ChannelsController(BuildAssetRegistryContext context, IRemoteFactory factory, ILogger <ChannelsController> logger) { _context = context; _remoteFactory = factory; Logger = logger; }
public RepositoryController( BuildAssetRegistryContext context, IBackgroundQueue queue, IActorProxyFactory <IPullRequestActor> pullRequestActorFactory) { Context = context; Queue = queue; PullRequestActorFactory = pullRequestActorFactory; }
public RepositoryController( BuildAssetRegistryContext context, BackgroundQueue queue, Func <ActorId, IPullRequestActor> pullRequestActorFactory) { Context = context; Queue = queue; PullRequestActorFactory = pullRequestActorFactory; }
public AccountController( SignInManager <ApplicationUser> signInManager, UserManager <ApplicationUser> userManager, BuildAssetRegistryContext context) { SignInManager = signInManager; UserManager = userManager; Context = context; }
public SubscriptionsController( BuildAssetRegistryContext context, IBackgroundQueue queue, IGitHubClientFactory gitHubClientFactory) : base(context, queue) { _context = context; _gitHubClientFactory = gitHubClientFactory; }
public SubscriptionsController( BuildAssetRegistryContext context, BackgroundQueue queue, Func <ActorId, ISubscriptionActor> subscriptionActorFactory) { _context = context; _queue = queue; _subscriptionActorFactory = subscriptionActorFactory; }
public TokensModel( BuildAssetRegistryContext context, UserManager <ApplicationUser> userManager, ILogger <TokensModel> logger) { Context = context; UserManager = userManager; Logger = logger; }
public BuildsController( BuildAssetRegistryContext context, IBackgroundQueue queue, ISystemClock clock, IRemoteFactory factory) : base(context, clock) { Queue = queue; Factory = factory; }
public ReleasePipelineRunner( IReliableStateManager stateManager, ILogger <ReleasePipelineRunner> logger, BuildAssetRegistryContext context, IDependencyUpdater dependencyUpdater) { StateManager = stateManager; Logger = logger; Context = context; DependencyUpdater = dependencyUpdater; }
public DarcRemoteFactory( IConfigurationRoot configuration, IGitHubTokenProvider gitHubTokenProvider, IAzureDevOpsTokenProvider azureDevOpsTokenProvider, BuildAssetRegistryContext context) { Configuration = configuration; GitHubTokenProvider = gitHubTokenProvider; AzureDevOpsTokenProvider = azureDevOpsTokenProvider; Context = context; }
public SubscriptionActor( BuildAssetRegistryContext context, ILogger <SubscriptionActor> logger, IActionRunner actionRunner, IActorProxyFactory <IPullRequestActor> pullRequestActorFactory) { Context = context; Logger = logger; ActionRunner = actionRunner; PullRequestActorFactory = pullRequestActorFactory; }
public SubscriptionsController( BuildAssetRegistryContext context, BackgroundQueue queue, IDependencyUpdater dependencyUpdater, IActorProxyFactory <ISubscriptionActor> subscriptionActorFactory) : base(context, queue, dependencyUpdater, subscriptionActorFactory) { _context = context; _queue = queue; _dependencyUpdater = dependencyUpdater; }
public DependencyUpdater( IReliableStateManager stateManager, ILogger <DependencyUpdater> logger, BuildAssetRegistryContext context, Func <ActorId, ISubscriptionActor> subscriptionActorFactory) { StateManager = stateManager; Logger = logger; Context = context; SubscriptionActorFactory = subscriptionActorFactory; }
public DependencyUpdateErrorProcessor( IReliableStateManager stateManager, ILogger <DependencyUpdateErrorProcessor> logger, BuildAssetRegistryContext context, IOptions <DependencyUpdateErrorProcessorOptions> options ) { _stateManager = stateManager; _context = context; _options = options.Value; _logger = logger; }
public BuildsController(BuildAssetRegistryContext context, IRemoteFactory factory, IServiceScopeFactory serviceScopeFactory, BackgroundQueue queue, ILogger <BuildsController> logger) : base(context) { RemoteFactory = factory; ServiceScopeFactory = serviceScopeFactory; Queue = queue; Logger = logger; }
public DependencyUpdater( IReliableStateManager stateManager, ILogger <DependencyUpdater> logger, BuildAssetRegistryContext context, IRemoteFactory factory, IActorProxyFactory <ISubscriptionActor> subscriptionActorFactory) { StateManager = stateManager; Logger = logger; Context = context; RemoteFactory = factory; SubscriptionActorFactory = subscriptionActorFactory; }
public DarcRemoteFactory( BuildAssetRegistryContext context, IKustoClientProvider kustoClientProvider, IGitHubTokenProvider gitHubTokenProvider, IAzureDevOpsTokenProvider azureDevOpsTokenProvider, DarcRemoteMemoryCache memoryCache) { Context = context; KustoClientProvider = (KustoClientProvider)kustoClientProvider; GitHubTokenProvider = gitHubTokenProvider; AzureDevOpsTokenProvider = azureDevOpsTokenProvider; Cache = memoryCache; }
public DependencyUpdateErrorProcessor( IReliableStateManager stateManager, ILogger <DependencyUpdateErrorProcessor> logger, BuildAssetRegistryContext context, IOptions <DependencyUpdateErrorProcessorOptions> options, IGitHubApplicationClientFactory authenticateGithubApplicationClient ) { _stateManager = stateManager; _context = context; _options = options.Value; _logger = logger; _authenticateGitHubApplicationClient = authenticateGithubApplicationClient; }