StellarCN/py-stellar-base

View on GitHub
.github/workflows/continuous-integration-workflow.yml

Summary

Maintainability
Test Coverage
name: Test and Deploy

on:
  push:
  pull_request:
  release:
    types:
      - created

jobs:
  pre-commit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v4
        with:
          python-version: '3.11'
      - uses: pre-commit/action@v3.0.0

  test:
    needs: pre-commit
    strategy:
      fail-fast: false
      matrix:
        platform: [
          { os: 'ubuntu-latest',  python-version: '3.8' },
          { os: 'ubuntu-latest',  python-version: '3.9' },
          { os: 'ubuntu-latest',  python-version: '3.10' },
          { os: 'ubuntu-latest',  python-version: '3.11' },
          { os: 'ubuntu-latest',  python-version: '3.12' },
          { os: 'ubuntu-latest',  python-version: 'pypy3.8' },
          { os: 'ubuntu-latest',  python-version: 'pypy3.9' },
          { os: 'ubuntu-latest',  python-version: 'pypy3.10' },
          { os: 'macos-latest',  python-version: '3.8' },
          { os: 'macos-latest',  python-version: '3.9' },
          { os: 'macos-latest',  python-version: '3.10' },
          { os: 'macos-latest',  python-version: '3.11' },
          { os: 'macos-latest',  python-version: '3.12' },
          { os: 'macos-latest',  python-version: 'pypy3.8' },
          { os: 'macos-latest',  python-version: 'pypy3.9' },
          { os: 'macos-latest',  python-version: 'pypy3.10' },
          { os: 'windows-latest',  python-version: '3.8' },
          { os: 'windows-latest',  python-version: '3.9' },
          { os: 'windows-latest',  python-version: '3.10' },
          { os: 'windows-latest',  python-version: '3.11' },
          { os: 'windows-latest',  python-version: '3.12' },
        ]
        # https://endoflife.date/python
    runs-on: ${{ matrix.platform.os }}
    steps:
      - uses: actions/checkout@v3

      - name: Wake up httpbin server
        run: |
          curl https://httpbinx.fly.dev/ip

      - name: Install poetry
        run: pipx install poetry

      - name: Setup Python ${{ matrix.platform.python-version }} on ${{ matrix.platform.os }}
        uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.platform.python-version }}

      - name: Install dependencies
        run: |
          poetry install --extras 'aiohttp'

      - name: Echo installed packages
        run: |
          poetry show

      - name: Test with pytest
        run: poetry run pytest -v -rs tests --runslow --cov=./ --cov-report=xml

      - name: Upload coverage to Codecov
        if: matrix.platform.python-version == '3.11' && matrix.platform.os == 'ubuntu-latest'
        uses: codecov/codecov-action@v3
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          file: ./coverage.xml
          flags: unittests
          name: codecov-umbrella
          fail_ci_if_error: true

  deploy:
    needs: test
    runs-on: ubuntu-latest
    if: github.event_name == 'release' && github.event.action == 'created'
    permissions:
      id-token: write
    steps:
      - uses: actions/checkout@v3

      - name: Setup Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.11'

      - name: Install poetry
        run: pipx install poetry

      - name: Build Packages
        run: poetry build

      - name: Publish package distributions to PyPI
        uses: pypa/gh-action-pypi-publish@release/v1