meta-wolfssl/update-version.sh

135 lines
4.4 KiB
Bash
Executable File

#!/bin/bash
# Copyright (C) 2006-2022 wolfSSL Inc.
#
# This file is part of wolfSSL.
#
# wolfSSL is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# wolfSSL is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
get_current() {
CURRENT=`find recipes-wolfssl/$1/*.bb | grep -Eo '[0-9]+.[0-9]+.[0-9]+'`
}
get_new() {
NEW=$(curl -s "https://api.github.com/repos/wolfssl/$1/releases/latest" | jq -r '.tag_name' | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+')
}
update() {
if [ -z "$CURRENT" ] || [ -z "$NEW" ]; then
printf "Error: Current or new version is empty for %s. Skipping update.\n" "$1"
return
fi
if [ "$CURRENT" != "$NEW" ]; then
printf "Updating from %s to %s for %s...\n" "$CURRENT" "$NEW" "$1"
TAG="v$NEW-stable"
if [ "$1" = "wolfmqtt" ] || [ "$1" == "wolftpm" ]; then
TAG="v$NEW"
fi
# Clone the new version repository
if ! git clone -b "$TAG" "git@github.com:wolfssl/$1" &> /dev/null; then
printf "Error cloning %s. Skipping.\n" "$1"
return
fi
# Get the new revision
cd "$1" &> /dev/null
REV=$(git rev-list -n 1 "$TAG")
cd .. && rm -rf "$1"
# Check if the old .bb file exists before attempting to move
if [ ! -f "./recipes-wolfssl/$1/$1_$CURRENT.bb" ]; then
printf "Error: .bb file for %s with version %s not found. Skipping.\n" "$1" "$CURRENT"
return
fi
# Check if the new .bb file already exists
if [ -f "./recipes-wolfssl/$1/$1_$NEW.bb" ]; then
echo "New .bb file for version $NEW already exists. Deleting it to proceed with update."
# Delete the existing new .bb file
rm -f "./recipes-wolfssl/$1/$1_$NEW.bb"
fi
# Move the .bb file to the new version
git mv "./recipes-wolfssl/$1/$1_$CURRENT.bb" "./recipes-wolfssl/$1/$1_$NEW.bb" &> /dev/null
# Update the revision in the new .bb file
if [ -f "./recipes-wolfssl/$1/$1_$NEW.bb" ]; then
sed -i "s/rev=.*/rev=$REV\"/" "./recipes-wolfssl/$1/$1_$NEW.bb"
git add "./recipes-wolfssl/$1/$1_$NEW.bb" &> /dev/null
else
printf "Error updating .bb file for %s to version %s. File not found after move.\n" "$1" "$NEW"
return
fi
# Additional steps for wolfSSL
if [ "$1" = "wolfssl" ]; then
printf "\tUpdating wolfcrypt test and benchmark...\n"
# Update wolfcrypt test
if [ -f "./recipes-examples/wolfcrypt/wolfcrypttest/wolfcrypttest.bb" ]; then
sed -i "s/rev=.*/rev=$REV\"/" "./recipes-examples/wolfcrypt/wolfcrypttest/wolfcrypttest.bb"
git add "./recipes-examples/wolfcrypt/wolfcrypttest/wolfcrypttest.bb" &> /dev/null
else
printf "Error: wolfcrypttest.bb file not found.\n"
fi
# Update wolfcrypt benchmark
if [ -f "./recipes-examples/wolfcrypt/wolfcryptbenchmark/wolfcryptbenchmark.bb" ]; then
sed -i "s/rev=.*/rev=$REV\"/" "./recipes-examples/wolfcrypt/wolfcryptbenchmark/wolfcryptbenchmark.bb"
git add "./recipes-examples/wolfcrypt/wolfcryptbenchmark/wolfcryptbenchmark.bb" &> /dev/null
else
printf "Error: wolfcryptbenchmark.bb file not found.\n"
fi
fi
else
printf "Version %s is the latest for %s. No update needed.\n" "$CURRENT" "$1"
fi
}
check_and_update() {
printf "Checking version of ${1} to use..."
get_current "${1}"
get_new "${1}"
update "${1}"
}
check_and_update "wolfssl"
check_and_update "wolfmqtt"
check_and_update "wolfssh"
check_and_update "wolftpm"
check_and_update "wolfclu"
check_and_update "wolfssl-py"
check_and_update "wolfcrypt-py"
check_and_update "wolfengine"
check_and_update "wolfprovider"
exit 0