CI #284
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/[email protected] | |
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/[email protected] | |
- 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/[email protected] | |
- 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/[email protected] | |
- 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/[email protected] | |
- 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/[email protected] | |
- 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/[email protected] | |
- 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/[email protected] | |
- 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 |