mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-09-22 06:00:56 +02:00
95 lines
3.4 KiB
Python
95 lines
3.4 KiB
Python
![]() |
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)
|