mirror of
https://github.com/OpenBluetoothToolbox/SimpleBLE
synced 2025-10-14 19:08:02 +08:00
119 lines
4.3 KiB
Bash
Executable File
119 lines
4.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
validate_version_format() {
|
|
local version_file_content=$1
|
|
echo "- VERSION file format? ($version_file_content)"
|
|
if [[ ! "$version_file_content" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
|
echo " FAIL, format should be major.minor.patch"
|
|
return 1
|
|
else
|
|
echo " OK"
|
|
return 0
|
|
fi
|
|
}
|
|
|
|
check_tag_version_match() {
|
|
local current_commit_tag=$1
|
|
local version_file=$2
|
|
local last_tag=$3
|
|
|
|
if [[ -n "$current_commit_tag" ]]; then
|
|
# Current commit is tagged
|
|
echo "- Git tag consistent with VERSION file?"
|
|
if [[ "$current_commit_tag" == "$version_file" ]]; then
|
|
echo " OK"
|
|
return 0
|
|
else
|
|
echo " FAIL Tag ($current_commit_tag) does not match VERSION file content ($version_file)."
|
|
return 1
|
|
fi
|
|
else
|
|
# Current commit is not tagged, so VERSION file must have been increased manually
|
|
# Lets check...
|
|
local smallest_tag=$(printf '%s\n' "$version_file" "$last_tag" | sort -V | head -n1)
|
|
echo "- VERSION file ($version_file) bumped after last released tag ($last_tag)?"
|
|
if [[ "$last_tag" == "$version_file" || "$smallest_tag" == "$version_file" ]]; then
|
|
echo " FAIL Version in development should be greater than the last tag, did you forget to bump it?"
|
|
return 1
|
|
else
|
|
echo " OK"
|
|
return 0
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Function to check if Cargo.toml version matches the VERSION file
|
|
check_cargo_version_match() {
|
|
local version_file=$1
|
|
# Extract the version line from Cargo.toml
|
|
local cargo_version=$2
|
|
echo "- Cargo.toml consistent with VERSION file?"
|
|
if [[ "$cargo_version" == "$version_file"* ]]; then
|
|
echo " OK"
|
|
return 0
|
|
else
|
|
echo " FAIL Cargo.toml version ($cargo_version) does not match VERSION file content ($version_file)."
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
|
|
check_changelog() {
|
|
local current_commit_tag=$1
|
|
if [[ -n "$current_commit_tag" ]]; then
|
|
echo "- Release tag found in changelog?"
|
|
if grep -q "$current_commit_tag" docs/changelog.rst; then
|
|
echo " OK"
|
|
return 0
|
|
else
|
|
echo " FAIL, did you forgot to update changelog?"
|
|
return 1
|
|
fi
|
|
fi
|
|
}
|
|
###############################################################################
|
|
# Test logic
|
|
|
|
assert_return_value() {
|
|
local command="$1"
|
|
local expected=$2
|
|
local description="$3"
|
|
|
|
# Run command and redirect output to /dev/null
|
|
eval "$command" > /dev/null 2>&1
|
|
local actual=$?
|
|
|
|
if [ $actual -ne $expected ]; then
|
|
echo "UNIT TEST FAILED: $command (expected: $expected, got: $actual) Check code logic"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
assert_return_value 'validate_version_format "1.1"' 1 || exit 1
|
|
assert_return_value 'validate_version_format "1.1.1"' 0 || exit 1
|
|
assert_return_value 'check_cargo_version_match "1.1.1" "1.1.2"' 1 || exit 1
|
|
assert_return_value 'check_cargo_version_match "1.1.1" "1.1.1"' 0 || exit 1
|
|
assert_return_value 'check_cargo_version_match "1.1.1" "1.1.1-dev1"' 0 || exit 1
|
|
assert_return_value 'check_cargo_version_match "1.1.1" "1.1.2-dev1"' 1 || exit 1
|
|
assert_return_value 'check_tag_version_match "1.1.1" "1.1.2" "1.1.1"' 1 || exit 1
|
|
assert_return_value 'check_tag_version_match "1.1.1" "1.1.1" "1.1.1"' 0 || exit 1
|
|
assert_return_value 'check_tag_version_match "" "1.1.1" "1.1.1"' 1 || exit 1
|
|
assert_return_value 'check_tag_version_match "" "1.1.0" "1.1.1"' 1 || exit 1
|
|
assert_return_value 'check_tag_version_match "" "1.1.2" "1.1.1"' 0 || exit 1
|
|
assert_return_value 'check_changelog "1.1.9" ' 1 || exit 1
|
|
assert_return_value 'check_changelog "0.7.0" ' 0 || exit 1
|
|
assert_return_value 'check_changelog "" ' 0 || exit 1
|
|
###############################################################################
|
|
|
|
# Perform checks with real repository versions
|
|
|
|
current_tag=$(git describe --exact-match --tags HEAD 2>/dev/null | sed 's/^v//')
|
|
latest_tag=$(git describe --tags --abbrev=0 | sed 's/^v//')
|
|
version_file=$(cat VERSION)
|
|
cargo_version=$(grep '^version = ' Cargo.toml | sed 's/version = "\(.*\)"/\1/')
|
|
|
|
validate_version_format "$version_file" || exit 1
|
|
check_cargo_version_match "$version_file" "$cargo_version" || exit 1
|
|
check_tag_version_match "$current_tag" "$version_file" "$latest_tag" || exit 1
|
|
check_changelog "$current_tag"
|