From 0c43e2dd0a8a36b31bf00b8bd12aa59fb129737a Mon Sep 17 00:00:00 2001 From: Kevin Chung Date: Wed, 17 Jun 2020 03:14:47 -0400 Subject: [PATCH] Seperate out postgres tests and clarify postgres support (#1494) * Clarifies the position on supporting Postgres and removes Postgres from the main test suite * Closes #973 --- .github/workflows/lint.yml | 33 ++++++++++++ .github/workflows/mysql.yml | 53 +++++++++++++++++++ .github/workflows/{tests.yml => postgres.yml} | 15 ++---- .github/workflows/sqlite.yml | 44 +++++++++++++++ .travis.yml | 4 -- docs/deployment.rst | 7 ++- 6 files changed, 138 insertions(+), 18 deletions(-) create mode 100644 .github/workflows/lint.yml create mode 100644 .github/workflows/mysql.yml rename .github/workflows/{tests.yml => postgres.yml} (77%) create mode 100644 .github/workflows/sqlite.yml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 00000000..a863b750 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,33 @@ +--- +name: Linting + +on: [push] + +jobs: + build: + + runs-on: ubuntu-latest + + strategy: + matrix: + python-version: ['3.6'] + TESTING_DATABASE_URL: ['sqlite://'] + + name: Linting + steps: + - uses: actions/checkout@v2 + - name: Setup python + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + architecture: x64 + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m pip install -r development.txt + sudo yarn install --non-interactive + sudo yarn global add prettier@1.17.0 + + - name: Lint + run: make lint + diff --git a/.github/workflows/mysql.yml b/.github/workflows/mysql.yml new file mode 100644 index 00000000..d553272c --- /dev/null +++ b/.github/workflows/mysql.yml @@ -0,0 +1,53 @@ +--- +name: CTFd MySQL CI + +on: [pull_request] + +jobs: + build: + + runs-on: ubuntu-latest + services: + mysql: + image: mysql + ports: + - 3306:3306 + redis: + image: redis + ports: + - 6379:6379 + + strategy: + matrix: + python-version: ['3.6'] + TESTING_DATABASE_URL: ['mysql+pymysql://root@localhost/ctfd'] + + name: Python ${{ matrix.python-version }} + steps: + - uses: actions/checkout@v2 + - name: Setup python + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + architecture: x64 + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m pip install -r development.txt + sudo yarn install --non-interactive + sudo yarn global add prettier@1.17.0 + + - name: Lint + run: make lint + + - name: Test + run: | + sudo rm -f /etc/boto.cfg + make test + env: + AWS_ACCESS_KEY_ID: AKIAIOSFODNN7EXAMPLE + AWS_SECRET_ACCESS_KEY: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + + - name: Coverage + run: codecov + diff --git a/.github/workflows/tests.yml b/.github/workflows/postgres.yml similarity index 77% rename from .github/workflows/tests.yml rename to .github/workflows/postgres.yml index c320f097..bb7ecd74 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/postgres.yml @@ -1,7 +1,7 @@ --- -name: CTFd CI +name: CTFd Postgres CI -on: [push, pull_request] +on: [pull_request] jobs: build: @@ -21,10 +21,6 @@ jobs: --health-interval 10s --health-timeout 5s --health-retries 5 - mysql: - image: mysql - ports: - - 3306:3306 redis: image: redis ports: @@ -33,7 +29,7 @@ jobs: strategy: matrix: python-version: ['3.6'] - TESTING_DATABASE_URL: ['mysql+pymysql://root@localhost/ctfd', 'sqlite://', 'postgres://postgres@localhost/ctfd'] + TESTING_DATABASE_URL: ['postgres://postgres@localhost/ctfd'] name: Python ${{ matrix.python-version }} steps: @@ -47,11 +43,6 @@ jobs: run: | python -m pip install --upgrade pip python -m pip install -r development.txt - sudo yarn install --non-interactive - sudo yarn global add prettier@1.17.0 - - - name: Lint - run: make lint - name: Test run: | diff --git a/.github/workflows/sqlite.yml b/.github/workflows/sqlite.yml new file mode 100644 index 00000000..9ebf42cc --- /dev/null +++ b/.github/workflows/sqlite.yml @@ -0,0 +1,44 @@ +--- +name: CTFd SQLite CI + +on: [pull_request] + +jobs: + build: + + runs-on: ubuntu-latest + + strategy: + matrix: + python-version: ['3.6'] + TESTING_DATABASE_URL: ['sqlite://'] + + name: Python ${{ matrix.python-version }} + steps: + - uses: actions/checkout@v2 + - name: Setup python + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + architecture: x64 + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m pip install -r development.txt + sudo yarn install --non-interactive + sudo yarn global add prettier@1.17.0 + + - name: Lint + run: make lint + + - name: Test + run: | + sudo rm -f /etc/boto.cfg + make test + env: + AWS_ACCESS_KEY_ID: AKIAIOSFODNN7EXAMPLE + AWS_SECRET_ACCESS_KEY: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY + + - name: Coverage + run: codecov + diff --git a/.travis.yml b/.travis.yml index 0b088121..b5fa3040 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,6 @@ cache: - yarn services: - mysql - - postgresql - redis-server addons: apt: @@ -17,7 +16,6 @@ addons: env: - TESTING_DATABASE_URL='mysql+pymysql://root@localhost/ctfd' - TESTING_DATABASE_URL='sqlite://' - - TESTING_DATABASE_URL='postgres://postgres@localhost/ctfd' python: - 3.6 before_install: @@ -28,8 +26,6 @@ install: - pip install -r development.txt - yarn install --non-interactive - yarn global add prettier@1.17.0 -before_script: - - psql -c 'create database ctfd;' -U postgres script: - make lint - make test diff --git a/docs/deployment.rst b/docs/deployment.rst index 9bd5a1f6..139df415 100644 --- a/docs/deployment.rst +++ b/docs/deployment.rst @@ -53,12 +53,15 @@ While CTFd is a standard WSGI application and most WSGI servers (e.g. gunicorn, Database Server ~~~~~~~~~~~~~~~ -CTFd makes use of SQLAlchemy and as such supports a number of SQL databases. As of CTFd 2.0, the recommended database type is MySQL. CTFd is tested and has been installed against SQLite, Postgres, and MariaDB but this could change in the future. +CTFd makes use of SQLAlchemy and as such supports a number of SQL databases. The recommended database type is MySQL. CTFd is tested with and has been installed against SQLite, Postgres, and MariaDB. By default CTFd will create a SQLite database if no database server has been configured. .. Note:: - CTFd makes use of the JSON data type. MySQL >= 5.7.8 implements a proper JSON type while MariaDB does not. Small differences like these could eventually result in CTFd only supporting a few database servers. + CTFd makes use of the JSON data type which your database backend must support. + +.. Note:: + CTFd is typicaly used with MySQL, MariaDB, or SQLite. Using CTFd with Postgres is uncommon and could be deprecated in any version. Even though Postgres may be part of the CTFd test suite, using Postgres as your database backend is at your own peril. Any issues raised regarding Postgres support will carry the expectation that the issue author write an accompanying pull request to resolve said issue. Caching Server ~~~~~~~~~~~~~~