diff options
| -rw-r--r-- | .github/workflows/lint-test.yaml | 1 | ||||
| -rw-r--r-- | docker-compose.yml | 6 | ||||
| -rwxr-xr-x | manage.py | 20 | ||||
| -rw-r--r-- | pyproject.toml | 2 | 
4 files changed, 20 insertions, 9 deletions
| diff --git a/.github/workflows/lint-test.yaml b/.github/workflows/lint-test.yaml index f97cd758..a167ce32 100644 --- a/.github/workflows/lint-test.yaml +++ b/.github/workflows/lint-test.yaml @@ -97,7 +97,6 @@ jobs:        - name: Migrations and run tests with coverage.py          run: |            python manage.py makemigrations --check -          python manage.py migrate            coverage run manage.py test --no-input            coverage report -m          env: diff --git a/docker-compose.yml b/docker-compose.yml index eb987624..a6f4fd18 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,12 +8,12 @@  # and additionally use the Django development server which is  # unsuitable for production. -version: "3.6" +version: "3.8"  services:    postgres:      image: postgres:13-alpine      ports: -      - "127.0.0.1:7777:5432" +      - "7777:5432"      environment:        POSTGRES_DB: pysite        POSTGRES_PASSWORD: pysite @@ -38,7 +38,7 @@ services:            - admin.web            - staff.web      ports: -      - "127.0.0.1:8000:8000" +      - "8000:8000"      depends_on:        postgres:          condition: service_healthy @@ -95,13 +95,15 @@ class SiteManager:                  name="pythondiscord.local:8000"              ) -    def prepare_server(self) -> None: -        """Perform preparation tasks before running the server.""" +    def prepare_environment(self) -> None: +        """Perform common preparation tasks."""          django.setup()          print("Applying migrations.")          call_command("migrate", verbosity=self.verbosity) +    def prepare_server(self) -> None: +        """Preform runserver-specific preparation tasks."""          if self.debug:              # In Production, collectstatic is ran in the Docker image              print("Collecting static files.") @@ -121,6 +123,7 @@ class SiteManager:          # Prevent preparing twice when in dev mode due to reloader          if not self.debug or in_reloader: +            self.prepare_environment()              self.prepare_server()          print("Starting server.") @@ -148,6 +151,11 @@ class SiteManager:          # Run gunicorn for the production server.          gunicorn.app.wsgiapp.run() +    def run_tests(self) -> None: +        """Prepare and run the test suite.""" +        self.prepare_environment() +        call_command(*sys.argv[1:]) +  def clean_up_static_files(build_folder: Path) -> None:      """Recursively loop over the build directory and fix links.""" @@ -168,8 +176,12 @@ def clean_up_static_files(build_folder: Path) -> None:  def main() -> None:      """Entry point for Django management script."""      # Use the custom site manager for launching the server -    if len(sys.argv) > 1 and sys.argv[1] == "run": -        SiteManager(sys.argv).run_server() +    if len(sys.argv) > 1 and sys.argv[1] in ("run", "test"): +        manager = SiteManager(sys.argv) +        if sys.argv[1] == "run": +            manager.run_server() +        elif sys.argv[1] == "test": +            manager.run_tests()      # Pass any others directly to standard management commands      else: diff --git a/pyproject.toml b/pyproject.toml index 467fc8bc..8b98f94f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -51,7 +51,7 @@ start = "python manage.py run --debug"  makemigrations = "python manage.py makemigrations"  django_shell = "python manage.py shell"  test = "coverage run manage.py test" -coverage = "coverage run manage.py test --no-input; coverage report -m" +coverage = "coverage run manage.py test --no-input && coverage report -m"  report = "coverage report -m"  lint = "pre-commit run --all-files"  precommit = "pre-commit install" | 
