UNPKG

@namaste/kafka-schema-registry-cli

Version:

Utility app for registering schemas in Confluent Schema Registry

98 lines (87 loc) 2.46 kB
#!/usr/bin/env node const { SchemaRegistry } = require('@namaste/kafka-schema-registry-client'); const chalk = require('chalk'); const fs = require('fs'); const path = require('path'); const program = require('commander'); const pkg = require('../package.json'); const print = console.log; const isDir = path => fs.statSync(path).isDirectory(); const walk = dir => fs .readdirSync(dir) .map(fileOrDir => path.resolve(path.join(dir, fileOrDir))) .reduce( (files, fileOrDir) => isDir(fileOrDir) ? files.concat(walk(fileOrDir)) : files.concat(fileOrDir), [] ); const validateOptions = ({ url, key, secret }) => { if (!(url && key && secret)) { print(chalk.red(`The following arguments are required:`)); !url && print(' - url'); !key && print(' - key'); !secret && print(' - secret'); print(); program.help(); process.exitCode = 2; return false; } return true; }; const validateDir = dir => { const handleNotValid = isNotDir => { isNotDir ? print(chalk.red(`${dir} is not a directory`)) : print(chalk.red(`${dir} does not exist`)); print(); program.help(); process.exitCode = 1; return false; }; try { fs.accessSync(dir, fs.constants.F_OK); if (!isDir(dir)) { return handleNotValid(true); } } catch (err) { return handleNotValid(); } return true; }; program .name('register-schemas') .version(pkg.version) .option( '-u, --url <registryUrl>', 'Confluent schema registry URL (or use SCHEMA_REGISTRY_URL environment variable)' ) .option( '-k, --key <key>', 'Confluent schema registry key (or use SCHEMA_REGISTRY_KEY environment variable)' ) .option( '-s, --secret <secret>', 'Confluent schema registry secret (or use SCHEMA_REGISTRY_SECRET environment variable)' ) .arguments('[schemasDir]') .parse(process.argv); const { url = process.env.SCHEMA_REGISTRY_URL, key = process.env.SCHEMA_REGISTRY_KEY, secret = process.env.SCHEMA_REGISTRY_SECRET, args: [schemasDir = 'schemas'], } = program; const isDirValid = validateDir(schemasDir); const isOptionsValid = validateOptions({ url, key, secret }); if (isDirValid && isOptionsValid) { const schemaRegistry = new SchemaRegistry({ url, auth: { username: key, password: secret }, }); walk(schemasDir).forEach(schemaInfo => schemaRegistry.publishSchemas(require(schemaInfo)) ); }