func registerPlugins()

in cmds/contest/server/server.go [87:135]


func registerPlugins(pluginRegistry *pluginregistry.PluginRegistry, pluginConfig *PluginConfig) error {
	// register targetmanagers
	for _, loader := range pluginConfig.TargetManagerLoaders {
		name, factory := loader()
		if err := pluginRegistry.RegisterTargetManager(name, factory); err != nil {
			return err
		}
	}

	// register testfetchers
	for _, loader := range pluginConfig.TestFetcherLoaders {
		name, factory := loader()
		if err := pluginRegistry.RegisterTestFetcher(name, factory); err != nil {
			return err
		}
	}

	// register teststeps
	for _, loader := range pluginConfig.TestStepLoaders {
		name, factory, events := loader()
		if err := pluginRegistry.RegisterTestStep(name, factory, events); err != nil {
			return err
		}
	}

	// register reporters
	for _, loader := range pluginConfig.ReporterLoaders {
		name, factory := loader()
		if err := pluginRegistry.RegisterReporter(name, factory); err != nil {
			return err
		}
	}

	// TODO make listener also configurable from contest-generator.
	// also register user functions here. TODO: make them configurable from contest-generator.
	errCh := make(chan error, 1)
	funcInitOnce.Do(func() {
		for _, userFunction := range userFunctions {
			for name, fn := range userFunction {
				if err := test.RegisterFunction(name, fn); err != nil {
					errCh <- fmt.Errorf("failed to load user function '%s': %w", name, err)
					return
				}
			}
		}
	})

	return nil
}