Better format enforcing (#1391)

* Add shared python format-check target

* Add .format-check to api lint target

* Format api code with makefile format target

* Add .format-check to tools lint target

* Add .format-check to analyzer lint target

* Format analyzer code with makefile format target

* Add .format-check to celery lint target

* Add .format-check to api_client lint target

* Format api_client code with makefile format target

* Add .format-check to playout lint target

* Run CI linting in parallel

* Disable isort in pre-commit
This commit is contained in:
Jonas L 2021-10-17 16:24:37 +02:00 committed by GitHub
parent ada4c72e87
commit 30b3470a06
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
25 changed files with 50 additions and 22 deletions

View File

@ -106,6 +106,16 @@ jobs:
# into 'test' when the entire matrix succeeds. # into 'test' when the entire matrix succeeds.
lint: lint:
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
context:
- analyzer
- api
- api_client
- playout
- worker
container: ghcr.io/libretime/libretime-dev:buster container: ghcr.io/libretime/libretime-dev:buster
defaults: defaults:
run: run:
@ -124,12 +134,8 @@ jobs:
echo "::add-matcher::.github/annotations/pylint.json" echo "::add-matcher::.github/annotations/pylint.json"
- name: Lint - name: Lint
run: | run: make lint
make -C api lint working-directory: ${{ matrix.context }}
make -C analyzer lint
make -C worker lint
make -C api_client lint
make -C playout lint
test: test:
runs-on: ubuntu-latest runs-on: ubuntu-latest

View File

@ -39,11 +39,11 @@ repos:
hooks: hooks:
- id: black - id: black
- repo: https://github.com/pycqa/isort # - repo: https://github.com/pycqa/isort
rev: 5.9.3 # rev: 5.9.3
hooks: # hooks:
- id: isort # - id: isort
args: ["--profile", "black", "--filter-files"] # args: ["--profile", "black", "--filter-files"]
- repo: https://github.com/codespell-project/codespell - repo: https://github.com/codespell-project/codespell
rev: v2.1.0 rev: v2.1.0

View File

@ -8,7 +8,7 @@ MYPY_ARG := airtime_analyzer tests
PYTEST_ARG := --cov=airtime_analyzer tests PYTEST_ARG := --cov=airtime_analyzer tests
format: .format format: .format
lint: .pylint .mypy lint: .format-check .pylint .mypy
fixtures: fixtures:
bash tests/fixtures/generate.sh bash tests/fixtures/generate.sh

View File

@ -4,6 +4,7 @@ import shutil
from queue import Queue from queue import Queue
import pytest import pytest
from airtime_analyzer.analyzer_pipeline import AnalyzerPipeline from airtime_analyzer.analyzer_pipeline import AnalyzerPipeline
from .conftest import AUDIO_FILENAME, AUDIO_IMPORT_DEST from .conftest import AUDIO_FILENAME, AUDIO_IMPORT_DEST

View File

@ -1,4 +1,5 @@
import pytest import pytest
from airtime_analyzer.analyzer import Analyzer from airtime_analyzer.analyzer import Analyzer

View File

@ -1,5 +1,6 @@
import distro import distro
import pytest import pytest
from airtime_analyzer.cuepoint_analyzer import CuePointAnalyzer from airtime_analyzer.cuepoint_analyzer import CuePointAnalyzer
from .fixtures import FILE_INVALID_DRM, FILES, Fixture from .fixtures import FILE_INVALID_DRM, FILES, Fixture

View File

@ -5,6 +5,7 @@ import time
from unittest import mock from unittest import mock
import pytest import pytest
from airtime_analyzer.filemover_analyzer import FileMoverAnalyzer from airtime_analyzer.filemover_analyzer import FileMoverAnalyzer
from .conftest import AUDIO_FILENAME from .conftest import AUDIO_FILENAME

View File

@ -3,6 +3,7 @@ from unittest import mock
import mutagen import mutagen
import pytest import pytest
from airtime_analyzer.metadata_analyzer import MetadataAnalyzer from airtime_analyzer.metadata_analyzer import MetadataAnalyzer
from .fixtures import FILE_INVALID_DRM, FILE_INVALID_TXT, FILES_TAGGED, FixtureMeta from .fixtures import FILE_INVALID_DRM, FILE_INVALID_TXT, FILES_TAGGED, FixtureMeta

View File

@ -1,5 +1,6 @@
import distro import distro
import pytest import pytest
from airtime_analyzer.playability_analyzer import ( from airtime_analyzer.playability_analyzer import (
PlayabilityAnalyzer, PlayabilityAnalyzer,
UnplayableFileError, UnplayableFileError,

View File

@ -1,4 +1,5 @@
import pytest import pytest
from airtime_analyzer.replaygain_analyzer import ReplayGainAnalyzer from airtime_analyzer.replaygain_analyzer import ReplayGainAnalyzer
from .fixtures import FILE_INVALID_DRM, FILES, Fixture from .fixtures import FILE_INVALID_DRM, FILES, Fixture

View File

@ -7,5 +7,5 @@ PYLINT_ARG := libretimeapi
MYPY_ARG := libretimeapi MYPY_ARG := libretimeapi
format: .format format: .format
lint: .pylint .mypy lint: .format-check .pylint .mypy
clean: .clean clean: .clean

View File

@ -4,6 +4,7 @@ from django.contrib import auth
from django.contrib.auth.models import AbstractBaseUser, Permission from django.contrib.auth.models import AbstractBaseUser, Permission
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.db import models from django.db import models
from libretimeapi.managers import UserManager from libretimeapi.managers import UserManager
from libretimeapi.permission_constants import GROUPS from libretimeapi.permission_constants import GROUPS

View File

@ -1,6 +1,7 @@
from datetime import datetime, timedelta from datetime import datetime, timedelta
from django.test import TestCase from django.test import TestCase
from libretimeapi.models import Schedule, ShowInstance from libretimeapi.models import Schedule, ShowInstance

View File

@ -1,9 +1,10 @@
from django.apps import apps from django.apps import apps
from django.contrib.auth.models import Group from django.contrib.auth.models import Group
from rest_framework.test import APITestCase
from libretimeapi.models import User from libretimeapi.models import User
from libretimeapi.models.user_constants import DJ, GUEST from libretimeapi.models.user_constants import DJ, GUEST
from libretimeapi.permission_constants import GROUPS from libretimeapi.permission_constants import GROUPS
from rest_framework.test import APITestCase
class TestUserManager(APITestCase): class TestUserManager(APITestCase):

View File

@ -3,6 +3,9 @@ import os
from django.conf import settings from django.conf import settings
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.contrib.auth.models import AnonymousUser from django.contrib.auth.models import AnonymousUser
from model_bakery import baker
from rest_framework.test import APIRequestFactory, APITestCase
from libretimeapi.models.user_constants import ADMIN, DJ, GUEST, PROGRAM_MANAGER from libretimeapi.models.user_constants import ADMIN, DJ, GUEST, PROGRAM_MANAGER
from libretimeapi.permission_constants import ( from libretimeapi.permission_constants import (
DJ_PERMISSIONS, DJ_PERMISSIONS,
@ -10,8 +13,6 @@ from libretimeapi.permission_constants import (
PROGRAM_MANAGER_PERMISSIONS, PROGRAM_MANAGER_PERMISSIONS,
) )
from libretimeapi.permissions import IsSystemTokenOrUser from libretimeapi.permissions import IsSystemTokenOrUser
from model_bakery import baker
from rest_framework.test import APIRequestFactory, APITestCase
class TestIsSystemTokenOrUser(APITestCase): class TestIsSystemTokenOrUser(APITestCase):

View File

@ -4,10 +4,11 @@ from datetime import datetime, timedelta, timezone
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import AnonymousUser from django.contrib.auth.models import AnonymousUser
from django.utils import dateparse from django.utils import dateparse
from libretimeapi.views import FileViewSet
from model_bakery import baker from model_bakery import baker
from rest_framework.test import APIRequestFactory, APITestCase from rest_framework.test import APIRequestFactory, APITestCase
from libretimeapi.views import FileViewSet
class TestFileViewSet(APITestCase): class TestFileViewSet(APITestCase):
@classmethod @classmethod

View File

@ -8,6 +8,6 @@ MYPY_ARG := api_clients tests
PYTEST_ARG := --cov=api_clients tests PYTEST_ARG := --cov=api_clients tests
format: .format format: .format
lint: .pylint .mypy lint: .format-check .pylint .mypy
test: .pytest test: .pytest
clean: .clean clean: .clean

View File

@ -1,4 +1,5 @@
import pytest import pytest
from api_clients.utils import ApcUrl, IncompleteUrl, UrlBadParam from api_clients.utils import ApcUrl, IncompleteUrl, UrlBadParam

View File

@ -1,4 +1,5 @@
import pytest import pytest
from api_clients.utils import RequestProvider from api_clients.utils import RequestProvider
from api_clients.version1 import api_config from api_clients.version1 import api_config

View File

@ -2,6 +2,7 @@ import datetime
from configparser import ConfigParser from configparser import ConfigParser
import pytest import pytest
from api_clients import utils from api_clients import utils

View File

@ -1,4 +1,5 @@
import pytest import pytest
from api_clients.utils import RequestProvider from api_clients.utils import RequestProvider
from api_clients.version2 import AirtimeApiClient, api_config from api_clients.version2 import AirtimeApiClient, api_config

View File

@ -7,5 +7,5 @@ PYLINT_ARG := liquidsoap pypo
MYPY_ARG := liquidsoap pypo MYPY_ARG := liquidsoap pypo
format: .format format: .format
lint: .pylint .mypy lint: .format-check .pylint .mypy
clean: .clean clean: .clean

View File

@ -8,6 +8,6 @@ MYPY_ARG = .
PYTEST_ARG = . PYTEST_ARG = .
format: .format format: .format
lint: .pylint .mypy lint: .format-check .pylint .mypy
test: .pytest test: .pytest
clean: .clean clean: .clean

View File

@ -32,7 +32,13 @@ install: venv
.format: $(VENV) .format: $(VENV)
source $(VENV)/bin/activate source $(VENV)/bin/activate
black . black .
isort --profile black . isort . --profile black
.PHONY: .format-check
.format-check: $(VENV)
source $(VENV)/bin/activate
black . --check
isort . --profile black --check
.PHONY: .pylint .PHONY: .pylint
.pylint: $(VENV) .pylint: $(VENV)

View File

@ -7,5 +7,5 @@ PYLINT_ARG := airtime-celery
MYPY_ARG := airtime-celery MYPY_ARG := airtime-celery
format: .format format: .format
lint: .pylint .mypy lint: .format-check .pylint .mypy
clean: .clean clean: .clean