from os import environ from subprocess import check_output from argparse import ArgumentParser import json projects = [] projects_e2e = [] previews = { 'governance': 'not deployed', 'explorer': 'not deployed', 'trading': 'not deployed', 'tools': 'not deployed', } main_apps = ['governance', 'explorer', 'trading'] preview_governance = "not deployed" preview_trading = "not deployed" preview_explorer = "not deployed" preview_tools = "not deployed" # take input from the pipeline parser = ArgumentParser() # let's generate slug from bash spell for now parser.add_argument('--branch-slug', help='slug of branch') parser.add_argument('--github-ref', help='current github ref') parser.add_argument('--event-name', help='name of event in CI') args = parser.parse_args() # run yarn affected command affected = check_output( f'yarn nx print-affected --base={environ["NX_BASE"]} --head={environ["NX_HEAD"]} --select=projects'.split()).decode('utf-8') # print useful information print(">>>> debug") print(f"NX_BASE: { environ['NX_BASE'] }") print(f"NX_HEAD: { environ['NX_HEAD'] }") print(f"Branch slug: {args.branch_slug}") print(f"Current ref: {args.github_ref}") print(">> Affected output") print(affected) print(">>>> eof debug") # define affection actions -> add to projects arrays and generate preview link def affect_app(app, preview_name=None): print(f"{app} is affected") projects.append(app) if not preview_name: preview_name = app previews[app] = f'https://{preview_name}.{args.branch_slug}.vega.rocks' # check appearance in the affected string for main apps for app in main_apps: if app in affected: affect_app(app) # if non of main apps is affected - test all of them if not projects: for app in main_apps: affect_app(app) # generate e2e targets projects_e2e = [f'{app}-e2e' for app in projects] # remove trading-e2e because it doesn't exists any more (new target is: console-e2e) if "trading-e2e" in projects_e2e: projects_e2e.remove("trading-e2e") # check affection for multisig-signer which is deployed only from develop and pull requests if args.event_name == 'pull_request' or 'develop' in args.github_ref: if 'multisig-signer' in affected: affect_app('multisig-signer', 'tools') # now parse apps that are deployed from develop but don't have previews if 'develop' in args.github_ref: for app in ['static', 'ui-toolkit']: if app in affected: projects.append(app) # if ref is in format release/{env}-{app} then only {app} is deployed if 'release' in args.github_ref: for app in main_apps: if f'{args.github_ref}'.endswith(app): projects = [app] projects_e2e = [f'{app}-e2e'] projects = json.dumps(projects) projects_e2e = json.dumps(projects_e2e) print(f'Projects: {projects}') print(f'Projects E2E: {projects_e2e}') print('>> Previews') for preview, preview_value in previews.items(): print(f'{preview}: {preview_value}') print('>> EOF Previews') lines_to_write = [ f'PREVIEW_GOVERNANCE={previews["governance"]}', f'PREVIEW_EXPLORER={previews["explorer"]}', f'PREVIEW_TRADING={previews["trading"]}', f'PREVIEW_TOOLS={previews["tools"]}', f'PROJECTS={projects}', f'PROJECTS_E2E={projects_e2e}', ] env_file = environ['GITHUB_ENV'] print(f'Line to add to GITHUB_ENV file: {env_file}') print(lines_to_write) with open(env_file, 'a') as _f: _f.write('\n'.join(lines_to_write))