mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-09-22 06:00:56 +02:00
💻 feat: added env updater script (#3107)
This commit is contained in:
parent
ab74685476
commit
a53312bbd4
1 changed files with 94 additions and 0 deletions
94
utils/update_env.py
Normal file
94
utils/update_env.py
Normal file
|
@ -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)
|
Loading…
Add table
Add a link
Reference in a new issue