ci: pr-test-summary job shows red when the GitHub API returns persistent 5xx errors

オープン 初心者向け
#2,256 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
72/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
github-actions, python
領域
ci-cd

調査の方向性

まず ci/utils/pr_test_summary.py を、特に main() と GitHub API 呼び出し用のリトライラッパーを読み、その後 pr.yaml の PR test summary ステップを確認してください。持続的な 5xx エラーによる最終的な例外がプロセスの終了コードにどう伝わるかを確かめてください。完了条件は、API の HTTP エラーとネットワークエラーだけがログ出力の警告に格下げされて終了コード 0 になり、パースやそのほかのスクリプトエラーではジョブが引き続き失敗することです。

索引モデルが issue の本文から書いたものです。

説明

Problem

The PR test summary (non-blocking) job in pr.yaml sometimes fails with a red check on PRs, for example:

Traceback (most recent call last):
  File "/home/runner/work/cuopt/cuopt/ci/utils/pr_test_summary.py", line 325, in <module>
    main()
...
urllib.error.HTTPError: HTTP Error 502: Bad Gateway

This was noticed in the discussion on #2241 (run https://github.com/NVIDIA/cuopt/actions/runs/41135602235). It was first mistaken for leftover RAPIDS CI telemetry, but it comes from this repo's own ci/utils/pr_test_summary.py.

Why it fails

pr_test_summary.py makes several GitHub API calls: it lists the run's jobs, downloads logs of failed jobs, and creates or updates the PR comment.

  • Transient errors (429, 5xx, network errors) are retried up to 4 attempts with 2**attempt second backoff (#2204). That is roughly 14 seconds in total. If the API keeps returning errors for longer, the last exception is re-raised.
  • The script then exits non-zero, and the run: python3 ci/utils/pr_test_summary.py step has no continue-on-error. #1696 removed it and instead excluded the job from the pr-builder merge gate (and checks has ignored_pr_jobs: "pr-test-summary").
  • The job is therefore not a merge gate, but it still shows as a failed check on the PR. That is confusing for contributors and reviewers, who may take it for a real test failure, and the summary comment is not posted.

Proposal

Make the summary best-effort so it cannot show red because of an API error:

  • Catch persistent API errors at the end of main(), print a warning to the job log, and exit 0.
  • Or set continue-on-error: true on the step.

Real script bugs (for example parsing errors) should still fail the job, so only the network and HTTP error classes would be swallowed.

Related: #2204, #1696, #2241.

主要言語
Cuda
スター
1.1k
フォーク
249
平均マージ
1日 15時間
マージ済み PR(30日)
124

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

NVIDIA/cuopt のほかの issue

NVIDIA/cuopt の issue をすべて見る

似ている issue

DevOps の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。