tools/pytools/lib/execute/site_uploader.py (48 lines of code) (raw):

#!/usr/bin/env python3 # 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 enum import os import tempfile from pathlib import Path from command import run, find_command, run_pipe class Mode(enum.Enum): y = 'y' n = 'n' auto = 'auto' def _should_push(mode: Mode) -> bool: if mode != Mode.auto: return mode != Mode.n repo = os.getenv('GITHUB_REPOSITORY') event = os.getenv('GITHUB_EVENT_NAME') print(f'repo={repo}, event={event}') result = (repo is not None) and (repo == 'apache/pulsar-site') result = result and (event is not None) and (event != 'pull_request') return result def _do_push(msg: str, site: Path, branch: str): git = find_command('git', msg="git is required") run(git, 'add', '-A', '.', cwd=site) changed = run(git, 'diff-index', '--quiet', 'HEAD', codes={0, 1}).returncode print(f'changed: {changed}') run(git, 'status', cwd=site) run(git, 'remote', '-v', cwd=site) if os.getenv('GITHUB_ACTIONS') is not None: if os.getenv('GITHUB_EVENT_NAME') != 'schedule': name = os.getenv('GITHUB_ACTOR') email = f'{name}@users.noreply.github.com' else: name = 'github-actions[bot]' email = f'41898282+{name}@users.noreply.github.com' print(f'config with name: {name}, email: {email}') run(git, 'config', 'user.name', name, cwd=site) run(git, 'config', 'user.email', email, cwd=site) if changed != 0: run(git, 'commit', '-m', msg, cwd=site) run(git, 'push', 'origin', branch, cwd=site) def execute(mode: Mode, msg: str, site: Path, branch: str): if _should_push(mode): _do_push(msg, site, branch) else: # show changes git = find_command('git', msg="git is required") with tempfile.TemporaryFile('w+') as f: run(git, 'status', '--porcelain', stdout=f, cwd=site) f.seek(0) change_files = f.read().strip() print(f'\nchange files:\n{change_files}\n')