Skip to content

Commit

Permalink
💻 feat: added env updater script (#3107)
Browse files Browse the repository at this point in the history
  • Loading branch information
kurtseifried authored Jun 21, 2024
1 parent ab74685 commit a53312b
Showing 1 changed file with 94 additions and 0 deletions.
94 changes: 94 additions & 0 deletions utils/update_env.py
Original file line number Diff line number Diff line change
@@ -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)

0 comments on commit a53312b

Please sign in to comment.