mirror of
https://github.com/python/cpython.git
synced 2026-02-22 07:00:51 +00:00
compute-changes.py: Fix & test process_changed_files() (#144674)
Co-authored-by: Chris Eibl <138194463+chris-eibl@users.noreply.github.com>
This commit is contained in:
parent
0341b10a5d
commit
930b3fd1df
3 changed files with 158 additions and 5 deletions
7
.github/CODEOWNERS
vendored
7
.github/CODEOWNERS
vendored
|
|
@ -63,9 +63,10 @@
|
|||
.azure-pipelines/ @AA-Turner
|
||||
|
||||
# GitHub & related scripts
|
||||
.github/ @ezio-melotti @hugovk @AA-Turner @webknjaz
|
||||
Tools/build/compute-changes.py @AA-Turner @hugovk @webknjaz
|
||||
Tools/build/verify_ensurepip_wheels.py @AA-Turner @pfmoore @pradyunsg
|
||||
.github/ @ezio-melotti @hugovk @AA-Turner @webknjaz
|
||||
Tools/build/compute-changes.py @AA-Turner @hugovk @webknjaz
|
||||
Lib/test/test_tools/test_compute_changes.py @AA-Turner @hugovk @webknjaz
|
||||
Tools/build/verify_ensurepip_wheels.py @AA-Turner @pfmoore @pradyunsg
|
||||
|
||||
# Pre-commit
|
||||
.pre-commit-config.yaml @hugovk
|
||||
|
|
|
|||
144
Lib/test/test_tools/test_compute_changes.py
Normal file
144
Lib/test/test_tools/test_compute_changes.py
Normal file
|
|
@ -0,0 +1,144 @@
|
|||
"""Tests to cover the Tools/build/compute-changes.py script."""
|
||||
|
||||
import importlib
|
||||
import os
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
from unittest.mock import patch
|
||||
|
||||
from test.test_tools import skip_if_missing, imports_under_tool
|
||||
|
||||
skip_if_missing("build")
|
||||
|
||||
with patch.dict(os.environ, {"GITHUB_DEFAULT_BRANCH": "main"}):
|
||||
with imports_under_tool("build"):
|
||||
compute_changes = importlib.import_module("compute-changes")
|
||||
|
||||
process_changed_files = compute_changes.process_changed_files
|
||||
Outputs = compute_changes.Outputs
|
||||
ANDROID_DIRS = compute_changes.ANDROID_DIRS
|
||||
IOS_DIRS = compute_changes.IOS_DIRS
|
||||
MACOS_DIRS = compute_changes.MACOS_DIRS
|
||||
WASI_DIRS = compute_changes.WASI_DIRS
|
||||
RUN_TESTS_IGNORE = compute_changes.RUN_TESTS_IGNORE
|
||||
UNIX_BUILD_SYSTEM_FILE_NAMES = compute_changes.UNIX_BUILD_SYSTEM_FILE_NAMES
|
||||
LIBRARY_FUZZER_PATHS = compute_changes.LIBRARY_FUZZER_PATHS
|
||||
|
||||
|
||||
class TestProcessChangedFiles(unittest.TestCase):
|
||||
|
||||
def test_windows(self):
|
||||
f = {Path(".github/workflows/reusable-windows.yml")}
|
||||
result = process_changed_files(f)
|
||||
self.assertTrue(result.run_tests)
|
||||
self.assertTrue(result.run_windows_tests)
|
||||
|
||||
def test_docs(self):
|
||||
for f in (
|
||||
".github/workflows/reusable-docs.yml",
|
||||
"Doc/library/datetime.rst",
|
||||
"Doc/Makefile",
|
||||
):
|
||||
with self.subTest(f=f):
|
||||
result = process_changed_files({Path(f)})
|
||||
self.assertTrue(result.run_docs)
|
||||
self.assertFalse(result.run_tests)
|
||||
|
||||
def test_ci_fuzz_stdlib(self):
|
||||
for p in LIBRARY_FUZZER_PATHS:
|
||||
with self.subTest(p=p):
|
||||
if p.is_dir():
|
||||
f = p / "file"
|
||||
elif p.is_file():
|
||||
f = p
|
||||
else:
|
||||
continue
|
||||
result = process_changed_files({f})
|
||||
self.assertTrue(result.run_ci_fuzz_stdlib)
|
||||
|
||||
def test_android(self):
|
||||
for d in ANDROID_DIRS:
|
||||
with self.subTest(d=d):
|
||||
result = process_changed_files({Path(d) / "file"})
|
||||
self.assertTrue(result.run_tests)
|
||||
self.assertTrue(result.run_android)
|
||||
self.assertFalse(result.run_windows_tests)
|
||||
|
||||
def test_ios(self):
|
||||
for d in IOS_DIRS:
|
||||
with self.subTest(d=d):
|
||||
result = process_changed_files({Path(d) / "file"})
|
||||
self.assertTrue(result.run_tests)
|
||||
self.assertTrue(result.run_ios)
|
||||
self.assertFalse(result.run_windows_tests)
|
||||
|
||||
def test_macos(self):
|
||||
f = {Path(".github/workflows/reusable-macos.yml")}
|
||||
result = process_changed_files(f)
|
||||
self.assertTrue(result.run_tests)
|
||||
self.assertTrue(result.run_macos)
|
||||
|
||||
for d in MACOS_DIRS:
|
||||
with self.subTest(d=d):
|
||||
result = process_changed_files({Path(d) / "file"})
|
||||
self.assertTrue(result.run_tests)
|
||||
self.assertTrue(result.run_macos)
|
||||
self.assertFalse(result.run_windows_tests)
|
||||
|
||||
def test_wasi(self):
|
||||
f = {Path(".github/workflows/reusable-wasi.yml")}
|
||||
result = process_changed_files(f)
|
||||
self.assertTrue(result.run_tests)
|
||||
self.assertTrue(result.run_wasi)
|
||||
|
||||
for d in WASI_DIRS:
|
||||
with self.subTest(d=d):
|
||||
result = process_changed_files({d / "file"})
|
||||
self.assertTrue(result.run_tests)
|
||||
self.assertTrue(result.run_wasi)
|
||||
self.assertFalse(result.run_windows_tests)
|
||||
|
||||
def test_unix(self):
|
||||
for f in UNIX_BUILD_SYSTEM_FILE_NAMES:
|
||||
with self.subTest(f=f):
|
||||
result = process_changed_files({f})
|
||||
self.assertTrue(result.run_tests)
|
||||
self.assertFalse(result.run_windows_tests)
|
||||
|
||||
def test_msi(self):
|
||||
for f in (
|
||||
".github/workflows/reusable-windows-msi.yml",
|
||||
"Tools/msi/build.bat",
|
||||
):
|
||||
with self.subTest(f=f):
|
||||
result = process_changed_files({Path(f)})
|
||||
self.assertTrue(result.run_windows_msi)
|
||||
|
||||
def test_all_run(self):
|
||||
for f in (
|
||||
".github/workflows/some-new-workflow.yml",
|
||||
".github/workflows/build.yml",
|
||||
):
|
||||
with self.subTest(f=f):
|
||||
result = process_changed_files({Path(f)})
|
||||
self.assertTrue(result.run_tests)
|
||||
self.assertTrue(result.run_android)
|
||||
self.assertTrue(result.run_ios)
|
||||
self.assertTrue(result.run_macos)
|
||||
self.assertTrue(result.run_ubuntu)
|
||||
self.assertTrue(result.run_wasi)
|
||||
|
||||
def test_all_ignored(self):
|
||||
for f in RUN_TESTS_IGNORE:
|
||||
with self.subTest(f=f):
|
||||
self.assertEqual(process_changed_files({Path(f)}), Outputs())
|
||||
|
||||
def test_wasi_and_android(self):
|
||||
f = {Path(".github/workflows/reusable-wasi.yml"), Path("Android/file")}
|
||||
result = process_changed_files(f)
|
||||
self.assertTrue(result.run_tests)
|
||||
self.assertTrue(result.run_wasi)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
@ -225,19 +225,27 @@ def process_changed_files(changed_files: Set[Path]) -> Outputs:
|
|||
|
||||
if file.parent == GITHUB_WORKFLOWS_PATH:
|
||||
if file.name in ("build.yml", "reusable-cifuzz.yml"):
|
||||
run_tests = run_ci_fuzz = run_ci_fuzz_stdlib = True
|
||||
run_tests = run_ci_fuzz = run_ci_fuzz_stdlib = run_windows_tests = True
|
||||
has_platform_specific_change = False
|
||||
continue
|
||||
if file.name == "reusable-docs.yml":
|
||||
run_docs = True
|
||||
continue
|
||||
if file.name == "reusable-windows.yml":
|
||||
run_tests = True
|
||||
run_windows_tests = True
|
||||
continue
|
||||
if file.name == "reusable-windows-msi.yml":
|
||||
run_windows_msi = True
|
||||
continue
|
||||
if file.name == "reusable-macos.yml":
|
||||
run_tests = True
|
||||
platforms_changed.add("macos")
|
||||
continue
|
||||
if file.name == "reusable-wasi.yml":
|
||||
run_tests = True
|
||||
platforms_changed.add("wasi")
|
||||
continue
|
||||
continue
|
||||
|
||||
if not doc_file and file not in RUN_TESTS_IGNORE:
|
||||
run_tests = True
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue