func main()

in cmd/interceptor/main.go [52:158]


func main() {
	zapLogger, err := zap.NewProduction()
	if err != nil {
		log.Fatalf("Failed to initialize logger: %s", err)
	}

	logger := zapLogger.Sugar()

	logBuildInfo(logger)

	var conf *config

	if conf, err = initEnv(); err != nil {
		logger.Fatalf("failed to init env: %v", err)
	}

	clusterConfig := ctrl.GetConfigOrDie()

	scheme := runtime.NewScheme()
	utilruntime.Must(codebaseApiV1.AddToScheme(scheme))
	utilruntime.Must(corev1.AddToScheme(scheme))
	utilruntime.Must(triggersApi.AddToScheme(scheme))

	client, err := ctrlClient.New(clusterConfig, ctrlClient.Options{Scheme: scheme})
	if err != nil {
		logger.Fatalf("Failed to get client: %v", err)
	}

	secretService := interceptor.NewSecretService(client)

	ctx := context.Background()

	certData, err := secretService.CreateCertsSecret(ctx, conf.Namespace, conf.InterceptorName)
	if err != nil {
		logger.Fatalf("Failed to create certs secret: %v", err)
	}

	logger.Infof("The secret %s was populated with certs ", interceptor.SecretCertsName)

	if err = secretService.UpdateCABundle(ctx, conf.Namespace, conf.InterceptorName, certData.CaCert); err != nil {
		logger.Fatalf("Failed to update cABundle: %v", err)
	}

	logger.Infof("Interceptor %s caBundle updated successfully", conf.InterceptorName)

	mux := http.NewServeMux()
	mux.Handle(
		"/",
		&edpInterceptorHandler{
			EDPInterceptor: interceptor.NewEDPInterceptor(
				client,
				github.NewEventProcessor(client, &github.EventProcessorOptions{Logger: logger}),
				gitlab.NewEventProcessor(client, logger),
				gerrit.NewEventProcessor(client, logger),
				bitbucket.NewEventProcessor(client, &bitbucket.EventProcessorOptions{Logger: logger}),
				logger,
			),
			Logger: logger,
		},
	)
	mux.HandleFunc("/ready", readinessHandler)

	tlsData := &tls.Config{
		MinVersion: tls.VersionTLS13,
		GetCertificate: func(*tls.ClientHelloInfo) (*tls.Certificate, error) {
			cert, err := tls.X509KeyPair(certData.ServerCert, certData.ServerKey)
			if err != nil {
				return nil, err
			}

			return &cert, nil
		},
	}

	srv := &http.Server{
		Addr:         fmt.Sprintf(":%d", httpsPort),
		ReadTimeout:  readTimeout,
		WriteTimeout: writeTimeout,
		IdleTimeout:  idleTimeout,
		Handler:      mux,
		TLSConfig:    tlsData,
	}

	go func() {
		if err := srv.ListenAndServeTLS("", ""); err != nil && !errors.Is(err, http.ErrServerClosed) {
			logger.Fatalf("Server failed: %v", err)
		}
	}()

	logger.Infof("Listen and serve on port %d", httpsPort)

	done := make(chan os.Signal, 1)
	signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)

	<-done

	logger.Info("Server stopped")

	ctx, cancel := context.WithTimeout(context.Background(), shutDownTimeout)
	defer cancel()

	if err := srv.Shutdown(ctx); err != nil {
		logger.Fatalf("Server shutdown failed: %+v", err)
	}

	logger.Info("Server exited properly")
}