mirror of
https://github.com/usebruno/bruno.git
synced 2026-07-08 22:45:25 +00:00
feat: enhance json environment file support in bruno-cli (#5660)
* feat: enhance json environment file support in bruno-cli feat: add parseEnvironmentJson function to normalize environment JSON structure lint fixes feat: added tests for invalid JSON environment files in CLI and added missing constant defenition. feat: improve JSON environment file handling and update tests Trigger test fix: update CLI command syntax for non-existent JSON environment file test fix: correct CLI command syntax in test for non-existent JSON environment file fix: update CLI command syntax in test for non-existent JSON environment file fix: update test to use temporary path for non-existent JSON environment file trying to fix the tests fix tests refactor: rename ERROR_INVALID_JSON to ERROR_INVALID_FILE and update related error handling in CLI commands and tests fix: update parseEnvironmentJson to preserve secret flag test: improved tests * refactor: move parseEnvironmentJson function to utils/ environment.js file and update imports * test: update tests
This commit is contained in:
@@ -6,6 +6,7 @@ const { getRunnerSummary } = require('@usebruno/common/runner');
|
||||
const { exists, isFile, isDirectory } = require('../utils/filesystem');
|
||||
const { runSingleRequest } = require('../runner/run-single-request');
|
||||
const { getEnvVars } = require('../utils/bru');
|
||||
const { parseEnvironmentJson } = require('../utils/environment');
|
||||
const { isRequestTagsIncluded } = require("@usebruno/common")
|
||||
const makeJUnitOutput = require('../reporters/junit');
|
||||
const makeHtmlOutput = require('../reporters/html');
|
||||
@@ -131,7 +132,7 @@ const builder = async (yargs) => {
|
||||
type: 'string'
|
||||
})
|
||||
.option('env-file', {
|
||||
describe: 'Path to environment file (.bru) - can be absolute or relative path',
|
||||
describe: 'Path to environment file (.bru or .json) - absolute or relative',
|
||||
type: 'string'
|
||||
})
|
||||
.option('env-var', {
|
||||
@@ -306,7 +307,7 @@ const handler = async function (argv) {
|
||||
clientCertConfigJson = JSON.parse(clientCertConfigFileContent);
|
||||
} catch (err) {
|
||||
console.error(chalk.red(`Failed to parse Client Certificate Config JSON: ${err.message}`));
|
||||
process.exit(constants.EXIT_STATUS.ERROR_INVALID_JSON);
|
||||
process.exit(constants.EXIT_STATUS.ERROR_INVALID_FILE);
|
||||
}
|
||||
|
||||
if (clientCertConfigJson?.enabled && Array.isArray(clientCertConfigJson?.certs)) {
|
||||
@@ -346,10 +347,29 @@ const handler = async function (argv) {
|
||||
process.exit(constants.EXIT_STATUS.ERROR_ENV_NOT_FOUND);
|
||||
}
|
||||
|
||||
const envBruContent = fs.readFileSync(envFilePath, 'utf8').replace(/\r\n/g, '\n');
|
||||
const envJson = parseEnvironment(envBruContent);
|
||||
envVars = getEnvVars(envJson);
|
||||
envVars.__name__ = envFile ? path.basename(envFilePath, '.bru') : env;
|
||||
const ext = path.extname(envFilePath).toLowerCase();
|
||||
if (ext === '.json') {
|
||||
// Parse Bruno schema JSON environment
|
||||
let envJsonContent;
|
||||
try {
|
||||
envJsonContent = fs.readFileSync(envFilePath, 'utf8');
|
||||
const parsed = JSON.parse(envJsonContent);
|
||||
const normalizedEnv = parseEnvironmentJson(parsed);
|
||||
envVars = getEnvVars(normalizedEnv);
|
||||
const rawName = normalizedEnv?.name;
|
||||
const trimmedName = typeof rawName === 'string' ? rawName.trim() : '';
|
||||
envVars.__name__ = trimmedName || path.basename(envFilePath, '.json');
|
||||
} catch (err) {
|
||||
console.error(chalk.red(`Failed to parse Environment JSON: ${err.message}`));
|
||||
process.exit(constants.EXIT_STATUS.ERROR_INVALID_FILE);
|
||||
}
|
||||
} else {
|
||||
// Default to .bru parsing
|
||||
const envBruContent = fs.readFileSync(envFilePath, 'utf8').replace(/\r\n/g, '\n');
|
||||
const envJson = parseEnvironment(envBruContent);
|
||||
envVars = getEnvVars(envJson);
|
||||
envVars.__name__ = envFile ? path.basename(envFilePath, '.bru') : env;
|
||||
}
|
||||
}
|
||||
|
||||
if (envVar) {
|
||||
|
||||
Reference in New Issue
Block a user