111 lines
3.5 KiB
Bash
Executable File
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
|