def add_release(body): # we must require scope which depends on product required_permission = f'{SCOPE_PREFIX}/add_release/{body["product"]}' if not current_user.has_permissions(required_permission): user_permissions = ", ".join(current_user.get_permissions()) abort( 401, f"required permission: {required_permission}, user permissions: {user_permissions}" ) product = body["product"] branch = body["branch"] product_disabled = branch in get_disabled_products().get(product, []) if current_user.type == AuthType.TASKCLUSTER and product_disabled: abort(401, "Taskcluster based submissions are disabled") session = current_app.db.session partial_updates = body.get("partial_updates") if partial_updates == "auto": if product not in [ Product.FIREFOX.value, Product.DEVEDITION.value, Product.PINEBUILD.value ] or branch not in [ "try", "releases/mozilla-beta", "projects/maple", ]: abort(400, "Partial suggestion works for automated betas only") partial_updates = _suggest_partials(product=product, branch=branch) release = Release( branch=branch, build_number=body["build_number"], partial_updates=partial_updates, product_key=body.get("product_key"), product=product, release_eta=body.get("release_eta"), repo_url=body.get("repo_url", ""), revision=body["revision"], status="scheduled", version=body["version"], ) try: next_version = bump_version(release.product, release.version) common_input = { "build_number": release.build_number, "next_version": next_version, # specify version rather than relying on in-tree version, # so if a version bump happens between the build and an action task # revision, we still use the correct version. "version": release.version, "release_eta": release.release_eta, "release_enable_emefree": is_eme_free_enabled(release.product, release.version), } partners_enabled = is_partner_enabled(release.product, release.version) if int(release.version.split(".")[0]) >= 81: common_input["release_enable_partner_repack"] = partners_enabled common_input[ "release_enable_partner_attribution"] = partners_enabled else: common_input["release_enable_partners"] = partners_enabled if release.partial_updates: common_input["partial_updates"] = release.partial_updates release.phases = generate_phases(release, common_input, verify_supported_flavors=True) session.add(release) session.commit() except UnsupportedFlavor as e: raise BadRequest(description=e.description) except (IntegrityError, TaskclusterRestFailure) as e: # Report back Taskcluster and SQL failures for better visibility of the # actual issue. Usually it happens when we cannot find the indexed # task or a duplicate release request accordingly. abort(400, str(e)) logger.info("New release of %s", release.name) notify_via_matrix(product, f"New release of {release.name}") return release.json, 201
def test_is_eme_free_enabled(product, version, result): assert is_eme_free_enabled(product, version) == result