name: nimbus-fml
author: nimbus-dev@mozilla.com
about: Tool for working with Nimbus Feature Manifests
args:
subcommands:
    - generate:
        about: Generate feature structs against the Feature Variables API.
        args:
            - INPUT:
                help: Sets the input file to use
                required: true
                index: 1
            - OUTPUT:
                help: The file or directory where generated code is created
                required: true
                index: 2
            - language:
                help: The language of the output file
                long: language
                takes_value: true
                possible_values:
                  - swift
                  - kotlin
            - channel:
                help: The channel to generate the defaults for
                long: channel
                global: false
                takes_value: true
            - cache-dir:
                help: The directory where downloaded files are cached
                long: cache-dir
                takes_value: true
            - repo-file:
                help: The file containing the version/refs/locations for other repos
                long: repo-file
                takes_value: true
                multiple: true
            - ref:
                help: If INPUT is a remote file, then use this as the tag or branch name.
                long: ref
                takes_value: true
    - generate-experimenter:
        about: Generate a version of this manifest compatible with Experimenter's format.
        args:
            - INPUT:
                help: Sets the input file to use
                required: true
                index: 1
            - OUTPUT:
                help: The file or directory where generated code is created
                required: true
                index: 2
            - channel:
                # This is no longer needed, but we keep it for backward compatibility.
                required: false
                help: "Deprecated: The channel to generate the defaults for. This can be omitted."
                long: channel
                takes_value: true
            - cache-dir:
                help: The directory where downloaded files are cached
                long: cache-dir
                takes_value: true
            - repo-file:
                help: The file containing the version/refs/locations for other repos
                long: repo-file
                takes_value: true
                multiple: true
            - ref:
                help: If INPUT is a remote file, then use this as the tag or branch name.
                long: ref
                takes_value: true
    - fetch:
        about: Get the input file, with the same rules that govern how FilePaths work.
        args:
            - INPUT:
                help: Sets the input file to use
                required: true
                index: 1
            - cache-dir:
                help: The directory where downloaded files are cached
                long: cache-dir
                takes_value: true
            - repo-file:
                help: The file containing the version/refs/locations for other repos
                long: repo-file
                takes_value: true
                multiple: true
            - ref:
                help: If INPUT is a remote file, then use this as the tag or branch name.
                long: ref
                takes_value: true
    - single-file:
        about: Create a single file out of the given manifest,
            suited for production environments where only one file is
            allowed, and only one channel is needed.
        args:
            - INPUT:
                help: Sets the input file to use
                required: true
                index: 1
            - OUTPUT:
                help: The file or directory where generated code is created
                required: true
                index: 2
            - channel:
                help: The channel to generate the defaults for
                long: channel
                takes_value: true
            - cache-dir:
                help: The directory where downloaded files are cached
                long: cache-dir
                takes_value: true
            - repo-file:
                help: The file containing the version/refs/locations for other repos
                long: repo-file
                takes_value: true
                multiple: true
            - ref:
                help: If INPUT is a remote file, then use this as the tag or branch name.
                long: ref
                takes_value: true
    - validate:
        about: Validate an FML configuration and all of its channels.
        args:
            - INPUT:
                help: Sets the input file to use
                required: true
                index: 1
            - cache-dir:
                help: The directory where downloaded files are cached
                long: cache-dir
                takes_value: true
            - repo-file:
                help: The file containing the version/refs/locations for other repos
                long: repo-file
                takes_value: true
                multiple: true
            - ref:
                help: If INPUT is a remote file, then use this as the tag or branch name.
                long: ref
                takes_value: true
    - channels:
        about: Print out all the channels to stdout, as JSON or one-per-line
        args:
            - INPUT:
                help: Sets the input file to use
                required: true
                index: 1
            - cache-dir:
                help: The directory where downloaded files are cached
                long: cache-dir
                takes_value: true
            - repo-file:
                help: The file containing the version/refs/locations for other repos
                long: repo-file
                takes_value: true
                multiple: true
            - ref:
                help: If INPUT is a remote file, then use this as the tag or branch name.
                long: ref
                takes_value: true
            - json:
                long: json
                help: If present, then print the channels as JSON. If not, then print one per line.
                takes_value: false
    - info:
        about: Prints out information about the manifest
        args:
            - INPUT:
                help: Sets the input file to use
                required: true
                index: 1
            - channel:
                help: The channel used to generate the defaults for
                long: channel
                required: false
                takes_value: true
            - cache-dir:
                help: The directory where downloaded files are cached
                long: cache-dir
                takes_value: true
            - repo-file:
                help: The file containing the version/refs/locations for other repos
                long: repo-file
                takes_value: true
                multiple: true
            - ref:
                help: If INPUT is a remote file, then use this as the tag or branch name
                long: ref
                takes_value: true
            - feature:
                long: feature
                help: Print the info of one feature only, if present
                takes_value: true
                required: false
            - json:
                long: json
                help: If present, then print the info as JSON. If not, then present it as YAML
                takes_value: false
