{"record":{"id":"ff6885cd0e78b5e2","repo":"linera-io/linera-protocol","slug":"no-pr-jobs-found","errorCode":null,"errorMessage":"No PR jobs found!","messagePattern":"No PR jobs found!","errorType":"exception","errorClass":"anyhow","httpStatus":null,"severity":"error","filePath":"linera-summary/src/performance_summary.rs","lineNumber":56,"sourceCode":"            github.context().base_branch(),\n            \"push\",\n            &workflows_handler,\n            &workflows,\n        ))\n        .await?;\n        if base_jobs.is_empty() {\n            bail!(\"No base jobs found!\");\n        }\n\n        let pr_jobs = Box::pin(github.latest_jobs(\n            github.context().pr_branch(),\n            \"pull_request\",\n            &workflows_handler,\n            &workflows,\n        ))\n        .await?;\n        if pr_jobs.is_empty() {\n            bail!(\"No PR jobs found!\");\n        }\n\n        Ok(Self {\n            github,\n            ci_runtime_comparison: CiRuntimeComparison::from_jobs(base_jobs, pr_jobs)?,\n        })\n    }\n\n    fn format_comment_body(&self) -> String {\n        let commit_hash = self.github.context().pr_commit_hash();\n        let short_commit_hash = &commit_hash[..7];\n        let commit_url = format!(\n            \"https://github.com/{}/{}/commit/{}\",\n            self.github.context().repository().owner(),\n            self.github.context().repository().name(),\n            commit_hash\n        );\n","sourceCodeStart":38,"sourceCodeEnd":74,"githubUrl":"https://github.com/linera-io/linera-protocol/blob/6c226ddcb332ef55118dc8d0aafbd093d5420899/linera-summary/src/performance_summary.rs#L38-L74","documentation":"Raised by PerformanceSummary::init when GitHub's latest_jobs returns zero jobs for the PR branch with event type 'pull_request'. The runtime comparison needs both sides, so init bails. The same tracked-workflow filter is applied, so name mismatches or workflows that never ran on the PR also yield an empty result.","triggerScenarios":"Calling PerformanceSummary::init when latest_jobs(pr_branch, \"pull_request\", ...) returns an empty Vec: the PR has not yet triggered CI (runs pending or skipped), the PR comes from a fork where pull_request workflows don't run, workflow path/filters skipped the tracked workflows, or the tool runs outside a PR context so pr_branch() is wrong.","commonSituations":"Running the summary tool immediately after opening a PR before any pull_request-triggered run finishes; PRs from forks with restricted workflow triggers; running the tool on a branch that is not an open PR; workflow 'paths:' filters excluding the changed files.","solutions":["Confirm the PR has at least one completed pull_request-event run of the tracked workflows","Check the workflows are not skipped by 'paths:'/'branches:' filters or fork-PR restrictions","Verify the tool is running in a PR context (event name pull_request) with a valid pr_branch()","Re-run the CI workflows on the PR, then retry the tool"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Before init: require a pull_request context and at least one completed PR run.\nif std::env::var(\"GITHUB_EVENT_NAME\").ok().as_deref() != Some(\"pull_request\") {\n    anyhow::bail!(\"performance summary must run in a pull_request event\");\n}","typeGuard":null,"tryCatchPattern":"if let Err(e) = PerformanceSummary::init(github, tracked).await {\n    if e.to_string().contains(\"No PR jobs found!\") {\n        // CI has not produced results yet: warn and exit non-fatally\n    }\n}","preventionTips":["Only run the summary after the PR's pull_request workflows finish (e.g. as a dependent CI job)","Watch for fork PRs and path filters that silently skip the tracked workflows","Treat a missing PR side as 'not ready yet' rather than a hard failure"],"tags":["github-actions","ci","linera-summary","pull-request"],"backgroundTag":"github-actions-jobs-not-found","analyzedSha":"6c226ddcb332ef55118dc8d0aafbd093d5420899","analyzedAt":"2026-08-22T22:49:09.787Z","schemaVersion":2},"datasetVersion":"2026-08-23T01:17:44.959Z"}