mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-08 12:56:48 +00:00
98 lines
3.1 KiB
Bash
Executable File
98 lines
3.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# SPDX-License-Identifier: MPL-2.0
|
|
|
|
set -e
|
|
|
|
# Publish OSDK and OSTD to crates.io
|
|
#
|
|
# Usage: publish_osdk_and_ostd.sh [--dry-run | --token REGISTRY_TOKEN]
|
|
|
|
SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
|
|
ASTER_SRC_DIR=${SCRIPT_DIR}/../..
|
|
|
|
# Print help message
|
|
print_help() {
|
|
echo "Usage: $0 [--dry-run | --token REGISTRY_TOKEN]"
|
|
echo ""
|
|
echo "Options:"
|
|
echo " --dry-run: Execute the publish check without actually publishing it."
|
|
echo " --token REGISTRY_TOKEN: The token to authenticate with crates.io."
|
|
}
|
|
|
|
# Parse the parameters
|
|
DRY_RUN=""
|
|
TOKEN=""
|
|
while [ "$#" -gt 0 ]; do
|
|
case "$1" in
|
|
--dry-run)
|
|
DRY_RUN="true"
|
|
shift
|
|
;;
|
|
--token)
|
|
TOKEN="$2"
|
|
shift 2
|
|
;;
|
|
*)
|
|
echo "Error: Invalid parameter: $1"
|
|
print_help
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Performs the publish check or publish the crate in directory $1.
|
|
# All the arguments after $1 are passed to `cargo publish`.
|
|
do_publish_for() {
|
|
pushd $ASTER_SRC_DIR/$1
|
|
|
|
ADDITIONAL_ARGS="${@:2}"
|
|
RF="$RUSTFLAGS --check-cfg cfg(ktest)"
|
|
|
|
if [ -n "$DRY_RUN" ]; then
|
|
# Temporarily change the crate version to the next patched version.
|
|
#
|
|
# `cargo publish --dry-run` requires that
|
|
# the crate version is not already published on crates.io,
|
|
# otherwise, the check will fail.
|
|
# Therefore, we modify the crate version to ensure it is not published.
|
|
current_version=$(cat $ASTER_SRC_DIR/VERSION)
|
|
next_patched_version=$(echo "$current_version" | awk -F. '{printf "%d.%d.%d\n", $1, $2, $3 + 1}')
|
|
pattern="^version = \"[[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\"$"
|
|
sed -i "0,/${pattern}/s/${pattern}/version = \"${next_patched_version}\"/1" Cargo.toml
|
|
|
|
# Perform checks
|
|
RUSTFLAGS=$RF cargo publish --dry-run --allow-dirty $ADDITIONAL_ARGS
|
|
RUSTFLAGS=$RF cargo doc $ADDITIONAL_ARGS
|
|
else
|
|
RUSTFLAGS=$RF cargo publish --token $TOKEN $ADDITIONAL_ARGS
|
|
fi
|
|
|
|
popd
|
|
}
|
|
|
|
do_publish_for ostd/libs/linux-bzimage/boot-params
|
|
do_publish_for ostd/libs/linux-bzimage/builder
|
|
do_publish_for ostd/libs/linux-bzimage/setup \
|
|
--target ../builder/src/x86_64-i386_pm-none.json \
|
|
-Zbuild-std=core,alloc,compiler_builtins
|
|
do_publish_for osdk
|
|
|
|
# All supported targets of OSTD, this array should keep consistent with
|
|
# `package.metadata.docs.rs.targets` in `ostd/Cargo.toml`.
|
|
TARGETS="x86_64-unknown-none"
|
|
for TARGET in $TARGETS; do
|
|
do_publish_for ostd/libs/ostd-macros --target $TARGET
|
|
do_publish_for ostd/libs/ostd-test --target $TARGET
|
|
do_publish_for ostd --target $TARGET
|
|
do_publish_for osdk/deps/frame-allocator --target $TARGET
|
|
do_publish_for osdk/deps/heap-allocator --target $TARGET
|
|
do_publish_for osdk/deps/test-kernel --target $TARGET
|
|
|
|
# For actual publishing, we should only publish once. Using any target that
|
|
# OSTD supports is OK. Here we use the first target in the list.
|
|
if [ -z "$DRY_RUN" ]; then
|
|
break
|
|
fi
|
|
done
|