Skip to content

Test

Test #13

Workflow file for this run

name: Test
on:
pull_request:
workflow_dispatch:
push:
branches:
- master
- '*.*.x'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
FORCE_COLOR: 2
jobs:
test:
runs-on: ${{ matrix.os }}
timeout-minutes: 15
strategy:
fail-fast: false
matrix:
os: ['ubuntu-latest']
python: ['3.8', '3.9']
include:
- os: 'macos-latest'
python: '3.9'
env:
PYTEST_ADDOPTS: --cov --color=yes
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Patch DNS
uses: cylc/release-actions/patch-dns@v1
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python }}
- name: Brew Install
if: startsWith(matrix.os, 'macos')
run: |
# install system deps
brew update
brew install bash coreutils
# add GNU coreutils to the user PATH
# (see instructions in brew install output)
echo \
"$(brew --prefix)/opt/coreutils/libexec/gnubin" \
>> "${GITHUB_PATH}"
# add coreutils to the bashrc too (for jobs)
cat >> "${HOME}/.bashrc" <<__HERE__
PATH="$(brew --prefix)/opt/coreutils/libexec/gnubin:$PATH"
export PATH
__HERE__
- name: install cylc-flow
uses: cylc/release-actions/install-cylc-components@v1
with:
cylc_flow: true
cylc_flow_opts: ''
- name: install cylc-uiserver
run: pip install -e .[all]
- name: Style test
if: startsWith(matrix.os, 'ubuntu')
run: flake8
- name: Type checking
if: startsWith(matrix.os, 'ubuntu')
run: mypy
- name: Check changelog
uses: cylc/release-actions/towncrier-draft@v1
- name: Test
run: pytest
- name: Coverage report
run: |
coverage xml --ignore-errors
coverage report
- name: Upload coverage artifact
uses: actions/upload-artifact@v4
with:
name: coverage_${{ matrix.os }}_py-${{ matrix.python }}
path: coverage.xml
retention-days: 4
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@v4
with:
name: ${{ github.workflow }}
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 }}