# This workflow will install Python dependencies, run tests and lint with a variety of Python versions # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions name: CI on: push: branches: [ $default-branch ] pull_request: branches: [ $default-branch ] env: DEFAULT_PYTHON: 3.7 PLEXAPI_AUTH_SERVER_BASEURL: http://127.0.0.1:32400 PLEX_CONTAINER_TAG: latest jobs: lint-flake8: name: Check flake8 runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v2 with: python-version: ${{ env.DEFAULT_PYTHON }} - name: Install dependencies run: | pip install -U pip pip install -r requirements_dev.txt pip install -e . - name: Lint with flake8 run: | # stop the build if there are Python syntax errors or undefined names flake8 plexapi --count --select=E9,F63,F7,F82 --show-source --statistics # The GitHub editor is 127 chars wide flake8 plexapi --count --max-complexity=12 --max-line-length=127 --statistics pytest-unclaimed: name: pytest ${{ matrix.python-version }} (unclaimed) needs: lint-flake8 runs-on: ubuntu-latest env: TEST_ACCOUNT_ONCE: 1 strategy: matrix: python-version: [3.6] 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 dependencies run: | pip install -U pip pip install -r requirements_dev.txt pip install -e . - name: Bootstrap Plex server run: | python \ -u tools/plex-bootstraptest.py \ --destination plex \ --advertise-ip=127.0.0.1 \ --bootstrap-timeout 540 \ --docker-tag ${{ env.PLEX_CONTAINER_TAG }} \ --unclaimed - name: Main tests with unclaimed server run: | pytest \ -rxXs \ --ignore=tests/test_sync.py \ --tb=native \ --verbose \ --cov=plexapi \ tests - name: Sync tests with unclaimed server env: PLEXAPI_HEADER_PROVIDES: 'controller,sync-target' PLEXAPI_HEADER_PLATFORM: iOS PLEXAPI_HEADER_PLATFORM_VERSION: 11.4.1 PLEXAPI_HEADER_DEVICE: iPhone run: | pytest \ -rxXs \ --tb=native \ --verbose \ --cov=plexapi \ --cov-append \ tests/test_sync.py - name: Upload coverage artifact uses: actions/upload-artifact@v2 with: name: coverage-${{ matrix.python-version }}-unclaimed path: .coverage pytest-claimed: name: pytest (claimed) needs: pytest-unclaimed if: github.ref == 'refs/heads/master' runs-on: ubuntu-latest env: PLEXAPI_AUTH_MYPLEX_USERNAME: ${{ secrets.PLEXAPI_AUTH_MYPLEX_USERNAME }} PLEXAPI_AUTH_MYPLEX_PASSWORD: ${{ secrets.PLEXAPI_AUTH_MYPLEX_PASSWORD }} strategy: matrix: python-version: [3.6] 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 dependencies run: | pip install -U pip pip install -r requirements_dev.txt pip install -e . - name: Bootstrap Plex server run: | python \ -u tools/plex-bootstraptest.py \ --destination plex \ --advertise-ip=127.0.0.1 \ --bootstrap-timeout 540 \ --docker-tag ${{ env.PLEX_CONTAINER_TAG }} - name: Test with claimed Plex server run: | pytest \ -rxXs \ --ignore=tests/test_sync.py \ --tb=native \ --verbose \ --cov=plexapi \ tests - name: Test with claimed Plex server env: PLEXAPI_HEADER_PROVIDES: 'controller,sync-target' PLEXAPI_HEADER_PLATFORM: iOS PLEXAPI_HEADER_PLATFORM_VERSION: 11.4.1 PLEXAPI_HEADER_DEVICE: iPhone run: | pytest \ -rxXs \ --tb=native \ --verbose \ --cov=plexapi \ --cov-append \ tests/test_sync.py - name: Unlink PMS from MyPlex account run: python -u tools/plex-teardowntest.py - name: Upload coverage artifact uses: actions/upload-artifact@v2 with: name: coverage-${{ matrix.python-version }}-claimed path: .coverage coverage: name: Process test coverage runs-on: ubuntu-latest needs: pytest-unclaimed strategy: matrix: python-version: [3.7] steps: - name: Check out code from GitHub uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | pip install -U pip pip install coverage - name: Download all coverage artifacts uses: actions/download-artifact@v2 - name: Combine coverage results run: | coverage combine coverage*/.coverage* coverage report --fail-under=50 coverage xml - name: Upload coverage to Codecov uses: codecov/codecov-action@v1