Запустите pylint для обоих Python 2.7 и 3.7 в хуке предварительной фиксации на образе Docker

Я пытаюсь использовать CircleCI для запуска ловушки перед фиксацией, которая запускает Pylint для Python 2.7 и 3.7.

.circleci/config.yml выполняет предварительную фиксацию для Python 2 и Python 3:

jobs:
  lint-py2:
    docker:
      - image: python:2.7.14
    steps:
      {snip}
      - run: pre-commit run --all-files
      {snip}

  lint-py3:
    docker:
      - image: python:3.7.3
    steps:
      {snip}
      - run: pre-commit run --all-files
      {snip}

pre-commit, кроме всего прочего, запускает pylint:

-   repo: https://github.com/pre-commit/mirrors-pylint
    rev: v2.3.1  # Which version here?
    hooks:
    -   id: pylint

Проблема здесь в том, что не существует версии pylint, совместимой с Python 2.7 и 3.7: Python 2.7 требует pylint 1.x, а Python 3.7 требует pylint 2.x.

Как я могу заставить Circle CI запускать оба задания с использованием разных версий Pylint?

Я рассматриваю несколько вариантов:

  • Добавьте Pylint дважды в конфигурации предварительной фиксации (с разными псевдонимами) и отключите одну или другую в определении задания
    • Похоже, что pre-commit пытается установить зависимости, прежде чем смотреть на SKIP переменная, поэтому Python 2.7 запускает попытку установить Pylint 2 в любом случае, и ошибки с ERROR: Could not find a version that satisfies the requirement pylint==2.3.1 (from pre-commit-dummy-package==0.0.0)
  • Используйте образ Docker, который имеет обе версии Python и установите версию Python на уровне ловушки
    • Это требует создания собственного образа Docker
  • Пропустить пилинт на одном из заданий
  • Поддержка Drop 2.7 или 3.7

0 ответов

Самый простой вариант - это, вероятно, установить как python2, так и python3, хотя можно использовать несколько файлов конфигурации для выполнения того, что вы хотите:

Другой вариант - запустить только один из них во время CI, используя --config вариант

При этом у вас будет значение по умолчанию .pre-commit-config.yaml и специальный .pre-commit-config-py27.yaml который включает pylint python2.7 вместо pylint python3

В CI вы вызываете pre-commit run --config .pre-commit-config-py27.yaml --all-files --show-diff-on-failure для python2.7 и нормального pre-commit run --all-files --show-diff-on-failure для запуска без py27

Другие вопросы по тегам