diff --git a/.github/workflows/bandit.yaml b/.github/workflows/bandit.yaml index 28d261b..29a1b76 100644 --- a/.github/workflows/bandit.yaml +++ b/.github/workflows/bandit.yaml @@ -1,6 +1,9 @@ -name: Bandit Security Analysis +name: Security Analysis (bandit) -on: [push] +on: + push: + branches-ignore: + - main jobs: bandit: @@ -11,5 +14,4 @@ jobs: with: src: "src" options: "-c pyproject.toml -r" - pip_install_command: "pip install .[dev]" - python_version: "3.11" + python_version: "3.13" diff --git a/.github/workflows/django.yaml b/.github/workflows/django.yaml new file mode 100644 index 0000000..df74ee1 --- /dev/null +++ b/.github/workflows/django.yaml @@ -0,0 +1,31 @@ +name: Django Check + +on: + pull_request: + types: [opened, synchronize, reopened] + +jobs: + django-check: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v4 + with: + python-version: "3.13" + + - name: Install dependencies + run: | + pip install -e . + + - name: Run Django check + env: + DJANGO_SETTINGS_MODULE: core.settings + DB_ENGINE: django.db.backends.sqlite3 + DB_NAME: test_db.sqlite3 + SECRET_KEY: test_secret_key + DJANGO_DEBUG: False + run: | + cd src/django_project + python manage.py check diff --git a/.github/workflows/fawltydeps.yaml b/.github/workflows/fawltydeps.yaml new file mode 100644 index 0000000..4f709ad --- /dev/null +++ b/.github/workflows/fawltydeps.yaml @@ -0,0 +1,21 @@ +name: Dependency Consistency Check (fawltydeps) + +on: + pull_request: + types: [opened, synchronize, reopened] + +jobs: + fawltydeps: + runs-on: ubuntu-latest + name: "fawltydeps" + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v4 + with: + python-version: "3.13" + - name: Install dependencies + run: | + pip install -e .[dev] + - name: Run fawltydeps + run: | + fawltydeps diff --git a/.github/workflows/isort.yaml b/.github/workflows/isort.yaml index 2364170..5b52f95 100644 --- a/.github/workflows/isort.yaml +++ b/.github/workflows/isort.yaml @@ -1,14 +1,18 @@ -name: isort +name: Import Order Validation (isort) -on: [push] +on: + push: + branches-ignore: + - main jobs: isort: runs-on: ubuntu-latest name: "isort" + if: github.event.created == false # Skip if this push created a new branch steps: - uses: davidslusser/actions_python_isort@v1.0.1 with: src: "src/django_project" options: "--check --diff" - python_version: "3.11" + python_version: "3.13" diff --git a/.github/workflows/mypy.yaml b/.github/workflows/mypy.yaml index cd94de4..ac392b3 100644 --- a/.github/workflows/mypy.yaml +++ b/.github/workflows/mypy.yaml @@ -1,14 +1,19 @@ -name: mypy +name: Type Checking (mypy) -on: [push] +on: + push: + branches-ignore: + - main jobs: mypy: runs-on: ubuntu-latest name: "mypy" + if: github.event.created == false # Skip if this push created a new branch steps: - uses: davidslusser/actions_python_mypy@v1.0.1 with: src: "src" - options: "-v" + options: "" pip_install_command: "pip install -e .[dev]" + python_version: "3.13" diff --git a/.github/workflows/radon.yaml b/.github/workflows/radon.yaml index 31a1fde..516014c 100644 --- a/.github/workflows/radon.yaml +++ b/.github/workflows/radon.yaml @@ -1,11 +1,15 @@ -name: radon +name: Code Metrics Analysis (radon) -on: [push] +on: + push: + branches-ignore: + - main jobs: radon: runs-on: ubuntu-latest name: "radon" + if: github.event.created == false # Skip if this push created a new branch steps: - uses: actions/checkout@v3 - uses: davidslusser/actions_python_radon@v1.0.0 diff --git a/.github/workflows/ruff_format.yaml b/.github/workflows/ruff_format.yaml index eff2b7a..ea1f7fb 100644 --- a/.github/workflows/ruff_format.yaml +++ b/.github/workflows/ruff_format.yaml @@ -1,15 +1,19 @@ -name: ruff_format +name: Code Consistency Check (ruff format) -on: [push] +on: + push: + branches-ignore: + - main jobs: ruff: runs-on: ubuntu-latest name: "ruff" + if: github.event.created == false # Skip if this push created a new branch steps: - name: actions_python_ruff uses: davidslusser/actions_python_ruff@v1.0.3 with: src: "src/django_project" command: ruff format src --check - python_version: "3.11" + python_version: "3.13" diff --git a/.github/workflows/ruff_lint.yaml b/.github/workflows/ruff_lint.yaml index 1c88f6b..ea1f7fb 100644 --- a/.github/workflows/ruff_lint.yaml +++ b/.github/workflows/ruff_lint.yaml @@ -1,15 +1,19 @@ -name: ruff_lint +name: Code Consistency Check (ruff format) -on: [push] +on: + push: + branches-ignore: + - main jobs: ruff: runs-on: ubuntu-latest name: "ruff" + if: github.event.created == false # Skip if this push created a new branch steps: - name: actions_python_ruff uses: davidslusser/actions_python_ruff@v1.0.3 with: src: "src/django_project" - options: "-v" - python_version: "3.11" + command: ruff format src --check + python_version: "3.13" diff --git a/pyproject.toml b/pyproject.toml index 9a4c096..e1473d5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] dependencies = [ - "django~=5.2", + "django~=5.2.12", "django-braces", "django-debug-toolbar", "django-environ", @@ -10,8 +10,8 @@ dependencies = [ "djangorestframework", "djangorestframework-filters==1.0.0.dev0", "drf-flex-fields", - "drf-spectacular", "drf-renderer-xlsx", + "drf-spectacular", "whitenoise", ] description = "Spokane Python Community" @@ -20,14 +20,14 @@ keywords = ["django"] license = {file = "LICENSE"} name = "my_django_project" readme = "README.md" -requires-python = ">=3.10" +requires-python = ">=3.12" [project.optional-dependencies] dev = [ "bandit", - "coveralls", "faker", + "fawltydeps", "isort", "model-bakery", "mypy", @@ -37,7 +37,6 @@ dev = [ "pytest-cov", "pytest-django", "radon", - "safety", "types-python-dateutil", "types-requests", "typing_extensions", @@ -72,6 +71,40 @@ omit = [ ] +[tool.fawltydeps] +code = ["src/django_project"] +deps = ["pyproject.toml"] +ignore_unused = [ + "bandit", + "black", + "django-braces", + "django-celery-beat", + "django-debug-toolbar", + "django-extensions", + "django-filter", + "drf-renderer-xlsx", + "gunicorn", + "faker", + "fawltydeps", + "isort", + "model-bakery", + "mypy", + "mypy-extensions", + "ruff", + "psycopg2-binary", + "pytest", + "pytest-cov", + "pytest-django", + "radon", + "redis", + "types-python-dateutil", + "types-requests", + "typing_extensions", + "whitenoise" + ] +output_format = "human_detailed" + + [tool.isort] profile = "black"