Files
makefu bbe17f8b75 iaito: add update script, run at the end of radare2 update script
iaito (the front-end for radare2) should follow radare2 base package to avoid incompatibilities
the radare2 update script tries to bump iaito but will continue if unsuccessful as
the two projects do share the same version but not the same release date
2026-04-21 00:49:55 +02:00

79 lines
2.9 KiB
Bash
Executable File

#!/usr/bin/env nix-shell
#!nix-shell -i sh -p curl jq nix-prefetch-github nix coreutils gnused gnugrep
# shellcheck shell=sh
set -eu
# Directory of this script / the radare2 package
SCRIPT_DIR="$(readlink -f "$(dirname "$0")")"
NIXFILE="$SCRIPT_DIR/default.nix"
# Determine latest release version
LATEST_VERSION=$(curl -s https://api.github.com/repos/radareorg/radare2/releases/latest | jq -r '.tag_name')
echo "Latest radare2 version: $LATEST_VERSION"
CURRENT_VERSION=$(grep 'version = ' "$NIXFILE" | head -1 | sed 's/.*"\(.*\)".*/\1/')
echo "Current radare2 version: $CURRENT_VERSION"
if [ "$LATEST_VERSION" = "$CURRENT_VERSION" ]; then
echo "radare2 is already up to date"
exit 0
fi
# Update main package version and hash
echo "Updating main source to $LATEST_VERSION..."
MAIN_HASH=$(nix-prefetch-github radare radare2 --rev "$LATEST_VERSION" --json | jq -r '.hash')
echo " New main hash: $MAIN_HASH"
sed -i "s|version = \"$CURRENT_VERSION\"|version = \"$LATEST_VERSION\"|" "$NIXFILE"
sed -i "/src = fetchFromGitHub/,/};/{s|hash = \".*\"|hash = \"$MAIN_HASH\"|}" "$NIXFILE"
# Update a single subproject
# Arguments: name owner repo wrap_file ref_type
update_subproject() {
name=$1
owner=$2
repo=$3
wrap_file=$4
ref_type=$5
echo "Checking subproject $name..."
# Fetch the wrap file from the new version
wrap_content=$(curl -sL "https://raw.githubusercontent.com/radareorg/radare2/$LATEST_VERSION/subprojects/$wrap_file")
new_rev=$(echo "$wrap_content" | grep '^revision' | sed 's/revision = //')
# Get the current revision from the nix file
current_rev=$(grep -A3 "repo = \"$repo\"" "$NIXFILE" | grep "$ref_type = " | sed 's/.*"\(.*\)".*/\1/')
if [ "$new_rev" = "$current_rev" ]; then
echo " $name is unchanged at $current_rev"
return
fi
echo " Updating $name: $current_rev -> $new_rev"
# Prefetch new hash
new_hash=$(nix-prefetch-github "$owner" "$repo" --rev "$new_rev" --json | jq -r '.hash')
echo " New hash: $new_hash"
# Update revision and hash in the nix file
sed -i "/repo = \"$repo\"/,/};/{s|$ref_type = \"$current_rev\"|$ref_type = \"$new_rev\"|}" "$NIXFILE"
sed -i "/repo = \"$repo\"/,/};/{s|hash = \".*\"|hash = \"$new_hash\"|}" "$NIXFILE"
}
update_subproject binaryninja Vector35 binaryninja-api binaryninja.wrap rev
update_subproject sdb radareorg sdb sdb.wrap tag
update_subproject qjs quickjs-ng quickjs qjs.wrap rev
echo "Update iaito to follow new radare2 version '$LATEST_VERSION'"
IAITO_UPDATE_SCRIPT="$(readlink -f "$(dirname "$SCRIPT_DIR")/../../../by-name/ia/iaito/update.sh")"
if "$IAITO_UPDATE_SCRIPT" "$LATEST_VERSION";then
echo "iaito updated to $LATEST_VERSION"
else
# iaito release may not have been published yet, release dates are not in sync
# sometimes, iaito is released earlier than radare2
echo "failed to update iaito to $LATEST_VERSION, continuing"
fi
echo "Update complete. Please verify with: nix build .#radare2 .#iaito"