Skip to content

Commit 6b174ca

Browse files
committed
standartize pyproject & speedup tests (#176)
* speedup tests * fix pyproject * Update optimizer_config.schema.json * move optional dependencies * fixes * add xdist * fix ci * download data from hub in doc * add caching * add doc cache --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: voorhs <[email protected]> # Conflicts: # pyproject.toml diff --git c/.github/workflows/build-docs.yaml i/.github/workflows/build-docs.yaml index 82a6896..c9d2d31 100644 --- c/.github/workflows/build-docs.yaml +++ i/.github/workflows/build-docs.yaml @@ -36,9 +36,12 @@ jobs: with: python-version: "3.10" - - name: setup poetry - run: | - curl -sSL https://install.python-poetry.org | python - + - name: Cache Hugging Face + id: cache-hf + uses: actions/cache@v4 + with: + path: ~/.cache/huggingface + key: docs-cache-hf - name: Install pandoc run: | @@ -46,23 +49,23 @@ jobs: - name: Install dependencies run: | - poetry install --with docs + pip install .[docs] - name: Run tests if: github.event_name != 'workflow_dispatch' run: | echo "Testing documentation build..." - make test-docs + python -m sphinx build -b doctest docs/source docs/build/html - name: Build documentation if: ${{ github.ref == 'refs/heads/dev' }} && github.event_name != 'workflow_dispatch' run: | - make docs + python -m sphinx build -b html docs/source docs/build/html - name: build multiversion documentation if: github.event_name == 'release' || github.event_name == 'workflow_dispatch' run: | - make multi-version-docs + sphinx-multiversion docs/source docs/build/html - name: Deploy to GitHub Pages uses: peaceiris/actions-gh-pages@v3 diff --git c/.github/workflows/reusable-test.yaml i/.github/workflows/reusable-test.yaml new file mode 100644 index 00000000..ac8f0b1 --- /dev/null +++ i/.github/workflows/reusable-test.yaml @@ -0,0 +1,46 @@ +name: Reusable Test Workflow + +on: + workflow_call: + inputs: + test_command: + required: true + type: string + description: 'Command to run tests' + +jobs: + test: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ ubuntu-latest ] + python-version: [ "3.10", "3.11", "3.12" ] + include: + - os: windows-latest + python-version: "3.10" + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Cache Hugging Face + id: cache-hf + uses: actions/cache@v4 + with: + path: ~/.cache/huggingface + key: ${{ runner.os }}-hf + + - name: Setup Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + cache: "pip" + + - name: Install dependencies + run: | + pip install .[test] + + - name: Run tests + run: | + ${{ inputs.test_command }} \ No newline at end of file diff --git c/.github/workflows/test-inference.yaml i/.github/workflows/test-inference.yaml index a68ef07..d89e450 100644 --- c/.github/workflows/test-inference.yaml +++ i/.github/workflows/test-inference.yaml @@ -8,31 +8,6 @@ on: jobs: test: - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: [ ubuntu-latest ] - python-version: [ "3.10", "3.11", "3.12" ] - include: - - os: windows-latest - python-version: "3.10" - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - cache: "pip" - - - name: Install dependencies - run: | - pip install . - pip install pytest pytest-asyncio - - - name: Run tests - run: | - pytest tests/pipeline/test_inference.py + uses: ./.github/workflows/reusable-test.yaml + with: + test_command: pytest -n auto tests/pipeline/test_inference.py diff --git c/.github/workflows/test-nodes.yaml i/.github/workflows/test-nodes.yaml index b101617..c191491 100644 --- c/.github/workflows/test-nodes.yaml +++ i/.github/workflows/test-nodes.yaml @@ -8,31 +8,6 @@ on: jobs: test: - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: [ ubuntu-latest ] - python-version: [ "3.10", "3.11", "3.12" ] - include: - - os: windows-latest - python-version: "3.10" - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - cache: "pip" - - - name: Install dependencies - run: | - pip install . - pip install pytest pytest-asyncio - - - name: Run tests - run: | - pytest tests/nodes + uses: ./.github/workflows/reusable-test.yaml + with: + test_command: pytest -n auto tests/nodes diff --git c/.github/workflows/test-optimization.yaml i/.github/workflows/test-optimization.yaml index 4625f39..ad3168d 100644 --- c/.github/workflows/test-optimization.yaml +++ i/.github/workflows/test-optimization.yaml @@ -8,31 +8,6 @@ on: jobs: test: - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: [ ubuntu-latest ] - python-version: [ "3.10", "3.11", "3.12" ] - include: - - os: windows-latest - python-version: "3.10" - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - cache: "pip" - - - name: Install dependencies - run: | - pip install . - pip install pytest pytest-asyncio - - - name: Run tests - run: | - pytest tests/pipeline/test_optimization.py + uses: ./.github/workflows/reusable-test.yaml + with: + test_command: pytest -n auto tests/pipeline/test_optimization.py diff --git c/.github/workflows/test-presets.yaml i/.github/workflows/test-presets.yaml index ab4a672..836c58f 100644 --- c/.github/workflows/test-presets.yaml +++ i/.github/workflows/test-presets.yaml @@ -8,31 +8,6 @@ on: jobs: test: - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: [ ubuntu-latest ] - python-version: [ "3.10", "3.11", "3.12" ] - include: - - os: windows-latest - python-version: "3.10" - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - cache: "pip" - - - name: Install dependencies - run: | - pip install . - pip install pytest pytest-asyncio - - - name: Run tests - run: | - pytest tests/pipeline/test_presets.py + uses: ./.github/workflows/reusable-test.yaml + with: + test_command: pytest -n auto tests/pipeline/test_presets.py diff --git c/.github/workflows/typing.yml i/.github/workflows/typing.yml index eb0c374..dfe873e 100644 --- c/.github/workflows/typing.yml +++ i/.github/workflows/typing.yml @@ -11,14 +11,9 @@ jobs: python-version: "3.10" cache: "pip" - - name: Install Poetry - run: | - curl -sSL https://install.python-poetry.org | python3 - - echo "$HOME/.poetry/bin" >> $GITHUB_PATH - - name: Install dependencies run: | - poetry install --with typing + pip install .[typing] - name: Run mypy - run: make typing + run: mypy autointent diff --git c/.github/workflows/unit-tests.yaml i/.github/workflows/unit-tests.yaml index 5883080..4d8164f 100644 --- c/.github/workflows/unit-tests.yaml +++ i/.github/workflows/unit-tests.yaml @@ -8,31 +8,6 @@ on: jobs: test: - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: [ ubuntu-latest ] - python-version: [ "3.10", "3.11", "3.12" ] - include: - - os: windows-latest - python-version: "3.10" - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - cache: "pip" - - - name: Install dependencies - run: | - pip install . - pip install pytest pytest-asyncio - - - name: Run tests - run: | - pytest --ignore=tests/nodes --ignore=tests/pipeline + uses: ./.github/workflows/reusable-test.yaml + with: + test_command: pytest -n auto --ignore=tests/nodes --ignore=tests/pipeline diff --git c/pyproject.toml i/pyproject.toml index ab78c4d..0994407 100644 --- c/pyproject.toml +++ i/pyproject.toml @@ -48,6 +48,44 @@ dependencies = [ "codecarbon (==2.6)", ] +[project.optional-dependencies] +dev = [ + "tach (>=0.11.3,<1.0.0)", + "ipykernel (>=6.29.5,<7.0.0)", + "ipywidgets (>=8.1.5,<9.0.0)", + "ruff (==0.8.4)", +] +test = [ + "pytest (>=8.3.2,<9.0.0)", + "pytest-cov (>=5.0.0,<6.0.0)", + "coverage (>=7.6.1,<8.0.0)", + "pytest-asyncio (>=0.24.0,<1.0.0)", + "pytest-rerunfailures (>=15.0,<16.0)", + "pytest-xdist (>=3.6.1,<4.0.0)", +] +typing = [ + "mypy (>=1,<2)", + "types-pyyaml (>=6.0.12.20240917,<7.0.0)", + "types-pygments (>=2.18.0.20240506,<3.0.0)", + "types-setuptools (>=75.2.0.20241019,<76.0.0)", + "joblib-stubs (>=1.4.2.5.20240918,<2.0.0)", +] +docs = [ + "sphinx (>=8.1.3,<9.0.0)", + "pydata-sphinx-theme (>=0.16.0,<1.0.0)", + "jupytext (>=1.16.4,<2.0.0)", + "nbsphinx (>=0.9.5,<1.0.0)", + "sphinx-autodoc-typehints (>=2.5.0,<3.0.0)", + "sphinx-copybutton (>=0.5.2,<1.0.0)", + "sphinx-autoapi (>=3.3.3,<4.0.0)", + "ipykernel (>=6.29.5,<7.0.0)", + "tensorboardx (>=2.6.2.2,<3.0.0)", + "sphinx-multiversion (>=0.2.4,<1.0.0)", +] +dspy = [ + "dspy (>=2.6.5,<3.0.0)", +] + [project.urls] Homepage = "https://deeppavlov.github.io/AutoIntent/" Repository = "https://github.com/deeppavlov/AutoIntent" @@ -57,56 +95,6 @@ Documentation = "https://deeppavlov.github.io/AutoIntent/" "basic-aug" = "autointent.generation.utterances.basic.cli:main" "evolution-aug" = "autointent.generation.utterances.evolution.cli:main" -[tool.poetry.group.dev] -optional = true - -[tool.poetry.group.dev.dependencies] -ipykernel = "^6.29.5" -ipywidgets = "^8.1.5" -ruff = "==0.8.4" - -[tool.poetry.group.test] -optional = true - -[tool.poetry.group.test.dependencies] -pytest = "8.3.2" -pytest-cov = "^5.0.0" -coverage = "^7.6.1" -pytest-asyncio = "^0.24.0" - -[tool.poetry.group.typing] -optional = true - -[tool.poetry.group.typing.dependencies] -mypy = "^1" -types-pyyaml = "^6.0.12.20240917" -types-pygments = "^2.18.0.20240506" -types-setuptools = "^75.2.0.20241019" -joblib-stubs = "^1.4.2.5.20240918" - -[tool.poetry.group.docs] -optional = true - -[tool.poetry.group.docs.dependencies] -sphinx = "^8.1.3" -pydata-sphinx-theme = "^0.16.0" -jupytext = "^1.16.4" -nbsphinx = "^0.9.5" -sphinx-autodoc-typehints = "^2.5.0" -sphinx-copybutton = "^0.5.2" -sphinx-autoapi = "^3.3.3" -ipykernel = "^6.29.5" -tensorboardx = "^2.6.2.2" -sphinx-multiversion = "^0.2.4" - -[tool.poetry.group.dspy] -optional = true - - -[tool.poetry.group.dspy.dependencies] -dspy = "^2.6.5" - - [tool.ruff] line-length = 120 indent-width = 4 @@ -148,11 +136,28 @@ build-backend = "poetry.core.masonry.api" [tool.pytest.ini_options] minversion = "8.0" -addopts = "-ra" # `--cov` option breaks pycharm's test debugger testpaths = [ "tests", ] pythonpath = "autointent" +# `--cov` option breaks pycharm's test debugger +addopts = """ + -ra + --reruns 3 + --only-rerun requests.exceptions.ReadTimeout + --only-rerun huggingface_hub.errors.HfHubHTTPError + --only-rerun huggingface_hub.errors.LocalEntryNotFoundError + --only-rerun FileNotFoundError + --only-rerun OSError + --durations 5 + --reruns-delay 10 +""" +# --reruns 3 -> # Retry failed tests 3 times +# requests.exceptions.ReadTimeout -> # HF Read timed out +# huggingface_hub.errors.HfHubHTTPError -> # HF is unavailable +# huggingface_hub.errors.LocalEntryNotFoundError -> # Gateway Time-out from HF +# FileNotFoundError -> HF Cache is broken +# --reruns-delay 10 -> Delay between reruns in seconds to avoid running into the same issue again [tool.coverage.run] branch = true diff --git c/user_guides/advanced/01_data.py i/user_guides/advanced/01_data.py index 27314a8..5177877 100644 --- c/user_guides/advanced/01_data.py +++ i/user_guides/advanced/01_data.py @@ -6,9 +6,8 @@ This chapter is a more detailed version of data chapter from basic user guide ab """ # %% -import importlib.resources as ires - import datasets +import huggingface_hub from autointent import Dataset @@ -180,7 +179,11 @@ The AutoIntent library includes sample datasets. """ # %% -path_to_dataset = ires.files("tests.assets.data").joinpath("clinc_subset.json") +path_to_dataset = huggingface_hub.hf_hub_download( + repo_id="DeepPavlov/clinc150_subset", + filename="clinc_subset.json", + repo_type="dataset", +) dataset = Dataset.from_json(path_to_dataset) # %% [markdown] diff --git c/user_guides/basic_usage/01_data.py i/user_guides/basic_usage/01_data.py index a03f39b..f56294a 100644 --- c/user_guides/basic_usage/01_data.py +++ i/user_guides/basic_usage/01_data.py @@ -6,9 +6,8 @@ In this chapter you will learn how to manipulate intent classification data with """ # %% -import importlib.resources as ires - import datasets +import huggingface_hub from autointent import Dataset @@ -53,7 +52,11 @@ After you converted your labeled data into JSON, you can load it into AutoIntent """ # %% -path_to_dataset = ires.files("tests.assets.data").joinpath("clinc_subset_unsplitted.json") +path_to_dataset = huggingface_hub.hf_hub_download( + repo_id="DeepPavlov/clinc150_subset", + filename="clinc_subset_unsplitted.json", + repo_type="dataset", +) dataset = Dataset.from_json(path_to_dataset) # %% [markdown]
1 parent b9f81e5 commit 6b174ca

File tree

11 files changed

+141
-211
lines changed

11 files changed

+141
-211
lines changed

.github/workflows/build-docs.yaml

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,33 +36,36 @@ jobs:
3636
with:
3737
python-version: "3.10"
3838

39-
- name: setup poetry
40-
run: |
41-
curl -sSL https://install.python-poetry.org | python -
39+
- name: Cache Hugging Face
40+
id: cache-hf
41+
uses: actions/cache@v4
42+
with:
43+
path: ~/.cache/huggingface
44+
key: docs-cache-hf
4245

4346
- name: Install pandoc
4447
run: |
4548
sudo apt install pandoc
4649
4750
- name: Install dependencies
4851
run: |
49-
poetry install --with docs
52+
pip install .[docs]
5053
5154
- name: Run tests
5255
if: github.event_name != 'workflow_dispatch'
5356
run: |
5457
echo "Testing documentation build..."
55-
make test-docs
58+
python -m sphinx build -b doctest docs/source docs/build/html
5659
5760
- name: Build documentation
5861
if: ${{ github.ref == 'refs/heads/dev' }} && github.event_name != 'workflow_dispatch'
5962
run: |
60-
make docs
63+
python -m sphinx build -b html docs/source docs/build/html
6164
6265
- name: build multiversion documentation
6366
if: github.event_name == 'release' || github.event_name == 'workflow_dispatch'
6467
run: |
65-
make multi-version-docs
68+
sphinx-multiversion docs/source docs/build/html
6669
6770
- name: Deploy to GitHub Pages
6871
uses: peaceiris/actions-gh-pages@v3
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
name: Reusable Test Workflow
2+
3+
on:
4+
workflow_call:
5+
inputs:
6+
test_command:
7+
required: true
8+
type: string
9+
description: 'Command to run tests'
10+
11+
jobs:
12+
test:
13+
runs-on: ${{ matrix.os }}
14+
strategy:
15+
fail-fast: false
16+
matrix:
17+
os: [ ubuntu-latest ]
18+
python-version: [ "3.10", "3.11", "3.12" ]
19+
include:
20+
- os: windows-latest
21+
python-version: "3.10"
22+
23+
steps:
24+
- name: Checkout code
25+
uses: actions/checkout@v4
26+
27+
- name: Cache Hugging Face
28+
id: cache-hf
29+
uses: actions/cache@v4
30+
with:
31+
path: ~/.cache/huggingface
32+
key: ${{ runner.os }}-hf
33+
34+
- name: Setup Python ${{ matrix.python-version }}
35+
uses: actions/setup-python@v5
36+
with:
37+
python-version: ${{ matrix.python-version }}
38+
cache: "pip"
39+
40+
- name: Install dependencies
41+
run: |
42+
pip install .[test]
43+
44+
- name: Run tests
45+
run: |
46+
${{ inputs.test_command }}

.github/workflows/test-inference.yaml

Lines changed: 3 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -8,31 +8,6 @@ on:
88

99
jobs:
1010
test:
11-
runs-on: ${{ matrix.os }}
12-
strategy:
13-
fail-fast: false
14-
matrix:
15-
os: [ ubuntu-latest ]
16-
python-version: [ "3.10", "3.11", "3.12" ]
17-
include:
18-
- os: windows-latest
19-
python-version: "3.10"
20-
21-
steps:
22-
- name: Checkout code
23-
uses: actions/checkout@v4
24-
25-
- name: Setup Python ${{ matrix.python-version }}
26-
uses: actions/setup-python@v5
27-
with:
28-
python-version: ${{ matrix.python-version }}
29-
cache: "pip"
30-
31-
- name: Install dependencies
32-
run: |
33-
pip install .
34-
pip install pytest pytest-asyncio
35-
36-
- name: Run tests
37-
run: |
38-
pytest tests/pipeline/test_inference.py
11+
uses: ./.github/workflows/reusable-test.yaml
12+
with:
13+
test_command: pytest -n auto tests/pipeline/test_inference.py

.github/workflows/test-nodes.yaml

Lines changed: 3 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -8,31 +8,6 @@ on:
88

99
jobs:
1010
test:
11-
runs-on: ${{ matrix.os }}
12-
strategy:
13-
fail-fast: false
14-
matrix:
15-
os: [ ubuntu-latest ]
16-
python-version: [ "3.10", "3.11", "3.12" ]
17-
include:
18-
- os: windows-latest
19-
python-version: "3.10"
20-
21-
steps:
22-
- name: Checkout code
23-
uses: actions/checkout@v4
24-
25-
- name: Setup Python ${{ matrix.python-version }}
26-
uses: actions/setup-python@v5
27-
with:
28-
python-version: ${{ matrix.python-version }}
29-
cache: "pip"
30-
31-
- name: Install dependencies
32-
run: |
33-
pip install .
34-
pip install pytest pytest-asyncio
35-
36-
- name: Run tests
37-
run: |
38-
pytest tests/nodes
11+
uses: ./.github/workflows/reusable-test.yaml
12+
with:
13+
test_command: pytest -n auto tests/nodes

.github/workflows/test-optimization.yaml

Lines changed: 3 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -8,31 +8,6 @@ on:
88

99
jobs:
1010
test:
11-
runs-on: ${{ matrix.os }}
12-
strategy:
13-
fail-fast: false
14-
matrix:
15-
os: [ ubuntu-latest ]
16-
python-version: [ "3.10", "3.11", "3.12" ]
17-
include:
18-
- os: windows-latest
19-
python-version: "3.10"
20-
21-
steps:
22-
- name: Checkout code
23-
uses: actions/checkout@v4
24-
25-
- name: Setup Python ${{ matrix.python-version }}
26-
uses: actions/setup-python@v5
27-
with:
28-
python-version: ${{ matrix.python-version }}
29-
cache: "pip"
30-
31-
- name: Install dependencies
32-
run: |
33-
pip install .
34-
pip install pytest pytest-asyncio
35-
36-
- name: Run tests
37-
run: |
38-
pytest tests/pipeline/test_optimization.py
11+
uses: ./.github/workflows/reusable-test.yaml
12+
with:
13+
test_command: pytest -n auto tests/pipeline/test_optimization.py

.github/workflows/test-presets.yaml

Lines changed: 3 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -8,31 +8,6 @@ on:
88

99
jobs:
1010
test:
11-
runs-on: ${{ matrix.os }}
12-
strategy:
13-
fail-fast: false
14-
matrix:
15-
os: [ ubuntu-latest ]
16-
python-version: [ "3.10", "3.11", "3.12" ]
17-
include:
18-
- os: windows-latest
19-
python-version: "3.10"
20-
21-
steps:
22-
- name: Checkout code
23-
uses: actions/checkout@v4
24-
25-
- name: Setup Python ${{ matrix.python-version }}
26-
uses: actions/setup-python@v5
27-
with:
28-
python-version: ${{ matrix.python-version }}
29-
cache: "pip"
30-
31-
- name: Install dependencies
32-
run: |
33-
pip install .
34-
pip install pytest pytest-asyncio
35-
36-
- name: Run tests
37-
run: |
38-
pytest tests/pipeline/test_presets.py
11+
uses: ./.github/workflows/reusable-test.yaml
12+
with:
13+
test_command: pytest -n auto tests/pipeline/test_presets.py

.github/workflows/typing.yml

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,9 @@ jobs:
1111
python-version: "3.10"
1212
cache: "pip"
1313

14-
- name: Install Poetry
15-
run: |
16-
curl -sSL https://install.python-poetry.org | python3 -
17-
echo "$HOME/.poetry/bin" >> $GITHUB_PATH
18-
1914
- name: Install dependencies
2015
run: |
21-
poetry install --with typing
16+
pip install .[typing]
2217
2318
- name: Run mypy
24-
run: make typing
19+
run: mypy autointent

.github/workflows/unit-tests.yaml

Lines changed: 3 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -8,31 +8,6 @@ on:
88

99
jobs:
1010
test:
11-
runs-on: ${{ matrix.os }}
12-
strategy:
13-
fail-fast: false
14-
matrix:
15-
os: [ ubuntu-latest ]
16-
python-version: [ "3.10", "3.11", "3.12" ]
17-
include:
18-
- os: windows-latest
19-
python-version: "3.10"
20-
21-
steps:
22-
- name: Checkout code
23-
uses: actions/checkout@v4
24-
25-
- name: Setup Python ${{ matrix.python-version }}
26-
uses: actions/setup-python@v5
27-
with:
28-
python-version: ${{ matrix.python-version }}
29-
cache: "pip"
30-
31-
- name: Install dependencies
32-
run: |
33-
pip install .
34-
pip install pytest pytest-asyncio
35-
36-
- name: Run tests
37-
run: |
38-
pytest --ignore=tests/nodes --ignore=tests/pipeline
11+
uses: ./.github/workflows/reusable-test.yaml
12+
with:
13+
test_command: pytest -n auto --ignore=tests/nodes --ignore=tests/pipeline

0 commit comments

Comments
 (0)