Update release scripts

This commit is contained in:
Leendert de Borst
2026-02-23 23:12:34 +01:00
parent 87c377c18c
commit f4dc761dc6
2 changed files with 132 additions and 77 deletions

View File

@@ -3,7 +3,7 @@
# Check if running with bash
if [ -z "$BASH_VERSION" ]; then
echo "Error: This script must be run with bash"
echo "Usage: bash $0 [--build-only]"
echo "Usage: bash $0 [--build-only] [--version X.Y.Z]"
exit 1
fi
@@ -15,9 +15,35 @@ RED='\033[0;31m'
CYAN='\033[0;36m'
RESET='\033[0m'
# Get the directory where this script is located
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Get the repository root (parent of scripts directory)
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
# Initialize variables
BUILD_ONLY=false
MARKETING_UPDATE=false
PROVIDED_VERSION=""
# Parse command-line arguments
while [[ $# -gt 0 ]]; do
case $1 in
--build-only)
BUILD_ONLY=true
shift
;;
--version)
PROVIDED_VERSION="$2"
MARKETING_UPDATE=true
shift 2
;;
*)
echo -e "${RED}Unknown option: $1${RESET}"
echo "Usage: bash $0 [--build-only] [--version X.Y.Z]"
exit 1
;;
esac
done
# Function to generate semantic build number
# Format: MMmmppSXX where MM=major, mm=minor, pp=patch, S=stage, XX=build
@@ -120,9 +146,9 @@ extract_build_increment() {
# 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 current_stage=$(grep "public const string VersionStage = " ../apps/server/Shared/AliasVault.Shared.Core/AppInfo.cs | cut -d'"' -f2)
local current_major=$(grep "public const int VersionMajor = " "$REPO_ROOT/apps/server/Shared/AliasVault.Shared.Core/AppInfo.cs" | tr -d ';' | tr -d ' ' | cut -d'=' -f2)
local current_minor=$(grep "public const int VersionMinor = " "$REPO_ROOT/apps/server/Shared/AliasVault.Shared.Core/AppInfo.cs" | tr -d ';' | tr -d ' ' | cut -d'=' -f2)
local current_stage=$(grep "public const string VersionStage = " "$REPO_ROOT/apps/server/Shared/AliasVault.Shared.Core/AppInfo.cs" | cut -d'"' -f2)
local suggested_version="${current_major}.$((current_minor + 1)).0"
while true; do
@@ -219,40 +245,40 @@ update_version() {
# 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)
local stage=$(grep "public const string VersionStage = " ../apps/server/Shared/AliasVault.Shared.Core/AppInfo.cs | cut -d'"' -f2)
local major=$(grep "public const int VersionMajor = " "$REPO_ROOT/apps/server/Shared/AliasVault.Shared.Core/AppInfo.cs" | tr -d ';' | tr -d ' ' | cut -d'=' -f2)
local minor=$(grep "public const int VersionMinor = " "$REPO_ROOT/apps/server/Shared/AliasVault.Shared.Core/AppInfo.cs" | tr -d ';' | tr -d ' ' | cut -d'=' -f2)
local patch=$(grep "public const int VersionPatch = " "$REPO_ROOT/apps/server/Shared/AliasVault.Shared.Core/AppInfo.cs" | tr -d ';' | tr -d ' ' | cut -d'=' -f2)
local stage=$(grep "public const string VersionStage = " "$REPO_ROOT/apps/server/Shared/AliasVault.Shared.Core/AppInfo.cs" | cut -d'"' -f2)
echo "$major.$minor.$patch$stage"
}
# 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
grep "version: " "$REPO_ROOT/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
grep "\"version\": " "$REPO_ROOT/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
grep "public static readonly VERSION = " "$REPO_ROOT/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
grep "\"version\": " "$REPO_ROOT/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
grep "public static readonly VERSION = " "$REPO_ROOT/apps/mobile-app/utils/AppInfo.ts" | tr -d "'" | tr -d ';' | tr -d ' ' | cut -d'=' -f2
}
# Function to extract version from iOS app (main target only, identified by net.aliasvault.app bundle ID)
get_ios_version() {
local pbxproj="../apps/mobile-app/ios/AliasVault.xcodeproj/project.pbxproj"
local pbxproj="$REPO_ROOT/apps/mobile-app/ios/AliasVault.xcodeproj/project.pbxproj"
# Find the line number of the main app's bundle identifier
local line_num=$(grep -n "PRODUCT_BUNDLE_IDENTIFIER = net.aliasvault.app;" "$pbxproj" | head -n1 | cut -d: -f1)
# Look back within the same build settings block (typically within 30 lines) for MARKETING_VERSION
@@ -262,17 +288,17 @@ get_ios_version() {
# 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//'
grep "versionName " "$REPO_ROOT/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.xcodeproj/project.pbxproj | head -n1 | tr -d '"' | tr -d ';' | tr -d ' ' | cut -d'=' -f2
grep "MARKETING_VERSION = " "$REPO_ROOT/apps/browser-extension/safari-xcode/AliasVault.xcodeproj/project.pbxproj" | head -n1 | tr -d '"' | tr -d ';' | tr -d ' ' | cut -d'=' -f2
}
# Function to extract version from Rust core Cargo.toml
get_rust_core_version() {
grep "^version = " ../core/rust/Cargo.toml | head -n1 | tr -d '"' | tr -d ' ' | cut -d'=' -f2
grep "^version = " "$REPO_ROOT/core/rust/Cargo.toml" | head -n1 | tr -d '"' | tr -d ' ' | cut -d'=' -f2
}
# Check current versions
@@ -322,8 +348,8 @@ normalize_version() {
# Check if all versions are equal (comparing base versions without stage suffixes)
# Use .version/version.txt as the canonical reference if it exists, otherwise fall back to server version
all_equal=true
if [ -f "../apps/.version/version.txt" ]; then
first_version=$(cat "../apps/.version/version.txt")
if [ -f "$REPO_ROOT/apps/.version/version.txt" ]; then
first_version=$(cat "$REPO_ROOT/apps/.version/version.txt")
else
first_version="$server_version"
fi
@@ -341,32 +367,47 @@ done
# Marketing versions are used for new feature releases and bug fixes.
# Build numbers are used for internal testing, translations, and misc updates.
# Ask user what they want to do
echo ""
echo "--------------------------------"
echo "AliasVault version bump tool"
echo "* This tool updates version numbers across the AliasVault codebase"
echo "--------------------------------"
echo ""
echo "What would you like to do?"
echo ""
echo "1) [Public release] Prepare new public release (marketing version + app store build numbers)"
echo "2) [Internal release] New internal app store build (app store build numbers only, e.g. for testing translations)"
echo ""
read -p "Enter your choice: " choice
# Only ask user what they want to do if not already determined by command-line args
if [[ "$MARKETING_UPDATE" == false && "$BUILD_ONLY" == false ]]; then
# Ask user what they want to do
echo ""
echo "--------------------------------"
echo "AliasVault version bump tool"
echo "* This tool updates version numbers across the AliasVault codebase"
echo "--------------------------------"
echo ""
echo "What would you like to do?"
echo ""
echo "1) [Public release] Prepare new public release (marketing version + app store build numbers)"
echo "2) [Internal release] New internal app store build (app store build numbers only, e.g. for testing translations)"
echo ""
read -p "Enter your choice: " choice
case $choice in
1)
MARKETING_UPDATE=true
;;
2)
BUILD_ONLY=true
;;
*)
echo "Invalid choice. Exiting."
exit 1
;;
esac
case $choice in
1)
MARKETING_UPDATE=true
;;
2)
BUILD_ONLY=true
;;
*)
echo "Invalid choice. Exiting."
exit 1
;;
esac
elif [[ "$MARKETING_UPDATE" == true ]]; then
echo ""
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${RESET}"
echo -e "${CYAN}AliasVault version bump tool - Marketing Update${RESET}"
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${RESET}"
echo ""
elif [[ "$BUILD_ONLY" == true ]]; then
echo ""
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${RESET}"
echo -e "${CYAN}AliasVault version bump tool - Build-Only Update${RESET}"
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${RESET}"
echo ""
fi
# If versions are not equal, ask for confirmation
if [[ "$all_equal" == false ]]; then
@@ -412,12 +453,27 @@ elif [[ "$MARKETING_UPDATE" == true ]]; then
echo "${display_names[$project]}: ${versions[$project]}"
done
# Read new version
# Read new version or use provided version
echo ""
echo "--------------------------------"
echo "Update marketing versions"
echo "--------------------------------"
read_semver
if [[ -n "$PROVIDED_VERSION" ]]; then
echo -e "${BLUE}Using provided version: $PROVIDED_VERSION${RESET}"
version_input="$PROVIDED_VERSION"
# Extract base version and suffix
if [[ $version_input =~ ^([0-9]+\.[0-9]+\.[0-9]+)((-[a-zA-Z]+)(\.[0-9]+)?)?$ ]]; then
version=${BASH_REMATCH[1]}
version_suffix=${BASH_REMATCH[2]}
else
echo -e "${RED}Invalid version format: $PROVIDED_VERSION${RESET}"
echo -e "${RED}Please use format X.Y.Z or X.Y.Z-suffix (e.g. 1.2.3 or 1.2.3-alpha.1)${RESET}"
exit 1
fi
else
read_semver
fi
# Extract major, minor, patch from version
major=$(echo $version | cut -d. -f1)
@@ -428,7 +484,7 @@ elif [[ "$MARKETING_UPDATE" == true ]]; then
display_version="${version}${version_suffix}"
# Read current build numbers (needed for changelog creation)
ios_pbxproj="../apps/mobile-app/ios/AliasVault.xcodeproj/project.pbxproj"
ios_pbxproj="$REPO_ROOT/apps/mobile-app/ios/AliasVault.xcodeproj/project.pbxproj"
ios_main_line=$(grep -n "PRODUCT_BUNDLE_IDENTIFIER = net.aliasvault.app;" "$ios_pbxproj" | head -n1 | cut -d: -f1)
ios_start_line=$((ios_main_line - 30))
current_ios_build=$(sed -n "${ios_start_line},${ios_main_line}p" "$ios_pbxproj" | grep "CURRENT_PROJECT_VERSION" | head -n1 | sed 's/.*= //' | tr -d ';' | grep -E '^[0-9]+$')
@@ -437,13 +493,13 @@ elif [[ "$MARKETING_UPDATE" == true ]]; then
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]+$')
current_android_build=$(grep "versionCode" "$REPO_ROOT/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 -e "${RED}Error: Could not read Android build number or invalid format${RESET}"
exit 1
fi
current_safari_build=$(grep -A1 "CURRENT_PROJECT_VERSION" ../apps/browser-extension/safari-xcode/AliasVault.xcodeproj/project.pbxproj | grep "CURRENT_PROJECT_VERSION = [0-9]\+;" | head -n1 | tr -d ';' | tr -d ' ' | cut -d'=' -f2 | grep -E '^[0-9]+$')
current_safari_build=$(grep -A1 "CURRENT_PROJECT_VERSION" "$REPO_ROOT/apps/browser-extension/safari-xcode/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 -e "${RED}Error: Could not read Safari build number or invalid format${RESET}"
exit 1
@@ -464,8 +520,8 @@ elif [[ "$MARKETING_UPDATE" == true ]]; then
echo -e "${BLUE}Creating empty changelog files for GA version $version...${RESET}"
# Create iOS changelog files
if [ -d "../fastlane/metadata/ios" ]; then
for lang_dir in ../fastlane/metadata/ios/*/; do
if [ -d "$REPO_ROOT/fastlane/metadata/ios" ]; then
for lang_dir in "$REPO_ROOT/fastlane/metadata/ios"/*/; do
if [ -d "$lang_dir" ]; then
lang=$(basename "$lang_dir")
changelog_dir="$lang_dir/changelogs"
@@ -477,8 +533,8 @@ elif [[ "$MARKETING_UPDATE" == true ]]; then
fi
# Create Android changelog files
if [ -d "../fastlane/metadata/android" ]; then
for lang_dir in ../fastlane/metadata/android/*/; do
if [ -d "$REPO_ROOT/fastlane/metadata/android" ]; then
for lang_dir in "$REPO_ROOT/fastlane/metadata/android"/*/; do
if [ -d "$lang_dir" ]; then
lang=$(basename "$lang_dir")
changelog_dir="$lang_dir/changelogs"
@@ -490,8 +546,8 @@ elif [[ "$MARKETING_UPDATE" == true ]]; then
fi
# Create Browser Extension changelog files
if [ -d "../fastlane/metadata/browser-extension" ]; then
for lang_dir in ../fastlane/metadata/browser-extension/*/; do
if [ -d "$REPO_ROOT/fastlane/metadata/browser-extension" ]; then
for lang_dir in "$REPO_ROOT/fastlane/metadata/browser-extension"/*/; do
if [ -d "$lang_dir" ]; then
lang=$(basename "$lang_dir")
changelog_dir="$lang_dir/changelogs"
@@ -523,73 +579,73 @@ elif [[ "$MARKETING_UPDATE" == true ]]; then
# Update server version
echo -e "${BLUE}Updating server version...${RESET}"
update_version "../apps/server/Shared/AliasVault.Shared.Core/AppInfo.cs" \
update_version "$REPO_ROOT/apps/server/Shared/AliasVault.Shared.Core/AppInfo.cs" \
"public const int VersionMajor = [0-9][0-9]*;" \
"public const int VersionMajor = $major;"
update_version "../apps/server/Shared/AliasVault.Shared.Core/AppInfo.cs" \
update_version "$REPO_ROOT/apps/server/Shared/AliasVault.Shared.Core/AppInfo.cs" \
"public const int VersionMinor = [0-9][0-9]*;" \
"public const int VersionMinor = $minor;"
update_version "../apps/server/Shared/AliasVault.Shared.Core/AppInfo.cs" \
update_version "$REPO_ROOT/apps/server/Shared/AliasVault.Shared.Core/AppInfo.cs" \
"public const int VersionPatch = [0-9][0-9]*;" \
"public const int VersionPatch = $patch;"
update_version "../apps/server/Shared/AliasVault.Shared.Core/AppInfo.cs" \
update_version "$REPO_ROOT/apps/server/Shared/AliasVault.Shared.Core/AppInfo.cs" \
"public const string VersionStage = \"[^\"]*\";" \
"public const string VersionStage = \"$version_suffix\";"
# Update browser extension version (without suffix - browser stores don't support semver suffixes)
echo -e "${BLUE}Updating browser extension wxt.config.ts version...${RESET}"
update_version "../apps/browser-extension/wxt.config.ts" \
update_version "$REPO_ROOT/apps/browser-extension/wxt.config.ts" \
"version: \"[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*[^\"]*\"," \
"version: \"$version\","
# Update package.json version (without suffix - for consistency with browser stores)
echo -e "${BLUE}Updating browser extension package.json version...${RESET}"
update_version "../apps/browser-extension/package.json" \
update_version "$REPO_ROOT/apps/browser-extension/package.json" \
"\"version\": \"[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*[^\"]*\"," \
"\"version\": \"$version\","
# Update browser extension AppInfo.ts version
echo -e "${BLUE}Updating browser extension AppInfo.ts version...${RESET}"
update_version "../apps/browser-extension/src/utils/AppInfo.ts" \
update_version "$REPO_ROOT/apps/browser-extension/src/utils/AppInfo.ts" \
"public static readonly VERSION = '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*[^']*';" \
"public static readonly VERSION = '$display_version';"
# Update generic mobile app version
echo -e "${BLUE}Updating mobile app version...${RESET}"
update_version "../apps/mobile-app/utils/AppInfo.ts" \
update_version "$REPO_ROOT/apps/mobile-app/utils/AppInfo.ts" \
"public static readonly VERSION = '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*[^']*';" \
"public static readonly VERSION = '$display_version';"
update_version "../apps/mobile-app/app.json" \
update_version "$REPO_ROOT/apps/mobile-app/app.json" \
"\"version\": \"[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*[^\"]*\"," \
"\"version\": \"$display_version\","
# Update iOS app version (Apple doesn't accept stage suffixes in MARKETING_VERSION)
echo -e "${BLUE}Updating iOS app version...${RESET}"
update_version "../apps/mobile-app/ios/AliasVault.xcodeproj/project.pbxproj" \
update_version "$REPO_ROOT/apps/mobile-app/ios/AliasVault.xcodeproj/project.pbxproj" \
"MARKETING_VERSION = [0-9]\+\.[0-9]\+\.[0-9]\+[^;]*;" \
"MARKETING_VERSION = $version;"
# Update Android app version
echo -e "${BLUE}Updating Android app version...${RESET}"
update_version "../apps/mobile-app/android/app/build.gradle" \
update_version "$REPO_ROOT/apps/mobile-app/android/app/build.gradle" \
"versionName \"[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*[^\"]*\"" \
"versionName \"$display_version\""
# Update Safari extension version (Apple doesn't accept stage suffixes in MARKETING_VERSION)
echo -e "${BLUE}Updating Safari extension version...${RESET}"
update_version "../apps/browser-extension/safari-xcode/AliasVault.xcodeproj/project.pbxproj" \
update_version "$REPO_ROOT/apps/browser-extension/safari-xcode/AliasVault.xcodeproj/project.pbxproj" \
"MARKETING_VERSION = [0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*[^;]*;" \
"MARKETING_VERSION = $version;"
# Update Rust core version (Cargo.toml uses base version without suffix)
echo -e "${BLUE}Updating Rust core version...${RESET}"
update_version "../core/rust/Cargo.toml" \
update_version "$REPO_ROOT/core/rust/Cargo.toml" \
"^version = \"[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*[^\"]*\"" \
"version = \"$version\""
# Update Rust core Cargo.lock (aliasvault-core package version)
echo -e "${BLUE}Updating Rust core Cargo.lock version...${RESET}"
sed -i '' '/^name = "aliasvault-core"$/{n;s/version = "[^"]*"/version = "'"$version"'"/;}' "../core/rust/Cargo.lock"
sed -i '' '/^name = "aliasvault-core"$/{n;s/version = "[^"]*"/version = "'"$version"'"/;}' "$REPO_ROOT/core/rust/Cargo.lock"
echo ""
echo -e "${GREEN}✓ Version numbers updated successfully${RESET}"
@@ -620,7 +676,7 @@ echo ""
# Read current build numbers (if not already read for marketing update)
if [[ "$MARKETING_UPDATE" != true ]]; then
# For iOS, read from main app target (identified by net.aliasvault.app bundle ID)
ios_pbxproj="../apps/mobile-app/ios/AliasVault.xcodeproj/project.pbxproj"
ios_pbxproj="$REPO_ROOT/apps/mobile-app/ios/AliasVault.xcodeproj/project.pbxproj"
ios_main_line=$(grep -n "PRODUCT_BUNDLE_IDENTIFIER = net.aliasvault.app;" "$ios_pbxproj" | head -n1 | cut -d: -f1)
ios_start_line=$((ios_main_line - 30))
current_ios_build=$(sed -n "${ios_start_line},${ios_main_line}p" "$ios_pbxproj" | grep "CURRENT_PROJECT_VERSION" | head -n1 | sed 's/.*= //' | tr -d ';' | grep -E '^[0-9]+$')
@@ -629,13 +685,13 @@ if [[ "$MARKETING_UPDATE" != true ]]; then
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]+$')
current_android_build=$(grep "versionCode" "$REPO_ROOT/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 -e "${RED}Error: Could not read Android build number or invalid format${RESET}"
exit 1
fi
current_safari_build=$(grep -A1 "CURRENT_PROJECT_VERSION" ../apps/browser-extension/safari-xcode/AliasVault.xcodeproj/project.pbxproj | grep "CURRENT_PROJECT_VERSION = [0-9]\+;" | head -n1 | tr -d ';' | tr -d ' ' | cut -d'=' -f2 | grep -E '^[0-9]+$')
current_safari_build=$(grep -A1 "CURRENT_PROJECT_VERSION" "$REPO_ROOT/apps/browser-extension/safari-xcode/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 -e "${RED}Error: Could not read Safari build number or invalid format${RESET}"
exit 1
@@ -651,17 +707,17 @@ if [[ "$MARKETING_UPDATE" != true ]]; then
fi
# Update build numbers
update_version "../apps/mobile-app/ios/AliasVault.xcodeproj/project.pbxproj" \
update_version "$REPO_ROOT/apps/mobile-app/ios/AliasVault.xcodeproj/project.pbxproj" \
"CURRENT_PROJECT_VERSION = [0-9]\+;" \
"CURRENT_PROJECT_VERSION = $new_ios_build;" \
"iOS Mobile App"
update_version "../apps/mobile-app/android/app/build.gradle" \
update_version "$REPO_ROOT/apps/mobile-app/android/app/build.gradle" \
"versionCode [0-9]\+" \
"versionCode $new_android_build" \
"Android App"
update_version "../apps/browser-extension/safari-xcode/AliasVault.xcodeproj/project.pbxproj" \
update_version "$REPO_ROOT/apps/browser-extension/safari-xcode/AliasVault.xcodeproj/project.pbxproj" \
"CURRENT_PROJECT_VERSION = [0-9]\+;" \
"CURRENT_PROJECT_VERSION = $new_safari_build;" \
"Safari Extension"
@@ -698,7 +754,7 @@ if [[ "$MARKETING_UPDATE" == true ]]; then
echo ""
# Create version directory if it doesn't exist
version_dir="../apps/.version"
version_dir="$REPO_ROOT/apps/.version"
mkdir -p "$version_dir"
# Write full version (with suffix if present)

View File

@@ -120,7 +120,6 @@ if [ -z "$EXISTING_RELEASE" ]; then
if [ $? -eq 0 ]; then
echo ""
echo -e "${GREEN}✓ Draft release created successfully!${RESET}"
echo -e "${CYAN}View it at: https://github.com/aliasvault/aliasvault/releases/edit/$NEW_TAG${RESET}"
if [ "$RELEASE_TARGET" = "main" ]; then
echo ""
echo -e "${YELLOW}Note: Release was created from main branch. You can change the target branch later in the GitHub UI.${RESET}"