tools/pytools/lib/execute/site_builder.py (36 lines of code) (raw):

# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. import shutil import tempfile from pathlib import Path from command import find_command, run from constant import site_path def execute(asf_site: Path): # 1. Get modified files git = find_command('git', msg="git is required") with tempfile.TemporaryFile('w+') as f: run(git, 'diff', '--name-only', 'HEAD~1', 'HEAD', stdout=f, cwd=site_path()) f.seek(0) modified_files = f.read().splitlines() for file in modified_files: print(f"{file} was modified") # # 2. Install and build yarn = find_command('yarn', msg="yarn is required") node = find_command('node', msg="node is required") bash = find_command('bash', msg="bash is required") run(yarn, 'install', cwd=site_path()) run(node, 'scripts/replace.js', cwd=site_path()) run(bash, 'scripts/split-version-build.sh', *modified_files, cwd=site_path()) latest_content = site_path() / 'build' # 3. Publish content to asf-site-next branch published_content = asf_site / 'content' if not published_content.exists(): published_content.mkdir(parents=True, exist_ok=True) is_build_all = (site_path() / 'scripts' / '.build').read_text().strip() is_build_all = is_build_all == "1" print(f'is_build_all: {is_build_all}') if is_build_all: whitelist = ['api', 'charts'] old_files = [f for f in published_content.glob('*') if f.name not in whitelist] print(f'clean all the old content: {list(map(str, old_files))}') for old_file in old_files: if old_file.is_dir(): shutil.rmtree(old_file) else: old_file.unlink() shutil.copytree(latest_content, published_content, dirs_exist_ok=True)