CI #283
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches: | |
- "master" | |
- "ci" | |
- "v[0-9]+.[0-9]+.x" | |
pull_request: | |
branches: | |
- "master" | |
- "v[0-9]+.[0-9]+.x" | |
schedule: | |
- cron: '24 14 * * 6' | |
jobs: | |
create-virtualenv: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
python-version: [ '3.6', '3.7', '3.8', '3.9', '3.10' ] | |
steps: | |
- name: source code | |
uses: actions/checkout@v2 | |
- name: Set up Python | |
uses: actions/setup-python@v2 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: virtualenv cache | |
uses: syphar/restore-virtualenv@v1.2 | |
id: cache-virtualenv | |
- name: pip cache | |
uses: syphar/restore-pip-download-cache@v1 | |
if: steps.cache-virtualenv.outputs.cache-hit != 'true' | |
- name: Install Python dependencies | |
if: steps.cache-virtualenv.outputs.cache-hit != 'true' | |
env: | |
POETRY_VERSION: 1.1.13 | |
run: | | |
pip install pip==21.3.1 setuptools==59.6.0 | |
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python - | |
source $HOME/.poetry/env | |
poetry install --no-interaction -E pg -E mysql | |
- name: Log currently installed packages and versions | |
run: pip list | |
check-style: | |
needs: create-virtualenv | |
runs-on: ubuntu-latest | |
steps: | |
- name: source code | |
uses: actions/checkout@v2 | |
- name: Set up Python | |
uses: actions/setup-python@v2 | |
- name: virtualenv cache | |
uses: syphar/restore-virtualenv@v1.2 | |
- name: Check code style | |
run: black --check --diff src | |
test-coverage: | |
needs: create-virtualenv | |
runs-on: ubuntu-latest | |
services: | |
postgres: | |
image: fantix/postgres-ssl:13.1 | |
env: | |
POSTGRES_USER: gino | |
POSTGRES_HOST_AUTH_METHOD: trust | |
ports: | |
- 5432:5432 | |
# needed because the postgres container does not provide a healthcheck | |
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 | |
mysql: | |
image: mysql:8.0 | |
env: | |
MYSQL_ALLOW_EMPTY_PASSWORD: 1 | |
ports: | |
- 3306:3306 | |
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 | |
steps: | |
- name: source code | |
uses: actions/checkout@v2 | |
- name: Set up Python | |
uses: actions/setup-python@v2 | |
- name: virtualenv cache | |
uses: syphar/restore-virtualenv@v1.2 | |
- name: pytest | |
env: | |
DB_HOST: localhost | |
DB_USER: gino | |
MYSQL_DB_HOST: 127.0.0.1 | |
MYSQL_DB_USER: root | |
run: | | |
pytest --cov=src --cov-fail-under=95 --cov-report xml | |
- name: Submit coverage report | |
if: github.ref == 'refs/heads/master' | |
env: | |
CODACY_PROJECT_TOKEN: ${{ secrets.CODACY_TOKEN }} | |
run: | | |
pip install codacy-coverage | |
python-codacy-coverage -r coverage.xml | |
test-python: | |
needs: [check-style, test-coverage] | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
python-version: [ '3.6', '3.7', '3.8', '3.9', '3.10' ] | |
services: | |
postgres: | |
image: fantix/postgres-ssl:13.1 | |
env: | |
POSTGRES_USER: gino | |
POSTGRES_HOST_AUTH_METHOD: trust | |
ports: | |
- 5432:5432 | |
# needed because the postgres container does not provide a healthcheck | |
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 | |
mysql: | |
image: mysql:8.0 | |
env: | |
MYSQL_ALLOW_EMPTY_PASSWORD: 1 | |
ports: | |
- 3306:3306 | |
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 | |
steps: | |
- name: source code | |
uses: actions/checkout@v2 | |
- name: Set up Python | |
uses: actions/setup-python@v2 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: virtualenv cache | |
uses: syphar/restore-virtualenv@v1.2 | |
- name: pytest | |
env: | |
DB_HOST: localhost | |
DB_USER: gino | |
MYSQL_DB_HOST: 127.0.0.1 | |
MYSQL_DB_USER: root | |
run: pytest | |
test-postgres: | |
needs: [check-style, test-coverage] | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
postgres-version: [ '10.15', '11.10', '12.5' ] | |
services: | |
postgres: | |
image: fantix/postgres-ssl:${{ matrix.postgres-version }} | |
env: | |
POSTGRES_USER: gino | |
POSTGRES_HOST_AUTH_METHOD: trust | |
ports: | |
- 5432:5432 | |
# needed because the postgres container does not provide a healthcheck | |
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 | |
steps: | |
- name: source code | |
uses: actions/checkout@v2 | |
- name: Set up Python | |
uses: actions/setup-python@v2 | |
- name: virtualenv cache | |
uses: syphar/restore-virtualenv@v1.2 | |
- name: pytest | |
env: | |
DB_HOST: localhost | |
DB_USER: gino | |
run: pytest tests/ | |
test-mysql: | |
needs: [check-style, test-coverage] | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
mysql-version: [ '5.7' ] | |
services: | |
mysql: | |
image: mysql:${{ matrix.mysql-version }} | |
env: | |
MYSQL_ALLOW_EMPTY_PASSWORD: 1 | |
ports: | |
- 3306:3306 | |
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 | |
steps: | |
- name: source code | |
uses: actions/checkout@v2 | |
- name: Set up Python | |
uses: actions/setup-python@v2 | |
- name: virtualenv cache | |
uses: syphar/restore-virtualenv@v1.2 | |
- name: pytest | |
env: | |
MYSQL_DB_HOST: 127.0.0.1 | |
MYSQL_DB_USER: root | |
run: pytest mysql_tests/ | |
test-low-deps: | |
needs: [check-style, test-coverage] | |
runs-on: ubuntu-latest | |
services: | |
postgres: | |
image: fantix/postgres-ssl:9.6.20 | |
env: | |
POSTGRES_USER: gino | |
POSTGRES_HOST_AUTH_METHOD: trust | |
ports: | |
- 5432:5432 | |
# needed because the postgres container does not provide a healthcheck | |
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 | |
mysql: | |
image: mysql:5.7 | |
env: | |
MYSQL_ALLOW_EMPTY_PASSWORD: 1 | |
ports: | |
- 3306:3306 | |
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 | |
steps: | |
- name: source code | |
uses: actions/checkout@v2 | |
- name: Set up Python | |
uses: actions/setup-python@v2 | |
with: | |
python-version: 3.6 | |
- name: virtualenv cache | |
uses: syphar/restore-virtualenv@v1.2 | |
- name: Use lowest dependencies versions | |
run: pip install asyncpg==0.18 SQLAlchemy==1.3 pytest | |
- name: pytest | |
env: | |
DB_HOST: localhost | |
DB_USER: gino | |
MYSQL_DB_HOST: 127.0.0.1 | |
MYSQL_DB_USER: root | |
run: pytest tests/ mysql_tests/ | |
update-translations: | |
needs: [check-style, test-coverage] | |
runs-on: ubuntu-latest | |
steps: | |
- name: source code | |
if: github.ref == 'refs/heads/master' | |
uses: actions/checkout@v2 | |
- name: Set up Python | |
if: github.ref == 'refs/heads/master' | |
uses: actions/setup-python@v2 | |
- name: virtualenv cache | |
if: github.ref == 'refs/heads/master' | |
uses: syphar/restore-virtualenv@v1.2 | |
- name: Upload pot to Transifex | |
if: github.ref == 'refs/heads/master' | |
run: | | |
sphinx-intl create-transifexrc | |
make -C docs gettext push | |
env: | |
SPHINXINTL_TRANSIFEX_USERNAME: api | |
SPHINXINTL_TRANSIFEX_PASSWORD: ${{ secrets.TRANSIFEX_TOKEN }} | |
analyze: | |
runs-on: ubuntu-latest | |
steps: | |
- name: source code | |
uses: actions/checkout@v2 | |
- name: Initialize CodeQL | |
uses: github/codeql-action/init@v1 | |
with: | |
languages: python | |
- name: Perform CodeQL Analysis | |
uses: github/codeql-action/analyze@v1 |