使用GitHub Workflow时生成文件丢失问题求助
GitHub Workflow生成Pylint徽章文件丢失问题解决
作为GitHub新手,我尝试编写Workflow自动生成可展示在README.md中的Pylint评分徽章。Workflow执行无报错,但预期生成的pylint.out和pylint_badge.svg文件找不到。本地测试pylint_test.py功能正常,怀疑是YAML配置有误,相关代码如下:
原代码
pylint_test.py(根目录)
from pylint.lint import Run from pylint.reporters.text import TextReporter from pybadges import badge import os grade = None color = None abs = "/home/runner/work/DigitsSolver/DigitsSolver/" with open(abs + "pylint.out", "w+") as f: reporter = TextReporter(f) Run([abs + "solver"], reporter=reporter, exit=False) with open(abs + "pylint.out", "r") as f: f = f.read() target = "Your code has been rated at " f = f[f.index(target) + len(target):] f = f[:f.index("/")] grade = float(f) if grade <= 1.2: color = '#e7241d' elif grade <= 3.6: color = '#ef832c' elif grade <= 6.0: color = '#fffd46' elif grade <= 8.4: color = '#9cfa40' else: color = '#60f83d' s = badge(left_text='pylint score', right_text=str(grade), right_color=color) with open(abs + "pylint_badge.svg", "w+") as f: f.write(s)
pylint-badge.yml(.github/workflow/目录下)
name: Pylint on: push: branches: - main jobs: build: runs-on: ubuntu-latest strategy: matrix: python-version: ["3.8"] steps: - name: Checkout code uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v3 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | python -m pip install --upgrade pip pip install pybadges pip install pylint - name: Analyze the code with pylint run: | python pylint_test.py
问题分析
- 临时环境导致文件丢失:GitHub Actions的runner是临时虚拟环境,Workflow执行结束后所有生成的文件会随环境销毁,不会自动同步到你的GitHub仓库,因此本地看不到这些文件。
- 硬编码路径不够通用:代码里硬编码了runner的绝对路径
/home/runner/work/DigitsSolver/DigitsSolver/,虽然当前能运行,但如果仓库名或runner路径变化会直接出错,建议改用相对路径。
解决方案
步骤1:修改Python脚本,使用相对路径
替换硬编码路径为相对路径,提升脚本通用性:
from pylint.lint import Run from pylint.reporters.text import TextReporter from pybadges import badge import os grade = None color = None # 使用当前工作目录的相对路径,无需硬编码runner路径 current_dir = os.getcwd() with open(os.path.join(current_dir, "pylint.out"), "w+") as f: reporter = TextReporter(f) # 相对路径指向solver目录/文件 Run(["./solver"], reporter=reporter, exit=False) with open(os.path.join(current_dir, "pylint.out"), "r") as f: content = f.read() target = "Your code has been rated at " grade_str = content[content.index(target) + len(target):content.index("/")] grade = float(grade_str) if grade <= 1.2: color = '#e7241d' elif grade <= 3.6: color = '#ef832c' elif grade <= 6.0: color = '#fffd46' elif grade <= 8.4: color = '#9cfa40' else: color = '#60f83d' badge_svg = badge(left_text='pylint score', right_text=str(grade), right_color=color) with open(os.path.join(current_dir, "pylint_badge.svg"), "w+") as f: f.write(badge_svg)
步骤2:修改Workflow配置,添加文件提交步骤
在YAML中新增提交步骤,将生成的文件推回仓库:
name: Pylint on: push: branches: - main jobs: build: runs-on: ubuntu-latest strategy: matrix: python-version: ["3.8"] steps: - name: Checkout code uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v3 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | python -m pip install --upgrade pip pip install pybadges pip install pylint - name: Analyze the code with pylint run: | python pylint_test.py # 新增步骤:配置Git并提交文件 - name: Configure Git run: | git config --global user.name "GitHub Actions" git config --global user.email "actions@github.com" - name: Commit and push files run: | git add pylint.out pylint_badge.svg git commit -m "Update Pylint badge and report" || echo "No changes to commit" git push
内容的提问来源于stack exchange,提问作者fish_brain
相关产品推荐
相关产品推荐

