fixing-streamlit-ci

bởi streamlit

Phân tích và sửa các công việc CI GitHub Actions bị lỗi cho nhánh/PR hiện tại. Sử dụng khi kiểm tra CI thất bại, kiểm tra PR hiển thị lỗi, hoặc bạn cần chẩn đoán…

npx skills add https://github.com/streamlit/streamlit --skill fixing-streamlit-ci

Fix CI Failures

Diagnose and fix failed GitHub Actions CI jobs for the current branch/PR using gh CLI and git commands.

When to Use

  • CI checks have failed on a PR
  • You need to understand why a workflow failed
  • You want to apply fixes and verify locally

Workflow

Copy this checklist to track progress:

- [ ] Verify authentication
- [ ] Gather context & find failed jobs
- [ ] Download & analyze logs
- [ ] Present diagnosis to user
- [ ] Apply fix & verify locally
- [ ] Push & recheck CI

1. Verify Authentication

gh auth status

If authentication fails, prompt user to run gh auth login with appropriate scopes.

2. Gather PR Context

# Get PR for current branch
gh pr view --json number,title,url,headRefName

# Get PR description and metadata
gh pr view --json title,body,labels,author

# List changed files
gh pr diff --name-only

# All changes
gh pr diff

3. Check CI Status

# List all checks (shows pass/fail status)
gh pr checks

# Get detailed check info
gh pr checks --json name,state,conclusion,detailsUrl,startedAt,completedAt

# List only failed runs
gh run list --branch $(git branch --show-current) --status failure --limit 10

# Check if CI is still running
gh run list --branch $(git branch --show-current) --status in_progress

4. Find Failed Jobs

# View run details (get RUN_ID from previous step)
gh run view {RUN_ID}

# List failed jobs with IDs
gh run view {RUN_ID} --json jobs --jq '.jobs[] | select(.conclusion == "failure") | {id: .databaseId, name: .name}'

# List failed jobs with their failed steps
gh run view {RUN_ID} --json jobs --jq '.jobs[] | select(.conclusion == "failure") | {name: .name, steps: [.steps[] | select(.conclusion == "failure") | .name]}'

5. Download & Analyze Logs

Primary method:

# Get failed logs (last 250 lines usually contains the error)
gh run view {RUN_ID} --log-failed 2>&1 | tail -250

# Target a specific failed job by ID
gh run view {RUN_ID} --job {JOB_ID} --log-failed 2>&1 | tail -100

Fallback for pending logs:

REPO=$(gh repo view --json nameWithOwner --jq '.nameWithOwner')
gh api "/repos/${REPO}/actions/jobs/{JOB_ID}/logs"

Smart log extraction (examples):

# Context around failure markers
gh run view {RUN_ID} --log-failed 2>&1 | grep -B 5 -A 10 -iE "error|fail|exception|traceback|panic|fatal" | head -100

# Python tests - pytest summary
gh run view {RUN_ID} --log-failed 2>&1 | grep -E -A 50 "FAILED|ERROR|short test summary"

# TypeScript/ESLint errors
gh run view {RUN_ID} --log-failed 2>&1 | grep -E -B 2 -A 5 "error TS|error  "

# E2E snapshot mismatches
gh run view {RUN_ID} --log-failed 2>&1 | grep -E -B 2 -A 5 "Missing snapshot for|Snapshot mismatch for"

6. Analyze Failure

Identify:

  • Error type: Lint, type check, test failure, build error
  • Root cause: First/primary error (not cascading failures)
  • Affected files: Which files need changes
  • Error message: Exact error text

Common CI failure categories:

CategoryWorkflowMake CommandAuto-fix
Python lintpython-tests.ymlmake python-lintmake autofix
Python typespython-tests.ymlmake python-types❌ Manual
Python testspython-tests.ymlmake python-tests❌ Manual
Frontend lintjs-tests.ymlmake frontend-lintmake autofix
Frontend typesjs-tests.ymlmake frontend-types❌ Manual
Frontend testsjs-tests.ymlmake frontend-tests❌ Manual
E2E testsplaywright.ymlmake run-e2e-test <file>❌ Manual
E2E snapshotsplaywright.ymlmake run-e2e-test <file>make update-snapshots
NOTICESjs-tests.ymlmake update-noticesmake update-notices
Min constraintspython-tests.ymlmake update-min-depsmake update-min-deps
Pre-commitenforce-pre-commit.ymluv run pre-commit run --all-files✅ Mostly auto-fix
Relative importsensure-relative-imports.ymlCheck script output❌ Manual
PR Labelsrequire-labels.ymlN/A⏭️ Ignore

💡 Quick win: Run make autofix first for lint/formatting failures.

7. Present Diagnosis

For multiple failures, list all and let user choose:

CI Failure Analysis for PR #{NUMBER}: {TITLE}
═══════════════════════════════════════════════════════════════

Found {N} failed jobs/checks:

─────────────────────────────────────────────────────────────────

1. [LINT] Python Unit Tests → Run Linters
   Workflow: python-tests.yml (GitHub Actions)
   Error:    Ruff formatting error in lib/streamlit/elements/foo.py
   Auto-fix: ✅ `make autofix`

2. [TYPE] Javascript Unit Tests → Run type checks
   Workflow: js-tests.yml (GitHub Actions)
   Error:    TS2322: Type 'string' is not assignable to type 'number'
   File:     frontend/lib/src/components/Bar.tsx:42
   Auto-fix: ❌ Manual fix required

─────────────────────────────────────────────────────────────────

Which failures should I address?
Recommended: "1" (auto-fixable)
Options: "1" | "1,2" | "1-2" | "all" | "only auto-fixable"

For single failure, show detailed analysis:

─────────────────────────────────────────────────────────────────
Analyzing: [TYPE] Javascript Unit Tests → Run type checks
─────────────────────────────────────────────────────────────────

Category: TYPE
Workflow: js-tests.yml
Job:      js-unit-tests (ID: 12345678)
Step:     Run type checks

Error snippet:
  frontend/lib/src/components/Bar.tsx:42:5
  error TS2322: Type 'string' is not assignable to type 'number'.

Proposed Fix:
  Change type annotation or fix the value type

─────────────────────────────────────────────────────────────────

Would you like me to:
  [1] Apply the fix automatically
  [2] Show the proposed changes first
  [3] Run local verification only
  [4] Skip this and move to next failure

8. Apply Fix & Verify Locally

After user approval, apply fix and run verification:

# Run all checks (lint, types, tests) on changed files
make check

# Python tests (specific)
uv run pytest lib/tests/path/to/test_file.py::test_name -v

# Frontend tests (specific)
cd frontend && yarn test path/to/test.test.tsx

# E2E tests
make run-e2e-test {test_file.py}

# E2E snapshots
make update-snapshots

9. Summary & Push

git status --short
git diff --stat

Report what failed, what changed, and local verification result.

git add -A
git commit -m "fix: resolve CI failure in {workflow/step}"
git push

10. Recheck CI Status

gh pr checks --watch
# Or re-run failed jobs
gh run rerun {RUN_ID} --failed

Rules

  • Focus on root cause: First error, not cascading failures
  • Minimal fixes: Smallest change that fixes the issue
  • Don't skip tests: Never disable tests to "fix" CI
  • Verify locally: Always run appropriate local command
  • Preserve intent: Understand what code was trying to do

Error Handling

IssueSolution
Auth failedgh auth login with workflow/repo scopes
No PR for branchgh run list to check workflow runs
CI still runninggh pr checks --watch
Logs pendingRetry with job logs API
No failed checksAll passing ✅
Rate limitedWait and retry
Flaky testRe-run: gh run rerun {RUN_ID} --failed

Thêm skills từ streamlit

developing-with-streamlit
streamlit
**[BẮT BUỘC]** Sử dụng cho TẤT CẢ các tác vụ Streamlit: tạo, chỉnh sửa, gỡ lỗi, làm đẹp, tạo kiểu, tạo chủ đề hoặc tối ưu hóa ứng dụng Streamlit. Cũng bắt buộc…
official
addressing-pr-review-comments
streamlit
Giải quyết tất cả các nhận xét đánh giá hợp lệ trên một PR cho nhánh hiện tại trong kho lưu trữ streamlit/streamlit. Bao gồm cả nhận xét đánh giá nội dòng và nhận xét PR chung (vấn đề)…
official
checking-changes
streamlit
Xác thực tất cả các thay đổi mã nguồn trước khi commit bằng cách chạy các kiểm tra định dạng, lint, kiểu và kiểm thử đơn vị. Sử dụng sau khi thực hiện thay đổi backend (Python) hoặc frontend (TypeScript)…
official
discovering-make-commands
streamlit
Liệt kê các lệnh make có sẵn cho phát triển Streamlit. Sử dụng cho các tác vụ build, test, lint hoặc format.
official
finalizing-pr
streamlit
Hoàn thiện các thay đổi trên nhánh để chuẩn bị hợp nhất bằng cách đơn giản hóa mã, chạy kiểm tra, xem xét thay đổi và tạo PR nếu cần. Sử dụng khi sẵn sàng hợp nhất các thay đổi vào…
official
fixing-flaky-e2e-tests
streamlit
Chẩn đoán và sửa các bài kiểm tra e2e Playwright không ổn định. Sử dụng khi các bài kiểm tra thất bại không liên tục, hiển thị lỗi hết thời gian chờ, có sự không khớp ảnh chụp nhanh hoặc hiển thị các vấn đề cụ thể theo trình duyệt…
official
generating-changelog
streamlit
Tạo ghi chú phát hành trang web được trau chuốt giữa hai thẻ git cho docs.streamlit.io. Sử dụng khi chuẩn bị một bản phát hành Streamlit mới hoặc xem xét các thay đổi giữa…
official
improving-frontend-coverage
streamlit
Chạy kiểm thử đơn vị frontend với coverage, phân tích báo cáo coverage, và triển khai các bài kiểm thử có ý nghĩa để tăng coverage lên khoảng 0,2%. Sử dụng khi bạn muốn…
official