def generate_balrog_info(context, artifact_pretty_name, locale, destinations, from_buildid=None): release_props = context.release_props checksums = context.checksums url = "{prefix}/{s3_key}".format(prefix=get_bucket_url_prefix(context), s3_key=destinations[0]) data = { "hash": checksums[artifact_pretty_name][release_props["hashType"]], "size": checksums[artifact_pretty_name]["size"], "url": url } if from_buildid: data["from_buildid"] = from_buildid if is_promotion_action(context.action): partials = get_partials_props(context.task) for p in partials.values(): if p["buildid"] == str(from_buildid): data["previousVersion"] = p["previousVersion"] data["previousBuildNumber"] = p["previousBuildNumber"] break return data
def enrich_balrog_manifest(context, locale): release_props = context.release_props url_replacements = [] if release_props["branch"] in RELEASE_BRANCHES: url_replacements.append(['http://archive.mozilla.org/pub', 'http://download.cdn.mozilla.net/pub']) enrich_dict = { "appName": get_product_name(release_props['appName'], release_props['stage_platform']), "appVersion": release_props["appVersion"], "branch": release_props["branch"], "buildid": release_props["buildid"], "extVersion": release_props["appVersion"], "hashType": release_props["hashType"], "locale": locale if not locale == 'multi' else 'en-US', "platform": NORMALIZED_BALROG_PLATFORMS.get(release_props["stage_platform"], release_props["stage_platform"]), "url_replacements": url_replacements } if is_promotion_action(context.action) or is_release_action(context.action): enrich_dict["tc_release"] = True enrich_dict["build_number"] = context.task['payload']['build_number'] enrich_dict["version"] = context.task['payload']['version'] else: enrich_dict["tc_nightly"] = True return enrich_dict
def test_is_action_release_or_promotion(action, release, promotion): assert is_release_action(action) is release assert is_promotion_action(action) is promotion
async def test_move_beet(update_manifest, action): context = Context() context.config = get_fake_valid_config() context.task = get_fake_valid_task() context.task['extra'] = dict() context.task['extra']['partials'] = [{ "artifact_name": "target-98.0b96.partial.mar", "platform": "linux", "locale": "de", "buildid": "19991231235959", "previousVersion": "98.0b96", "previousBuildNumber": "1" }, { "artifact_name": "target-97.0b96.partial.mar", "platform": "linux", "locale": "de", "buildid": "22423423402984", "previousVersion": "97.0b96", "previousBuildNumber": "1" }] context.action = action context.bucket = 'nightly' context.checksums = dict() context.balrog_manifest = list() context.raw_balrog_manifest = dict() context.release_props = context.task['payload']['releaseProperties'] locale = "sample-locale" target_source = 'beetmoverscript/test/test_work_dir/cot/eSzfNqMZT_mSiQQXu8hyqg/public/build/target.txt' pretty_name = 'fake-99.0a1.en-US.target.txt' target_destinations = ( 'pub/mobile/nightly/2016/09/2016-09-01-16-26-14-mozilla-central-fake/en-US/fake-99.0a1.en-US.target.txt', 'pub/mobile/nightly/latest-mozilla-central-fake/en-US/fake-99.0a1.en-US.target.txt' ) expected_upload_args = [( 'pub/mobile/nightly/2016/09/2016-09-01-16-26-14-mozilla-central-fake/en-US/fake-99.0a1.en-US.target.txt', 'pub/mobile/nightly/latest-mozilla-central-fake/en-US/fake-99.0a1.en-US.target.txt' ), 'beetmoverscript/test/test_work_dir/cot/eSzfNqMZT_mSiQQXu8hyqg/public/build/target.txt' ] expected_balrog_manifest = { 'hash': '73b91c3625d70e9ba1992f119bdfd3fba85041e6f804a985a18efe06ebb1d4147fb044ac06b28773130b4887dd8b5b3bc63958e1bd74003077d8bc2a3909416b', 'size': 18, 'url': 'https://archive.test/pub/mobile/nightly/2016/09/2016-09-01-16-26-14-mozilla-central-fake/en-US/fake-99.0a1.en-US.target.txt', } actual_upload_args = [] async def fake_retry_upload(context, destinations, path): actual_upload_args.extend([destinations, path]) with mock.patch('beetmoverscript.script.retry_upload', fake_retry_upload): await move_beet(context, target_source, target_destinations, locale, update_balrog_manifest=update_manifest, balrog_format='', artifact_pretty_name=pretty_name, from_buildid=None) assert expected_upload_args == actual_upload_args if update_manifest: for k in expected_balrog_manifest.keys(): assert (context.raw_balrog_manifest[locale]['completeInfo'][''][k] == expected_balrog_manifest[k]) expected_balrog_manifest['from_buildid'] = '19991231235959' with mock.patch('beetmoverscript.script.retry_upload', fake_retry_upload): await move_beet(context, target_source, target_destinations, locale, update_balrog_manifest=update_manifest, balrog_format='', artifact_pretty_name=pretty_name, from_buildid='19991231235959') if update_manifest: if is_promotion_action(context.action): expected_balrog_manifest['previousBuildNumber'] = '1' expected_balrog_manifest['previousVersion'] = '98.0b96' for k in expected_balrog_manifest.keys(): assert (context.raw_balrog_manifest[locale]['partialInfo'][0][k] == expected_balrog_manifest[k])
async def test_move_beet(update_manifest, action): context = Context() context.config = get_fake_valid_config() context.task = get_fake_valid_task() context.task["extra"] = dict() context.task["extra"]["partials"] = [ { "artifact_name": "target-98.0b96.partial.mar", "platform": "linux", "locale": "de", "buildid": "19991231235959", "previousVersion": "98.0b96", "previousBuildNumber": "1", }, { "artifact_name": "target-97.0b96.partial.mar", "platform": "linux", "locale": "de", "buildid": "22423423402984", "previousVersion": "97.0b96", "previousBuildNumber": "1", }, ] context.action = action context.bucket = "nightly" context.checksums = dict() context.balrog_manifest = list() context.raw_balrog_manifest = dict() context.release_props = context.task["payload"]["releaseProperties"] locale = "sample-locale" target_source = "tests/test_work_dir/cot/eSzfNqMZT_mSiQQXu8hyqg/public/build/target.txt" pretty_name = "fake-99.0a1.en-US.target.txt" target_destinations = ( "pub/mobile/nightly/2016/09/2016-09-01-16-26-14-mozilla-central-fake/en-US/fake-99.0a1.en-US.target.txt", "pub/mobile/nightly/latest-mozilla-central-fake/en-US/fake-99.0a1.en-US.target.txt", ) expected_upload_args = [ ( "pub/mobile/nightly/2016/09/2016-09-01-16-26-14-mozilla-central-fake/en-US/fake-99.0a1.en-US.target.txt", "pub/mobile/nightly/latest-mozilla-central-fake/en-US/fake-99.0a1.en-US.target.txt", ), "tests/test_work_dir/cot/eSzfNqMZT_mSiQQXu8hyqg/public/build/target.txt", ] expected_balrog_manifest = { "hash": "73b91c3625d70e9ba1992f119bdfd3fba85041e6f804a985a18efe06ebb1d4147fb044ac06b28773130b4887dd8b5b3bc63958e1bd74003077d8bc2a3909416b", "size": 18, "url": "https://archive.test/pub/mobile/nightly/2016/09/2016-09-01-16-26-14-mozilla-central-fake/en-US/fake-99.0a1.en-US.target.txt", } actual_upload_args = [] async def fake_retry_upload(context, destinations, path): actual_upload_args.extend([destinations, path]) with mock.patch("beetmoverscript.script.retry_upload", fake_retry_upload): await move_beet( context, target_source, target_destinations, locale, update_balrog_manifest=update_manifest, balrog_format="", artifact_pretty_name=pretty_name, from_buildid=None, ) assert expected_upload_args == actual_upload_args if update_manifest: for k in expected_balrog_manifest.keys(): assert context.raw_balrog_manifest[locale]["completeInfo"][""][k] == expected_balrog_manifest[k] expected_balrog_manifest["from_buildid"] = "19991231235959" with mock.patch("beetmoverscript.script.retry_upload", fake_retry_upload): await move_beet( context, target_source, target_destinations, locale, update_balrog_manifest=update_manifest, balrog_format="", artifact_pretty_name=pretty_name, from_buildid="19991231235959", ) if update_manifest: if is_promotion_action(context.action): expected_balrog_manifest["previousBuildNumber"] = "1" expected_balrog_manifest["previousVersion"] = "98.0b96" for k in expected_balrog_manifest.keys(): assert context.raw_balrog_manifest[locale]["partialInfo"][0][k] == expected_balrog_manifest[k]