Skip to content

Pyright workflow test #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 10 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
316 changes: 165 additions & 151 deletions .github/workflows/ci-testing.yml
Original file line number Diff line number Diff line change
@@ -1,151 +1,165 @@
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:
branches:
- master
# Trigger the workflow on push or pull request
# on: [push, pull_request]

jobs:
build:

runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
# max-parallel: 6
matrix:
os: [ubuntu-18.04, windows-2019, macOS-10.15]
python-version: [3.6, 3.7, 3.8]
requires: ['minimal', 'latest']
exclude:
# excludes PT 1.3 as it is missing on pypi
- python-version: 3.8
requires: 'minimal'
# TODO: temporary fix till hanging jobs on macOS for py38 is resolved
- python-version: 3.8
os: macOS-10.15

# Timeout: https://stackoverflow.com/a/59076067/4521646
timeout-minutes: 15
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v1
with:
python-version: ${{ matrix.python-version }}

# Github Actions: Run step on specific OS: https://stackoverflow.com/a/57948488/4521646
- name: Setup macOS
if: runner.os == 'macOS'
run: |
brew install libomp # https://github.com/pytorch/pytorch/issues/20030
brew install openmpi # Horovod on macOS requires OpenMPI, Gloo not currently supported

- name: Setup Windows
if: runner.os == 'windows'
run: |
python -c "lines = [line for line in open('requirements-extra.txt').readlines() if not line.startswith('horovod')] ; open('requirements-extra.txt', 'w').writelines(lines)"

# TODO: remove after https://github.com/pytorch/pytorch/issues/32186 is resolved
- name: Setup Windows on Latest
if: runner.os == 'windows' && matrix.requires == 'latest'
run: |
python -c "req = open('requirements.txt').read().replace('torch>=1.3', 'torch<1.5') ; open('requirements.txt', 'w').write(req)"

# versions <= 1.3 may have issues on mac with some BLAS ops due to missing mkl (https://github.com/pytorch/pytorch/issues/18996)
- name: Setup MacOS Minimal
if: runner.os == 'macOS' && matrix.requires == 'minimal'
run : |
python -c "req = open('requirements.txt').read().replace('torch>=1.3', 'torch>=1.4') ; open('requirements.txt', 'w').write(req)"

- name: Set min. dependencies
if: matrix.requires == 'minimal'
run: |
python -c "req = open('requirements.txt').read().replace('>', '=') ; open('requirements.txt', 'w').write(req)"
python -c "req = open('requirements-extra.txt').read().replace('>', '=') ; open('requirements-extra.txt', 'w').write(req)"

# Note: This uses an internal pip API and may not always work
# https://github.com/actions/cache/blob/master/examples.md#multiple-oss-in-a-workflow
- name: Get pip cache
id: pip-cache
run: |
python -c "from pip._internal.locations import USER_CACHE_DIR; print('::set-output name=dir::' + USER_CACHE_DIR)"

- name: Cache pip
uses: actions/cache@v1
with:
path: ${{ steps.pip-cache.outputs.dir }}
key: ${{ runner.os }}-${{ matrix.python-version }}-${{ matrix.requires }}-pip-${{ hashFiles('requirements.txt') }}-${{ hashFiles('requirements-extra.txt') }}
restore-keys: |
${{ runner.os }}-${{ matrix.python-version }}-${{ matrix.requires }}-pip-

- name: Install dependencies
run: |
# python -m pip install --upgrade --user pip
pip install -r requirements.txt -U -f https://download.pytorch.org/whl/torch_stable.html -q
HOROVOD_BUILD_ARCH_FLAGS="-mfma" pip install -r ./tests/requirements-devel.txt -q
# pip install tox coverage
python --version
pip --version
pip list
shell: bash

- name: Reinstall Horovod if necessary
if: runner.os != 'windows' && matrix.python-version != '3.8'
run: |
HOROVOD_BUILT=$(python -c "import horovod.torch; horovod.torch.nccl_built(); print('SUCCESS')")
if [[ $HOROVOD_BUILT != "SUCCESS" ]]; then
pip uninstall -y horovod
HOROVOD_BUILD_ARCH_FLAGS="-mfma" pip install --no-cache-dir $(grep "horovod" requirements-extra.txt)
fi
horovodrun --check-build
shell: bash

- name: Cache datasets
uses: actions/cache@v1
with:
path: tests/Datasets # This path is specific to Ubuntu
# Look to see if there is a cache hit for the corresponding requirements file
key: mnist-dataset

- name: Tests
# env:
# TOXENV: py${{ matrix.python-version }}
run: |
# tox --sitepackages
# flake8 .
coverage run --source pytorch_lightning -m py.test pytorch_lightning tests -v --junitxml=junit/test-results-${{ runner.os }}-${{ matrix.python-version }}-${{ matrix.requires }}.xml
coverage report

- name: Upload pytest test results
uses: actions/upload-artifact@master
with:
name: pytest-results-${{ runner.os }}-${{ matrix.python-version }}-${{ matrix.requires }}
path: junit/test-results-${{ runner.os }}-${{ matrix.python-version }}-${{ matrix.requires }}.xml
# Use always() to always run this step to publish test results when there are test failures
if: always()

- name: Package Setup
run: |
check-manifest
python setup.py check --metadata --strict
python setup.py sdist
twine check dist/*
#- name: Try install package
# if: ! startsWith(matrix.os, 'windows')
# run: |
# virtualenv vEnv ; source vEnv/bin/activate
# pip install --editable . ; cd .. & python -c "import pytorch_lightning ; print(pytorch_lightning.__version__)"
# deactivate ; rm -rf vEnv

- name: Statistics
if: success()
run: |
coverage report
# 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:
# branches:
# - master
# # Trigger the workflow on push or pull request
# # on: [push, pull_request]

# jobs:
# build:

# runs-on: ${{ matrix.os }}
# strategy:
# fail-fast: false
# # max-parallel: 6
# matrix:
# # os: [ubuntu-18.04, windows-2019, macOS-10.15]
# os: [ubuntu-18.04]
# # python-version: [3.6, 3.7, 3.8]
# python-version: [3.7]
# # requires: ['minimal', 'latest']
# requires: ['minimal']
# # exclude:
# # # excludes PT 1.3 as it is missing on pypi
# # - python-version: 3.8
# # requires: 'minimal'
# # # TODO: temporary fix till hanging jobs on macOS for py38 is resolved
# # - python-version: 3.8
# # os: macOS-10.15

# # Timeout: https://stackoverflow.com/a/59076067/4521646
# timeout-minutes: 15
# steps:
# - uses: actions/checkout@v2
# - name: Set up Python ${{ matrix.python-version }}
# uses: actions/setup-python@v1
# with:
# python-version: ${{ matrix.python-version }}

# # Github Actions: Run step on specific OS: https://stackoverflow.com/a/57948488/4521646
# - name: Setup macOS
# if: runner.os == 'macOS'
# run: |
# brew install libomp # https://github.com/pytorch/pytorch/issues/20030
# brew install openmpi # Horovod on macOS requires OpenMPI, Gloo not currently supported

# - name: Setup Windows
# if: runner.os == 'windows'
# run: |
# python -c "lines = [line for line in open('requirements-extra.txt').readlines() if not line.startswith('horovod')] ; open('requirements-extra.txt', 'w').writelines(lines)"

# # TODO: remove after https://github.com/pytorch/pytorch/issues/32186 is resolved
# - name: Setup Windows on Latest
# if: runner.os == 'windows' && matrix.requires == 'latest'
# run: |
# python -c "req = open('requirements.txt').read().replace('torch>=1.3', 'torch<1.5') ; open('requirements.txt', 'w').write(req)"

# # versions <= 1.3 may have issues on mac with some BLAS ops due to missing mkl (https://github.com/pytorch/pytorch/issues/18996)
# - name: Setup MacOS Minimal
# if: runner.os == 'macOS' && matrix.requires == 'minimal'
# run : |
# python -c "req = open('requirements.txt').read().replace('torch>=1.3', 'torch>=1.4') ; open('requirements.txt', 'w').write(req)"

# - name: Set min. dependencies
# if: matrix.requires == 'minimal'
# run: |
# python -c "req = open('requirements.txt').read().replace('>', '=') ; open('requirements.txt', 'w').write(req)"
# python -c "req = open('requirements-extra.txt').read().replace('>', '=') ; open('requirements-extra.txt', 'w').write(req)"

# # Note: This uses an internal pip API and may not always work
# # https://github.com/actions/cache/blob/master/examples.md#multiple-oss-in-a-workflow
# - name: Get pip cache
# id: pip-cache
# run: |
# python -c "from pip._internal.locations import USER_CACHE_DIR; print('::set-output name=dir::' + USER_CACHE_DIR)"

# - name: Cache pip
# uses: actions/cache@v1
# with:
# path: ${{ steps.pip-cache.outputs.dir }}
# key: ${{ runner.os }}-${{ matrix.python-version }}-${{ matrix.requires }}-pip-${{ hashFiles('requirements.txt') }}-${{ hashFiles('requirements-extra.txt') }}
# restore-keys: |
# ${{ runner.os }}-${{ matrix.python-version }}-${{ matrix.requires }}-pip-

# - name: Install dependencies
# run: |
# # python -m pip install --upgrade --user pip
# pip install -r requirements.txt -U -f https://download.pytorch.org/whl/torch_stable.html -q
# HOROVOD_BUILD_ARCH_FLAGS="-mfma" pip install -r ./tests/requirements-devel.txt -q
# # pip install tox coverage
# python --version
# pip --version
# pip list
# shell: bash

# - name: Reinstall Horovod if necessary
# if: runner.os != 'windows' && matrix.python-version != '3.8'
# run: |
# HOROVOD_BUILT=$(python -c "import horovod.torch; horovod.torch.nccl_built(); print('SUCCESS')")
# if [[ $HOROVOD_BUILT != "SUCCESS" ]]; then
# pip uninstall -y horovod
# HOROVOD_BUILD_ARCH_FLAGS="-mfma" pip install --no-cache-dir $(grep "horovod" requirements-extra.txt)
# fi
# horovodrun --check-build
# shell: bash

# - name: Setup node
# uses: actions/setup-node@v1

# - name: Install pyright
# run: |
# npm install pyright

# - name: Run python type checking
# run: |
# $(npm bin)/pyright

# - name: Cache datasets
# uses: actions/cache@v1
# with:
# path: tests/Datasets # This path is specific to Ubuntu
# # Look to see if there is a cache hit for the corresponding requirements file
# key: mnist-dataset

# - name: Tests
# # env:
# # TOXENV: py${{ matrix.python-version }}
# run: |
# # tox --sitepackages
# # flake8 .
# coverage run --source pytorch_lightning -m py.test pytorch_lightning tests -v --junitxml=junit/test-results-${{ runner.os }}-${{ matrix.python-version }}-${{ matrix.requires }}.xml
# coverage report

# - name: Upload pytest test results
# uses: actions/upload-artifact@master
# with:
# name: pytest-results-${{ runner.os }}-${{ matrix.python-version }}-${{ matrix.requires }}
# path: junit/test-results-${{ runner.os }}-${{ matrix.python-version }}-${{ matrix.requires }}.xml
# # Use always() to always run this step to publish test results when there are test failures
# if: always()

# - name: Package Setup
# run: |
# check-manifest
# python setup.py check --metadata --strict
# python setup.py sdist
# twine check dist/*
# #- name: Try install package
# # if: ! startsWith(matrix.os, 'windows')
# # run: |
# # virtualenv vEnv ; source vEnv/bin/activate
# # pip install --editable . ; cd .. & python -c "import pytorch_lightning ; print(pytorch_lightning.__version__)"
# # deactivate ; rm -rf vEnv

# - name: Statistics
# if: success()
# run: |
# coverage report
72 changes: 72 additions & 0 deletions .github/workflows/python-type-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
name: "Python static type checking"
on:
- pull_request

jobs:
python_type_checking:
name: Python static type checking with Pyright
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-18.04]
python-version: [3.7]
requires: ['latest']

# Timeout: https://stackoverflow.com/a/59076067/4521646
timeout-minutes: 15
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v1
with:
python-version: ${{ matrix.python-version }}

# Note: This uses an internal pip API and may not always work
# https://github.com/actions/cache/blob/master/examples.md#multiple-oss-in-a-workflow
- name: Get pip cache
id: pip-cache
run: |
python -c "from pip._internal.locations import USER_CACHE_DIR; print('::set-output name=dir::' + USER_CACHE_DIR)"

- name: Cache pip
uses: actions/cache@v1
with:
path: ${{ steps.pip-cache.outputs.dir }}
key: ${{ runner.os }}-${{ matrix.python-version }}-${{ matrix.requires }}-pip-${{ hashFiles('requirements.txt') }}-${{ hashFiles('requirements-extra.txt') }}
restore-keys: |
${{ runner.os }}-${{ matrix.python-version }}-${{ matrix.requires }}-pip-

- name: Install dependencies
run: |
# python -m pip install --upgrade --user pip
pip install -r requirements.txt -U -f https://download.pytorch.org/whl/torch_stable.html -q
HOROVOD_BUILD_ARCH_FLAGS="-mfma" pip install -r ./tests/requirements-devel.txt -q
# pip install tox coverage
python --version
pip --version
pip list
shell: bash

- name: Reinstall Horovod if necessary
if: runner.os != 'windows' && matrix.python-version != '3.8'
run: |
HOROVOD_BUILT=$(python -c "import horovod.torch; horovod.torch.nccl_built(); print('SUCCESS')")
if [[ $HOROVOD_BUILT != "SUCCESS" ]]; then
pip uninstall -y horovod
HOROVOD_BUILD_ARCH_FLAGS="-mfma" pip install --no-cache-dir $(grep "horovod" requirements-extra.txt)
fi
horovodrun --check-build
shell: bash

- name: Set up node
uses: actions/setup-node@v1

- name: Install pyright
run: |
npm install pyright

- name: Run type checking
run: |
$(npm bin)/pyright
Loading