From 72a96999dfb1d4f28040349b4b3dc3154d52fc23 Mon Sep 17 00:00:00 2001 From: Whispering Wind <151555003+ReturnFI@users.noreply.github.com> Date: Tue, 11 Mar 2025 01:01:08 +0330 Subject: [PATCH] feat: Add version checking and display Integrated version checking into `cli_api.py` and `cli.py` --- core/cli.py | 25 ++++++++++++++ core/cli_api.py | 12 +++++++ core/scripts/hysteria2/version.sh | 57 +++++++++++++++++++++++++++++++ 3 files changed, 94 insertions(+) create mode 100644 core/scripts/hysteria2/version.sh diff --git a/core/cli.py b/core/cli.py index 779e3a6..5679ea0 100644 --- a/core/cli.py +++ b/core/cli.py @@ -485,6 +485,31 @@ def get_services_status(): click.echo('Error: Services status not available.') except Exception as e: click.echo(f'{e}', err=True) + + +@cli.command('show-version') +def show_version(): + """Displays the currently installed version of the panel.""" + try: + if version_info := cli_api.show_version(): + click.echo(version_info) + else: + click.echo("Error retrieving version") + except Exception as e: + click.echo(f"An unexpected error occurred: {e}", err=True) + + +@cli.command('check-version') +def check_version(): + """Checks if the current version is up-to-date and displays changelog if not.""" + try: + if version_info := cli_api.check_version(): + click.echo(version_info) + else: + click.echo("Error retrieving version") + except Exception as e: + click.echo(f"An unexpected error occurred: {e}", err=True) + # endregion diff --git a/core/cli_api.py b/core/cli_api.py index d602d17..3615905 100644 --- a/core/cli_api.py +++ b/core/cli_api.py @@ -47,6 +47,7 @@ class Command(Enum): CONFIGURE_WARP = os.path.join(SCRIPT_DIR, 'warp', 'configure.sh') STATUS_WARP = os.path.join(SCRIPT_DIR, 'warp', 'status.sh') SERVICES_STATUS = os.path.join(SCRIPT_DIR, 'services_status.sh') + VERSION = os.path.join(SCRIPT_DIR, 'hysteria2', 'version.sh') # region Custom Exceptions @@ -500,5 +501,16 @@ def get_services_status() -> dict[str, bool] | None: '''Gets the status of all project services.''' if res := run_cmd(['bash', Command.SERVICES_STATUS.value]): return json.loads(res) + + +def show_version() -> str | None: + """Displays the currently installed version of the panel.""" + return run_cmd(['bash', Command.VERSION.value, 'show-version']) + + +def check_version() -> str | None: + """Checks if the current version is up-to-date and displays changelog if not.""" + return run_cmd(['bash', Command.VERSION.value, 'check-version']) + # endregion # endregion diff --git a/core/scripts/hysteria2/version.sh b/core/scripts/hysteria2/version.sh new file mode 100644 index 0000000..754307c --- /dev/null +++ b/core/scripts/hysteria2/version.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +source /etc/hysteria/core/scripts/path.sh + +version_greater_equal() { + IFS='.' read -r -a local_version_parts <<< "$1" + IFS='.' read -r -a latest_version_parts <<< "$2" + + for ((i=0; i<${#local_version_parts[@]}; i++)); do + if [[ -z ${latest_version_parts[i]} ]]; then + latest_version_parts[i]=0 + fi + + if ((10#${local_version_parts[i]} > 10#${latest_version_parts[i]})); then + return 0 + elif ((10#${local_version_parts[i]} < 10#${latest_version_parts[i]})); then + return 1 + fi + done + + return 0 +} + +check_version() { + local_version=$(cat $LOCALVERSION) + latest_version=$(curl -s $LATESTVERSION) + latest_changelog=$(curl -s $LASTESTCHANGE) + + + if version_greater_equal "$local_version" "$latest_version"; then + echo "Panel Version: $local_version" + else + echo "Panel Version: $local_version" + echo "Latest Version: $latest_version" + echo "${yellow}$latest_version Version Change Log:" + echo "$latest_changelog" + fi +} + +show_version() { + + local_version=$(cat "$LOCALVERSION") + echo "Panel Version: $local_version" + +} + + +if [ "$1" == "check-version" ]; then + check_version +elif [ "$1" == "show-version" ]; then + show_version +else + echo "Usage: $0 [check|show]" >&2 + exit 1 +fi + +exit 0 \ No newline at end of file