diff --git a/utils/update_env.py b/utils/update_env.py new file mode 100644 index 000000000..1f40faec6 --- /dev/null +++ b/utils/update_env.py @@ -0,0 +1,94 @@ +import os +import re +import argparse +import sys + +""" +This script updates environment variables in a .env file with values from the local environment. +Specifically, it looks for variables set to "GET_FROM_LOCAL_ENV" in the input .env file and replaces them +with the corresponding values from the local environment variables. + +Usage: +1. Prepare an input .env file with some variables set to "GET_FROM_LOCAL_ENV". + Example input .env file (input.env): + # Example configuration + + API_KEY=GET_FROM_LOCAL_ENV + DB_PASSWORD=GET_FROM_LOCAL_ENV + HOST=localhost + PORT=3080 + +2. Set the corresponding environment variables in your local environment. + Example in bash: + export API_KEY=new_api_key_value + export DB_PASSWORD=new_db_password_value + +3. Run the script, specifying the input and output file paths. + Example: + python update_env.py input.env output.env +""" + +def read_env_file(file_path): + """Reads the .env file and returns the lines as a list.""" + with open(file_path, 'r') as file: + lines = file.readlines() + return lines + +def write_env_file(file_path, lines): + """Writes the updated lines to the specified .env file.""" + with open(file_path, 'w') as file: + file.writelines(lines) + +def update_env_file_with_local_env(input_file_path, output_file_path): + """ + Reads the input .env file, updates the variables set to GET_FROM_LOCAL_ENV + with values from the local environment, and writes the result to the output .env file. + """ + lines = read_env_file(input_file_path) + updated_lines = [] + # Regex pattern to match lines ending with "GET_FROM_LOCAL_ENV" + env_var_pattern = re.compile(r'^\s*([A-Z_]+)=GET_FROM_LOCAL_ENV\s*$') + missing_vars = [] + updated_vars = [] + + for line in lines: + match = env_var_pattern.match(line) + if match: + key = match.group(1) + # Check if the environment variable is set in the local environment + if key in os.environ: + new_value = os.environ[key] + updated_line = f'{key}={new_value}\n' + updated_lines.append(updated_line) + updated_vars.append(key) + else: + missing_vars.append(key) + else: + updated_lines.append(line) + + # Print warnings and exit if any required environment variables are missing + if missing_vars: + for var in missing_vars: + print(f"Warning: {var} set to GET_FROM_LOCAL_ENV, could not find {var}, please set {var} in your local environment and run again.") + sys.exit(1) + + # Write the updated lines to the output .env file + write_env_file(output_file_path, updated_lines) + + # Print the list of updated variables + if updated_vars: + print("Updated the following variables:") + for var in updated_vars: + print(var) + + print(f"Processed {input_file_path} and wrote updates to {output_file_path}.") + +if __name__ == "__main__": + # Parse command-line arguments for input and output file paths + parser = argparse.ArgumentParser(description='Update .env file with local environment variables.') + parser.add_argument('input_file_path', type=str, help='Path to the input .env file') + parser.add_argument('output_file_path', type=str, help='Path to the output .env file') + args = parser.parse_args() + + # Update the .env file with local environment variables + update_env_file_with_local_env(args.input_file_path, args.output_file_path)