mirror of https://github.com/jetkvm/kvm.git
134 lines
4.5 KiB
Bash
134 lines
4.5 KiB
Bash
#!/bin/bash
|
|
set -eE
|
|
set -o pipefail
|
|
|
|
SCRIPT_PATH=$(realpath "$(dirname $(realpath "${BASH_SOURCE[0]}"))")
|
|
source ${SCRIPT_PATH}/build_utils.sh
|
|
|
|
# Function to display help message
|
|
show_help() {
|
|
echo "Usage: $0 [options] -v <version>"
|
|
echo
|
|
echo "Required:"
|
|
echo " --app-version <version> App version to release"
|
|
echo " --system-version <version> System version to release"
|
|
echo
|
|
echo "Optional:"
|
|
echo " -u, --user <remote_user> Remote username (default: root)"
|
|
echo " --run-go-tests Run go tests"
|
|
echo " --run-go-tests-only Run go tests and exit"
|
|
echo " --skip-ui-build Skip frontend/UI build"
|
|
echo " --skip-native-build Skip native build"
|
|
echo " --disable-docker Disable docker build"
|
|
echo " -i, --install Build for release and install the app"
|
|
echo " --help Display this help message"
|
|
echo
|
|
echo "Example:"
|
|
echo " $0 --system-version 0.2.6"
|
|
}
|
|
|
|
|
|
BUILD_VERSION=$1
|
|
R2_PATH="r2://jetkvm-update/system"
|
|
PACK_BIN_PATH="./tools/linux/Linux_Pack_Firmware"
|
|
UNPACK_BIN="${PACK_BIN_PATH}/mk-update_unpack.sh"
|
|
|
|
# Create temporary directory for downloads
|
|
TEMP_DIR=$(mktemp -d)
|
|
msg_ok "Created temporary directory: $TEMP_DIR"
|
|
|
|
# Cleanup function
|
|
cleanup() {
|
|
if [ -d "$TEMP_DIR" ]; then
|
|
msg_info "Cleaning up temporary directory: $TEMP_DIR"
|
|
rm -rf "$TEMP_DIR"
|
|
fi
|
|
}
|
|
|
|
# Set trap to cleanup on exit
|
|
# trap cleanup EXIT
|
|
|
|
mkdir -p ${TEMP_DIR}/extracted-update
|
|
${UNPACK_BIN} -i update.img -o ${TEMP_DIR}/extracted-update
|
|
|
|
exit 0
|
|
# Check if the version already exists
|
|
if rclone lsf $R2_PATH/$BUILD_VERSION/ | grep -q .; then
|
|
msg_err "Error: Version $BUILD_VERSION already exists in the remote storage."
|
|
exit 1
|
|
fi
|
|
|
|
# Check if the version exists in the github
|
|
RELEASE_URL="https://api.github.com/repos/jetkvm/rv1106-system/releases/tags/v$BUILD_VERSION"
|
|
|
|
# Download the release JSON
|
|
RELEASE_JSON=$(curl -s $RELEASE_URL)
|
|
|
|
# Check if the release has assets we need
|
|
if echo $RELEASE_JSON | jq -e '.assets | length == 0' > /dev/null; then
|
|
msg_err "Error: Version $BUILD_VERSION does not have assets we need."
|
|
exit 1
|
|
fi
|
|
|
|
function get_file_by_name() {
|
|
local file_name=$1
|
|
local file_url=$(echo $RELEASE_JSON | jq -r ".assets[] | select(.name == \"$file_name\") | .browser_download_url")
|
|
if [ -z "$file_url" ]; then
|
|
msg_err "Error: File $file_name not found in the release."
|
|
exit 1
|
|
fi
|
|
local digest=$(echo $RELEASE_JSON | jq -r ".assets[] | select(.name == \"$file_name\") | .digest")
|
|
local temp_file_path="$TEMP_DIR/$file_name"
|
|
|
|
msg_info "Downloading $file_name: $file_url"
|
|
|
|
# Download the file to temporary directory
|
|
curl -L -o "$temp_file_path" "$file_url"
|
|
|
|
# Verify digest if available
|
|
if [ "$digest" != "null" ] && [ -n "$digest" ]; then
|
|
msg_info "Verifying digest for $file_name ..."
|
|
local calculated_digest=$(sha256sum "$temp_file_path" | cut -d' ' -f1)
|
|
# Strip "sha256:" prefix if present
|
|
local expected_digest=$(echo "$digest" | sed 's/^sha256://')
|
|
if [ "$calculated_digest" != "$expected_digest" ]; then
|
|
msg_err "🙅 Digest verification failed for $file_name"
|
|
msg_info "Expected: $expected_digest"
|
|
msg_info "Calculated: $calculated_digest"
|
|
exit 1
|
|
fi
|
|
else
|
|
msg_warn "Warning: No digest available for $file_name, skipping verification"
|
|
fi
|
|
|
|
msg_ok "✅ $file_name downloaded and verified."
|
|
}
|
|
|
|
get_file_by_name "update_ota.tar"
|
|
get_file_by_name "update.img"
|
|
|
|
strings -d bin/jetkvm_app | grep -x '0.4.8'
|
|
|
|
# Ask for confirmation
|
|
msg_info "Do you want to continue with the release? (y/n)"
|
|
read -n 1 -s -r -p "Press y to continue, any other key to exit"
|
|
echo -ne "\n"
|
|
if [ "$REPLY" != "y" ]; then
|
|
msg_err "🙅 Release cancelled."
|
|
exit 1
|
|
fi
|
|
|
|
msg_info "Releasing $BUILD_VERSION..."
|
|
|
|
sha256sum $TEMP_DIR/update_ota.tar | awk '{print $1}' > $TEMP_DIR/update_ota.tar.sha256
|
|
sha256sum $TEMP_DIR/update.img | awk '{print $1}' > $TEMP_DIR/update.img.sha256
|
|
|
|
# Check if the version already exists
|
|
msg_info "Copying to $R2_PATH/$BUILD_VERSION/"
|
|
|
|
rclone copyto --progress $TEMP_DIR/update_ota.tar $R2_PATH/$BUILD_VERSION/system.tar
|
|
rclone copyto --progress $TEMP_DIR/update_ota.tar.sha256 $R2_PATH/$BUILD_VERSION/system.tar.sha256
|
|
rclone copyto --progress $TEMP_DIR/update.img $R2_PATH/$BUILD_VERSION/update.img
|
|
rclone copyto --progress $TEMP_DIR/update.img.sha256 $R2_PATH/$BUILD_VERSION/update.img.sha256
|
|
|
|
msg_ok "✅ $BUILD_VERSION released." |