anki/tools/cleanup_js.py

33 lines
1.2 KiB
Python

# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
# Because Bazel doesn't support building on a sandbox on Windows, our TypeScript
# outputs are not getting properly tracked. When a ts file is renamed or removed,
# the old build product is not automatically cleaned up, and that leads to a
# build failure until the stale outputs are manually removed. This script runs
# through the output folder, and removes all .ts/.js files to unbreak the build.
import os
from pathlib import Path
from typing import Iterable
import stat
root = Path(os.environ["BUILD_WORKSPACE_DIRECTORY"])
out_base = root / ".bazel" / "out"
def dts_and_js_files(path: Path) -> Iterable[Path]:
for entry in path.iterdir():
if "runfiles" in entry.name:
continue
elif entry.is_dir():
yield from dts_and_js_files(entry.resolve())
elif entry.suffix in (".ts", ".js") and not entry.name.startswith("_"):
yield entry.resolve()
for output_folder in out_base.glob("*windows*/bin/ts"):
for path in dts_and_js_files(output_folder):
path.chmod(stat.S_IWRITE)
path.unlink()