func ParseFlags()

in internal/mode/indexer/indexer.go [60:125]


func ParseFlags() (*Options, error) {
	indexDir := flag.String("index_dir", "", "directory holding index shards.")
	pathPrefix := flag.String("path_prefix", "/indexer", "prefix for the routes")
	nodeNameFlag := flag.String("node_name", "", "name of the node")
	selfURL := flag.String("self_url", "", "the URL to reach the node")
	searchURL := flag.String("search_url", "", "the URL to reach the webserver if it differs from self_url")
	gitlabURL := flag.String("gitlab_url", "", "gitlab URL")
	secretFilePath := flag.String("secret_path", "", "gitlab shared secret file path")
	listen := flag.String("listen", ":6060", "listen on this address.")
	versionFlag := flag.Bool("version", false, "Print the version and exit")

	flag.Parse()

	if *versionFlag {
		// Version flag will be handled by the Run function
		return &Options{
			PrintVersion: true,
		}, nil
	}

	if *indexDir == "" {
		if flag.NArg() == 0 && flag.NFlag() == 0 && len(os.Args) <= 2 {
			// If no arguments are provided, just return the help text
			flag.Usage()
			return nil, fmt.Errorf("must set -index_dir")
		}
		err := fmt.Errorf("must set -index_dir")
		return nil, err
	}

	if err := server.CreateIndexDir(*indexDir); err != nil {
		return nil, err
	}

	nodeName := *nodeNameFlag
	if nodeName == "" {
		hostName, err := os.Hostname()
		if err != nil {
			return nil, err
		}
		nodeName = hostName
	}

	n := node_uuid.NewNodeUUID(*indexDir)
	nodeUUID, err := n.Get()

	if err != nil {
		return nil, err
	}

	if *searchURL == "" {
		*searchURL = *selfURL
	}

	return &Options{
		IndexDir:       *indexDir,
		PathPrefix:     *pathPrefix,
		Listen:         *listen,
		NodeName:       nodeName,
		NodeUUID:       nodeUUID,
		SelfURL:        *selfURL,
		SearchURL:      *searchURL,
		GitlabURL:      *gitlabURL,
		SecretFilePath: *secretFilePath,
	}, nil
}