Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
github-actions: Use stratergy and if to deduplicate steps.
This is a fine solution short-term until github implements the yaml anchors support. The limitation of this method is that we cannot re-use most of the steps again for production install test builds. Thanks, Anders for this solution. Verifying everything is migrated correctly is a pain. This script ensures everything is done correctly (previous commit message contains explainations for the steps being ignored if; in case of github-actions steps they are ignored because they are actions specific): """ This script prints out the ignore steps first. Then prints out each step of both circle and actions side-by-side. One step is out of order for bionic but verfying correction is still easier. Format: Actions: Install dependencies Circle CI: install dependencies .... """ import yaml with open('.circleci/config.yml') as f: circleci_config = yaml.safe_load(f) with open('.github/workflows/zulip-ci.yml') as f: actions_config = yaml.safe_load(f) circle_bionic_steps = [] circle_focal_steps = [] actions_bionic_steps = [] actions_focal_steps = [] """ We ignore casper artifact upload, save_cache, and store_tests_reports steps. """ def get_circleci_steps(job, arr): for step in circleci_config['jobs'][job]['steps']: if isinstance(step, str): arr.append(step) continue step_name = step.get('run', {}).get('name', False) if not step_name: if step.get('restore_cache'): key = step['restore_cache']['keys'][0].split('.')[0] step_name = f'<restore-cache> {key}' elif step.get('store_artifacts', False): destination = step['store_artifacts']['destination'] step_name = f'<store-artificats> {destination}' if destination == 'casper': \# This is no longer needed print('Ignoring step:') print(step) print() continue else: """ We don't care about save_cache; github-actions does this automatically, and store_tests_reports is circelci timing specific. """ print('Ignoring step:') print(step) print() continue if step_name != 'On fail': arr.append(step_name) get_circleci_steps('bionic-backend-frontend', circle_bionic_steps) get_circleci_steps('focal-backend', circle_focal_steps) """ We ignore there steps specific to github-actions""" for step in actions_config['jobs']['focal_bionic']['steps']: BOTH_OS = 'BOTH_OS' if_check = step.get('if', BOTH_OS) step_name = step.get('name') if step_name is None: step_name = step['uses'] if ( step_name == 'Upgrade git for bionic' or step_name == 'Add required permissions' or step_name == 'Move test reports to var' ): print('Ignoring step:') print(step) print() """These are github-actions specific; see comments""" continue if if_check == BOTH_OS: actions_bionic_steps.append(step_name) actions_focal_steps.append(step_name) elif 'is_bionic' in if_check: actions_bionic_steps.append(step_name) else: actions_focal_steps.append(step_name) bionic = zip(circle_bionic_steps, actions_bionic_steps) focal = zip(circle_focal_steps, actions_focal_steps) print('Bionic steps:') for (circle_step, actions_step) in bionic: print(f'CircleCI: {circle_step}') print(f'Actions: {actions_step}') print() print('Focal steps:') for (circle_step, actions_step) in focal: print(f'CircleCI: {circle_step}') print(f'Actions: {actions_step}') print()
- Loading branch information