terrac
Version:
A minimal private module registry for Terraform and OpenTofu
62 lines (61 loc) • 2.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const core_1 = require("@oclif/core");
const semver_1 = require("semver");
const Joi = require("joi");
const utils_1 = require("../utils");
const factory_1 = require("../backends/factory");
const requiredConfigSchema = Joi.object({
backend: utils_1.backendConfigSchema.required(),
module: utils_1.moduleConfigSchema.optional(),
});
class List extends core_1.Command {
async run() {
const { args, flags } = await this.parse(List);
const { name } = args;
const workDir = flags['work-directory'];
const config = await (0, utils_1.loadConfig)(workDir, (0, utils_1.parseConfigOverwrites)(flags['overwrite-config']));
await (0, utils_1.validateConfig)(requiredConfigSchema, config);
const backend = factory_1.BackendFactory.create(config.backend);
const modules = await backend.list(name);
if (name) {
modules.sort((a, b) => {
const aVersion = a.version || '';
const bVersion = b.version || '';
return (0, semver_1.gt)(aVersion, bVersion) ? -1 : 1;
});
for (const module of modules) {
this.log(module.version);
}
}
else {
modules.sort((a, b) => a.name.localeCompare(b.name));
for (const module of modules) {
this.log(module.name);
}
}
}
}
exports.default = List;
List.description = 'List available modules and versions.';
List.examples = [
'<%= config.bin %> <%= command.id %>',
'<%= config.bin %> <%= command.id %> my-module',
];
List.args = {
name: core_1.Args.string({
description: 'Module name',
required: false,
}),
};
List.flags = {
'work-directory': core_1.Flags.string({
summary: 'Root directory of the terrac configuration',
default: '.',
}),
'overwrite-config': core_1.Flags.string({
summary: 'Overwrite terrac configuration',
multiple: true,
hidden: true,
}),
};