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

使用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

问题分析

  1. 临时环境导致文件丢失:GitHub Actions的runner是临时虚拟环境,Workflow执行结束后所有生成的文件会随环境销毁,不会自动同步到你的GitHub仓库,因此本地看不到这些文件。
  2. 硬编码路径不够通用:代码里硬编码了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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:05:07