streamlink/.github/workflows/main.yml

153 lines
4.6 KiB
YAML

name: Test, build and deploy
on:
push:
branches-ignore:
- 'automated/**'
tags:
- '**'
pull_request: {}
schedule:
- cron: '0 0 * * *'
env:
STREAMLINK_DIST_DIR: ${{ github.workspace }}/dist
SIGNING_KEY_ID: 2E390FA0
SIGNING_KEY_FILE: ${{ github.workspace }}/signing.key
jobs:
test:
name: Test
strategy:
fail-fast: false
# please remember to change the `codecov.notify.after_n_builds` value in .codecov.yml
# when changing the build matrix and changing the number of test runners
matrix:
os:
- ubuntu-20.04
- windows-latest
python:
- "3.7"
- "3.8"
- "3.9"
- "3.10"
- "3.11"
# include:
# - python: "3.12-dev"
# os: ubuntu-20.04
# continue: true
# - python: "3.12-dev"
# os: windows-latest
# continue: true
runs-on: ${{ matrix.os }}
timeout-minutes: 60
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 300
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python }}
- name: Install dependencies
continue-on-error: ${{ matrix.continue || false }}
run: bash ./script/install-dependencies.sh
- name: Test
continue-on-error: ${{ matrix.continue || false }}
run: pytest -r a --cov --cov-branch --cov-report=xml --durations 10
- name: Build shell completions
continue-on-error: ${{ matrix.continue || false }}
run: bash ./script/build-shell-completions.sh
- name: Upload coverage data
if: github.event_name != 'schedule'
continue-on-error: ${{ matrix.continue || false }}
uses: codecov/codecov-action@v3
with:
name: os:${{ matrix.os }} py:${{ matrix.python }}
documentation:
name: Test docs
if: github.event_name != 'schedule'
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 300
- name: Fetch tags
run: git fetch --depth=300 origin +refs/tags/*:refs/tags/*
- uses: actions/setup-python@v4
with:
python-version: "3.10"
- name: Install dependencies
run: |
./script/install-dependencies.sh
python -m pip install -r docs-requirements.txt
- name: Build
run: make --directory=docs html man
deploy-documentation:
name: Deploy docs
if: github.repository == 'streamlink/streamlink' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/'))
needs:
- test
- documentation
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 300
- name: Fetch tags
run: git fetch --depth=300 origin +refs/tags/*:refs/tags/*
- uses: actions/setup-python@v4
with:
python-version: "3.10"
- name: Install dependencies
run: |
./script/install-dependencies.sh
python -m pip install -r docs-requirements.txt
- name: Build
run: make --directory=docs html
- name: Deploy
env:
DOCS_DEPLOY_TOKEN: ${{ secrets.DOCS_DEPLOY_TOKEN }}
run: ./script/deploy-docs.sh
release:
name: New release
if: github.repository == 'streamlink/streamlink' && github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
needs:
- deploy-documentation
runs-on: ubuntu-20.04
permissions:
contents: write
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Fetch tags
run: git fetch --depth=300 origin +refs/tags/*:refs/tags/*
- uses: actions/setup-python@v4
with:
python-version: "3.10"
- name: Install dependencies
run: |
./script/install-dependencies.sh
python -m pip install -r docs-requirements.txt
python -m pip install --upgrade Jinja2 wheel twine
- name: Build shell completions
run: ./script/build-shell-completions.sh
- name: Build man page
run: make --directory=docs man
- name: sdist and wheels
env:
RELEASE_KEY_PASSPHRASE: ${{ secrets.RELEASE_KEY_PASSPHRASE }}
run: ./script/build-and-sign.sh
- name: Github release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: ./script/github-release.py "${STREAMLINK_DIST_DIR}"/*.tar.gz{,.asc}
- name: PyPI release
env:
PYPI_USER: streamlink
PYPI_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
run: ./script/deploy-pypi.sh