def main()

in probe_scraper/glean_push.py [0:0]


def main(request: Request) -> Response:
    """Scrape probes from a single glean commit."""
    output_bucket = os.environ.get("OUTPUT_BUCKET", None)
    if output_bucket is None:
        return Response("Cloud function has no configured output bucket\n", 500)

    args = request.get_json(force=True)
    if not isinstance(args, dict):
        return Response(f"request body must be a JSON object but got: {args}\n", 400)
    try:
        url = args["url"]
        commit = args["commit"]
        branch = args["branch"]
    except KeyError as e:
        return Response(f"request JSON missing key: {e}\n", 400)

    if not isinstance(url, str):
        return Response("Error: url must be a string\n", 400)
    if not isinstance(commit, str):
        return Response("Error: commit must be a string\n", 400)
    if not isinstance(branch, str):
        return Response("Error: branch must be a string\n", 400)

    with tempfile.TemporaryDirectory() as tmpdirname:
        tmp = Path(tmpdirname)
        out_dir = tmp / "output"
        cache_dir = tmp / "cache"
        email_file = tmp / "emails.txt"
        out_dir.mkdir()
        cache_dir.mkdir()
        try:
            updated_paths = runner.main(
                cache_dir=cache_dir,
                out_dir=out_dir,
                firefox_version=None,
                min_firefox_version=None,
                process_moz_central_probes=False,
                process_glean_metrics=True,
                repositories_file=Path("repositories.yaml"),
                dry_run=True,
                glean_repos=None,
                firefox_channel=None,
                output_bucket=output_bucket,
                cache_bucket=None,
                env="prod",
                bugzilla_api_key=None,
                glean_urls=[url],
                glean_commit=commit,
                glean_commit_branch=branch,
                update=True,
                email_file=email_file,
            )
        except ProbeScraperError as e:
            return Response(f"Error: {e.message}\n", e.status_code)
        if updated_paths:
            updates = ", ".join(str(p.relative_to(out_dir)) for p in updated_paths)
            message = f"update published for {updates}\n"
        else:
            message = "update is valid, but not published\n"
        try:
            emails = email_file.read_text()
        except FileNotFoundError:
            pass  # no emails means no warnings or expiring metrics, which is good
        else:
            message += f"additional messages: {emails}\n"
        return Response(message, 200)