private void InitializeHelpers(HttpClient client = null) { var triggerHelper = new TriggerHooksHelper(client ?? A.Fake <HttpClient>(), A.Fake <IMetrics>()); fakeGit = A.Fake <Func <string, Task <string> > >(); hooksHelper = new HooksHelper(fakeGit, triggerHelper, A.Fake <IMetrics>()); }
public HooksHelper(Func <string, Task <string> > gitExecutor, TriggerHooksHelper triggerHelper, IMetrics metrics, ILogger logger = null) { this._logger = logger ?? NullLogger.Instance; this._git = gitExecutor; this._metrics = metrics; this._triggerHelper = triggerHelper; this._keysRegex = new Regex(@"(?:implementations/jpad/|manifests/)(.*)\..*", RegexOptions.Compiled); }
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory, IHostApplicationLifetime lifetime) { Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(_configuration) .WriteTo.Console(new JsonFormatter()) .Enrich.FromLogContext() .CreateLogger(); _logger.LogInformation("Starting service"); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } RunSSHDeamon(lifetime, loggerFactory.CreateLogger("sshd")); var executor = ShellHelper.Executor.WithWorkingDirectory(_configuration.GetValue <string>("REPO_LOCATION")) .ForwardEnvVariable("GIT_SSH"); var gitValidationFlow = new GitValidationFlow { Validators = { (Patterns.Manifests, new CircularDependencyValidator()), (Patterns.Manifests, new ManifestStructureValidator()), (Patterns.Manifests, new NestedKeysValidator()), (Patterns.JPad, new CompileJPadValidator()), (Patterns.SubjectExtractionRules, new SubjectExtractionValidator()), (Patterns.Policy, new PolicyValidator()), } }; var minioConfig = _configuration.GetSection("Minio"); var metricsService = app.ApplicationServices.GetService <IMetrics>(); var storageClient = Polly.Policy.Handle <Exception>() .WaitAndRetryAsync(3, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt))) .ExecuteAsync(() => MinioBucketStorage.GetOrCreateBucket(CreateMinioClient(minioConfig), minioConfig.GetValue("Bucket", DEFAULT_MINIO_BUCKET_NAME))) .Result; var natsClient = new NatsPublisher(_configuration.GetSection("Nats").GetValue <string>("Endpoint")); var versionPublisher = natsClient.GetSubjectPublisher("version"); var repoSynchronizer = new RepoSynchronizer(executor.WithUser("git").CreateCommandExecutor("git")); var storageSynchronizer = CreateStorageSynchronizer(storageClient, executor.WithUser("git"), metricsService); storageSynchronizer.Sync(repoSynchronizer.CurrentHead().Result, checkForStaleRevision: false).Wait(); RunIntervalPublisher(lifetime, versionPublisher, repoSynchronizer, storageSynchronizer); var syncActor = SyncActor.Create(storageSynchronizer, repoSynchronizer, natsClient, lifetime.ApplicationStopping, loggerFactory.CreateLogger("SyncActor")); var triggerHelper = new TriggerHooksHelper(new HttpClient(), metricsService, loggerFactory.CreateLogger("TriggerHooksHelper")); var hooksHelper = new HooksHelper( executor.WithUser("git").CreateCommandExecutor("git"), triggerHelper, metricsService, loggerFactory.CreateLogger("HooksHelper") ); app.UseRouter(router => { router.MapGet("validate", ValidationHandler.Create(executor, gitValidationFlow, loggerFactory.CreateLogger <ValidationHandler>(), metricsService)); router.MapGet("sync", SyncHandler.Create(syncActor, _syncPolicy, metricsService)); router.MapGet("push", PushHandler.Create(syncActor, metricsService, hooksHelper)); router.MapGet("log", async(req, res, routedata) => _logger.LogInformation(req.Query["message"])); router.MapGet("health", async(req, res, routedata) => await res.WriteAsync(JsonConvert.SerializeObject(new { }))); router.MapGet("version", async(req, res, routedata) => await res.WriteAsync(Assembly.GetEntryAssembly() .GetCustomAttribute <AssemblyInformationalVersionAttribute>().InformationalVersion)); }); }