如何根据事件类型适配GitHub Actions矩阵测试策略?
解决方案
当然可以在同一个Workflow里实现这个需求,核心是利用GitHub Actions的条件表达式结合fromJSON函数,根据触发事件动态生成测试矩阵,无需拆分Workflow。
修改后的完整Workflow配置
name: Python tests on: push: branches: - dev pull_request: release: types: [published] jobs: pytest: strategy: matrix: # 根据触发事件动态切换Python版本集合 python-version: ${{ fromJSON(github.event_name == 'release' && '["3.7", "3.8", "3.9", "3.10", "3.11"]' || '["3.7", "3.11"]') }} os: [ubuntu-20.04, ubuntu-22.04] runs-on: ${{ matrix.os }} steps: - name: 拉取代码 uses: actions/checkout@v4 - name: 配置Python环境 ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: 安装依赖 run: | python -m pip install --upgrade pip pip install pytest pip install -r requirements.txt - name: 执行单元测试 run: pytest
逻辑说明
- 当触发事件为
release(且发布状态为published)时,条件表达式判定为真,自动使用全量Python版本矩阵 - 当触发事件是
dev分支推送或Pull Request时,条件表达式判定为假,切换为精简的Python版本子集 - 操作系统矩阵保持固定,所有场景都会覆盖
ubuntu-20.04和ubuntu-22.04两种环境
这种方式既满足了日常开发场景下的轻量测试需求,又能在发布前强制运行全量验证,所有逻辑集中在同一个Workflow中,维护成本更低。
内容的提问来源于stack exchange,提问作者Aratz
相关产品推荐
相关产品推荐

