def test_fenix_version_ensures_it_does_not_have_multiple_type( monkeypatch, version_string): # Let's make sure the sanity checks detect a broken regular expression original_pattern = FenixVersion._VALID_ENOUGH_VERSION_PATTERN FenixVersion._VALID_ENOUGH_VERSION_PATTERN = _SUPER_PERMISSIVE_PATTERN with pytest.raises(TooManyTypesError): FenixVersion.parse(version_string) FenixVersion._VALID_ENOUGH_VERSION_PATTERN = original_pattern
def get_mobile_versions(releases: typing.List[shipit_api.common.models.Release]) -> MobileVersions: """This file contains all the versions we ship for Firefox for Android This function will output to the following files: - mobile_versions.json Example::: { "nightly_version": "60.0a1", "alpha_version": "60.0a1", "beta_version": "59.0b13", "version": "58.0.2", "ios_beta_version": "9.1", "ios_version": "9.0", } """ return dict( ios_beta_version=shipit_api.common.config.IOS_BETA_VERSION, ios_version=shipit_api.common.config.IOS_VERSION, nightly_version=shipit_api.common.config.FENIX_NIGHTLY, alpha_version=shipit_api.common.config.FENIX_NIGHTLY, beta_version=get_latest_version(releases, Product.FENIX, filter_closure=lambda r: FenixVersion.parse(r.version).is_beta), version=get_latest_version(releases, Product.FENIX, filter_closure=lambda r: FenixVersion.parse(r.version).is_release), )
def get_decision_parameters(graph_config, parameters): parameters.setdefault("release_type", "") head_tag = parameters["head_tag"].decode("utf-8") parameters["version"] = head_tag[1:] if head_tag else "" pr_number = os.environ.get("MOBILE_PULL_REQUEST_NUMBER", None) parameters["pull_request_number"] = None if pr_number is None else int(pr_number) parameters.setdefault("next_version", None) # TODO: Remove this block once github-releases are not supported anymore if parameters["tasks_for"] == "github-release": parameters["target_tasks_method"] = "release" version_string = parameters["version"] version_in_file = read_version_file() if version_string != version_in_file: raise ValueError("Version given in tag ({}) does not match the one in version.txt ({})".format(version_string, version_in_file)) version = FenixVersion.parse(version_string) if version.is_beta: next_version = version.bump("beta_number") release_type = "beta" elif version.is_release: next_version = version.bump("patch_number") release_type = "release" else: raise ValueError("Unsupported version type: {}".format(version.version_type)) parameters["next_version"] = str(next_version).decode("utf-8") parameters["release_type"] = release_type
def release_promotion_action(parameters, graph_config, input, task_group_id, task_id): release_promotion_flavor = input['release_promotion_flavor'] promotion_config = graph_config['release-promotion']['flavors'][ release_promotion_flavor] target_tasks_method = promotion_config['target-tasks-method'].format( project=parameters['project']) rebuild_kinds = input.get('rebuild_kinds') or promotion_config.get( 'rebuild-kinds', []) do_not_optimize = input.get('do_not_optimize') or promotion_config.get( 'do-not-optimize', []) # make parameters read-write parameters = dict(parameters) # Build previous_graph_ids from ``previous_graph_ids`` or ``revision``. previous_graph_ids = input.get('previous_graph_ids') if not previous_graph_ids: previous_graph_ids = [find_decision_task(parameters, graph_config)] # Download parameters from the first decision task parameters = get_artifact(previous_graph_ids[0], "public/parameters.yml") # Download and combine full task graphs from each of the previous_graph_ids. # Sometimes previous relpro action tasks will add tasks, like partials, # that didn't exist in the first full_task_graph, so combining them is # important. The rightmost graph should take precedence in the case of # conflicts. combined_full_task_graph = {} for graph_id in previous_graph_ids: full_task_graph = get_artifact(graph_id, "public/full-task-graph.json") combined_full_task_graph.update(full_task_graph) _, combined_full_task_graph = TaskGraph.from_json(combined_full_task_graph) parameters['existing_tasks'] = find_existing_tasks_from_previous_kinds( combined_full_task_graph, previous_graph_ids, rebuild_kinds) parameters['do_not_optimize'] = do_not_optimize parameters['target_tasks_method'] = target_tasks_method parameters['build_number'] = int(input['build_number']) # When doing staging releases on try, we still want to re-use tasks from # previous graphs. parameters['optimize_target_tasks'] = True parameters['shipping_phase'] = input['release_promotion_flavor'] version_in_file = read_version_file() parameters['version'] = input['version'] if input.get( 'version') else read_version_file() version_string = parameters['version'] if version_string != version_in_file: raise ValueError( "Version given in tag ({}) does not match the one in version.txt ({})" .format(version_string, version_in_file)) parameters['head_tag'] = 'v{}'.format(version_string) parameters['next_version'] = input['next_version'] version = FenixVersion.parse(version_string) if version.is_beta: release_type = "beta" elif version.is_release: release_type = "release" elif version.is_release_candidate: release_type = "release" else: raise ValueError("Unsupported version type: {}".format( version.version_type)) parameters['release_type'] = release_type parameters['tasks_for'] = 'action' parameters['pull_request_number'] = None # make parameters read-only parameters = Parameters(**parameters) taskgraph_decision({'root': graph_config.root_dir}, parameters=parameters)
def test_fenix_version_bump_raises(version_string, field): version = FenixVersion.parse(version_string) with pytest.raises(ValueError): version.bump(field)
def test_fenix_version_bump(version_string, field, expected): version = FenixVersion.parse(version_string) assert str(version.bump(field)) == expected
def test_fenix_version_implements_str_operator(version_string, expected_output): assert str(FenixVersion.parse(version_string)) == expected_output
def test_fenix_version_implements_remaining_comparision_operators(): assert FenixVersion.parse('2.0.0') <= FenixVersion.parse('2.0.0') assert FenixVersion.parse('2.0.0') <= FenixVersion.parse('3.0.0') assert FenixVersion.parse('3.0.0') >= FenixVersion.parse('2.0.0') assert FenixVersion.parse('3.0.0') >= FenixVersion.parse('3.0.0') assert FenixVersion.parse('3.0.0') > FenixVersion.parse('2.0.0') assert not FenixVersion.parse('3.0.0') > FenixVersion.parse('3.0.0') assert not FenixVersion.parse('2.0.0') < FenixVersion.parse('2.0.0') assert FenixVersion.parse('3.0.0') != FenixVersion.parse('2.0.0')
def test_fenix_version_raises_eq_operator(wrong_type): with pytest.raises(ValueError): assert FenixVersion.parse('3.0.0') == wrong_type # AttributeError is raised by LooseVersion and StrictVersion with pytest.raises((ValueError, AttributeError)): assert wrong_type == FenixVersion.parse('3.0.0')
def test_fenix_rc_version_implements_eq_operator(equivalent_version_string): assert FenixVersion.parse('3.0.0-rc.1') == FenixVersion.parse( equivalent_version_string) # raw strings are also converted assert FenixVersion.parse('3.0.0-rc.1') == equivalent_version_string
def test_fenix_version_implements_lt_operator(previous, next): assert FenixVersion.parse(previous) < FenixVersion.parse(next)
def test_fenix_version_is_of_a_defined_type(version_string, expected_type): release = FenixVersion.parse(version_string) assert getattr(release, 'is_{}'.format(expected_type))
def test_fenix_version_raises_when_invalid_version_is_given( version_string, ExpectedErrorType): with pytest.raises(ExpectedErrorType): FenixVersion.parse(version_string)