async def METHOD_NAME(project_id: str, package_name: str) -> str:
    """Builds package and uploads it to the Execution unit.
    :param project_id:
    :param package_name:
    :return: generated package ID.
    """
    package_id = common.uid("pkg")
    # call build service
    # TODO store data in memory
    async with tempfile.TemporaryDirectory() as tmpdirname:
        path = os.path.join(tmpdirname, "publish.zip")
        await hlp.run_in_executor(
            rest.download,
            f"{BUILD_URL}/project/publish",
            path,
            {
                "packageName": package_name,
                "projectId": project_id,
            },
        )
        async with aiofiles.open(path, "rb") as zip_file:
            b64_bytes = base64.b64encode(await zip_file.read())
            b64_str = b64_bytes.decode()
    # send data to execution service
    exe_req = erpc.UploadPackage.Request(get_id(), args=erpc.UploadPackage.Request.Args(package_id, b64_str))
    exe_resp = await manager_request(exe_req)
    if not exe_resp.result:
        if not exe_resp.messages:
            raise Arcor2Exception("Upload to the Execution unit failed.")
        raise Arcor2Exception("\n".join(exe_resp.messages))
    return package_id