{"record":{"id":"089037db6e10c036","repo":"tiangolo/fastapi","slug":"no-pr-number-available","errorCode":null,"errorMessage":"No PR number available","messagePattern":"No PR number available","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"scripts/notify_translations.py","lineNumber":326,"sourceCode":"    if settings.debug:\n        logging.basicConfig(level=logging.DEBUG)\n    else:\n        logging.basicConfig(level=logging.INFO)\n    logging.debug(f\"Using config: {settings.model_dump_json()}\")\n    g = Github(settings.github_token.get_secret_value())\n    repo = g.get_repo(settings.github_repository)\n    if not settings.github_event_path.is_file():\n        raise RuntimeError(\n            f\"No github event file available at: {settings.github_event_path}\"\n        )\n    contents = settings.github_event_path.read_text(\"utf-8\")\n    github_event = PartialGitHubEvent.model_validate_json(contents)\n    logging.info(f\"Using GitHub event: {github_event}\")\n    number = (\n        github_event.pull_request and github_event.pull_request.number\n    ) or settings.number\n    if number is None:\n        raise RuntimeError(\"No PR number available\")\n    number = cast(int, number)\n\n    # Avoid race conditions with multiple labels\n    sleep_time = random.random() * 10  # random number between 0 and 10 seconds\n    logging.info(\n        f\"Sleeping for {sleep_time} seconds to avoid \"\n        \"race conditions and multiple comments\"\n    )\n    time.sleep(sleep_time)\n\n    # Get PR\n    logging.debug(f\"Processing PR: #{number}\")\n    pr = repo.get_pull(number)\n    label_strs = {label.name for label in pr.get_labels()}\n    langs = []\n    for label in label_strs:\n        if label.startswith(\"lang-\") and not label == lang_all_label:\n            langs.append(label[5:])","sourceCodeStart":308,"sourceCodeEnd":344,"githubUrl":"https://github.com/tiangolo/fastapi/blob/3e8d1526d83a90aaf7d6eb6dc682bf150f180b25/scripts/notify_translations.py#L308-L344","documentation":"Raised by notify_translations.main() at scripts/notify_translations.py:326 when no PR number can be determined. The number is computed as (github_event.pull_request and github_event.pull_request.number) or settings.number at scripts/notify_translations.py:322-324. Both being None/0 means there is no PR to process.","triggerScenarios":"The GITHUB_EVENT_PATH payload is for a non-PR event (push, issue, schedule) so github_event.pull_request is None, AND the NUMBER env var (settings.number fallback) is unset. Also fires if the PR payload exists but its 'number' field is null.","commonSituations":"Job triggered on the wrong event (e.g. on: push instead of on: pull_request). Workflow_dispatch run where the user forgot to pass NUMBER. The event payload structure changed and pull_request.number is missing.","solutions":["Constrain the workflow to pull_request / pull_request_target triggers so the event payload carries a pull_request.number.","For manual runs, set the NUMBER env var to the target PR number.","Inspect the event JSON at GITHUB_EVENT_PATH to confirm pull_request.number is present and non-null."],"exampleFix":"# before — workflow triggers on push\non: [push]\n# after — trigger on pull request events\non:\n  pull_request:\n    types: [labeled, unlabeled, closed]","handlingStrategy":"validation","validationCode":"import os, json\n\ndef pr_number_available() -> bool:\n    ev = os.environ.get(\"GITHUB_EVENT_PATH\")\n    if ev:\n        data = json.loads(open(ev).read())\n        if data.get(\"pull_request\", {}).get(\"number\"):\n            return True\n    return bool(os.environ.get(\"NUMBER\"))","typeGuard":null,"tryCatchPattern":"if number is None:\n    logging.error(\"No PR number in event payload and NUMBER env var unset\")\n    sys.exit(1)","preventionTips":["Scope the workflow to pull_request events so pull_request.number is populated.","For workflow_dispatch, require a NUMBER input.","Validate the event payload shape before running."],"tags":["github","ci","validation","environment"],"backgroundTag":null,"analyzedSha":"3e8d1526d83a90aaf7d6eb6dc682bf150f180b25","analyzedAt":"2026-08-11T02:34:52.986Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}