diff --git a/.github/workflows/automerge.yml b/.github/workflows/automerge.yml new file mode 100644 index 00000000..6cc368de --- /dev/null +++ b/.github/workflows/automerge.yml @@ -0,0 +1,41 @@ +name: Automerge Pull Requests +on: + pull_request: + types: + - labeled + - unlabeled + - synchronize + - opened + - edited + - ready_for_review + - reopened + - unlocked + pull_request_review: + types: + - submitted + check_suite: + types: + - completed + status: {} + +jobs: + automerge: + name: Automerge Dependabot + runs-on: ubuntu-latest + if: github.actor == 'dependabot[bot]' || github.actor == 'dependabot-preview[bot]' + steps: + - name: 'Wait for status checks' + id: waitforstatuschecks + uses: "WyriHaximus/github-action-wait-for-status@v1.2" + with: + ignoreActions: Automerge Dependabot + checkInterval: 13 + env: + GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" + - name: Merge pull requests + uses: pascalgn/automerge-action@v0.12.0 + if: steps.waitforstatuschecks.outputs.status == 'success' + env: + MERGE_METHOD: "squash" + MERGE_LABELS: "" + GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..79c14442 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,26 @@ +name: Test build package + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + name: Build Python 🐍 distributions 📦 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@master + - name: Set up Python 3.9 + uses: actions/setup-python@v2 + with: + python-version: 3.9 + - name: Install build tools + run: pip install pep517 + - name: Build a wheel package + run: python -m pep517.build . + - name: Install twine to check the package + run: pip install twine + - name: Check the package + run: twine check dist/* diff --git a/.github/workflows/linters.yml b/.github/workflows/linters.yml new file mode 100644 index 00000000..90ccb6bb --- /dev/null +++ b/.github/workflows/linters.yml @@ -0,0 +1,52 @@ +name: Run linters + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + pydocstyle: + runs-on: ubuntu-latest + strategy: + fail-fast: false + + steps: + - uses: actions/checkout@v2 + - name: Set up Python 3.8 + uses: actions/setup-python@v2 + with: + python-version: 3.8 + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements-lint.txt + - name: Run pydocstyle + run: | + pydocstyle src/ tests/ + + pycodestyle: + runs-on: ubuntu-latest + strategy: + fail-fast: false + + steps: + - uses: actions/checkout@v2 + - name: Set up Python 3.8 + uses: actions/setup-python@v2 + with: + python-version: 3.8 + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements-lint.txt + - name: Run pydocstyle + run: | + pycodestyle src/ tests/ +# black: +# runs-on: ubuntu-latest +# steps: +# - uses: actions/checkout@v2 +# - uses: actions/setup-python@v2 +# - uses: psf/black@stable diff --git a/.github/workflows/pypi.yml b/.github/workflows/pypi.yml new file mode 100644 index 00000000..fed3bbc2 --- /dev/null +++ b/.github/workflows/pypi.yml @@ -0,0 +1,29 @@ +name: Package and publish +on: + push: + tags: + - v* +jobs: + build-n-publish: + name: Build and publish Python 🐍 distributions 📦 to PyPI + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@master + - name: Set up Python 3.9 + uses: actions/setup-python@v2 + with: + python-version: 3.9 + - name: Install build tools + run: pip install pep517 + - name: Build a wheel package + run: python -m pep517.build . +# - name: Publish distribution 📦 to Test PyPI +# uses: pypa/gh-action-pypi-publish@master +# with: +# password: ${{ secrets.test_pypi_password }} +# repository_url: https://test.pypi.org/legacy/ + - name: Publish distribution 📦 to PyPI + uses: pypa/gh-action-pypi-publish@master + with: + password: ${{ secrets.pypi_password }} + verbose: true diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 00000000..7069059d --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,54 @@ +name: Run tests + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + tests: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python-version: [3.7, 3.8, 3.9, pypy3] + postgres-version: [9.5, 9.6, 10, 11, 12, 12] + env: + OS: ubuntu-latest + PYTHON: ${{ matrix.python-version }} + POSTGRES: ${{ matrix.postgres-version }} + + steps: + - uses: actions/checkout@v2 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Install postgresql + run: | + sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg ${{ matrix.postgres-version }}" > /etc/apt/sources.list.d/pgdg.list' + sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' + wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - + sudo sh -c 'echo "Package: *" > /etc/apt/preferences.d/psql' + sudo sh -c 'echo "Pin: release c=${{ matrix.poxtgresql-version }}" >> /etc/apt/preferences.d/psql' + sudo sh -c 'echo "Pin-Priority: 1000" >> /etc/apt/preferences.d/psql' + sudo apt update + sudo apt install -y postgresql-${{ matrix.postgres-version }} libpq + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements-test.txt + - name: Run test + run: | + py.test -n 0 --cov-report=xml + - name: Run xdist test + run: | + py.test -n 1 --cov-report=xml:coverage-xdist.xml + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v1 + with: + file: ./coverage.xml ./coverage-xdist.xml + flags: unittests + env_vars: OS,PYTHON + fail_ci_if_error: true diff --git a/.travis.yml b/.travis.yml index 9452c79e..3dcd8e8c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,10 @@ dist: bionic language: python python: +- 3.9 - 3.8 - 3.7 - 3.6 -- 3.9 - nightly - pypy3 # blocklist branches diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..a6e8882c --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,8 @@ +[build-system] +requires = ["setuptools >= 40.6.0", "wheel"] +build-backend = "setuptools.build_meta" + +[tool.black] +line-length = 100 +target-version = ['py38'] +include = '.*\.pyi?$'