| name: tests |
| on: |
| push: |
| branches: [master] |
| pull_request: |
| branches: [master] |
| jobs: |
| tests: |
| runs-on: ${{ matrix.os }} |
| strategy: |
| fail-fast: false |
| matrix: |
| python-version: ["3.9", "3.10", "3.11", "3.12"] |
| os: [ubuntu-latest, macOS-latest, windows-latest] |
| |
| steps: |
| - name: Checkout |
| uses: actions/checkout@v2 |
| |
| - name: Set up Python ${{ matrix.python-version }} |
| uses: actions/setup-python@v2 |
| with: |
| python-version: ${{ matrix.python-version }} |
| |
| - name: Set up PostgreSQL on Linux |
| if: startsWith(runner.os, 'linux') |
| run: | |
| sudo systemctl start postgresql.service |
| pg_isready |
| sudo -u postgres psql --command="ALTER USER postgres WITH PASSWORD '123456'" --command="\du" |
| |
| - name: Setup PostgreSQL on macOS |
| if: startsWith(runner.os, 'macos') |
| run: | |
| brew install postgresql@14 |
| brew services start postgresql@14 |
| echo "Check PostgreSQL service is running" |
| i=10 |
| COMMAND='pg_isready' |
| while [ $i -gt 0 ]; do |
| echo "Check PostgreSQL service status" |
| eval $COMMAND && break |
| ((i--)) |
| if [ $i == 0 ]; then |
| echo "PostgreSQL service not ready, all attempts exhausted" |
| exit 1 |
| fi |
| echo "PostgreSQL service not ready, wait 10 more sec, attempts left: $i" |
| sleep 10 |
| done |
| psql --command="CREATE USER postgres PASSWORD '123456'" --command="\du" postgres |
| |
| - name: Start PostgreSQL on Windows |
| if: startsWith(runner.os, 'windows') |
| run: | |
| $pgService = Get-Service -Name postgresql* |
| Set-Service -InputObject $pgService -Status running -StartupType automatic |
| Start-Process -FilePath "$env:PGBIN\pg_isready" -Wait -PassThru |
| & $env:PGBIN\psql --command="ALTER USER postgres WITH PASSWORD '123456'" --command="\du" |
| |
| - name: Upgrade install tools |
| run: python -m pip install --upgrade setuptools wheel |
| |
| - name: Install dependencies |
| run: | |
| pip install -r requirements.txt |
| |
| - name: Run tests |
| run: | |
| python -m unittest discover -s tests -t tests |
| |
| coveralls: |
| runs-on: ubuntu-latest |
| steps: |
| - name: Checkout |
| uses: actions/checkout@v2 |
| |
| - name: Set up Python |
| uses: actions/setup-python@v2 |
| with: |
| python-version: 3.9 |
| |
| - name: Install dependencies |
| run: | |
| pip install -r requirements.txt |
| pip install coveralls |
| pip install coverage |
| |
| - name: Set up PostgreSQL on Linux |
| if: startsWith(runner.os, 'linux') |
| run: | |
| sudo systemctl start postgresql.service |
| pg_isready |
| sudo -u postgres psql --command="ALTER USER postgres WITH PASSWORD '123456'" --command="\du" |
| |
| - name: Run tests |
| run: coverage run -m unittest discover -s tests -t tests |
| |
| - name: Upload coverage data to coveralls.io |
| run: coveralls --service=github |
| env: |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| |
| release: |
| name: Release |
| runs-on: ubuntu-latest |
| needs: [ tests, coveralls ] |
| steps: |
| - name: Checkout |
| uses: actions/checkout@v2 |
| with: |
| fetch-depth: 0 |
| |
| - name: Setup Node.js |
| uses: actions/setup-node@v1 |
| with: |
| node-version: '20' |
| |
| - name: Setup |
| run: npm install -g semantic-release @semantic-release/github @semantic-release/changelog @semantic-release/commit-analyzer @semantic-release/git @semantic-release/release-notes-generator semantic-release-pypi |
| |
| - name: Set up python |
| uses: actions/setup-python@v2 |
| with: |
| python-version: 3.9 |
| |
| - name: Install setuptools |
| run: python -m pip install --upgrade setuptools wheel twine |
| |
| - name: Release |
| env: |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }} |
| run: npx semantic-release |