mirror of
https://github.com/aliasvault/aliasvault.git
synced 2026-01-20 20:09:46 -05:00
310 lines
12 KiB
Bash
Executable File
310 lines
12 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Check if running with bash
|
|
if [ -z "$BASH_VERSION" ]; then
|
|
echo "Error: This script must be run with bash"
|
|
echo "Usage: bash $0"
|
|
exit 1
|
|
fi
|
|
|
|
# Function to read and validate semantic version
|
|
read_semver() {
|
|
# Get current version from server
|
|
local current_major=$(grep "public const int VersionMajor = " ../apps/server/Shared/AliasVault.Shared.Core/AppInfo.cs | tr -d ';' | tr -d ' ' | cut -d'=' -f2)
|
|
local current_minor=$(grep "public const int VersionMinor = " ../apps/server/Shared/AliasVault.Shared.Core/AppInfo.cs | tr -d ';' | tr -d ' ' | cut -d'=' -f2)
|
|
local suggested_version="${current_major}.$((current_minor + 1)).0"
|
|
|
|
while true; do
|
|
read -p "Enter new semantic version [$suggested_version]: " version
|
|
# If empty, use suggested version
|
|
if [[ -z "$version" ]]; then
|
|
version=$suggested_version
|
|
fi
|
|
if [[ $version =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
|
break
|
|
else
|
|
echo "Invalid version format. Please use format X.Y.Z (e.g. $suggested_version)"
|
|
fi
|
|
done
|
|
}
|
|
|
|
# Function to handle build number bump
|
|
handle_build_number() {
|
|
local current_build=$1
|
|
local project_name=$2
|
|
local new_build=$((current_build + 1))
|
|
|
|
read -p "$project_name ($current_build). Enter new build number [$new_build]: " input
|
|
|
|
if [[ -z "$input" || "$input" =~ ^[Yy]$ ]]; then
|
|
echo $new_build
|
|
else
|
|
if [[ "$input" =~ ^[0-9]+$ ]]; then
|
|
echo $input
|
|
else
|
|
echo "Invalid input. Using default increment."
|
|
echo $new_build
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Function to update version in a file
|
|
update_version() {
|
|
local file=$1
|
|
local pattern=$2
|
|
local replacement=$3
|
|
local project_name=$4
|
|
|
|
if [ -f "$file" ]; then
|
|
# Create a temporary file
|
|
local temp_file=$(mktemp)
|
|
# Replace the pattern and write to temp file
|
|
awk -v pat="$pattern" -v rep="$replacement" '{gsub(pat, rep); print}' "$file" > "$temp_file"
|
|
# Move temp file back to original
|
|
mv "$temp_file" "$file"
|
|
else
|
|
echo "Warning: File $file not found"
|
|
fi
|
|
}
|
|
|
|
# Function to extract version from server AppInfo.cs
|
|
get_server_version() {
|
|
local major=$(grep "public const int VersionMajor = " ../apps/server/Shared/AliasVault.Shared.Core/AppInfo.cs | tr -d ';' | tr -d ' ' | cut -d'=' -f2)
|
|
local minor=$(grep "public const int VersionMinor = " ../apps/server/Shared/AliasVault.Shared.Core/AppInfo.cs | tr -d ';' | tr -d ' ' | cut -d'=' -f2)
|
|
local patch=$(grep "public const int VersionPatch = " ../apps/server/Shared/AliasVault.Shared.Core/AppInfo.cs | tr -d ';' | tr -d ' ' | cut -d'=' -f2)
|
|
echo "$major.$minor.$patch"
|
|
}
|
|
|
|
# Function to extract version from browser extension config
|
|
get_browser_extension_version() {
|
|
grep "version: " ../apps/browser-extension/wxt.config.ts | head -n1 | tr -d '"' | tr -d ',' | tr -d ' ' | cut -d':' -f2
|
|
}
|
|
|
|
# Function to extract version from browser extension package.json
|
|
get_browser_extension_package_json_version() {
|
|
grep "\"version\": " ../apps/browser-extension/package.json | tr -d '"' | tr -d ',' | tr -d ' ' | cut -d':' -f2
|
|
}
|
|
|
|
# Function to extract version from browser extension AppInfo.ts
|
|
get_browser_extension_ts_version() {
|
|
grep "public static readonly VERSION = " ../apps/browser-extension/src/utils/AppInfo.ts | tr -d "'" | tr -d ';' | tr -d ' ' | cut -d'=' -f2
|
|
}
|
|
|
|
# Function to extract version from mobile app
|
|
get_mobile_app_version() {
|
|
grep "\"version\": " ../apps/mobile-app/app.json | tr -d '"' | tr -d ',' | tr -d ' ' | cut -d':' -f2
|
|
}
|
|
|
|
get_mobile_app_ts_version() {
|
|
grep "public static readonly VERSION = " ../apps/mobile-app/utils/AppInfo.ts | tr -d "'" | tr -d ';' | tr -d ' ' | cut -d'=' -f2
|
|
}
|
|
|
|
# Function to extract version from iOS app
|
|
get_ios_version() {
|
|
grep "MARKETING_VERSION = " ../apps/mobile-app/ios/AliasVault.xcodeproj/project.pbxproj | head -n1 | tr -d '"' | tr -d ';' | tr -d ' ' | cut -d'=' -f2
|
|
}
|
|
|
|
# Function to extract version from Android app
|
|
get_android_version() {
|
|
grep "versionName " ../apps/mobile-app/android/app/build.gradle | head -n1 | tr -d '"' | tr -d ' ' | cut -d'=' -f2 | sed 's/versionName//'
|
|
}
|
|
|
|
# Function to extract version from Safari extension
|
|
get_safari_version() {
|
|
grep "MARKETING_VERSION = " ../apps/browser-extension/safari-xcode/AliasVault/AliasVault.xcodeproj/project.pbxproj | head -n1 | tr -d '"' | tr -d ';' | tr -d ' ' | cut -d'=' -f2
|
|
}
|
|
|
|
# Check current versions
|
|
echo "Checking current versions..."
|
|
server_version=$(get_server_version)
|
|
browser_wxt_version=$(get_browser_extension_version)
|
|
browser_package_version=$(get_browser_extension_package_json_version)
|
|
browser_ts_version=$(get_browser_extension_ts_version)
|
|
mobile_version=$(get_mobile_app_version)
|
|
mobile_ts_version=$(get_mobile_app_ts_version)
|
|
ios_version=$(get_ios_version)
|
|
android_version=$(get_android_version)
|
|
safari_version=$(get_safari_version)
|
|
|
|
# Create associative array of versions
|
|
declare -A versions
|
|
versions["server"]="$server_version"
|
|
versions["browser_wxt"]="$browser_wxt_version"
|
|
versions["browser_package"]="$browser_package_version"
|
|
versions["browser_ts"]="$browser_ts_version"
|
|
versions["mobile"]="$mobile_version"
|
|
versions["mobile_ts"]="$mobile_ts_version"
|
|
versions["ios"]="$ios_version"
|
|
versions["android"]="$android_version"
|
|
versions["safari"]="$safari_version"
|
|
|
|
# Create display names for output
|
|
declare -A display_names
|
|
display_names["server"]="Server"
|
|
display_names["browser_wxt"]="Browser Extension (wxt.config.ts)"
|
|
display_names["browser_package"]="Browser Extension (package.json)"
|
|
display_names["browser_ts"]="Browser Extension (AppInfo.ts)"
|
|
display_names["mobile"]="Mobile App"
|
|
display_names["mobile_ts"]="Mobile App (TS)"
|
|
display_names["ios"]="iOS App"
|
|
display_names["android"]="Android App"
|
|
display_names["safari"]="Safari Extension"
|
|
|
|
# Check if all versions are equal
|
|
all_equal=true
|
|
first_version=""
|
|
for project in "${!versions[@]}"; do
|
|
if [[ -z "$first_version" ]]; then
|
|
first_version="${versions[$project]}"
|
|
elif [[ "${versions[$project]}" != "$first_version" ]]; then
|
|
all_equal=false
|
|
break
|
|
fi
|
|
done
|
|
|
|
# Print current versions
|
|
echo -e "\nCurrent versions:"
|
|
for project in "${!versions[@]}"; do
|
|
echo "${display_names[$project]}: ${versions[$project]}"
|
|
done
|
|
|
|
# If versions are not equal, ask for confirmation
|
|
if [[ "$all_equal" == false ]]; then
|
|
echo -e "\nWARNING: Not all versions are equal!"
|
|
echo "Different versions found:"
|
|
for project in "${!versions[@]}"; do
|
|
if [[ "${versions[$project]}" != "$first_version" ]]; then
|
|
echo "${display_names[$project]}: ${versions[$project]} (differs from $first_version)"
|
|
fi
|
|
done
|
|
read -p "Do you want to continue with the version bump? (y/N) " confirm
|
|
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
|
|
echo "Version bump cancelled."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Read new version
|
|
echo -e "\nEnter new version:"
|
|
read_semver
|
|
|
|
# Extract major, minor, patch from version
|
|
major=$(echo $version | cut -d. -f1)
|
|
minor=$(echo $version | cut -d. -f2)
|
|
patch=$(echo $version | cut -d. -f3)
|
|
|
|
# Update server version
|
|
echo -e "\nUpdating server version..."
|
|
update_version "../apps/server/Shared/AliasVault.Shared.Core/AppInfo.cs" \
|
|
"public const int VersionMajor = [0-9]\+;" \
|
|
"public const int VersionMajor = $major;"
|
|
update_version "../apps/server/Shared/AliasVault.Shared.Core/AppInfo.cs" \
|
|
"public const int VersionMinor = [0-9]\+;" \
|
|
"public const int VersionMinor = $minor;"
|
|
update_version "../apps/server/Shared/AliasVault.Shared.Core/AppInfo.cs" \
|
|
"public const int VersionPatch = [0-9]\+;" \
|
|
"public const int VersionPatch = $patch;"
|
|
|
|
# Update browser extension version
|
|
echo "Updating browser extension version..."
|
|
update_version "../apps/browser-extension/wxt.config.ts" \
|
|
"version: \"[0-9]\+\.[0-9]\+\.[0-9]\+\"," \
|
|
"version: \"$version\","
|
|
|
|
# Update package.json version
|
|
echo "Updating package.json version..."
|
|
update_version "../apps/browser-extension/package.json" \
|
|
"\"version\": \"[0-9]\+\.[0-9]\+\.[0-9]\+\"," \
|
|
"\"version\": \"$version\","
|
|
|
|
# Update browser extension AppInfo.ts version
|
|
echo "Updating browser extension AppInfo.ts version..."
|
|
update_version "../apps/browser-extension/src/utils/AppInfo.ts" \
|
|
"public static readonly VERSION = '[0-9]\+\.[0-9]\+\.[0-9]\+';" \
|
|
"public static readonly VERSION = '$version';"
|
|
|
|
# Update generic mobile app version
|
|
echo "Updating mobile app version..."
|
|
update_version "../apps/mobile-app/utils/AppInfo.ts" \
|
|
"public static readonly VERSION = '[0-9]\+\.[0-9]\+\.[0-9]\+';" \
|
|
"public static readonly VERSION = '$version';"
|
|
update_version "../apps/mobile-app/app.json" \
|
|
"\"version\": \"[0-9]\+\.[0-9]\+\.[0-9]\+\"," \
|
|
"\"version\": \"$version\","
|
|
|
|
|
|
# Update iOS app version
|
|
echo "Updating iOS app version..."
|
|
update_version "../apps/mobile-app/ios/AliasVault.xcodeproj/project.pbxproj" \
|
|
"MARKETING_VERSION = [0-9]\+\.[0-9]\+\.[0-9]\+;" \
|
|
"MARKETING_VERSION = $version;"
|
|
|
|
# Update Android app version
|
|
echo "Updating Android app version..."
|
|
update_version "../apps/mobile-app/android/app/build.gradle" \
|
|
"versionName \"[0-9]\+\.[0-9]\+\.[0-9]\+\"" \
|
|
"versionName \"$version\""
|
|
|
|
# Update Safari extension version
|
|
echo "Updating Safari extension version..."
|
|
update_version "../apps/browser-extension/safari-xcode/AliasVault/AliasVault.xcodeproj/project.pbxproj" \
|
|
"MARKETING_VERSION = [0-9]\+\.[0-9]\+\.[0-9]\+;" \
|
|
"MARKETING_VERSION = $version;"
|
|
|
|
# Handle build numbers
|
|
echo -e "\nIncrementing build numbers..."
|
|
|
|
# Read current build numbers
|
|
current_ios_build=$(grep -A1 "CURRENT_PROJECT_VERSION" ../apps/mobile-app/ios/AliasVault.xcodeproj/project.pbxproj | grep "CURRENT_PROJECT_VERSION = [0-9]\+;" | head -n1 | tr -d ';' | tr -d ' ' | cut -d'=' -f2 | grep -E '^[0-9]+$')
|
|
if [ -z "$current_ios_build" ]; then
|
|
echo "Error: Could not read iOS build number or invalid format"
|
|
exit 1
|
|
fi
|
|
|
|
current_android_build=$(grep "versionCode" ../apps/mobile-app/android/app/build.gradle | grep -E "versionCode [0-9]+" | head -n1 | awk '{print $2}' | grep -E '^[0-9]+$')
|
|
if [ -z "$current_android_build" ]; then
|
|
echo "Error: Could not read Android build number or invalid format"
|
|
exit 1
|
|
fi
|
|
|
|
current_safari_build=$(grep -A1 "CURRENT_PROJECT_VERSION" ../apps/browser-extension/safari-xcode/AliasVault/AliasVault.xcodeproj/project.pbxproj | grep "CURRENT_PROJECT_VERSION = [0-9]\+;" | head -n1 | tr -d ';' | tr -d ' ' | cut -d'=' -f2 | grep -E '^[0-9]+$')
|
|
if [ -z "$current_safari_build" ]; then
|
|
echo "Error: Could not read Safari build number or invalid format"
|
|
exit 1
|
|
fi
|
|
|
|
# Handle iOS build number
|
|
new_ios_build=$(handle_build_number "$current_ios_build" "iOS Mobile App")
|
|
update_version "../apps/mobile-app/ios/AliasVault.xcodeproj/project.pbxproj" \
|
|
"CURRENT_PROJECT_VERSION = [0-9]\+;" \
|
|
"CURRENT_PROJECT_VERSION = $new_ios_build;" \
|
|
"iOS Mobile App"
|
|
|
|
# Handle Android build number
|
|
new_android_build=$(handle_build_number "$current_android_build" "Android App")
|
|
update_version "../apps/mobile-app/android/app/build.gradle" \
|
|
"versionCode [0-9]\+" \
|
|
"versionCode $new_android_build" \
|
|
"Android App"
|
|
|
|
# Handle Safari build number
|
|
new_safari_build=$(handle_build_number "$current_safari_build" "Safari Extension")
|
|
update_version "../apps/browser-extension/safari-xcode/AliasVault/AliasVault.xcodeproj/project.pbxproj" \
|
|
"CURRENT_PROJECT_VERSION = [0-9]\+;" \
|
|
"CURRENT_PROJECT_VERSION = $new_safari_build;" \
|
|
"Safari Extension"
|
|
|
|
# Update install.sh version if it exists
|
|
if [ -f "../install.sh" ]; then
|
|
echo -e "\n"
|
|
echo "--------------------------------"
|
|
echo "Reminder: if you've made changes to install.sh since the last release, remember to update its @version in the header to match this release version ($version)."
|
|
echo "--------------------------------"
|
|
read -p "Press Enter to continue..."
|
|
fi
|
|
|
|
echo -e "\nAll build numbers have been updated successfully!"
|
|
echo "New version: $version"
|
|
echo "New iOS mobile app build: $new_ios_build"
|
|
echo "New Android build: $new_android_build"
|
|
echo "New Safari extension build: $new_safari_build" |