Merge pull request #6489 from cylc/8.3.x-sync #8775
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: fast tests | |
on: | |
pull_request: | |
workflow_dispatch: | |
push: | |
branches: | |
- master | |
- '8.*.x' | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
test: | |
runs-on: ${{ matrix.os }} | |
timeout-minutes: 20 | |
strategy: | |
fail-fast: false # don't stop on first failure | |
matrix: | |
os: ['ubuntu-latest'] | |
python-version: ['3.8', '3.10', '3.11', '3'] | |
include: | |
- os: 'ubuntu-22.04' | |
python-version: '3.7' | |
- os: 'macos-latest' | |
python-version: '3.9' # oldest supported version | |
# non-utc timezone test | |
- os: 'ubuntu-latest' | |
python-version: '3.9' # not the oldest, not the most recent version | |
time-zone: 'XXX-09:35' | |
env: | |
TZ: ${{ matrix.time-zone }} | |
PYTEST_ADDOPTS: --cov --cov-append -n 5 --color=yes | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Configure Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Apt-Get Install | |
if: startsWith(matrix.os, 'ubuntu') | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y sqlite3 | |
- name: Patch DNS | |
uses: cylc/release-actions/patch-dns@v1 | |
- name: Install | |
run: | | |
pip install -e ."[all]" | |
- name: Configure git # Needed by the odd test | |
uses: cylc/release-actions/configure-git@v1 | |
- name: Unit Tests | |
timeout-minutes: 5 | |
run: | | |
pytest cylc/flow tests/unit | |
- name: Integration Tests | |
timeout-minutes: 5 | |
run: | | |
pytest tests/integration --ignore tests/integration/tui/ | |
- name: Tui Integration Tests | |
timeout-minutes: 5 | |
# Re-run failed Tui tests as they can be flaky | |
run: | | |
pytest tests/integration/tui || pytest tests/integration/tui --last-failed | |
- name: Upload failed tests artifact | |
if: failure() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: cylc-run (${{ matrix.os }} py-${{ matrix.python-version }}) | |
path: ~/cylc-run/ | |
include-hidden-files: true | |
- name: Coverage report | |
run: | | |
coverage xml | |
coverage report | |
- name: Upload coverage artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: coverage_${{ matrix.os }}_py-${{ matrix.python-version }} | |
path: coverage.xml | |
retention-days: 7 | |
lint: | |
runs-on: 'ubuntu-latest' | |
timeout-minutes: 10 | |
steps: | |
- name: Apt-Get Install | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y shellcheck | |
- name: Checkout | |
uses: actions/checkout@v4 | |
# note: exclude python 3.10+ from mypy checks as these produce false | |
# positives in installed libraries for python 3.7 | |
- name: Configure Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: 3.9 | |
- name: Install | |
run: | | |
pip install -e ."[tests]" | |
- name: Flake8 | |
run: flake8 | |
- name: Bandit | |
run: | | |
bandit -r --ini .bandit cylc/flow | |
- name: Shellchecker | |
run: etc/bin/shellchecker | |
- name: MyPy | |
run: mypy | |
- name: Towncrier - draft changelog | |
uses: cylc/release-actions/towncrier-draft@v1 | |
- name: Linkcheck | |
run: pytest -m linkcheck --dist=load --color=yes -n 10 tests/unit/test_links.py | |
codecov: | |
needs: test | |
runs-on: ubuntu-latest | |
timeout-minutes: 2 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Download coverage artifacts | |
uses: actions/download-artifact@v4 | |
- name: Codecov upload | |
uses: codecov/codecov-action@v5 | |
with: | |
name: ${{ github.workflow }} | |
flags: fast-tests | |
fail_ci_if_error: true | |
verbose: true | |
# Token not required for public repos, but avoids upload failure due | |
# to rate-limiting (but not for PRs opened from forks) | |
token: ${{ secrets.CODECOV_TOKEN }} |