2025-08-19 02:03:08 +05:30

111 lines
3.5 KiB
Bash
Executable File

#!/usr/bin/env nix-shell
#!nix-shell -i bash -p curl gnugrep gnused jq
# shellcheck shell=bash
set -euo pipefail
# Script configuration
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
PACKAGE_NIX="${SCRIPT_DIR}/package.nix"
SOURCES_JSON="${SCRIPT_DIR}/sources.json"
# Platform configuration
declare -A PLATFORM_URLS=(
["x86_64-linux"]="https://prod.download.desktop.kiro.dev/stable/metadata-linux-x64-stable.json"
["x86_64-darwin"]="https://prod.download.desktop.kiro.dev/stable/metadata-dmg-darwin-x64-stable.json"
["aarch64-darwin"]="https://prod.download.desktop.kiro.dev/stable/metadata-dmg-darwin-arm64-stable.json"
)
# Data storage
declare -A platform_versions
declare -A platform_urls
declare -A platform_hashes
# Error handling
error_exit() {
echo "Error: $1" >&2
exit 1
}
# Script execution starts here
echo "Starting Kiro update process..."
# Fetch metadata for all platforms
echo "Fetching platform information..."
for platform in "${!PLATFORM_URLS[@]}"; do
url="${PLATFORM_URLS[$platform]}"
echo "Fetching metadata for $platform..."
if ! response=$(curl -fsSL "$url"); then
error_exit "Failed to fetch metadata for $platform from $url"
fi
# Extract file URL and version from metadata
file_url=$(echo "$response" | jq -r '
.releases[0].updateTo
| select(.url | test("\\.(tar|dmg)(\\.|$)"))
| .url' | head -1)
if [[ -z "$file_url" || "$file_url" == "null" ]]; then
error_exit "Could not find a valid file URL for $platform in metadata"
fi
version=$(echo "$response" | jq -r '.currentRelease')
if [[ -z "$version" || "$version" == "null" ]]; then
error_exit "Could not extract version for $platform from metadata"
fi
platform_versions["$platform"]="$version"
platform_urls["$platform"]="$file_url"
done
# Determine the maximum version
max_version=""
for platform in "${!platform_versions[@]}"; do
version="${platform_versions[$platform]}"
if [[ -z "$max_version" ]] || [[ "$version" > "$max_version" ]]; then
max_version="$version"
fi
done
echo "Latest version across all platforms: $max_version"
# Check if update is needed
if [[ ! -f "$PACKAGE_NIX" ]]; then
error_exit "package.nix not found at $PACKAGE_NIX"
fi
current_version=$(grep -E '^ version = ' "$PACKAGE_NIX" | cut -d'"' -f2)
if [[ -z "$current_version" ]]; then
error_exit "Could not extract current version from package.nix"
fi
if [[ "$max_version" == "$current_version" ]]; then
echo "No update needed. Current version is already the latest: $current_version"
exit 0
fi
echo "Updating to version: $max_version"
echo "Calculating hashes..."
for platform in "${!platform_urls[@]}"; do
echo " Calculating hash for $platform..."
platform_hashes["$platform"]=$(nix hash convert --hash-algo sha256 "$(nix-prefetch-url "${platform_urls[$platform]}")")
done
# Update package.nix and generate sources.json
echo "Updating package.nix..."
sed -i "s/version = \".*\"/version = \"$max_version\"/" "$PACKAGE_NIX"
echo "Generating sources.json..."
json_content="{}"
for platform in "${!platform_urls[@]}"; do
json_content=$(echo "$json_content" | jq --arg platform "$platform" \
--arg url "${platform_urls[$platform]}" \
--arg hash "${platform_hashes[$platform]}" \
'. + {($platform): {url: $url, hash: $hash}}')
done
echo "$json_content" >"$SOURCES_JSON"
echo "Successfully updated package.nix to version $max_version"
echo "Hashes calculated and updated:"
for platform in "${!platform_hashes[@]}"; do
echo " $platform: ${platform_hashes[$platform]}"
done