You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions构建后执行测试与Mypy并关联提交检查问题

问题原因

你当前用workflow_run触发Tests和Mypy工作流的方式,会导致这两个工作流的状态不关联到提交的检查状态中。GitHub只会追踪直接由提交触发的工作流状态,异步触发的workflow_run工作流不属于这个范围,所以即便它们失败,提交检查仍会显示通过。

解决方案

有两种可行的调整方式,都能让Tests和Mypy的失败状态同步到提交检查中:

方式一:合并为单个CI工作流

将Build、Tests、Mypy合并到同一个工作流文件中,用needs关键字指定依赖顺序,确保Build完成后再运行Tests和Mypy。这样所有任务都属于同一个提交触发的工作流,任何一步失败都会直接导致提交检查失败。

合并后的CI.yml配置示例:

name: CI

on:
  push

jobs:
  build:
    runs-on: "ubuntu-20.04"
    steps:
      - uses: actions/checkout@v3

      - name: Build image
        run: docker build . --tag ghcr.io/kryseyt/mailing_service

      - name: Login to ghcr
        run: echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin

      - name: Push image
        run: docker push ghcr.io/kryseyt/mailing_service:latest

  tests:
    runs-on: ubuntu-latest
    needs: build  # 等待Build任务完成后执行
    env:
      OS: ubuntu-latest
      PYTHON: '3.11'
    steps:
      - uses: actions/checkout@v3

      - name: Run tests
        run: docker compose -f docker-compose.yml -f tests.yml up --abort-on-container-exit
        
      - name: Copy coverage data from container
        run: docker compose cp mailing_service:/mailing_service/coverage.xml ./

      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v2
        with:
          directory: ./
          env_vars: OS,PYTHON
          fail_ci_if_error: true
          files: ./coverage.xml
          flags: unit-tests
          name: codecov-umbrella
          path_to_write_report: ./coverage/codecov_report.txt
          verbose: true

  mypy:
    runs-on: ubuntu-latest
    needs: build  # 等待Build任务完成后执行
    steps:
      - uses: actions/checkout@v3

      - name: Run mypy
        run: docker compose run mailing_service mypy src/ --strict

方式二:使用工作流调用(workflow_call)

保留三个独立的工作流文件,修改Build工作流,让它在完成后主动调用Tests和Mypy工作流。这种方式下,被调用的工作流状态会关联到原提交的检查中。

1. 修改Build工作流(Build.yml)

在原有任务后添加调用Tests和Mypy的任务:

name: Build
on:
  push

jobs:
  docker_publish:
    runs-on: "ubuntu-20.04"
    steps:
      - uses: actions/checkout@v3

      - name: Build image
        run: docker build . --tag ghcr.io/kryseyt/mailing_service

      - name: Login to ghcr
        run: echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin

      - name: Push image
        run: docker push ghcr.io/kryseyt/mailing_service:latest

  trigger_tests:
    needs: docker_publish
    uses: ./.github/workflows/Tests.yml  # 调用Tests工作流
    secrets: inherit  # 继承当前工作流的密钥

  trigger_mypy:
    needs: docker_publish
    uses: ./.github/workflows/Mypy.yml  # 调用Mypy工作流
    secrets: inherit

2. 修改Tests工作流(Tests.yml)

替换原有的workflow_run触发器为workflow_call,允许被其他工作流调用:

name: Tests

on: 
  workflow_call:  # 启用工作流调用功能

jobs:
  run:
    runs-on: ubuntu-latest
    env:
      OS: ubuntu-latest
      PYTHON: '3.11'
    steps:
      - uses: actions/checkout@v3

      - name: Run tests
        run: docker compose -f docker-compose.yml -f tests.yml up --abort-on-container-exit
        
      - name: Copy coverage data from container
        run: docker compose cp mailing_service:/mailing_service/coverage.xml ./

      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v2
        with:
          directory: ./
          env_vars: OS,PYTHON
          fail_ci_if_error: true
          files: ./coverage.xml
          flags: unit-tests
          name: codecov-umbrella
          path_to_write_report: ./coverage/codecov_report.txt
          verbose: true

3. 修改Mypy工作流(Mypy.yml)

同样替换触发器为workflow_call:

name: Mypy

on: 
  workflow_call:  # 启用工作流调用功能

jobs:
  build:
    runs-on: ubuntu-latest
    name: Mypy
    steps:
      - uses: actions/checkout@v3

      - name: Run mypy
        run: docker compose run mailing_service mypy src/ --strict
说明

两种方式都能实现你的需求:Build完成后运行Tests和Mypy,且它们的失败状态会同步到提交检查中。如果希望工作流结构更简洁,推荐方式一;如果需要保留工作流的独立性,方式二更合适。

内容的提问来源于stack exchange,提问作者KrySeyt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 17:00:01