Skip to content
  • Kevin Morris's avatar
    Improve Docker ecosystem · 5bd46d18
    Kevin Morris authored
    
    
    Instead of using Dockerfile for everything, we've introduced
    a docker-compose.yml file and kept the Dockerfile to producing
    a pure base image for the services defined.
    
    docker-compose services:
    
    - `mariadb` - Setup mariadb
    - `sharness` - Run sharness suites
    - `pytest-mysql` - Run pytest suites with MariaDB
    - `pytest-sqlite` - Run pytest suites with SQLite
    - `test` - Run all tests and produce a collective coverage report
        - This target mounts a cache volume and copies any successful
          coverage report back to `./cache/.coverage`. Users can run
          `./util/fix-coverage ./cache/.coverage` to rewrite source
          code paths and move coverage into place to view reports
          on your local system.
    
    == Get Started ==
    
    Build `aurweb:latest`.
    
        $ docker build -t aurweb:latest .
    
    Run all tests via `docker-compose`.
    
        $ docker-compose up test
    
    You can also purely run `pytest` in SQLite or MariaDB modes.
    
        $ docker-compose up pytest-sqlite
        $ docker-compose up pytest-mysql
    
    Or `sharness` alone, which only uses SQLite internally.
    
        $ docker-compose up sharness
    
    After running tests, coverage reports are stored in `./cache/.coverage`.
    This database was most likely created in a different path, and so it
    needs to be sanitized with `./util/fix-coverage`.
    
        $ ./util/fix-coverage cache/.coverage
        Copied coverage db to /path/to/aurweb/.coverage.
        $ coverage report
        ...
        $ coverage html
        $ coverage xml
        ...
    
    Defined components:
    
    **Entrypoints**
    
    - mariadb-entrypoint.sh - setup mariadb and run its daemon
    - test-mysql-entrypoint.sh - setup mysql configurations
    - test-sqlite-entrypoint.sh - setup sqlite configurations
    - tests-entrypoint.sh - setup mysql and sqlite configurations
    
    **Scripts**
    
    - run-mariadb.sh - setup databases
    - run-pytests.sh - run pytest suites
    - run-sharness.sh - run sharness suites
    - run-tests.sh - run both pytests and sharness
    
    **Health**
    
    - mariadb.sh - A healthcheck script for the mariadb service
    - pytest.sh - A healthcheck script for the pytest-* services
    - sharness.sh - A healthcheck script for the sharness service
    
    This Docker configuration is setup for tests, but should be
    extendable for web and git servers.
    
    **Changes to Makefile**
    
    - Remove `.coverage` in the `clean` target
    - Add a `coverage` target which prints a report and outputs xml
    
    Signed-off-by: Kevin Morris's avatarKevin Morris <kevr@0cost.org>
    5bd46d18