feat(envparse): add merge mode for global+stack env layering
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
@@ -15,12 +15,26 @@ def parse_env(path):
|
||||
pairs.append((k, v))
|
||||
return pairs
|
||||
|
||||
def merge_envs(base_path, override_path):
|
||||
"""Merge two env files. Keys in override_path win over base_path."""
|
||||
base = dict(parse_env(base_path))
|
||||
override = dict(parse_env(override_path))
|
||||
merged = {**base, **override}
|
||||
return list(merged.items())
|
||||
|
||||
mode = sys.argv[1]
|
||||
if mode == 'export':
|
||||
for k, v in parse_env(sys.argv[2]):
|
||||
print('export {}={}'.format(k, repr(v)))
|
||||
elif mode == 'export_merged':
|
||||
# export_merged <global.env> <stack.env>
|
||||
for k, v in merge_envs(sys.argv[2], sys.argv[3]):
|
||||
print('export {}={}'.format(k, repr(v)))
|
||||
elif mode == 'vars':
|
||||
print(' '.join('$' + k for k, v in parse_env(sys.argv[2])))
|
||||
elif mode == 'vars_merged':
|
||||
# vars_merged <global.env> <stack.env>
|
||||
print(' '.join('$' + k for k, v in merge_envs(sys.argv[2], sys.argv[3])))
|
||||
elif mode == 'strip':
|
||||
t = sys.stdin.read()
|
||||
t = re.sub(r'[ \t]*env_file:[ \t]*\n([ \t]+-[^\n]*\n)+', '', t)
|
||||
|
||||
Reference in New Issue
Block a user