-
-
Notifications
You must be signed in to change notification settings - Fork 3.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
💻 feat: added env updater script (#3107)
- Loading branch information
1 parent
ab74685
commit a53312b
Showing
1 changed file
with
94 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |