Skip to content

Adds support for mlforecast in the forecasting operator #1355

Adds support for mlforecast in the forecasting operator

Adds support for mlforecast in the forecasting operator #1355

name: "[Py3.8][COV REPORT] tests/unitary/**"
on:
workflow_dispatch:
pull_request:
branches: [ "main" ]
paths:
- "ads/**"
- "!ads/opctl/operator/**"
- "!ads/feature_store/**"
- "pyproject.toml"
# Cancel in progress workflows on pull_requests.
# https://docs.github.com/en/actions/using-jobs/using-concurrency#example-using-a-fallback-value
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
permissions:
contents: read
pull-requests: write
# hack for https://github.com/actions/cache/issues/810#issuecomment-1222550359
env:
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 5
jobs:
test:
name: python 3.8, ${{ matrix.name }}
runs-on: ubuntu-latest
timeout-minutes: 90
strategy:
fail-fast: false
matrix:
name: ["unitary", "slow_tests"]
include:
- name: "unitary"
test-path: "tests/unitary"
# `model` tests running in "slow_tests",
# `feature_store` tests has its own test suite
# `forecast` tests has its own test suite
# 'hpo' tests hangs if run together with all unitary tests. Tests running in separate command before running all unitary
ignore-path: |
--ignore tests/unitary/with_extras/model \
--ignore tests/unitary/with_extras/feature_store \
--ignore tests/unitary/with_extras/operator/forecast \
--ignore tests/unitary/with_extras/hpo
- name: "slow_tests"
test-path: "tests/unitary/with_extras/model"
steps:
- uses: actions/checkout@v4
- uses: ./.github/workflows/create-more-space
name: "Create more disk space"
- uses: actions/setup-python@v5
with:
python-version: "3.8"
cache: "pip"
cache-dependency-path: |
pyproject.toml
"**requirements.txt"
- uses: ./.github/workflows/set-dummy-conf
name: "Test config setup"
- uses: ./.github/workflows/test-env-setup
name: "Test env setup"
timeout-minutes: 30
# Installing pii deps for python3.8 test setup only, it will not work with python3.9/3.10, because
# 'datapane' library conflicts with pandas>2.2.0, which used in py3.9/3.10 setup
- name: "Install PII dependencies"
run: |
pip install -e ".[pii]"
- name: "Install featurestore marketplace dependencies"
run: |
pip install -e ".[feature-store-marketplace]"
- name: "Run unitary tests folder with maximum ADS dependencies"
timeout-minutes: 40
shell: bash
env:
CONDA_PREFIX: /usr/share/miniconda
run: |
set -x # print commands that are executed
# Setup project and tests folder for cov reports to not be overwritten by another parallel step
mkdir -p cov-${{ matrix.name }}
cd cov-${{ matrix.name }}
ln -s ../tests tests
ln -s ../ads ads
ln -s ../.coveragerc .coveragerc
# Run hpo tests, which hangs if run together with all unitary tests
if [[ ${{ matrix.name }} == "unitary" ]]; then
python -m pytest -v -p no:warnings -n auto --dist loadfile \
--cov-append --cov=ads --cov-report=xml --cov-report=html \
tests/unitary/with_extras/hpo
fi
# Run tests
python -m pytest -v -p no:warnings --durations=5 \
-n auto --dist loadfile \
--cov-append --cov=ads --cov-report=xml --cov-report=html \
${{ matrix.test-path }} ${{ matrix.ignore-path }}
- name: "Save coverage files"
uses: actions/upload-artifact@v4
with:
name: cov-reports-${{ matrix.name }}
path: |
cov-${{ matrix.name }}/htmlcov/
cov-${{ matrix.name }}/.coverage
cov-${{ matrix.name }}/coverage.xml
coverage-report:
name: "Coverage report"
runs-on: ubuntu-latest
continue-on-error: true
needs: test
if: ${{ success() }} && github.event_name == 'pull_request'
env:
COMPARE_BRANCH: main
steps:
- name: "Checkout current branch"
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: "Download coverage files"
uses: actions/download-artifact@v4
- name: "Calculate overall coverage"
run: |
set -x # print commands that are executed
# Prepare default cov body text
COV_BODY_INTRO="📌 Overall coverage:\n\n"
echo COV_BODY="$COV_BODY_INTRO No success to gather report. 😿" >> $GITHUB_ENV
# Prepare file paths to .coverage files
# Filenames taken from job.test last step with name - "Save coverage files"
FILE_UNITARY="cov-reports-unitary/.coverage"; [[ ! -f $FILE_UNITARY ]] && FILE_UNITARY=""
FILE_SLOW="cov-reports-slow_tests/.coverage"; [[ ! -f $FILE_SLOW ]] && FILE_SLOW=""
# Combine coverage files
pip install coverage
coverage combine $FILE_UNITARY $FILE_SLOW
# Make html report
coverage html
# Calculate overall coverage and update body message
COV=$(grep -E 'pc_cov' htmlcov/index.html | cut -d'>' -f 2 | cut -d'%' -f 1)
if [[ ! -z $COV ]]; then
if [[ $COV -lt 50 ]]; then COLOR=red; elif [[ $COV -lt 80 ]]; then COLOR=yellow; else COLOR=green; fi
echo COV_BODY="$COV_BODY_INTRO ![Coverage-$COV%](https://img.shields.io/badge/coverage-$COV%25-$COLOR)" >> $GITHUB_ENV
fi
- name: "Calculate coverage diff"
run: |
set -x # print commands that are executed
# Prepare default diff body text
DIFF_BODY_INTRO="📌 Cov diff with **${{ env.COMPARE_BRANCH }}**:\n\n"
echo DIFF_BODY="$DIFF_BODY_INTRO No success to gather report. 😿" >> $GITHUB_ENV
# Prepare file paths to coverage xml files
# Filenames taken from job.test last step with name - "Save coverage files"
FILE1="cov-reports-unitary/coverage.xml"; [[ ! -f $FILE1 ]] && FILE1=""
FILE2="cov-reports-slow_tests/coverage.xml"; [[ ! -f $FILE2 ]] && FILE2=""
echo "FILE1=$FILE1" >> $GITHUB_ENV
echo "FILE2=$FILE2" >> $GITHUB_ENV
# Calculate coverage diff and update body message
pip install diff_cover
diff-cover $FILE1 $FILE2 --compare-branch=origin/${{ env.COMPARE_BRANCH }}
DIFF=$(diff-cover $FILE1 $FILE2 \
--compare-branch=origin/${{ env.COMPARE_BRANCH }} | grep Coverage: | cut -d' ' -f 2 | cut -d'%' -f 1)
if [[ -z $DIFF ]]; then
DIFF_INFO=$(diff-cover $FILE1 $FILE2 \
--compare-branch=origin/${{ env.COMPARE_BRANCH }} | grep "No lines");
echo DIFF_BODY="$DIFF_BODY_INTRO $DIFF_INFO">> $GITHUB_ENV
else
if [[ $DIFF -lt 50 ]]; then COLOR=red; elif [[ $DIFF -lt 80 ]]; then COLOR=yellow; else COLOR=green; fi
echo DIFF_BODY="$DIFF_BODY_INTRO ![Coverage-$DIFF%](https://img.shields.io/badge/coverage-$DIFF%25-$COLOR)" >> $GITHUB_ENV
fi
- name: "Add comment with cov diff to PR"
uses: actions/github-script@v7
if: github.event_name == 'pull_request'
with:
github-token: ${{ github.token }}
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: '${{ env.DIFF_BODY }}\n\n${{ env.COV_BODY }}'
})
- name: "Generate html difference report"
run: |
diff-cover ${{ env.FILE1 }} ${{ env.FILE2 }} \
--compare-branch=origin/${{ env.COMPARE_BRANCH }} \
--html-report=cov-diff.html
- name: "Save coverage difference report"
uses: actions/upload-artifact@v4
with:
name: cov-html-reports
path: |
cov-diff.html
htmlcov/
retention-days: 10