#!/usr/bin/env python # -*- coding: utf-8 -*- ## This script has two purposes: detect any tool that *regressed*, which is used ## during the week before the beta branches to reject PRs; and detect any tool ## that *changed* to see if we need to update the toolstate repo. import sys import json # Regressions for these tools during the beta cutoff week do not cause failure. # See `status_check` in `checktools.sh` for tools that have to pass on the # beta/stable branches. REGRESSION_OK = ["rustc-guide", "miri", "embedded-book"] if __name__ == '__main__': os_name = sys.argv[1] toolstate_file = sys.argv[2] current_state = sys.argv[3] verb = sys.argv[4] # 'regressed' or 'changed' with open(toolstate_file, 'r') as f: toolstate = json.load(f) with open(current_state, 'r') as f: current = json.load(f) regressed = False for cur in current: tool = cur['tool'] state = cur[os_name] new_state = toolstate.get(tool, '') if verb == 'regressed': updated = new_state < state elif verb == 'changed': updated = new_state != state else: print('Unknown verb {}'.format(updated)) sys.exit(2) if updated: print( 'The state of "{}" has {} from "{}" to "{}"' .format(tool, verb, state, new_state) ) if not (verb == 'regressed' and tool in REGRESSION_OK): regressed = True if regressed: sys.exit(1)