Пример #1
0
def test_fenix_version_constructor_minimum_kwargs():
    assert str(FenixVersion(3, 0, 1)) == '3.0.1'
    assert str(FenixVersion(3, 1, 0)) == '3.1.0'
    assert str(FenixVersion(3, 0, 0, beta_number=1)) == '3.0.0-beta.1'

    assert str(FenixVersion(1, 0, 0,
                            release_candidate_number=1)) == '1.0.0-rc.1'
Пример #2
0
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
Пример #3
0
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),
    )
Пример #4
0
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
Пример #5
0
def test_fail_fenix_version_constructor(major_number, minor_number,
                                        patch_number, beta_number, rc_number,
                                        ExpectedErrorType):
    with pytest.raises(ExpectedErrorType):
        FenixVersion(
            major_number=major_number,
            minor_number=minor_number,
            patch_number=patch_number,
            beta_number=beta_number,
            release_candidate_number=rc_number,
        )
Пример #6
0
def test_fenix_version_constructor_and_str(major_number, minor_number,
                                           patch_number, beta_number,
                                           rc_number, expected_output_string):
    assert str(
        FenixVersion(
            major_number=major_number,
            minor_number=minor_number,
            patch_number=patch_number,
            beta_number=beta_number,
            release_candidate_number=rc_number,
        )) == expected_output_string
Пример #7
0
from shipit_api.common.product import Product


@pytest.mark.parametrize(
    "product, version, expectation, result",
    (
        ("devedition", "56.0b1", does_not_raise(),
         DeveditionVersion(56, 0, beta_number=1)),
        (Product.DEVEDITION, "56.0b1", does_not_raise(),
         DeveditionVersion(56, 0, beta_number=1)),
        ("pinebuild", "56.0b1", does_not_raise(),
         FirefoxVersion(56, 0, beta_number=1)),
        (Product.PINEBUILD, "56.0b1", does_not_raise(),
         FirefoxVersion(56, 0, beta_number=1)),
        ("fenix", "84.0.0-beta.2", does_not_raise(),
         FenixVersion(84, 0, 0, beta_number=2)),
        (Product.FENIX, "84.0.0", does_not_raise(), FenixVersion(84, 0, 0)),
        ("fennec", "68.2b3", does_not_raise(),
         FennecVersion(68, 2, beta_number=3)),
        (Product.FENNEC, "68.2b3", does_not_raise(),
         FennecVersion(68, 2, beta_number=3)),
        ("firefox", "45.0", does_not_raise(), FirefoxVersion(45, 0)),
        (Product.FIREFOX, "45.0", does_not_raise(), FirefoxVersion(45, 0)),
        ("thunderbird", "60.8.0", does_not_raise(), ThunderbirdVersion(
            60, 8, 0)),
        (Product.THUNDERBIRD, "60.8.0", does_not_raise(),
         ThunderbirdVersion(60, 8, 0)),
        ("non-existing-product", "68.0", pytest.raises(ValueError), None),
        # fennec_release used to be a valid value when we moved Fennec to ESR68
        # https://github.com/mozilla/release-services/pull/2265
        # Let's be explicitly failing about it.
Пример #8
0
def test_fenix_version_bump_raises(version_string, field):
    version = FenixVersion.parse(version_string)
    with pytest.raises(ValueError):
        version.bump(field)
Пример #9
0
def test_fenix_version_raises_when_invalid_version_is_given(
        version_string, ExpectedErrorType):
    with pytest.raises(ExpectedErrorType):
        FenixVersion.parse(version_string)
Пример #10
0
def test_fenix_version_implements_str_operator(version_string,
                                               expected_output):
    assert str(FenixVersion.parse(version_string)) == expected_output
Пример #11
0
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')
Пример #12
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')
Пример #13
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
Пример #14
0
def test_fenix_version_implements_lt_operator(previous, next):
    assert FenixVersion.parse(previous) < FenixVersion.parse(next)
Пример #15
0
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))
Пример #16
0
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)
Пример #17
0
def test_fenix_version_bump(version_string, field, expected):
    version = FenixVersion.parse(version_string)
    assert str(version.bump(field)) == expected