docs: private static Options constructOptions() {
      Options options = new Options();
  
      Option cluster = Option.builder("c")
          .desc("Cluster name in which the topology needs to run on")
          .longOpt("cluster")
          .hasArgs()
          .argName("cluster")
          .required()
          .build();
  
      Option role = Option.builder("r")
          .desc("Role under which the topology needs to run")
          .longOpt("role")
          .hasArgs()
          .argName("role")
          .required()
          .build();
  
      Option environment = Option.builder("e")
          .desc("Environment under which the topology needs to run")
          .longOpt("environment")
          .hasArgs()
          .argName("environment")
          .required()
          .build();
  
      Option submitUser = Option.builder("s")
          .desc("User submitting the topology")
          .longOpt("submit_user")
          .hasArgs()
          .argName("submit userid")
          .required()
          .build();
  
      Option heronHome = Option.builder("d")
          .desc("Directory where heron is installed")
          .longOpt("heron_home")
          .hasArgs()
          .argName("heron home dir")
          .required()
          .build();
  
      Option configFile = Option.builder("p")
          .desc("Path of the config files")
          .longOpt("config_path")
          .hasArgs()
          .argName("config path")
          .required()
          .build();
  
      Option configOverrides = Option.builder("o")
          .desc("Command line override config path")
          .longOpt("override_config_file")
          .hasArgs()
          .argName("override config file")
          .build();
  
      Option releaseFile = Option.builder("b")
          .desc("Release file name")
          .longOpt("release_file")
          .hasArgs()
          .argName("release information")
          .build();
  
      Option topologyPackage = Option.builder("y")
          .desc("tar ball containing user submitted jar/tar, defn and config")
          .longOpt("topology_package")
          .hasArgs()
          .argName("topology package")
          .required()
          .build();
  
      Option topologyDefn = Option.builder("f")
          .desc("serialized file containing Topology protobuf")
          .longOpt("topology_defn")
          .hasArgs()
          .argName("topology definition")
          .required()
          .build();
  
      Option topologyJar = Option.builder("j")
          .desc("The filename of the heron topology jar/tar/pex file to be run by the executor")
          .longOpt("topology_bin")
          .hasArgs()
          .argName("topology binary filename on the cluster")
          .required()
          .build();
  
      Option dryRun = Option.builder("u")
          .desc("run in dry-run mode")
          .longOpt("dry_run")
          .required(false)
          .build();
  
      Option dryRunFormat = Option.builder("t")
          .desc("dry-run format")
          .longOpt("dry_run_format")
          .hasArg()
          .required(false)
          .build();
  
      Option verbose = Option.builder("v")
          .desc("Enable debug logs")
          .longOpt("verbose")
          .build();
  
      options.addOption(cluster);
      options.addOption(role);
      options.addOption(environment);
      options.addOption(submitUser);
      options.addOption(heronHome);
      options.addOption(configFile);
      options.addOption(configOverrides);
      options.addOption(releaseFile);
      options.addOption(topologyPackage);
      options.addOption(topologyDefn);
      options.addOption(topologyJar);
      options.addOption(dryRun);
      options.addOption(dryRunFormat);
      options.addOption(verbose);
  
      return options;
    }