From f370fe0dfa780be0f4da68b0831f108ebbf17cfc Mon Sep 17 00:00:00 2001 From: Jarek Potiuk Date: Tue, 20 May 2025 11:23:07 -0400 Subject: [PATCH] [v3-0-test] Stabilize FAB asset compilation (#50829) The FAB asset compilation might trigger different results depending on time/libraries it is run with. Since we commit generated files to repository, we should also commit the hash file of the www directory so that we only trigger rebuild when any of the www files change. Previously we stored the hash in `.build` directory which was not committed to the repo - which works fine for dynamic assset generation we have for the UI, but since FAB assets change rarely - we commmit the generated files, and we should also commit the hash file in this case. (cherry picked from commit 0a3b58abf372442843d649eb88cd829ff8aa0ea7) Co-authored-by: Jarek Potiuk --- .rat-excludes | 8 ++++++++ providers/fab/www-hash.txt | 1 + scripts/ci/pre_commit/compile_fab_assets.py | 19 +++++++++---------- 3 files changed, 18 insertions(+), 10 deletions(-) create mode 100644 providers/fab/www-hash.txt diff --git a/.rat-excludes b/.rat-excludes index 75a85f9873fa1..95e31f35fba37 100644 --- a/.rat-excludes +++ b/.rat-excludes @@ -161,9 +161,17 @@ PKG-INFO .openapi-generator-ignore version.txt v1*.yaml +v2*.yaml _private_ui*.yaml # Front end generated files api-generated.ts openapi-gen pnpm-lock.yaml + +# python generated file +generated.py +auth_generated.py + +# hash files +www-hash.txt diff --git a/providers/fab/www-hash.txt b/providers/fab/www-hash.txt new file mode 100644 index 0000000000000..2df879f9871bd --- /dev/null +++ b/providers/fab/www-hash.txt @@ -0,0 +1 @@ +dcce95d1f3f0f8e01c1e94c3915367e3acc00c022f76ebb8efad935cafe36d03 diff --git a/scripts/ci/pre_commit/compile_fab_assets.py b/scripts/ci/pre_commit/compile_fab_assets.py index eb767972a8960..58f4c9fde36e8 100755 --- a/scripts/ci/pre_commit/compile_fab_assets.py +++ b/scripts/ci/pre_commit/compile_fab_assets.py @@ -25,13 +25,16 @@ import sys from pathlib import Path +from common_precommit_utils import AIRFLOW_ROOT_PATH + # NOTE!. This script is executed from node environment created by pre-commit and this environment # Cannot have additional Python dependencies installed. We should not import any of the libraries # here that are not available in stdlib! You should not import common_precommit_utils.py here because # They are importing rich library which is not available in the node environment. -AIRFLOW_SOURCES_PATH = Path(__file__).parents[3].resolve() -WWW_HASH_FILE = AIRFLOW_SOURCES_PATH / ".build" / "www" / "hash.txt" +FAB_PROVIDER_ROOT_PATH = AIRFLOW_ROOT_PATH / "providers" / "fab" +FAB_PROVIDER_WWW_PATH = FAB_PROVIDER_ROOT_PATH / "src" / "airflow" / "providers" / "fab" / "www" +FAB_PROVIDER_WWW_HASH_FILE = FAB_PROVIDER_ROOT_PATH / "www-hash.txt" def get_directory_hash(directory: Path, skip_path_regexp: str | None = None) -> str: @@ -58,10 +61,9 @@ def get_directory_hash(directory: Path, skip_path_regexp: str | None = None) -> def compile_assets(www_directory: Path, www_hash_file_name: str): node_modules_directory = www_directory / "node_modules" dist_directory = www_directory / "static" / "dist" - www_hash_file = AIRFLOW_SOURCES_PATH / ".build" / "www" / www_hash_file_name - www_hash_file.parent.mkdir(exist_ok=True, parents=True) + FAB_PROVIDER_WWW_HASH_FILE.parent.mkdir(exist_ok=True, parents=True) if node_modules_directory.exists() and dist_directory.exists(): - old_hash = www_hash_file.read_text() if www_hash_file.exists() else "" + old_hash = FAB_PROVIDER_WWW_HASH_FILE.read_text() if FAB_PROVIDER_WWW_HASH_FILE.exists() else "" new_hash = get_directory_hash(www_directory, skip_path_regexp=r".*node_modules.*") if new_hash == old_hash: print(f"The '{www_directory}' directory has not changed! Skip regeneration.") @@ -87,12 +89,9 @@ def compile_assets(www_directory: Path, www_hash_file_name: str): sys.exit(result.returncode) subprocess.check_call(["yarn", "run", "build"], cwd=os.fspath(www_directory), env=env) new_hash = get_directory_hash(www_directory, skip_path_regexp=r".*node_modules.*") - www_hash_file.write_text(new_hash) + FAB_PROVIDER_WWW_HASH_FILE.write_text(new_hash + "\n") if __name__ == "__main__": # Compile assets for fab provider - fab_provider_www_directory = ( - AIRFLOW_SOURCES_PATH / "providers" / "fab" / "src" / "airflow" / "providers" / "fab" / "www" - ) - compile_assets(fab_provider_www_directory, "hash_fab.txt") + compile_assets(FAB_PROVIDER_WWW_PATH, "hash_fab.txt")