Skip to content

CI

CI #277

Workflow file for this run

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