You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在GitHub Actions工作流的任务间共享Python环境配置

修复GitHub Actions工作流release任务的版本控制检测错误

原工作流的release任务运行时出现CRITICAL: No version control system detected错误,核心原因有两点:

  1. release任务未检出Git仓库代码,zest.releaser无法识别版本控制系统
  2. 未复用build任务的Python环境与依赖缓存,导致重复安装且环境不一致

具体修改方案

  • 添加Git代码检出步骤:在release任务中执行actions/checkout,保留默认Git凭证(允许zest.releaser推送新版本标签到仓库)
  • 统一Python环境配置:release任务使用与build任务完全一致的Python版本,确保环境兼容性
  • 缓存pip依赖:在build和release任务中加入缓存步骤,复用已安装的依赖包(如buildzest.releaser),提升运行效率
  • 调整步骤顺序:release任务需先完成代码检出、环境配置、缓存恢复,再执行依赖安装与发布操作

修改后的完整工作流

name: build, test, release

on: push

jobs:
  build:
    name: build
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
      with:
        persist-credentials: false
    - name: set up py
      uses: actions/setup-python@v5
      with:
        python-version: "3.x"
    - name: Cache pip dependencies
      uses: actions/cache@v4
      with:
        path: ~/.cache/pip
        key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements*.txt', 'pyproject.toml') }}
        restore-keys: |
          ${{ runner.os }}-pip-
    - name: Test
      run: |
        pip install '.[test-deps]'
        pytest
    - name: install build
      run: pip install build
    - name: build dist
      run: python -m build
    - name: store dist
      uses: actions/upload-artifact@v4
      with:
        name: python-package-distributions
        path: dist/
  release:
    name: Version & tag the release
    if: ${{ github.ref == 'refs/heads/main' }}
    needs: build
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code with Git credentials
      uses: actions/checkout@v4
      # 保留默认凭证,支持zest.releaser推送标签
    - name: set up py
      uses: actions/setup-python@v5
      with:
        python-version: "3.x"
    - name: Restore pip dependencies cache
      uses: actions/cache@v4
      with:
        path: ~/.cache/pip
        key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements*.txt', 'pyproject.toml') }}
        restore-keys: |
          ${{ runner.os }}-pip-
    - name: download dist
      uses: actions/download-artifact@v4
      with:
        name: python-package-distributions
        path: dist/
    - name: install zest.releaser and run release
      run: |
        pip install zest.releaser
        fullrelease

补充说明

  • 缓存键基于requirements*.txtpyproject.toml的哈希值生成,仅当依赖配置变更时才会重新缓存
  • release任务的checkout步骤保留默认凭证,确保zest.releaser能自动推送新版本标签到GitHub仓库
  • 两个任务共享相同的缓存键,实现build任务依赖的复用,减少重复安装耗时

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

火山引擎 最新活动