compose-lobsters/scripts/deploy-snapshot.py

91 lines
2.3 KiB
Python
Executable file

#!/usr/bin/env python3
import subprocess
import os
from typing import Optional
from pathlib import Path
import glob
import tempfile
NIGHTLY_TAG = "nightly"
def exec(command_str: str, shell: bool = False) -> Optional[int]:
print(f"Executing '{command_str}'")
proc = None
if shell:
proc = subprocess.run(command_str, text=True, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
else:
proc = subprocess.run(
command_str.split(" "), text=True, shell=False, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
)
result = proc.returncode
print(f"{proc.stdout}")
return result
def exec_out(command_str: str, shell: bool = False) -> str:
print(f"Executing '{command_str}'")
proc = None
if shell:
proc = subprocess.run(command_str, capture_output=True, text=True, shell=True)
else:
proc = subprocess.run(
command_str.split(" "), capture_output=True, text=True, shell=False
)
data = proc.stdout
return data
def get_current_rev() -> str:
return exec_out("git rev-parse --short HEAD")
def get_asset_directory() -> Path:
workspace = os.getenv("GITHUB_WORKSPACE")
return Path(workspace) / "android" / "apk"
def overwrite_local_tag():
exec(f"git tag -f {NIGHTLY_TAG} -m 'Nightly release'", shell=True)
def overwrite_remote_tag():
exec(f"git push -f origin {NIGHTLY_TAG}")
def has_release() -> bool:
result = exec(f"gh release view {NIGHTLY_TAG}")
return result is not None and result == 0
def delete_release():
exec(f"gh release delete --yes {NIGHTLY_TAG}")
def create_release():
with tempfile.NamedTemporaryFile("w+") as cf:
cf.write(f"Latest release for Claw from revision {get_current_rev()}")
cf.flush()
cwd = os.getcwd()
os.chdir(get_asset_directory())
apks = " ".join(glob.glob("*.apk"))
exec(
"gh release create --prerelease "
+f"--title 'Latest snapshot build' --notes-file {cf.name} "
+f"{NIGHTLY_TAG} {apks}",
shell=True
)
os.chdir(cwd)
def main():
overwrite_local_tag()
if has_release():
delete_release()
overwrite_remote_tag()
create_release()
if __name__ == "__main__":
main()