< Summary - Envilder CLI

Information
Class: src/envilder/apps/gha/entry/Gha.ts
Assembly: Default
File(s): src/envilder/apps/gha/entry/Gha.ts
Tag: 561_41292037308
Line coverage
100%
Covered lines: 31
Uncovered lines: 0
Coverable lines: 31
Total lines: 99
Line coverage: 100%
Branch coverage
93%
Covered branches: 15
Total branches: 16
Branch coverage: 93.7%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

File(s)

src/envilder/apps/gha/entry/Gha.ts

#LineLine coverage
 1import 'reflect-metadata';
 2import type { Container } from 'inversify';
 3import { DispatchActionCommand } from '../../../core/application/dispatch/DispatchActionCommand.js';
 4import type { DispatchActionCommandHandler } from '../../../core/application/dispatch/DispatchActionCommandHandler.js';
 5import type { CliOptions } from '../../../core/domain/CliOptions.js';
 6import type { MapFileConfig } from '../../../core/domain/MapFileConfig.js';
 7import type { ILogger } from '../../../core/domain/ports/ILogger.js';
 8import { GitHubActionsLogger } from '../../../core/infrastructure/github/GitHubActionsLogger.js';
 9import { ConsoleLogger } from '../../../core/infrastructure/logger/ConsoleLogger.js';
 10import { readMapFileConfig } from '../../../core/infrastructure/variableStore/FileVariableStore.js';
 11import { TYPES } from '../../../core/types.js';
 12import { presentGhaError } from '../errors/GhaErrorPresenter.js';
 13import { Startup } from '../Startup.js';
 14
 15/**
 16 * Reads GitHub Actions inputs from environment variables.
 17 * GitHub Actions passes inputs as INPUT_<NAME> environment variables.
 18 */
 19function readInputs(): {
 20  options: CliOptions;
 21  provider?: string;
 22  vaultUrl?: string;
 23} {
 1324  const mapFile = process.env.INPUT_MAP_FILE;
 1325  const envFile = process.env.INPUT_ENV_FILE;
 1326  const provider = process.env.INPUT_PROVIDER;
 1327  const vaultUrl = process.env.INPUT_VAULT_URL;
 28
 1329  return {
 30    options: {
 31      map: mapFile,
 32      envfile: envFile,
 33      // GitHub Action only supports pull mode
 34      push: false,
 35    },
 36    provider: provider || undefined,
 37    vaultUrl: vaultUrl || undefined,
 38  };
 39}
 40
 41async function executeCommand(
 42  serviceProvider: Container,
 43  options: CliOptions,
 44): Promise<void> {
 945  const commandHandler = serviceProvider.get<DispatchActionCommandHandler>(
 46    TYPES.DispatchActionCommandHandler,
 47  );
 48
 949  const command = DispatchActionCommand.fromCliOptions(options);
 950  await commandHandler.handleCommand(command);
 51}
 52
 53export async function main() {
 1354  const { options, provider, vaultUrl } = readInputs();
 55
 56  let serviceProvider: Container;
 1357  let logger: ILogger = new GitHubActionsLogger(new ConsoleLogger());
 58
 1359  try {
 1360    const fileConfig = options.map ? await readMapFileConfig(options.map) : {};
 61
 1362    const config: MapFileConfig = {
 63      ...fileConfig,
 64      ...(provider && { provider }),
 65      ...(vaultUrl && { vaultUrl }),
 66    };
 67
 1368    const startup = Startup.build();
 1369    startup.configureServices().configureInfrastructure(config);
 1370    serviceProvider = startup.create();
 1371    logger = serviceProvider.get<ILogger>(TYPES.ILogger);
 72  } catch (error) {
 173    const message = error instanceof Error ? error.message : String(error);
 174    logger.error(`🚨 Failed to initialize: ${message}`);
 175    throw error;
 76  }
 77
 1278  try {
 79    // Validate required inputs
 1280    if (!options.map || !options.envfile) {
 381      throw new Error(
 82        '🚨 Missing required inputs! Please provide map-file and env-file.',
 83      );
 84    }
 85
 986    logger.info('🔑 Envilder GitHub Action - Starting secret pull...');
 987    logger.info(`📋 Map file: ${options.map}`);
 988    logger.info(`📄 Env file: ${options.envfile}`);
 89
 990    await executeCommand(serviceProvider, options);
 91
 792    logger.info('✅ Secrets pulled successfully!');
 93  } catch (error) {
 594    for (const line of presentGhaError(error)) {
 1395      logger.error(line);
 96    }
 597    throw error;
 98  }
 99}

Methods/Properties

readInputs
executeCommand
main