Skip to content

Merge pull request #6489 from cylc/8.3.x-sync #8775

Merge pull request #6489 from cylc/8.3.x-sync

Merge pull request #6489 from cylc/8.3.x-sync #8775

Workflow file for this run

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 }}