From 43ffdef8c666271c7882c27718634912a64eb456 Mon Sep 17 00:00:00 2001 From: Siyuan Miao Date: Mon, 24 Nov 2025 13:57:17 +0100 Subject: [PATCH] updates .. --- scripts/deploy_cloud_app.sh | 122 +++++++++++++++++++++++++++--------- 1 file changed, 93 insertions(+), 29 deletions(-) diff --git a/scripts/deploy_cloud_app.sh b/scripts/deploy_cloud_app.sh index 08e3c6a9..129dc667 100755 --- a/scripts/deploy_cloud_app.sh +++ b/scripts/deploy_cloud_app.sh @@ -1,50 +1,114 @@ #!/bin/bash set -e -# Get current branch name -CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD) +SCRIPT_PATH=$(realpath "$(dirname $(realpath "${BASH_SOURCE[0]}"))") +source ${SCRIPT_PATH}/build_utils.sh +function show_help() { + echo "Usage: $0 [options]" + echo "Options:" + echo " -b, --branch Checkout branch" + echo " --set-as-default Set as default" + echo " --skip-confirmation Skip confirmation" + echo " --help Show help" +} + +# Parse command line arguments +CHECKOUT_BRANCH= +SET_AS_DEFAULT=false +SKIP_CONFIRMATION=false +while [[ $# -gt 0 ]]; do + case $1 in + -b|--branch) + CHECKOUT_BRANCH="$2" + shift 2 + ;; + --set-as-default) + SET_AS_DEFAULT=true + shift + ;; + --skip-confirmation) + SKIP_CONFIRMATION=true + shift + ;; + --help) + show_help + exit 0 + ;; + *) + echo "Unknown option: $1" + show_help + exit 1 + ;; + esac +done + + +# Checkout current branch in a new temporary directory +# only popd when exiting the script +TMP_DIR=$(mktemp -d) +trap 'popd > /dev/null && rm -rf ${TMP_DIR}' EXIT +msg_info "Copying repository to a new temporary directory ${TMP_DIR} ..." +git fetch origin ${CHECKOUT_BRANCH}:${CHECKOUT_BRANCH} +git clone . ${TMP_DIR} +cp ${SCRIPT_PATH}/versioned.patch ${TMP_DIR} +msg_info "Checking out branch ${CHECKOUT_BRANCH} ..." +pushd ${TMP_DIR} > /dev/null +git checkout ${CHECKOUT_BRANCH} + + +CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD) # Verify branch name matches release/x.x.x or release/x.x.x-dev... -if [[ ! $CURRENT_BRANCH =~ ^release/[0-9]+\.[0-9]+\.[0-9]+(-dev[0-9]+)?$ ]]; then - echo "✗ Error: Current branch '$CURRENT_BRANCH' does not match required pattern" - echo " Expected: release/x.x.x OR release/x.x.x-dev20241104123632" +if [[ ! $CURRENT_BRANCH =~ ^(release|release-cloud-app)/[0-9]+\.[0-9]+\.[0-9]+(-dev[0-9]+)?$ ]]; then + msg_err "Current branch '$CURRENT_BRANCH' does not match required pattern" + msg_err "Expected: release/x.x.x OR release/x.x.x-dev20241104123632" exit 1 fi -# Extract version from branch name (remove "release/" prefix) +GIT_COMMIT=$(git rev-parse HEAD) +BUILD_TIMESTAMP=$(date -u +%FT%T%z) VERSION=${CURRENT_BRANCH#release/} - -echo "Current branch: $CURRENT_BRANCH" -echo "Version: $VERSION" -echo "" +VERSION=${VERSION#release-cloud-app/} +if [[ ! $VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+(-dev[0-9]+)?$ ]]; then + msg_err "Version '$VERSION' does not match required pattern" + msg_err "Expected: x.x.x OR x.x.x-dev20241104123632" + exit 1 +fi # Change to ui directory cd ui -# Ask for confirmation -read -p "Do you want to deploy the cloud app to production? (y/N): " -n 1 -r -echo "" -if [[ ! $REPLY =~ ^[Yy]$ ]]; then - echo "Deployment cancelled." - exit 0 +if [ "$SET_AS_DEFAULT" = true ]; then + # Build for root dist + msg_info "Building for root dist..." + npm ci + npm run build:prod fi -# Build for root dist -echo "" -echo "Building for root dist..." -npm ci -npm run build:prod - # Build for versioned dist/v/VERSION -echo "" -echo "Building for dist/v/${VERSION}..." +msg_info "Building for dist/v/${VERSION}..." npm ci npm run build:prod -- --base=/v/${VERSION}/ --outDir dist/v/${VERSION} -# Deploy to production +# Ask for confirmation +if [ "$SKIP_CONFIRMATION" = false ]; then +read -p "Do you want to deploy the cloud app to production? (y/N): " -n 1 -r echo "" -echo "Deploying to r2://jetkvm-cloud-app..." -rclone copyto dist r2://jetkvm-cloud-app + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + msg_err "Deployment cancelled." + exit 0 + fi +fi -echo "" -echo "✓ Successfully deployed v${VERSION} to production" +# Deploy to production +msg_info "Deploying to r2://jetkvm-cloud-app..." +rclone copyto \ + --progress \ + --stats=1s \ + --header-upload="x-amz-meta-jetkvm-version: ${VERSION}" \ + --header-upload="x-amz-meta-jetkvm-build-ref: ${GIT_COMMIT}" \ + --header-upload="x-amz-meta-jetkvm-build-timestamp: ${BUILD_TIMESTAMP}" \ + dist \ +r2://jetkvm-cloud-app + +msg_ok "Successfully deployed v${VERSION} to production"