resolve CI status [wip] #1132
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: CI testing | |
# see: https://help.github.com/en/actions/reference/events-that-trigger-workflows | |
on: # Trigger the workflow on push or pull request, but only for the master branch | |
push: | |
branches: [master] | |
pull_request: {} | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }}-${{ github.head_ref }} | |
cancel-in-progress: ${{ ! (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/release/')) }} | |
defaults: | |
run: | |
shell: bash | |
jobs: | |
pytester: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: ["ubuntu-22.04", "macOS-13"] | |
python-version: ["3.8", "3.9", "3.10"] | |
requires: ["latest"] # + "oldest" | |
include: | |
- { os: 'windows-2022', python-version: "3.9" } | |
- { os: 'ubuntu-20.04', python-version: "3.8", requires: "oldest" } | |
- { os: 'macOS-13', python-version: "3.8", requires: "oldest" } | |
env: | |
FREEZE_REQUIREMENTS: 1 | |
TORCH_URL: "https://download.pytorch.org/whl/cpu/torch_stable.html" | |
TRANSFORMERS_CACHE: _hf_cache | |
# Timeout: https://stackoverflow.com/a/59076067/4521646 | |
# the reason for high number is MUCH slower tests on macOS and py3.8 | |
timeout-minutes: 50 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
cache: "pip" | |
- name: Set min. dependencies | |
if: matrix.requires == 'oldest' | |
run: | | |
import os, glob | |
ls = ['requirements.txt'] + glob.glob(os.path.join("requirements", "*.txt")) | |
for fpath in ls: | |
req = open(fpath).read().replace('>=', '==') | |
open(fpath, 'w').write(req) | |
shell: python | |
- name: Setup macOS | |
if: runner.os == 'macOS' | |
run: | | |
brew update | |
brew install swig | |
- name: Install package | |
run: | | |
python -m pip install "pip==22.3.1" # todo: drop after resolving extras | |
pip install -e . -U --prefer-binary -f ${TORCH_URL} | |
pip list | |
- name: Test Package [only] | |
working-directory: ./src | |
run: | | |
pip install "coverage[toml]" pytest -q | |
# TODO: package shall be fine to run full without any ignores | |
python -m pytest . \ | |
--ignore=pl_bolts/datamodules \ | |
--ignore=pl_bolts/datasets \ | |
--ignore=pl_bolts/models/rl | |
- name: Install dependencies | |
run: | | |
pip install -r requirements/devel.txt -U -q -f ${TORCH_URL} | |
pip list | |
- name: Cache datasets | |
id: cache-datasets | |
uses: actions/cache@v4 | |
with: | |
path: ./_datasets | |
enableCrossOsArchive: true | |
# bump this date if you need update cache | |
key: datasets-20230630 | |
- name: Download ROMs | |
if: steps.cache-datasets.outputs.cache-hit != 'true' | |
continue-on-error: true | |
uses: ./.github/actions/download-ROM | |
- name: Init ROMs | |
continue-on-error: true | |
working-directory: _datasets/ | |
run: python -m atari_py.import_roms ROMS | |
- name: HF cache | |
uses: actions/cache@v4 | |
with: | |
path: ${{ env.TRANSFORMERS_CACHE }} | |
key: cache-transformers | |
- name: Testing | |
run: python -m pytest tests -v --cov=pl_bolts --timeout=200 | |
- name: Statistics | |
run: | | |
coverage report | |
coverage xml | |
- name: Upload coverage to Codecov | |
uses: codecov/codecov-action@v4 | |
if: always() | |
# see: https://github.com/actions/toolkit/issues/399 | |
continue-on-error: true | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
file: coverage.xml | |
flags: cpu,pytest | |
env_vars: OS,PYTHON | |
name: codecov-umbrella | |
fail_ci_if_error: false | |
testing-guardian: | |
runs-on: ubuntu-latest | |
needs: pytester | |
if: always() | |
steps: | |
- run: echo "${{ needs.pytester.result }}" | |
- name: failing... | |
if: needs.pytester.result == 'failure' | |
run: exit 1 | |
- name: cancelled or skipped... | |
if: contains(fromJSON('["cancelled", "skipped"]'), needs.pytester.result) | |
timeout-minutes: 1 | |
run: sleep 90 |