【问题标题】:How to run pylint only on changed files in Gitlab?如何仅在 Gitlab 中更改的文件上运行 pylint?
【发布时间】:2021-05-15 03:18:01
【问题描述】:

我试图仅在更改的 python 文件上运行 pylint,但我的构建一直失败。我已经通过 git diff 提取了更改的文件并将它们保存在一个变量中,但是当我将变量注入 pylint 调用时,它失败了。但是,它适用于硬编码的文件名。这是我的 yaml:

pylint:
stage: test
  before_script:
    - pip install pylint pylint-exit anybadge
  script:
      - echo CI_COMMIT_SHA=${CI_COMMIT_SHA}
      - echo CI_MERGE_REQUEST_TARGET_BRANCH_NAME=${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}
      - git fetch origin ${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}
      - FILES=$(git diff --name-only ${CI_COMMIT_SHA} origin/${CI_MERGE_REQUEST_TARGET_BRANCH_NAME} | grep '\.py'$)
      - echo "Changed files are $FILES"
      - pylint --output-format=text $(find -type f -name "$FILES" ! -path "**/.venv/**") | tee ./pylint/pylint.log || pylint-exit $?
      - PYLINT_SCORE=$(sed -n 's/^Your code has been rated at \([-0-9.]*\)\/.*/\1/p' ./pylint/pylint.log)
      - anybadge --label=Pylint --file=pylint/pylint.svg --value=$PYLINT_SCORE 2=red 4=orange 8=yellow 10=green
      - echo "Pylint score is $PYLINT_SCORE"
  artifacts:
    paths:
      - ./pylint/
    when: always
  only:
      refs:
          - merge_requests
      changes:
          - "**/*.py"

【问题讨论】:

    标签: python gitlab devops gitlab-ci pylint


    【解决方案1】:

    这是你可以做的

    .gitlab-ci.yml

    stages:
      - Lint
    
    Lint:
      stage: Lint
      allow_failure: true
      script:
      - chmod +x lint.sh
      - ./lint.sh
    

    lint.sh

    #! /bin/sh
    
    pip install pycodestyle
    current_branch="$CI_BUILD_REF_NAME" 
    echo $current_branch
    all_changed_files=$(git diff --name-only origin/master origin/$current_branch)
    echo "Checking changes!"
    for each_file in $all_changed_files
    do
    # Checks each newly added file change with pycodestyle
    pycodestyle $each_file
    error_count=$(pycodestyle $each_file --count | wc -l)
    if [ $error_count -ge 1 ]; then
        exit 1
    fi
    if [ $error_count -eq 0 ]; then
        exit 0
    fi
    done
    echo "Completed checking"
    

    【讨论】:

      【解决方案2】:

      找到了一种方法。我使用 GitLab 变量来获取合并请求中更改的文件并将其输入到 pylint 命令中

       script:
            - echo CI_COMMIT_SHA=${CI_COMMIT_SHA}
            - echo CI_MERGE_REQUEST_TARGET_BRANCH_NAME=${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}
            - git fetch origin ${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}
            - FILES=$(git diff --name-only ${CI_COMMIT_SHA} origin/${CI_MERGE_REQUEST_TARGET_BRANCH_NAME} | grep '\.py'$)
            - echo "Changed files are $FILES"
            - mkdir ./pylint
            - pylint --output-format=text $FILES | tee ./pylint/pylint.log || pylint-exit $?
      

      【讨论】:

        【解决方案3】:

        Darker 允许这样做。 2021年2月支持black、isort、mypy、pylint、flake8。

        此实用程序重新格式化并检查 Git 存储库中的 Python 源代码文件。但是,它仅适用于重新格式化并报告自上次提交以来 Git 工作树中已更改的区域中的错误。

        【讨论】:

          猜你喜欢
          • 2017-02-04
          • 1970-01-01
          • 1970-01-01
          • 2022-07-12
          • 2015-12-09
          • 1970-01-01
          • 1970-01-01
          • 2022-01-04
          • 2017-08-01
          相关资源
          最近更新 更多