33 lines
1.2 KiB
Python
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()
|