# @namaste/kafka-schema-registry-client

A small utility CLI that allows publishing schemas to the Confluent Kafka Schema Registry. Internally, it uses `@namaste/kafka-schema-registry-client` to communicate with the server.

## Installation

Install the package globally on the machine that you want to register schemas from:

```bash
npm i -g @namaste/kafka-schema-registry-cli
```

or

```bash
yarn global add @namaste/kafka-schema-registry-cli
```

## Usage

The CLI is accessible under the `register-schemas` name.
The help is accessible either by calling the program without parameters or environment variables set, or with help option:

```bash
register-schemas
```

or

```bash
register-schemas --help
```

This will print the following output:

```bash
Usage: register-schemas [options] <schemasDir>

Options:
  -V, --version            output the version number
  -u, --url <registryUrl>  Confluent schema registry URL
  -k, --key <key>          Confluent schema registry key
  -s, --secret <secret>    Confluent schema registry secret
  -h, --help               output usage information
```

`url`, `key` and `secret` are required.
In place of the required options, you may want to use environment variables:

- `SCHEMA_REGISTRY_URL` - to set the schema registry URL (`-u` option)
- `SCHEMA_REGISTRY_KEY` - to set the schema registry key (`-k` option)
- `SCHEMA_REGISTRY_SECRET` - to set the schema registry secret (`-s` option)

## Schemas

To successfuly run the program, you must supply the folder where the file(s) with the schemas you want to publish reside, or put those schemas in the `schemas` subfolder (the default). The schemas file must be a `json` file of the following shape:

```json
{
  "[topic-name]": {
    "key": "optional - avro key definition",
    "value": "optional - avro value definition"
  }
}
```

Example:

```json
{
  "topic-example": {
    "key": {
      "type": "string",
      "namespace": "io.namastetech.schema.example",
      "name": "key",
      "doc": "Unique key"
    },
    "value": {
      "type": "record",
      "namespace": "io.namastetech.schema.example",
      "name": "exampleValue",
      "doc": "A message passed to topic",
      "fields": [
        {
          "name": "id",
          "type": "string",
          "doc": "An ID of the message"
        },
        {
          "name": "message",
          "type": "string",
          "doc": "A string message"
        }
      ]
    }
  }
}
```

## Examples of use

### No params

```bash
register-schemas
```

The schemas will be read from `./schemas` folder, and schema registry url, key and secret will be read from environment variables.

### With folder name

```bash
register-schemas my-schemas
```

The schemas will be read from `./my-schemas` folder, and schema registry url, key and secret will be read from environment variables.

### With one option provided

```bash
register-schemas -u https://myschemaregistryserver.io my-schemas
```

The schemas will be read from `./my-schemas` folder, the schema registry url used will be `https://myschemaregistryserver.io`, and schema registry key and secret will be read from environment variables.
