Robust baseclass (#4154) #8
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: Test for Build | |
on: | |
push: # ci work when pushing master branch | |
branches: | |
- master | |
pull_request: # ci work when creating a PR to master branch | |
branches: | |
- master | |
jobs: | |
core-build: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest] | |
python-version: ['3.8', '3.10', '3.11'] | |
include: | |
- os: windows-latest | |
python-version: '3.9' | |
steps: | |
- uses: actions/checkout@v4 | |
# using cached dependencies to speed up workflow | |
# ref: https://docs.github.com/en/actions/advanced-guides/caching-dependencies-to-speed-up-workflows | |
- name: Cache pip modules for Linux | |
uses: actions/cache@v4 | |
with: | |
path: ~/.cache/pip | |
# the key is used to search for cache | |
# hashFile(paths) return a single hash for the set of files that matches the path pattern | |
key: ${{ runner.os }}-pip-${{ hashFiles('requirements/**') }} | |
restore-keys: | | |
${{ runner.os }}-pip- | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Build DeepChem | |
run: | | |
python -m pip install --upgrade pip | |
pip install -e . | |
- name: Import checking | |
run: python -c "import deepchem" | |
test: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest] | |
python-version: ['3.8', '3.10', '3.11'] | |
include: | |
- os: windows-latest | |
python-version: 3.9 | |
env: | |
OS: ${{ matrix.os }} | |
PYTHON_VERSION: ${{ matrix.python-version }} | |
steps: | |
- name: Maximize build space | |
if: matrix.os == 'ubuntu-latest' | |
run: | | |
sudo rm -rf /usr/share/dotnet | |
sudo rm -rf /opt/ghc | |
sudo rm -rf "/usr/local/share/boost" | |
sudo rm -rf "$AGENT_TOOLSDIRECTORY" | |
sudo rm -rf /usr/local/lib/android | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
# https://github.com/galaxyproject/tools-iuc/blob/master/.github/workflows/pr.yaml | |
# The range of commits to check for changes is: | |
# - for events on the master branch we compare against the sha before the event | |
# (note that this does not work for feature branch events since we want all | |
# commits on the feature branch and not just the commits of the last event) | |
# - for pull requests we compare against the 1st ancestor, given the current | |
# HEAD is the merge between the PR branch and the base branch | |
- name: Set commit range (push to the master branch, e.g. merge) | |
if: github.ref == 'refs/heads/master' && github.event_name == 'push' | |
run: echo "COMMIT_RANGE=${{ github.event.before }}.." >> $GITHUB_ENV | |
- name: Set commit range (pull request) | |
if: github.event_name == 'pull_request' | |
run: | | |
git fetch origin master | |
echo "COMMIT_RANGE=origin/master..." >> $GITHUB_ENV | |
- name: Cache pip packages for Linux | |
if: runner.os == 'Linux' | |
uses: actions/cache@v4 | |
with: | |
path: ~/.cache/pip | |
key: ${{ runner.os }}-pip-${{ hashFiles('requirements/**') }} | |
restore-keys: | | |
${{ runner.os }}-pip- | |
- name: Cache pip packages for MacOS | |
if: runner.os == 'macOS' | |
uses: actions/cache@v4 | |
with: | |
path: ~/Library/Caches/pip | |
key: ${{ matrix.os }}-pip-${{ hashFiles('requirements/**') }} | |
restore-keys: | | |
${{ runner.os }}-pip- | |
- name: Cache pip packages for Windows | |
if: runner.os == 'Windows' | |
uses: actions/cache@v4 | |
with: | |
path: ~\AppData\Local\pip\Cache | |
key: ${{ matrix.os }}-pip-${{ hashFiles('requirements/**') }} | |
restore-keys: | | |
${{ runner.os }}-pip- | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install prerequisites for XGBoost and LightGBM (MacOS) | |
if: startsWith(runner.os, 'macOS') | |
run: brew update && brew install libomp | |
- name: Create env.yml for python >3.8 | |
shell: bash | |
if: ${{ matrix.python-version != '3.8' && matrix.python-version != '3.11'}} | |
run: | | |
python -m pip install --upgrade pip; | |
pip install conda-merge; | |
cd requirements | |
if [ "$(uname)" == 'Linux' ]; then | |
conda-merge env_common.yml env_test.yml env_ubuntu.yml tensorflow/env_tensorflow.cpu.yml torch/env_torch.cpu.yml jax/env_jax.cpu.yml > env.yml | |
elif [ "$(uname)" == 'Darwin' ]; then | |
conda-merge env_common.yml env_test.yml env_mac.yml tensorflow/env_tensorflow.cpu.yml torch/env_torch.mac.cpu.yml jax/env_jax.cpu.yml > env.yml | |
elif [[ "$(uname)" == "MINGW64_NT"* ]]; then | |
conda-merge env_common.yml env_test.yml tensorflow/env_tensorflow.cpu.yml torch/env_torch.cpu.yml > env.yml | |
fi; | |
cd .. | |
cp requirements/env.yml env.yml | |
- name: Create env.yml for python 3.11 | |
shell: bash | |
# A special case of environment creation for python 3.8 which excludes hhsuite | |
if: ${{ matrix.python-version == '3.11' }} | |
run: | | |
python -m pip install --upgrade pip; | |
pip install conda-merge; | |
cd requirements | |
if [ "$(uname)" == 'Linux' ]; then | |
conda-merge env_common.yml env_test.yml env_ubuntu_3_11.yml tensorflow/env_tensorflow.cpu.yml torch/env_torch.cpu.yml > env.yml | |
elif [ "$(uname)" == 'Darwin' ]; then | |
conda-merge env_common.yml env_test.yml env_mac_3_11.yml tensorflow/env_tensorflow.cpu.yml torch/env_torch.mac.cpu.yml > env.yml | |
elif [[ "$(uname)" == "MINGW64_NT"* ]]; then | |
conda-merge env_common.yml env_test.yml tensorflow/env_tensorflow.cpu.yml torch/env_torch.cpu.yml > env.yml | |
fi; | |
cd .. | |
cp requirements/env.yml env.yml | |
- name: Create env.yml for python 3.8 | |
shell: bash | |
# A special case of environment creation for python 3.8 which excludes jax [deprecated] | |
if: ${{ matrix.python-version == '3.8' }} | |
run: | | |
python -m pip install --upgrade pip; | |
pip install conda-merge; | |
cd requirements | |
if [ "$(uname)" == 'Linux' ]; then | |
conda-merge env_common_3_8.yml env_test.yml env_ubuntu.yml tensorflow/env_tensorflow.cpu.yml torch/env_torch.cpu.yml > env.yml | |
elif [ "$(uname)" == 'Darwin' ]; then | |
conda-merge env_common_3_8.yml env_test.yml env_mac.yml tensorflow/env_tensorflow.cpu.yml torch/env_torch.mac.cpu.yml > env.yml | |
elif [[ "$(uname)" == "MINGW64_NT"* ]]; then | |
conda-merge env_common_3_8.yml env_test.yml tensorflow/env_tensorflow.cpu.yml torch/env_torch.cpu.yml > env.yml | |
fi; | |
cd .. | |
cp requirements/env.yml env.yml | |
- name: Install all dependencies using micromamba | |
uses: mamba-org/setup-micromamba@main | |
with: | |
environment-file: env.yml | |
environment-name: deepchem | |
create-args: python=${{ matrix.python-version }} | |
# - name: Install all dependencies using conda | |
# uses: conda-incubator/setup-miniconda@v3 | |
# with: | |
# miniconda-version: "latest" | |
# auto-update-conda: true | |
# activate-environment: deepchem | |
# channels: conda-forge,defaults | |
# python-version: ${{ matrix.python-version }} | |
# environment-file: env.yml | |
pypi-build: | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' | |
needs: [core-build] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.9' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install setuptools wheel twine | |
- name: Publish (Nightly) | |
env: | |
TWINE_USERNAME: __token__ | |
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }} | |
run: | | |
python setup.py sdist bdist_wheel | |
twine upload dist/* | |
docker-build: | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' | |
needs: [core-build, pypi-build] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Maximize build space | |
run: | | |
sudo rm -rf /usr/share/dotnet | |
sudo rm -rf /opt/ghc | |
sudo rm -rf "/usr/local/share/boost" | |
sudo rm -rf "$AGENT_TOOLSDIRECTORY" | |
sudo rm -rf /usr/local/lib/android | |
- uses: actions/checkout@v4 | |
- name: Set up Docker Buildx | |
id: buildx | |
uses: docker/setup-buildx-action@master | |
- name: Cache Docker layers | |
uses: actions/cache@v4 | |
with: | |
path: /tmp/.buildx-cache | |
key: ${{ runner.os }}-buildx-${{ github.sha }} | |
restore-keys: ${{ runner.os }}-buildx- | |
- name: Login to DockerHub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKER_HUB_USERNAME }} | |
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} | |
- name: Build and push | |
id: docker_build | |
uses: docker/build-push-action@v5 | |
with: | |
builder: ${{ steps.buildx.outputs.name }} | |
context: ./docker/nightly | |
push: true | |
tags: deepchemio/deepchem:latest | |
cache-from: type=local,src=/tmp/.buildx-cache | |
cache-to: type=local,dest=/tmp/.buildx-cache | |
- name: Image digest | |
run: echo ${{ steps.docker_build.outputs.digest }} |