MLflow tests #13
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: MLflow tests | |
on: | |
push: | |
branches: | |
- master | |
- branch-[0-9]+.[0-9]+ | |
pull_request: | |
branches: | |
- master | |
- branch-[0-9]+.[0-9]+ | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.run_number || github.ref }} | |
cancel-in-progress: true | |
# Use `bash --noprofile --norc -exo pipefail` by default for all `run` steps in this workflow: | |
# https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#defaultsrun | |
defaults: | |
run: | |
shell: bash --noprofile --norc -exo pipefail {0} | |
env: | |
# Note miniconda is pre-installed in the virtual environments for GitHub Actions: | |
# https://github.com/actions/virtual-environments/blob/main/images/linux/scripts/installers/miniconda.sh | |
MLFLOW_CONDA_HOME: /usr/share/miniconda | |
jobs: | |
lint: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: ./.github/actions/setup-python | |
with: | |
python-version: "3.7" | |
- uses: ./.github/actions/cache-pip | |
- name: Install dependencies | |
env: | |
INSTALL_LARGE_PYTHON_DEPS: true | |
INSTALL_SMALL_PYTHON_DEPS: true | |
run: | | |
source ./dev/install-common-deps.sh | |
pip install -r requirements/lint-requirements.txt | |
- name: Test custom pylint-plugins | |
run : | | |
pytest tests/pylint_plugins | |
- name: Run lint checks | |
run: | | |
./dev/lint.sh | |
r: | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: mlflow/R/mlflow | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-java@v3 | |
with: | |
java-version: 11 | |
distribution: 'adopt' | |
- uses: r-lib/actions/setup-r@v1 | |
# This step dumps the current set of R dependencies and R version into files to be used | |
# as a cache key when caching/restoring R dependencies. | |
- name: Dump dependencies | |
run: | | |
Rscript -e 'source(".dump-r-dependencies.R", echo = TRUE)' | |
- name: Get OS name | |
id: os-name | |
run: | | |
# `os_name` will be like "Ubuntu-20.04.1-LTS" | |
os_name=$(lsb_release -ds | sed 's/\s/-/g') | |
echo "::set-output name=os-name::$os_name" | |
- name: Cache R packages | |
uses: actions/cache@v2 | |
with: | |
path: ${{ env.R_LIBS_USER }} | |
# We cache R dependencies based on a tuple of the current OS, the R version, and the list of | |
# R dependencies | |
key: ${{ steps.os-name.outputs.os-name }}-${{ hashFiles('mlflow/R/mlflow/R-version') }}-0-${{ hashFiles('mlflow/R/mlflow/depends.Rds') }} | |
- name: Install dependencies | |
run: | | |
Rscript -e 'source(".install-deps.R", echo=TRUE)' | |
# TODO: Remove this line once h2o 3.36.0.2 is uploaded to https://packagemanager.rstudio.com | |
Rscript -e 'install.packages("h2o", repos="http://cran.r-project.org")' | |
- name: Build package | |
run: | | |
./build-package.sh | |
- name: Create test environment | |
run: | | |
Rscript -e 'source(".create-test-env.R", echo=TRUE)' | |
- name: Run tests | |
env: | |
LINTR_COMMENT_BOT: false | |
run: | | |
cd tests | |
Rscript -e 'source("../.run-tests.R", echo=TRUE)' | |
# python-skinny tests cover a subset of mlflow functionality | |
# that is meant to be supported with a smaller dependency footprint. | |
# The python skinny tests cover the subset of mlflow functionality | |
# while also verifying certain dependencies are omitted. | |
python-skinny: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: ./.github/actions/setup-python | |
with: | |
python-version: "3.7" | |
- name: Install dependencies | |
env: | |
INSTALL_SKINNY_PYTHON_DEPS: true | |
MLFLOW_SKINNY: true | |
run: | | |
source ./dev/install-common-deps.sh | |
- name: Run tests | |
run: | | |
./dev/run-python-skinny-tests.sh | |
python-small: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: ./.github/actions/setup-python | |
with: | |
python-version: "3.7" | |
- name: Install dependencies | |
env: | |
INSTALL_SMALL_PYTHON_DEPS: true | |
run: | | |
source ./dev/install-common-deps.sh | |
- name: Run tests | |
run: | | |
./dev/run-small-python-tests.sh | |
python-large: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Increase available disk space | |
run: | | |
# Increase available disk space by removing unnecessary tool chains: | |
# https://github.com/actions/virtual-environments/issues/709#issuecomment-612569242 | |
rm -rf "$AGENT_TOOLSDIRECTORY" | |
- uses: ./.github/actions/setup-python | |
with: | |
python-version: "3.7" | |
- uses: ./.github/actions/setup-pyenv | |
- uses: actions/setup-java@v3 | |
with: | |
java-version: 11 | |
distribution: 'adopt' | |
- uses: ./.github/actions/cache-pip | |
- name: Install dependencies | |
env: | |
INSTALL_LARGE_PYTHON_DEPS: true | |
INSTALL_SMALL_PYTHON_DEPS: true | |
run: | | |
source ./dev/install-common-deps.sh | |
- name: Run tests | |
env: | |
# Fix for https://github.com/mlflow/mlflow/issues/4229 | |
SPARK_LOCAL_IP: 127.0.0.1 | |
run: | | |
./dev/run-large-python-tests.sh | |
- name: Database tests - build | |
run: | | |
./tests/db/compose.sh pull -q postgresql mysql mssql | |
./tests/db/compose.sh build --build-arg DEPENDENCIES="$(python setup.py -q dependencies)" | |
- name: Database tests - run | |
run: | | |
for service in $(./tests/db/compose.sh config --services | grep '^mlflow-') | |
do | |
# Set `--no-TTY` to show container logs on GitHub Actions: | |
# https://github.com/actions/virtual-environments/issues/5022 | |
./tests/db/compose.sh run --rm --no-TTY $service | |
done | |
- name: Database tests - clean up | |
run: | | |
./tests/db/compose.sh down --volumes --remove-orphans --rmi all | |
- name: Run anaconda compatibility tests | |
run: | | |
./dev/test-anaconda-compatibility.sh "anaconda3:2020.11" | |
./dev/test-anaconda-compatibility.sh "anaconda3:2019.03" | |
java: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: ./.github/actions/setup-python | |
with: | |
python-version: "3.7" | |
- name: Set up Java | |
uses: actions/setup-java@v3 | |
with: | |
java-version: 11 | |
distribution: 'adopt' | |
- name: Install dependencies | |
run: | | |
source ./dev/install-common-deps.sh | |
- name: Run tests | |
env: | |
SPARK_LOCAL_IP: 127.0.0.1 | |
run: | | |
cd mlflow/java | |
mvn clean package -q | |
js: | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: mlflow/server/js | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Node | |
uses: actions/setup-node@v1 | |
with: | |
node-version: "16" | |
- name: Install dependencies | |
run: | | |
yarn install | |
git diff --exit-code | |
- name: Run lint | |
run: | | |
yarn run lint | |
- name: Run extract-i18n lint | |
run: | | |
yarn run extract-i18n:base --lint | |
- name: Run tests | |
run: | | |
yarn run test | |
protos: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Test building Docker image | |
working-directory: dev | |
env: | |
DOCKER_BUILDKIT: 1 | |
run: | | |
docker build -t gen-protos -f Dockerfile.protos . | |
docker run --rm gen-protos protoc --version | |
- name: Install dependencies | |
run: | | |
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.6.0/protoc-3.6.0-linux-x86_64.zip -O $HOME/protoc.zip | |
sudo unzip $HOME/protoc.zip -d /usr | |
- name: Run tests | |
run: | | |
./dev/test-generate-protos.sh | |
flavors: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Increase available disk space | |
run: | | |
# Increase available disk space by removing unnecessary tool chains: | |
# https://github.com/actions/virtual-environments/issues/709#issuecomment-612569242 | |
rm -rf "$AGENT_TOOLSDIRECTORY" | |
- uses: ./.github/actions/setup-python | |
with: | |
python-version: "3.7" | |
- uses: actions/setup-java@v3 | |
with: | |
java-version: 11 | |
distribution: 'adopt' | |
- uses: ./.github/actions/cache-pip | |
- name: Install dependencies | |
env: | |
INSTALL_LARGE_PYTHON_DEPS: true | |
INSTALL_SMALL_PYTHON_DEPS: true | |
run: | | |
source ./dev/install-common-deps.sh | |
- name: Run tests | |
env: | |
SPARK_LOCAL_IP: 127.0.0.1 | |
run: | | |
# Install libopenblas-dev for mxnet 1.8.0.post0 | |
sudo apt-get update -y | |
sudo apt-get install libopenblas-dev -y | |
./dev/run-python-flavor-tests.sh; | |
# It takes 9 ~ 10 minutes to run tests in `tests/models`. To make CI finish faster, | |
# run these tests in a separate job. | |
models: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: ./.github/actions/setup-python | |
with: | |
python-version: "3.7" | |
- uses: actions/setup-java@v3 | |
with: | |
java-version: 11 | |
distribution: 'adopt' | |
- name: Install dependencies | |
env: | |
INSTALL_SMALL_PYTHON_DEPS: true | |
INSTALL_LARGE_PYTHON_DEPS: false | |
run: | | |
source ./dev/install-common-deps.sh | |
pip install pyspark | |
- name: Run tests | |
env: | |
SPARK_LOCAL_IP: 127.0.0.1 | |
run: | | |
export MLFLOW_HOME=$(pwd) | |
pytest tests/models --large | |
import: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v3 | |
with: | |
python-version: "3.7" | |
- name: Install mlflow | |
run: | | |
pip install -e . | |
- name: Verify mlflow can be imported without errors | |
run: | | |
python -c "import mlflow" | |
# Just importing mlflow should not create `mlruns` directory | |
# See: https://github.com/mlflow/mlflow/issues/3400 | |
if [ -d "./mlruns" ]; then | |
exit 1 | |
fi | |
sagemaker: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: ./.github/actions/setup-python | |
with: | |
python-version: "3.7" | |
- uses: actions/setup-java@v3 | |
with: | |
java-version: 11 | |
distribution: 'adopt' | |
- name: Install dependencies | |
env: | |
INSTALL_LARGE_PYTHON_DEPS: true | |
INSTALL_SMALL_PYTHON_DEPS: true | |
run: | | |
source ./dev/install-common-deps.sh | |
- name: Run tests | |
env: | |
SPARK_LOCAL_IP: 127.0.0.1 | |
run: | | |
./dev/run-python-sagemaker-tests.sh; | |
windows: | |
runs-on: windows-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v3 | |
with: | |
python-version: "3.7" | |
- uses: ./.github/actions/setup-pyenv | |
- name: Install python dependencies | |
run: | | |
pip install -r requirements/small-requirements.txt | |
pip install --no-dependencies tests/resources/mlflow-test-plugin | |
pip install -e .[extras] | |
- name: Run python tests | |
run: | | |
pytest --ignore-flavors --ignore=tests/projects tests | |
- name: Set up Node | |
uses: actions/setup-node@v1 | |
with: | |
node-version: "16" | |
- name: Install JS dependencies | |
working-directory: mlflow/server/js | |
shell: pwsh | |
run: | | |
yarn install | |
- name: Run JS tests | |
working-directory: mlflow/server/js | |
shell: pwsh | |
run: | | |
yarn run test |