172 lines
6.0 KiB
Bash
Executable File
172 lines
6.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# SPDX-License-Identifier: MPL-2.0
|
|
|
|
set -e
|
|
|
|
# This script is used to update Asterinas version numbers in all relevant files in the repository.
|
|
# Usage: ./tools/bump_version.sh bump_type
|
|
# bump_type can be one of: patch, minor, or major.
|
|
|
|
# TODO: we may remove the VERSION file in the future,
|
|
# and retrieve the current version from git tag.
|
|
|
|
# Update the package version (`version = "{version}"`) in file $1
|
|
update_package_version() {
|
|
echo "Updating file $1"
|
|
# Package version is usually the first version in Cargo.toml,
|
|
# so only the first matched version is updated.
|
|
pattern="^version = \"[[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\"$"
|
|
sed -i "0,/${pattern}/s/${pattern}/version = \"${new_version}\"/1" $1
|
|
}
|
|
|
|
# Update the version of the $2 dependency (`$2 = { version = "", ...`) in file $1
|
|
update_dep_version() {
|
|
echo "Updating the version of $2 in file $1"
|
|
pattern="^$2 = { version = \"[[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\""
|
|
sed -i "0,/${pattern}/s/${pattern}/$2 = { version = \"${new_version}\"/1" $1
|
|
}
|
|
|
|
# Update Docker image versions (`asterinas/asterinas:{version}`) in file $1
|
|
update_image_versions() {
|
|
echo "Updating file $1"
|
|
# Update the version of the development container
|
|
sed -i "s/asterinas\/asterinas:[[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+/asterinas\/asterinas:${new_version}/g" $1
|
|
# Update the test environment described in the OSDK manual
|
|
sed -i "s/asterinas\/osdk:[[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+/asterinas\/osdk:${new_version}/g" $1
|
|
}
|
|
|
|
# Print the help message
|
|
print_help() {
|
|
echo "Usage: $0 bump_type"
|
|
echo ""
|
|
echo "The bump_type argument must be either \"patch\", \"minor\", or \"major\","
|
|
echo "which instructs the script to increment the patch, minor, and major part"
|
|
echo "of the semantic version number of Asterinas, respectively."
|
|
}
|
|
|
|
# Add the number $1 by 1
|
|
# Bash cannot deal with 0 by using `$((num + 1))`,
|
|
# So this function is defined to specially deal with 0.
|
|
add_one() {
|
|
local num=$1
|
|
if [ "$num" == "0" ]; then
|
|
echo "1"
|
|
else
|
|
local bumped=$((num + 1))
|
|
echo "$bumped"
|
|
fi
|
|
}
|
|
|
|
# Bump the version based on $bump_type
|
|
bump_version() {
|
|
local IFS="."
|
|
local version_parts=($current_version)
|
|
|
|
case "$bump_type" in
|
|
"patch")
|
|
version_parts[2]=$(add_one "${version_parts[2]}")
|
|
;;
|
|
"minor")
|
|
version_parts[1]=$(add_one "${version_parts[1]}")
|
|
version_parts[2]=0
|
|
;;
|
|
"major")
|
|
version_parts[0]=$(add_one "${version_parts[0]}")
|
|
version_parts[1]=0
|
|
version_parts[2]=0
|
|
;;
|
|
esac
|
|
|
|
echo "${version_parts[*]}"
|
|
}
|
|
|
|
# Validate the bump type
|
|
validate_bump_type() {
|
|
case "$bump_type" in
|
|
"patch" | "minor" | "major")
|
|
;;
|
|
*)
|
|
echo "Error: Invalid bump_type. Allowed values are: patch, minor, or major."
|
|
print_help
|
|
exit 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Update tag version (`v{version}`) in file $1
|
|
update_tag_version() {
|
|
echo "Updating file $1"
|
|
sed -i "s/v[[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+/v${new_version}/g" $1
|
|
}
|
|
|
|
SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
|
|
ASTER_SRC_DIR=${SCRIPT_DIR}/..
|
|
DOCS_DIR=${ASTER_SRC_DIR}/docs
|
|
OSTD_CARGO_TOML_PATH=${ASTER_SRC_DIR}/ostd/Cargo.toml
|
|
OSTD_TEST_CARGO_TOML_PATH=${ASTER_SRC_DIR}/ostd/libs/ostd-test/Cargo.toml
|
|
OSTD_MACROS_CARGO_TOML_PATH=${ASTER_SRC_DIR}/ostd/libs/ostd-macros/Cargo.toml
|
|
LINUX_BOOT_PARAMS_CARGO_TOML_PATH=${ASTER_SRC_DIR}/ostd/libs/linux-bzimage/boot-params/Cargo.toml
|
|
LINUX_BZIMAGE_BUILDER_CARGO_TOML_PATH=${ASTER_SRC_DIR}/ostd/libs/linux-bzimage/builder/Cargo.toml
|
|
LINUX_BZIMAGE_SETUP_CARGO_TOML_PATH=${ASTER_SRC_DIR}/ostd/libs/linux-bzimage/setup/Cargo.toml
|
|
OSDK_CARGO_TOML_PATH=${ASTER_SRC_DIR}/osdk/Cargo.toml
|
|
OSDK_TEST_RUNNER_CARGO_TOML_PATH=${ASTER_SRC_DIR}/osdk/test-kernel/Cargo.toml
|
|
VERSION_PATH=${ASTER_SRC_DIR}/VERSION
|
|
|
|
current_version=$(cat ${VERSION_PATH})
|
|
bump_type=$1
|
|
|
|
if [[ "$bump_type" == "--help" || "$bump_type" == "-h" ]]; then
|
|
print_help
|
|
exit 0
|
|
fi
|
|
|
|
validate_bump_type
|
|
new_version=$(bump_version ${current_version})
|
|
|
|
# Update the versions in Cargo.toml
|
|
update_package_version ${OSTD_TEST_CARGO_TOML_PATH}
|
|
update_package_version ${OSTD_MACROS_CARGO_TOML_PATH}
|
|
update_package_version ${OSTD_CARGO_TOML_PATH}
|
|
update_package_version ${LINUX_BOOT_PARAMS_CARGO_TOML_PATH}
|
|
update_package_version ${LINUX_BZIMAGE_BUILDER_CARGO_TOML_PATH}
|
|
update_package_version ${LINUX_BZIMAGE_SETUP_CARGO_TOML_PATH}
|
|
update_dep_version ${OSTD_CARGO_TOML_PATH} ostd-test
|
|
update_dep_version ${OSTD_CARGO_TOML_PATH} linux-boot-params
|
|
update_dep_version ${OSTD_CARGO_TOML_PATH} ostd-macros
|
|
update_dep_version ${LINUX_BZIMAGE_SETUP_CARGO_TOML_PATH} linux-boot-params
|
|
update_package_version ${OSDK_CARGO_TOML_PATH}
|
|
update_package_version ${OSDK_TEST_RUNNER_CARGO_TOML_PATH}
|
|
update_dep_version ${OSDK_TEST_RUNNER_CARGO_TOML_PATH} ostd
|
|
update_dep_version ${OSDK_CARGO_TOML_PATH} linux-bzimage-builder
|
|
|
|
# Automatically bump Cargo.lock files
|
|
cargo update -p aster-nix --precise $new_version # For Cargo.lock
|
|
cd osdk && cargo update -p cargo-osdk --precise $new_version # For osdk/Cargo.lock
|
|
|
|
# Update Docker image versions in README files
|
|
update_image_versions ${ASTER_SRC_DIR}/README.md
|
|
update_image_versions ${ASTER_SRC_DIR}/README_CN.md
|
|
update_image_versions ${SCRIPT_DIR}/docker/README.md
|
|
update_image_versions ${DOCS_DIR}/src/kernel/intel_tdx.md
|
|
|
|
# Update Docker image versions in workflows
|
|
WORKFLOWS=$(find "${ASTER_SRC_DIR}/.github/workflows/" -type f -name "*.yml")
|
|
for workflow in $WORKFLOWS; do
|
|
update_image_versions $workflow
|
|
done
|
|
|
|
# Update tag version in release_tag workflow
|
|
RELEASE_TAG_WORKFLOW=${ASTER_SRC_DIR}/.github/workflows/push_git_tag.yml
|
|
update_tag_version $RELEASE_TAG_WORKFLOW
|
|
|
|
# Update Docker image versions in the documentation
|
|
GET_STARTED_PATH=${ASTER_SRC_DIR}/docs/src/kernel/README.md
|
|
update_image_versions $GET_STARTED_PATH
|
|
|
|
# Create or update VERSION
|
|
# `-n` is used to avoid adding a '\n' in the VERSION file.
|
|
echo -n "${new_version}" > ${VERSION_PATH}
|
|
|
|
echo "Bumped Asterinas OSTD & OSDK version to $new_version"
|