Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
130 commits
Select commit Hold shift + click to select a range
37bae0a
try with self-hosted
akashchi Dec 12, 2025
073b386
do not fail for now
akashchi Dec 12, 2025
794ee78
skip gpu vars
akashchi Dec 12, 2025
1c203d8
skip non-essential
akashchi Dec 12, 2025
606f5a0
Merge remote-tracking branch 'upstream/latest' into ci/gha/self-hosted
akashchi Dec 17, 2025
3bc1847
run full validation
akashchi Dec 17, 2025
d09d354
Merge remote-tracking branch 'upstream/latest' into ci/gha/self-hosted
akashchi Dec 29, 2025
8614069
correct container for win, use setup_python from OV
akashchi Dec 29, 2025
f9cb0fa
use winget
akashchi Dec 29, 2025
726c3d6
use pre-built binary
akashchi Dec 29, 2025
bb9fe87
use the correct path
akashchi Dec 30, 2025
8c4842d
use separate steps
akashchi Jan 5, 2026
7ae256d
use webclient
akashchi Jan 5, 2026
049f2aa
tls 1.2
akashchi Jan 5, 2026
6a469e7
via choco
akashchi Jan 5, 2026
5092bd0
use build
akashchi Jan 5, 2026
6078d17
again with downloading sources
akashchi Jan 6, 2026
caf7b1c
use pwsh for win
akashchi Jan 6, 2026
58c790b
extract into a separate job
akashchi Jan 6, 2026
fef6c4a
formatting
akashchi Jan 6, 2026
9b071d2
make them last
akashchi Jan 6, 2026
884f98e
use args directly
akashchi Jan 6, 2026
e59b2cc
quotes
akashchi Jan 6, 2026
4b45c19
empty string
akashchi Jan 6, 2026
969da7c
add defaults
akashchi Jan 6, 2026
3a0eba7
via gha strings
akashchi Jan 6, 2026
49cce2e
syntax
akashchi Jan 6, 2026
49dbe2f
syntax
akashchi Jan 6, 2026
35c0881
syntax
akashchi Jan 6, 2026
0f6976d
separate var
akashchi Jan 6, 2026
aa303e1
args array
akashchi Jan 6, 2026
382a6e1
preinstall opencv on win
akashchi Jan 12, 2026
2b7dfa6
Merge remote-tracking branch 'upstream/latest' into ci/gha/self-hosted
akashchi Jan 12, 2026
6499879
use separate vevs
akashchi Jan 12, 2026
989d60e
create a venv
akashchi Jan 12, 2026
6472d09
use full path
akashchi Jan 13, 2026
0ac6ed4
merge
akashchi Jan 13, 2026
4d31585
try to deduce venv from exec
akashchi Jan 13, 2026
fd3ae80
install dev reqs
akashchi Jan 13, 2026
751546b
setup vs
akashchi Jan 13, 2026
a5e43a4
test only changed
akashchi Jan 14, 2026
6f11329
Merge remote-tracking branch 'upstream/latest' into ci/gha/self-hosted
akashchi Jan 14, 2026
7d35c3c
collect reports
akashchi Jan 14, 2026
360cb0e
save notebooks contents
akashchi Jan 14, 2026
773747a
use nbconvert
akashchi Jan 14, 2026
2ea72c8
naming
akashchi Jan 14, 2026
a70f6b6
naming for failing
akashchi Jan 14, 2026
0ec9589
apth
akashchi Jan 14, 2026
29a2eee
rm unused
akashchi Jan 14, 2026
7d8dfe9
debug
akashchi Jan 14, 2026
53bde17
scopes
akashchi Jan 14, 2026
8f529d3
rm debug
akashchi Jan 14, 2026
e78f53b
debug
akashchi Jan 14, 2026
9bafa53
mv
akashchi Jan 15, 2026
646a2bb
more debug
akashchi Jan 15, 2026
17e2d55
debug
akashchi Jan 15, 2026
dbe0d5e
use json
akashchi Jan 15, 2026
33bbb01
install vc
akashchi Jan 15, 2026
34da559
rm
akashchi Jan 15, 2026
89a3ef6
install vc redist
akashchi Jan 16, 2026
9be79b1
add contrib
akashchi Jan 16, 2026
f6f6250
build from source
akashchi Jan 19, 2026
6ce12e3
Merge remote-tracking branch 'upstream/latest' into ci/gha/self-hosted
akashchi Jan 19, 2026
6b0df22
use a -test runner
akashchi Jan 19, 2026
e00d548
rm unnecessary
akashchi Jan 19, 2026
e8955a8
read the executed notebook directly
akashchi Jan 23, 2026
a45d0e2
Merge remote-tracking branch 'upstream/latest' into ci/gha/self-hosted
akashchi Jan 23, 2026
dc6b1b4
use json loader
akashchi Jan 23, 2026
f1eb305
save
akashchi Jan 26, 2026
f945d7e
Merge remote-tracking branch 'upstream/latest' into ci/gha/self-hosted
akashchi Jan 26, 2026
9b4a81c
use treon again
akashchi Jan 26, 2026
d418915
setup cache
akashchi Jan 27, 2026
3bc5024
Merge remote-tracking branch 'upstream/latest' into ci/gha/self-hosted
akashchi Jan 27, 2026
da54105
use bash and not sh
akashchi Jan 27, 2026
18d7aa7
syntax
akashchi Jan 27, 2026
4224ef2
create cache dir
akashchi Jan 27, 2026
9862fc9
check dir
akashchi Jan 27, 2026
fa5d9c8
do not upgrade pip
akashchi Jan 27, 2026
017d135
add the volume
akashchi Jan 27, 2026
a8592b9
check cache dirs
akashchi Jan 27, 2026
d2ee4e7
quotes
akashchi Jan 27, 2026
d4d145d
do not use local cache
akashchi Jan 27, 2026
d74aada
check cache
akashchi Jan 27, 2026
158ccaf
use testdata
akashchi Jan 27, 2026
8b47e5d
use share pip cache on win
akashchi Jan 27, 2026
3a7b195
fix path to win pip cache
akashchi Jan 27, 2026
89681d5
rm unnecessary env set
akashchi Jan 27, 2026
c6ccbfb
test all
akashchi Jan 27, 2026
f8da426
check opencv
akashchi Jan 28, 2026
448a7ba
use parallel
akashchi Jan 28, 2026
89e39ba
fix arg
akashchi Jan 28, 2026
16f6105
run with one worker
akashchi Jan 28, 2026
f26fb8e
Merge remote-tracking branch 'upstream/latest' into ci/gha/self-hosted
akashchi Jan 29, 2026
6870f91
try with all notebooks
akashchi Jan 29, 2026
264f131
undo parallel, change naming
akashchi Jan 30, 2026
de92a73
run all
akashchi Feb 12, 2026
4bb18d5
merge
akashchi Feb 12, 2026
f889a13
use separate venvs on linux
akashchi Feb 16, 2026
e598de8
Merge remote-tracking branch 'upstream/latest' into ci/gha/self-hosted
akashchi Feb 16, 2026
8d50473
use source venv
akashchi Feb 18, 2026
2682877
split into batches
akashchi Feb 20, 2026
b8b21b7
use python for batching
akashchi Feb 20, 2026
6b47ada
one python for testing
akashchi Feb 20, 2026
2b61340
debug and wording
akashchi Feb 20, 2026
f0863ea
input name
akashchi Feb 20, 2026
949cf35
Merge remote-tracking branch 'upstream/latest' into ci/gha/self-hosted
akashchi Mar 2, 2026
453bcfa
logs
akashchi May 14, 2026
5a8d766
Merge remote-tracking branch 'upstream/latest' into ci/gha/self-hosted
akashchi May 14, 2026
4974d64
use full staging runner
akashchi May 14, 2026
ee0798f
do not install packages
akashchi May 14, 2026
c54834c
try w/o cache
akashchi May 15, 2026
b2cfc73
rm comments
akashchi May 15, 2026
5c820f1
install pillow manually
akashchi May 18, 2026
c083200
check pillow
akashchi May 18, 2026
95d4e27
install pillow
akashchi May 18, 2026
1eae982
try with manually installed pillow
akashchi May 18, 2026
139e349
separate venv
akashchi May 18, 2026
28d8b07
Merge remote-tracking branch 'upstream/latest' into ci/gha/self-hosted
akashchi Jun 5, 2026
9bf18f2
rm comments, return notebooks to old state
akashchi Jun 5, 2026
80acfbc
return notebooks
akashchi Jun 5, 2026
c6d6207
vm to nightly
akashchi Jun 8, 2026
2ad6de2
precommit files
akashchi Jun 8, 2026
6cf73b0
merge
akashchi Jun 29, 2026
23a2f90
use latest docker_tag
akashchi Jun 29, 2026
be4112b
rm unused, run nightly
akashchi Jun 29, 2026
a5f732e
Merge remote-tracking branch 'upstream/latest' into ci/gha/self-hosted
akashchi Jun 30, 2026
894a19b
Merge remote-tracking branch 'upstream/latest' into ci/gha/self-hosted
akashchi Jul 1, 2026
766b36d
use tag from master
akashchi Jul 1, 2026
856acec
3 batches only
akashchi Jul 3, 2026
ca6bc08
Merge remote-tracking branch 'upstream/latest' into ci/gha/self-hosted
akashchi Jul 3, 2026
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
448 changes: 239 additions & 209 deletions .ci/skipped_notebooks.yml

Large diffs are not rendered by default.

89 changes: 89 additions & 0 deletions .ci/split_notebooks.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
"""Discover notebooks in the repository, shuffle them, and split into batches.

Outputs newline-separated notebook paths for each batch as GitHub Actions
multiline outputs (batch_0 … batch_N-1).

Usage (in a workflow step):
python .ci/split_notebooks.py --notebooks_dir notebooks \
--num_batches 4 \
--seed "${{ github.run_id }}"
"""

import argparse
import os
import random
from pathlib import Path


def collect_notebooks(notebooks_dir: Path) -> list[str]:
"""Return sorted list of notebook paths (relative to repo root), excluding test_ prefixed files."""
notebooks = sorted(
str(p)
for p in notebooks_dir.rglob("*.ipynb")
if not p.name.startswith("test_")
)
return notebooks


def split_into_batches(items: list[str], num_batches: int) -> list[list[str]]:
"""Round-robin split *items* into *num_batches* lists."""
batches: list[list[str]] = [[] for _ in range(num_batches)]
for idx, item in enumerate(items):
batches[idx % num_batches].append(item)
return batches


def write_github_output(batches: list[list[str]]) -> None:
"""Write each batch as a multiline GitHub Actions output variable."""
output_file = os.environ.get("GITHUB_OUTPUT")
if not output_file:
# When running locally, just print to stdout
for i, batch in enumerate(batches):
print(f"--- batch_{i} ({len(batch)} notebooks) ---\n")
print("\n".join(batch))
return

with open(output_file, "a") as fh:
for i, batch in enumerate(batches):
print(f"Batch {i}: {len(batch)} notebooks")
print(f'--- Batch {i} ---' + '\n'.join(batch))
fh.write(f"batch_{i}<<BATCH_EOF\n")
fh.write("\n".join(batch) + "\n")
fh.write("BATCH_EOF\n")


def main() -> None:
parser = argparse.ArgumentParser(description="Split notebooks into batches for CI")
parser.add_argument(
"--notebooks_dir",
type=Path,
default=Path("notebooks"),
help="Root directory containing notebooks (default: notebooks)",
)
parser.add_argument(
"--num_batches",
type=int,
default=4,
help="Number of batches to split notebooks into (default: 4)",
)
parser.add_argument(
"--seed",
type=str,
default=None,
help="Random seed for shuffling (e.g. github.run_id for reproducibility within a run)",
)
args = parser.parse_args()

notebooks = collect_notebooks(args.notebooks_dir)
print(f"Found {len(notebooks)} notebooks")

if args.seed is not None:
random.seed(args.seed)
random.shuffle(notebooks)

batches = split_into_batches(notebooks, args.num_batches)
write_github_output(batches)


if __name__ == "__main__":
main()
11 changes: 8 additions & 3 deletions .ci/validate_notebooks.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,8 @@ class NotebookReport(TypedDict):
def parse_arguments():
parser = ArgumentParser()
parser.add_argument("--ignore_config", required=False, default=SKIPPED_NOTEBOOKS_CONFIG_FILENAME)
parser.add_argument("--ignore_list", required=False, nargs="+")
parser.add_argument("--test_list", required=False, nargs="+")
parser.add_argument("--ignore_list", required=False, nargs="+", default=None)
parser.add_argument("--test_list", required=False, nargs="+", default=None)
parser.add_argument("--os", type=validation_config_arg("os"))
parser.add_argument("--python", type=validation_config_arg("python"))
parser.add_argument("--device", type=validation_config_arg("device"))
Expand Down Expand Up @@ -625,6 +625,7 @@ def run_test(
return result

collect_python_packages(python_executable, report_dir / (patched_notebook.stem + "_env_before.txt"))
print(f'Python executable for notebook test: {python_executable}', flush=True)

main_command = [python_executable, "-m", "treon", "--verbose", str(patched_notebook)]

Expand Down Expand Up @@ -739,6 +740,7 @@ def write_single_notebook_report(
job_name: str,
device: str,
saving_dir: Path,
notebook_content: str,
) -> Path:
report_file = saving_dir / notebook_name.replace(".ipynb", ".json")
report = {
Expand All @@ -750,6 +752,7 @@ def write_single_notebook_report(
"ov_version_after": ov_version_after,
"job_name": job_name,
"device_used": device,
"notebook_content": notebook_content
}
with report_file.open("w") as f:
json.dump(report, f)
Expand Down Expand Up @@ -826,8 +829,10 @@ def main():
if args.collect_reports:
job_name = args.job_name or "Unknown"
device = args.device or "Unknown"
print(f'Notebook directory content: {list(report["path"].parent.iterdir())}', flush=True)
notebook_content = json.loads(report["path"].parent.joinpath(f'test_{report["path"].name}').read_text(encoding="utf-8"))
report_path = write_single_notebook_report(
base_version, patched_notebook, status_code, duration, ov_version_before, ov_version_after, job_name, device, reports_dir
base_version, patched_notebook, status_code, duration, ov_version_before, ov_version_after, job_name, device, reports_dir, notebook_content=notebook_content
)
if args.upload_to_db:
cmd = [sys.executable, args.upload_to_db, report_path]
Expand Down
2 changes: 1 addition & 1 deletion .ci/validation_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@


class ValidationMatrix:
os = ("ubuntu-22.04", "windows-2022", "macos-13")
os = ("linux", "windows", "mac")
python = ("3.10", "3.11", "3.12", "3.13")
device = ("cpu", "gpu", "npu")

Expand Down
Loading
Loading