From 764a91f0d74a4142cf575b34e75386a39625406b Mon Sep 17 00:00:00 2001 From: Minecon724 Date: Mon, 17 Jun 2024 10:55:05 +0200 Subject: [PATCH] reorgranize again --- data/testing/0.9-alpha.1/meta-v1.json | 1 + .../0.9-alpha.1/realweather-0.9-SNAPSHOT.jar | Bin data/testing/0.9-alpha.2/changelog.txt | 1 + data/testing/0.9-alpha.2/meta-v1.json | 1 + .../0.9-alpha.2/realweather-0.9-SNAPSHOT.jar | Bin 0 -> 71115 bytes data/testing/latest/meta-v1.json | 1 + latest/latest-v1.json | 1 - release.py | 166 ++++++++++++------ releases/0.9-alpha.1/meta-v1.json | 1 - reset.py | 12 +- 10 files changed, 121 insertions(+), 63 deletions(-) create mode 100644 data/testing/0.9-alpha.1/meta-v1.json rename {releases => data/testing}/0.9-alpha.1/realweather-0.9-SNAPSHOT.jar (100%) create mode 100644 data/testing/0.9-alpha.2/changelog.txt create mode 100644 data/testing/0.9-alpha.2/meta-v1.json create mode 100644 data/testing/0.9-alpha.2/realweather-0.9-SNAPSHOT.jar create mode 100644 data/testing/latest/meta-v1.json delete mode 100644 latest/latest-v1.json delete mode 100644 releases/0.9-alpha.1/meta-v1.json diff --git a/data/testing/0.9-alpha.1/meta-v1.json b/data/testing/0.9-alpha.1/meta-v1.json new file mode 100644 index 0000000..a7f21ae --- /dev/null +++ b/data/testing/0.9-alpha.1/meta-v1.json @@ -0,0 +1 @@ +{"label": "0.9-alpha.1", "id": 1, "timestamp": 1718613854, "file": "realweather-0.9-SNAPSHOT.jar", "sha256": "131f03c7f4407ee874f5a05419639fad8160a2975749916cdbbb185b62dd55c7"} \ No newline at end of file diff --git a/releases/0.9-alpha.1/realweather-0.9-SNAPSHOT.jar b/data/testing/0.9-alpha.1/realweather-0.9-SNAPSHOT.jar similarity index 100% rename from releases/0.9-alpha.1/realweather-0.9-SNAPSHOT.jar rename to data/testing/0.9-alpha.1/realweather-0.9-SNAPSHOT.jar diff --git a/data/testing/0.9-alpha.2/changelog.txt b/data/testing/0.9-alpha.2/changelog.txt new file mode 100644 index 0000000..bb09b88 --- /dev/null +++ b/data/testing/0.9-alpha.2/changelog.txt @@ -0,0 +1 @@ +no changes \ No newline at end of file diff --git a/data/testing/0.9-alpha.2/meta-v1.json b/data/testing/0.9-alpha.2/meta-v1.json new file mode 100644 index 0000000..8534252 --- /dev/null +++ b/data/testing/0.9-alpha.2/meta-v1.json @@ -0,0 +1 @@ +{"label": "0.9-alpha.2", "id": 2, "timestamp": 1718614497, "file": "realweather-0.9-SNAPSHOT.jar", "sha256": "131f03c7f4407ee874f5a05419639fad8160a2975749916cdbbb185b62dd55c7"} \ No newline at end of file diff --git a/data/testing/0.9-alpha.2/realweather-0.9-SNAPSHOT.jar b/data/testing/0.9-alpha.2/realweather-0.9-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..05b2594d871dc464152634f00c5de46508e8b2ca GIT binary patch literal 71115 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 {S9=8NMl%NW7 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 literal 0 HcmV?d00001 diff --git a/data/testing/latest/meta-v1.json b/data/testing/latest/meta-v1.json new file mode 100644 index 0000000..8534252 --- /dev/null +++ b/data/testing/latest/meta-v1.json @@ -0,0 +1 @@ +{"label": "0.9-alpha.2", "id": 2, "timestamp": 1718614497, "file": "realweather-0.9-SNAPSHOT.jar", "sha256": "131f03c7f4407ee874f5a05419639fad8160a2975749916cdbbb185b62dd55c7"} \ No newline at end of file diff --git a/latest/latest-v1.json b/latest/latest-v1.json deleted file mode 100644 index 31d6220..0000000 --- a/latest/latest-v1.json +++ /dev/null @@ -1 +0,0 @@ -{"label": "0.9-alpha.1", "id": 1, "timestamp": 1718539114, "file": "realweather-0.9-SNAPSHOT.jar"} \ No newline at end of file diff --git a/release.py b/release.py index a3352c5..637532c 100755 --- a/release.py +++ b/release.py @@ -1,20 +1,14 @@ #!/usr/bin/python3 -import json, os, time -from typing import Tuple +import json, os, time, tempfile, shutil +from hashlib import sha256 -meta_file_name = 'meta-v1.json' -latest_file_name = 'latest-v1.json' -latest_file_path = os.path.join('latest', latest_file_name) +META_FILENAME = 'meta-v1.json' +BASE_DIR = 'data' +WAITING_DIR = 'pending' +TEMP_DIR = tempfile.TemporaryDirectory() -def confirm(prompt: str) -> bool: - confirmed = input(prompt + ' (Y/N) ') - return confirmed.lower() == 'y' - -def load_latest_data() -> dict: - if os.path.isfile(latest_file_path): - return json.loads(open(latest_file_path).read()) - return {'id': 0} +# file scanner functions def match_name(filename: str, extension: str=None, exact_name: str=None): if exact_name is not None: @@ -23,7 +17,7 @@ def match_name(filename: str, extension: str=None, exact_name: str=None): return filename.lower().endswith(extension.lower()) return True -def scan_for_file(ask: bool=False, extension: str=None, exact_name: str=None) -> Tuple[str]: +def scan_for_file(ask: bool=False, extension: str=None, exact_name: str=None) -> tuple[str]: for file in os.scandir(): if file.is_dir(): continue if not match_name(file.name, extension, exact_name): continue @@ -35,7 +29,7 @@ def scan_for_file(ask: bool=False, extension: str=None, exact_name: str=None) -> return (file.path, file.name) return (None, None) -def wait_for_file(waiting_dir: str, extension: str=None, exact_name: str=None) -> Tuple[str]: +def wait_for_file(waiting_dir: str, extension: str=None) -> tuple[str]: print(f"Please put a {extension} file in {waiting_dir}") while True: files = [i for i in os.scandir(waiting_dir)] @@ -48,7 +42,7 @@ def wait_for_file(waiting_dir: str, extension: str=None, exact_name: str=None) - filepath = file.path filename = file.name - if match_name(filename, extension, exact_name): + if match_name(filename, extension): break else: os.remove(filepath) @@ -56,65 +50,123 @@ def wait_for_file(waiting_dir: str, extension: str=None, exact_name: str=None) - return (filepath, filename) -def write_metadata(metadata: dict): - dir = metadata['label'] +def just_find_file(name: str) -> tuple[str]: + spl = name.split('.') + extension = spl[-1] + exact_name = name[:-len(extension)-1] if len(spl) > 1 else None + + filepath, filename = scan_for_file(True, extension, exact_name) + if filepath is None: + try: + os.makedirs(WAITING_DIR, exist_ok=True) + filepath, filename = wait_for_file(WAITING_DIR, extension) + except KeyboardInterrupt: + os.rmdir(WAITING_DIR) + return + + if filepath is not None: + tpath = os.path.join(TEMP_DIR.name, filename) + shutil.move(filepath, tpath) + filepath = tpath + + return (filepath, filename) + +# directory util fnctions + +def make_path(channel: str, version: str=None, filename: str=None) -> str: + args = [channel, version, filename] + args = [i for i in args if i is not None] + return os.path.join(BASE_DIR, *args) + +def list_channels() -> list[str]: + return next(os.walk(BASE_DIR))[1] + +# verificatoin functions + +def channel_exists(channel: str) -> bool: + """Checks if channel exists""" + return os.path.isdir(make_path(channel)) + +def check_version_exists(version: str) -> str | None: + """ + Check if version exists in any channel. + If yes, returns that channel, otherwise None + """ + for channel in list_channels(): + if os.path.isdir(make_path(channel, version)): + return channel + +# metadata functions + +def load_latest_data(channel: str) -> dict: + path = make_path(channel, 'latest', META_FILENAME) + if os.path.isfile(path): + return json.loads(open(path).read()) + return {'id': 0} + +def write_metadata(channel: str, metadata: dict): + version = metadata['label'] metadata = json.dumps(metadata) - for filepath in [os.path.join('releases', dir, meta_file_name), latest_file_path]: - file = open(filepath, 'w') - file.write(metadata) - file.close() + for filepath in [make_path(channel, version, META_FILENAME), make_path(channel, 'latest', META_FILENAME)]: + with open(filepath, 'w') as file: + file.write(metadata) + +# other + +def confirm(prompt: str) -> bool: + confirmed = input(prompt + ' (Y/N) ') + return confirmed.lower() == 'y' + +def hash_file(filepath: str) -> str: + with open(filepath, 'rb') as file: + return sha256(file.read()).hexdigest() + +# main def main(): - latest_data = load_latest_data() - if latest_data['id'] > 0: - print(f"Current release: {latest_data['label']}") - print(f"Released {time.strftime('%d.%m.%Y %H:%M', time.localtime(latest_data['timestamp']))}") - print('') + channel = input('Channel? ({}) '.format(', '.join(list_channels()))) + if not channel_exists(channel): + print(f"Channel {channel} doesn't exist") + return version = input('New version? ') + exists_in = check_version_exists(version) + if exists_in is not None: + print(f"This version already exists in channel {exists_in}. Choose a different version.") + return - if os.path.isdir(version): - raise FileExistsError() - - filepath, filename = scan_for_file(ask=True, extension='jar') - - if filepath is None: - os.makedirs('pending', exist_ok=True) - try: - filepath, filename = wait_for_file('pending', 'jar') - except KeyboardInterrupt: - os.rmdir('pending') - return + jar_filepath, jar_filename = just_find_file('jar') changelog = confirm('Do you want to include a changelog?') if changelog: - cfilepath, cfilename = scan_for_file(ask=True, exact_name='changelog.txt') - if cfilepath is None: - try: - os.makedirs('pending', exist_ok=True) - cfilepath, cfilename = wait_for_file('pending', 'txt') - except KeyboardInterrupt: - os.rmdir('pending') - return + chlog_filepath, chlog_filename = just_find_file('changelog.txt') - version_dir = os.path.join('releases', version) + # + latest_data = load_latest_data(channel) + hash = hash_file(jar_filepath) + + version_dir = make_path(channel, version) + + os.makedirs(make_path(channel, 'latest'), exist_ok=True) os.mkdir(version_dir) - os.rename(filepath, os.path.join(version_dir, filename)) - if changelog: os.rename(cfilepath, os.path.join(version_dir, 'changelog.txt')) - - try: - os.rmdir('pending') - except FileNotFoundError: - pass + shutil.move(jar_filepath, os.path.join(version_dir, jar_filename)) + if changelog: shutil.move(chlog_filepath, os.path.join(version_dir, 'changelog.txt')) metadata = { 'label': version, 'id': latest_data['id'] + 1, 'timestamp': int(time.time()), - 'file': filename + 'file': jar_filename, + 'sha256': hash } - write_metadata(metadata) + + write_metadata(channel, metadata) + + try: + os.rmdir(WAITING_DIR) + except FileNotFoundError: + pass print("Done, don't forget to commit and push") diff --git a/releases/0.9-alpha.1/meta-v1.json b/releases/0.9-alpha.1/meta-v1.json deleted file mode 100644 index 31d6220..0000000 --- a/releases/0.9-alpha.1/meta-v1.json +++ /dev/null @@ -1 +0,0 @@ -{"label": "0.9-alpha.1", "id": 1, "timestamp": 1718539114, "file": "realweather-0.9-SNAPSHOT.jar"} \ No newline at end of file diff --git a/reset.py b/reset.py index c07b2e1..ff88b81 100755 --- a/reset.py +++ b/reset.py @@ -1,7 +1,10 @@ #!/usr/bin/python3 from shutil import rmtree -from os import remove, mkdir +from os import remove, mkdir, path + +BASE_DIR = 'data' +CHANNELS = ['release', 'testing'] confirmation = input('If you really want to delete all releases, type CONFIRM: ') @@ -9,8 +12,9 @@ if confirmation != 'CONFIRM': print('Cancelled') exit() -for dir in ['releases', 'latest']: - rmtree(dir) - mkdir(dir) +rmtree(BASE_DIR, ignore_errors=True) +mkdir(BASE_DIR) +for channel in CHANNELS: + mkdir(path.join(BASE_DIR, channel)) print('Reset complete')