Progress fix (#354)

* add python deps, print -> LOG

* add type hinting

* add more debug loggin

* more python deps

* aciton fix

* make wibo optional for progress history
This commit is contained in:
Pheenoh 2023-06-27 11:16:48 -06:00 committed by GitHub
parent 43ff6501d9
commit 8603f35cdc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 32 additions and 21 deletions

View File

@ -29,7 +29,10 @@ jobs:
run_id: ${{ steps.get_run_id.outputs.run_id }} run_id: ${{ steps.get_run_id.outputs.run_id }}
name: artifact-${{ steps.get_run_id.outputs.run_id }} name: artifact-${{ steps.get_run_id.outputs.run_id }}
workflow: ${{ env.WORKFLOW }} workflow: ${{ env.WORKFLOW }}
- name: Install Python Deps
run: |
pip install GitPython rich
- name: Upload Progress to Frogress - name: Upload Progress to Frogress
env: env:
PROGRESS_API_KEY: ${{ secrets.FROGRESS_API_KEY }} PROGRESS_API_KEY: ${{ secrets.FROGRESS_API_KEY }}
run: ./tp upload-progress -b https://progress.deco.mp/ -p twilightprincess -v gcn_usa progress-${{ steps.get_run_id.outputs.run_id }}.json run: ./tp upload-progress progress-${{ steps.get_run_id.outputs.run_id }}.json -b https://progress.deco.mp/ -p twilightprincess -v gcn_usa

View File

@ -45,6 +45,7 @@ try:
from rich.progress import Progress from rich.progress import Progress
from rich.text import Text from rich.text import Text
from rich.table import Table from rich.table import Table
from typing import Optional
except ImportError as ex: except ImportError as ex:
_handle_import_error(ex) _handle_import_error(ex)
@ -1198,55 +1199,60 @@ def check_sha1(game_path: Path, build_path: Path, include_rels: bool):
return True return True
def copy_progress_script(): def copy_progress_script() -> None:
file_path = './tools/tp.py' file_path = './tools/tp.py'
destination_path = './tools/tp_copy.py' destination_path = './tools/tp_copy.py'
if not os.path.exists(destination_path): if not os.path.exists(destination_path):
shutil.copyfile(file_path, destination_path) shutil.copyfile(file_path, destination_path)
def make_progress_dir(): def make_progress_dir() -> None:
progress_dir = './progress' progress_dir = './progress'
if not os.path.exists(progress_dir): if not os.path.exists(progress_dir):
os.mkdir(progress_dir) os.mkdir(progress_dir)
def generate_progress(repo, commit): def generate_progress(commit: str, wibo_path: Optional[str] = None) -> None:
git_show_output = subprocess.check_output(['git', 'show', '-s', '--format=%ct', commit]).decode('ascii').strip() git_show_output = subprocess.check_output(['git', 'show', '-s', '--format=%ct', commit]).decode('ascii').strip()
commit_timestamp = git_show_output commit_timestamp = git_show_output
commit_string = f'progress/{commit_timestamp}_{commit}.json' commit_string = f'progress/{commit_timestamp}_{commit}.json'
if os.path.exists(commit_string): if os.path.exists(commit_string):
print(f"File {commit_string} already exists, skipping.") LOG.info(f"File {commit_string} already exists, skipping.")
return return
process = subprocess.Popen(["make", "clean_all"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) process = subprocess.Popen(["make", "clean_all"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = process.communicate() stdout, stderr = process.communicate()
if process.returncode != 0: if process.returncode != 0:
print(f"Error during make clean_all: {stderr.decode()}") LOG.error(f"Error during make clean_all: {stderr.decode()}")
return return
print(stdout.decode()) LOG.debug(f"stdout: {stdout.decode()}")
process = subprocess.Popen(["make", "all", "rels", f"-j{os.cpu_count()}", "WINE=~/wibo/build/wibo"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) make_command = ["make", "all", "rels", f"-j{os.cpu_count()}"]
if wibo_path:
make_command.append(f"WINE={wibo_path}")
process = subprocess.Popen(make_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = process.communicate() stdout, stderr = process.communicate()
if process.returncode != 0: if process.returncode != 0:
print(f"Error during make all rels: {stderr.decode()}") LOG.error(f"Error during make all rels: {stderr.decode()}")
return return
print(stdout.decode()) LOG.debug(f"stdout: {stdout.decode()}")
command = ["python", "./tools/tp_copy.py", "progress", "-f", "JSON"] command = ["python", "./tools/tp_copy.py", "progress", "-f", "JSON"]
with open(commit_string, 'w') as outfile: with open(commit_string, 'w') as outfile:
process = subprocess.Popen(command, stdout=outfile, stderr=subprocess.PIPE) process = subprocess.Popen(command, stdout=outfile, stderr=subprocess.PIPE)
_, stderr = process.communicate() stdout, stderr = process.communicate()
if process.returncode != 0: if process.returncode != 0:
print(f"Error: {stderr.decode()}") LOG.error(f"Error: {stderr.decode()}")
def checkout_and_run(repo_path, start_commit_hash): LOG.debug(f"stdout: {stdout.decode()}")
def checkout_and_run(repo_path: str, start_commit_hash: str, wibo_path: Optional[str] = None) -> None:
repo = git.Repo(repo_path) repo = git.Repo(repo_path)
head_commit = repo.head.commit head_commit = repo.head.commit
@ -1258,19 +1264,21 @@ def checkout_and_run(repo_path, start_commit_hash):
commits.append(repo.commit(start_commit_hash)) commits.append(repo.commit(start_commit_hash))
for commit in commits[::-1]: for commit in commits[::-1]:
print(f"Checking out commit {commit.hexsha}") LOG.info(f"Checking out commit {commit.hexsha}")
repo.git.checkout(commit.hexsha) repo.git.checkout(commit.hexsha)
generate_progress(repo, commit.hexsha) generate_progress(commit.hexsha, wibo_path)
except Exception as e: except Exception as e:
print(f"Error occurred: {e}") LOG.error(f"Error occurred: {e}")
finally: finally:
LOG.debug(f"Checking out origin head commit: {head_commit.hexsha}")
repo.git.checkout(head_commit.hexsha) repo.git.checkout(head_commit.hexsha)
@tp.command(name="progress-history") @tp.command(name="progress-history")
@click.option("--debug/--no-debug", default=False) @click.option("--debug/--no-debug", default=False)
@click.option("--repo-path", default=".", required=False, help="Path to your git repository. Defaults to current directory.") @click.option("--repo-path", default=".", required=False, help="Path to your git repository. Defaults to current directory.")
@click.option("--start-commit", default="bc428f7f65b97cc9035aed1dc1b71c54ff2e6c3d", required=False, help="Start commit hash. If none supplied, will start at the commit where Julgodis added the progress script.") @click.option("--start-commit", default="bc428f7f65b97cc9035aed1dc1b71c54ff2e6c3d", required=False, help="Start commit hash. If none supplied, will start at the commit where Julgodis added the progress script.")
def progress_history(debug, repo_path, start_commit): @click.option("--wibo-path", default=None, required=False, help="Path to wibo build. If none supplied, the default Wine will be used.")
def progress_history(debug, repo_path, start_commit, wibo_path):
if debug: if debug:
LOG.setLevel(logging.DEBUG) LOG.setLevel(logging.DEBUG)
@ -1278,7 +1286,7 @@ def progress_history(debug, repo_path, start_commit):
confirmation = input().lower() confirmation = input().lower()
if confirmation == 'y': if confirmation == 'y':
checkout_and_run(repo_path, start_commit) checkout_and_run(repo_path, start_commit, wibo_path)
else: else:
sys.exit(0) sys.exit(0)
@ -1304,7 +1312,7 @@ def generate_url(base_url: str, project: str, version: str) -> str:
@click.option('-p', '--project', required=True, help='Project slug') @click.option('-p', '--project', required=True, help='Project slug')
@click.option('-v', '--version', required=True, help='Version slug') @click.option('-v', '--version', required=True, help='Version slug')
@click.argument('input', type=click.Path(exists=True)) @click.argument('input', type=click.Path(exists=True))
def upload_progress(debug, base_url, api_key, project, version, input): def upload_progress(debug: bool, base_url: str, api_key: str, project: str, version: str, input: str) -> None:
if debug: if debug:
LOG.setLevel(logging.DEBUG) LOG.setLevel(logging.DEBUG)