Travis CI не проходит тесты flake8, несмотря на то, что тесты flake8 проходят в локальной среде разработки?

Фон

Я создаю проект, используя Django, Docker, Travis CI и Flake8. Мой файл flake8:

[flake8]
max-line-length = 119
exclude =
    migrations,
    __pycache__,
    manage.py,
    settings.py,
    env

Когда я запускаю локальные тесты flake8, используя:

docker-compose exec app python manage.py test && flake8

Я получаю сообщение ok без сообщений об ошибках. Мой код хорош!

Проблема

Когда я нажимаю свой код на мастер, который автоматически запускает Travis CI, сборка Travis завершается сбоем из-за следующих ошибок:

./project/settings.py:94:80: E501 line too long (91 > 79 characters)
./project/settings.py:97:80: E501 line too long (81 > 79 characters)
./project/settings.py:100:80: E501 line too long (82 > 79 characters)
./project/settings.py:103:80: E501 line too long (83 > 79 characters)
./core/models.py:7:80: E501 line too long (93 > 79 characters)
./core/models.py:13:80: E501 line too long (104 > 79 characters)
./core/migrations/0001_initial.py:18:80: E501 line too long (126 > 79 characters)
The command "docker-compose run app sh -c "python manage.py test && flake8"" exited with 1.

В моем файле flake8 указано, что максимальная длина строки составляет 119, поэтому этих ошибок быть не должно (как и при запуске теста на моем локальном компьютере).

Кто-нибудь знает, что происходит?


person Toms Codery    schedule 26.03.2020    source источник
comment
проблема такая же, как ваша другая проблема? stackoverflow.com/questions/60865887/   -  person Anthony Sottile    schedule 26.03.2020
comment
Нет, это другая проблема?   -  person Toms Codery    schedule 26.03.2020
comment
хм, не могли бы вы показать макет вашего репозитория и, возможно, ссылку на него, если он с открытым исходным кодом?   -  person Anthony Sottile    schedule 26.03.2020
comment
если это так, то это потому, что вы никогда не копируете конфигурацию flake8 в свой образ: github.com /DevelopwithTom/simple_inventory_api/blob/master/ (если вы перестроите локально, вы должны увидеть ту же проблему)   -  person Anthony Sottile    schedule 26.03.2020
comment
Привет, Энтони, извини, почему-то я не получаю уведомления, когда ты комментируешь! Именно в этом репо вы правы. Я не получаю ту же проблему локально, я думаю, потому что я установил максимальную максимальную длину строки = 119 в файле flake8.   -  person Toms Codery    schedule 26.03.2020
comment
вероятно, из-за: устаревшей сборки, горячего монтирования вашего текущего каталога. ваш файл dockerfile никогда не делает COPY . ., поэтому ваш файл .flake8 никогда не помещается в образ   -  person Anthony Sottile    schedule 26.03.2020
comment
Это отлично сработало. Спасибо. Я добавил КОПИРОВАТЬ. . в мой файл докеров вместо команды mkdir. Вы можете сделать это ответом, который я могу принять, если хотите?   -  person Toms Codery    schedule 26.03.2020


Ответы (1)


в вопросе было недостаточно информации, поэтому я пошел копаться в github OP

это был их файл докеров, когда был задан вопрос:

FROM python:3.9.0a5-alpine3.10
MAINTAINER Tom Mac

ENV PYTHONUNBUFFERED 1

COPY ./requirements.txt /requirements.txt
RUN apk add --update --no-cache postgresql-client
RUN apk add --update --no-cache --virtual .tmp-build-deps \
    gcc libc-dev linux-headers postgresql-dev
RUN pip install -r /requirements.txt
RUN apk del .tmp-build-deps

RUN mkdir /app
WORKDIR /app
COPY ./app /app

RUN adduser -D user
USER user

их конфигурация flake8 находилась по адресу .flake8 в корне репозитория.

поскольку этот файл не был частью их образа (в нем ничего не COPYd), он не соблюдался при линтинге

добавление этого файла в изображение (самый простой способ - COPY . ., который добавляет все) исправляет это


что я подозреваю произошло:

  • в Исключить каталог .env из тестов flake8? было указано, что flake8 конфигурация была не в том месте
  • OP, вероятно, переместил конфигурацию из app/.flake8 (которая находится на изображении, указанном выше)
  • OP тогда либо: (1) не перестраивал образ после этого, либо (2) имеет какой-то тип локальной настройки монтирования, где . монтируется в контейнер во время выполнения

в любом случае, перестроение и добавление COPY . . должно исправить это

person Anthony Sottile    schedule 26.03.2020