import re def main(): old_vars = {} with open('appwrite-coolify.yml', 'r') as f: for line in f: m = re.match(r'^\s+-\s+([A-Z0-9_]+)=(.*)', line) if m: var_name = m.group(1) val = m.group(2) # Prefer mappings that have a '$' (i.e. dynamic mapping) if var_name not in old_vars or '$' in val: old_vars[var_name] = line.strip() # Let's explicitly check some known ones to be safe # e.g., OPR_EXECUTOR_SECRET should be $SERVICE_PASSWORD_64_APPWRITE output_lines = [] with open('new_base.yml', 'r') as f: in_environment = False for line in f: if line.strip() == 'environment:': in_environment = True output_lines.append(line) continue # If we are in environment block but hit something that isn't a list item if in_environment and line.strip() and not line.strip().startswith('-'): in_environment = False if in_environment and line.strip().startswith('-'): m = re.match(r'^(\s+-\s+)([A-Z0-9_]+)(.*)', line) # Check for quoted vars if any, though they shouldn't exist in new_base.yml m_quoted = re.match(r'^(\s+-\s+)"([A-Z0-9_]+)=(.*)"', line) if m_quoted: indent = m_quoted.group(1) var_name = m_quoted.group(2) elif m: indent = m.group(1) var_name = m.group(2) else: output_lines.append(line) continue # Hardcoded fix for the bug if var_name == 'OPR_EXECUTOR_RUNTIMES': output_lines.append(f'{indent.split("-")[0]}- "OPR_EXECUTOR_RUNTIMES=${{_APP_FUNCTIONS_RUNTIMES}},${{_APP_SITES_RUNTIMES}}"\n') continue if var_name in old_vars: base_indent = indent.split('-')[0] output_lines.append(f"{base_indent}{old_vars[var_name]}\n") else: output_lines.append(line) else: output_lines.append(line) with open('merged_appwrite-coolify.yml', 'w') as f: for line in output_lines: f.write(line) if __name__ == "__main__": main()