mirror of
https://github.com/eclipse-threadx/threadx.git
synced 2026-10-06 06:59:08 +08:00
prepare_release.sh committed the version passes with a Co-authored-by trailer naming an AI. That trailer asserts authorship an AI cannot hold: the human contributor signs the ECA and is solely responsible for the contribution. It is already in the published history, on the 6.5.1.202602 and 6.5.1.202602a preparations. The commits now carry their subject alone. A version pass is mechanical sed output, so no agent produces it at run time; an agent that runs the script records its own Assisted-by trailer on that run instead. The script also gains the AI disclosure line it was missing. Ran the patched script against a scratch clone targeting 6.5.2.202603. Both commits come out with an empty trailer block, the version constants and 211 port version strings update as before, and check_ports.sh passes. Assisted-by: Claude Code (Opus 5) <noreply@anthropic.com>
184 lines
7.1 KiB
Bash
Executable File
184 lines
7.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# prepare_release.sh
|
|
# Prepares a ThreadX release by updating version constants and port version strings.
|
|
#
|
|
# Usage: prepare_release.sh <version>
|
|
# Example: prepare_release.sh 6.5.1.202602
|
|
# Hotfix: prepare_release.sh 6.5.1.202602a
|
|
#
|
|
# This script:
|
|
# 1. Creates branch release-<version>-preparation from dev
|
|
# 2. Updates version constants in common/inc/tx_api.h
|
|
# (commit: "Updated version number constants")
|
|
# 3. Updates port version strings in all tx_port.h files
|
|
# (commit: "Updated port version strings")
|
|
#
|
|
# Copyright (C) 2026 Eclipse ThreadX contributors
|
|
# SPDX-License-Identifier: MIT
|
|
# Portions of this file were generated with AI assistance.
|
|
|
|
set -eu
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
|
|
|
API_HEADER="${REPO_ROOT}/common/inc/tx_api.h"
|
|
PORT_HEADER_NAME="tx_port.h"
|
|
PORT_DIRS="ports ports_smp ports_arch ports_module"
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Argument validation
|
|
# --------------------------------------------------------------------------
|
|
if [ "$#" -ne 1 ]; then
|
|
printf "Usage: %s <version>\n" "$(basename "$0")" >&2
|
|
printf "Example: %s 6.5.1.202602\n" "$(basename "$0")" >&2
|
|
exit 1
|
|
fi
|
|
|
|
VERSION="$1"
|
|
|
|
if ! printf "%s" "${VERSION}" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+[a-z]?$'; then
|
|
printf "Error: Invalid version format '%s'.\n" "${VERSION}" >&2
|
|
printf "Expected: MAJOR.MINOR.PATCH.BUILD[hotfix_letter]\n" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Parse version components
|
|
# --------------------------------------------------------------------------
|
|
MAJOR=$(printf "%s" "${VERSION}" | cut -d. -f1)
|
|
MINOR=$(printf "%s" "${VERSION}" | cut -d. -f2)
|
|
PATCH=$(printf "%s" "${VERSION}" | cut -d. -f3)
|
|
BUILD_AND_HOTFIX=$(printf "%s" "${VERSION}" | cut -d. -f4)
|
|
BUILD=$(printf "%s" "${BUILD_AND_HOTFIX}" | sed -E 's/[a-z]+$//')
|
|
HOTFIX=$(printf "%s" "${BUILD_AND_HOTFIX}" | sed -E 's/^[0-9]+//')
|
|
|
|
if [ -z "${HOTFIX}" ]; then
|
|
HOTFIX_DEFINE="' '"
|
|
else
|
|
HOTFIX_DEFINE="'${HOTFIX}'"
|
|
fi
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Read and display current version
|
|
# --------------------------------------------------------------------------
|
|
CURR_MAJOR=$(grep -E "^#define THREADX_MAJOR_VERSION" "${API_HEADER}" | awk '{print $NF}')
|
|
CURR_MINOR=$(grep -E "^#define THREADX_MINOR_VERSION" "${API_HEADER}" | awk '{print $NF}')
|
|
CURR_PATCH=$(grep -E "^#define THREADX_PATCH_VERSION" "${API_HEADER}" | awk '{print $NF}')
|
|
CURR_BUILD=$(grep -E "^#define THREADX_BUILD_VERSION" "${API_HEADER}" | awk '{print $NF}')
|
|
CURR_HOTFIX=$(grep -E "^#define THREADX_HOTFIX_VERSION" "${API_HEADER}" | \
|
|
sed -E "s/.*'([^']*)'.*/\1/" | tr -d ' ')
|
|
|
|
if [ -z "${CURR_HOTFIX}" ]; then
|
|
CURR_VER="${CURR_MAJOR}.${CURR_MINOR}.${CURR_PATCH}.${CURR_BUILD}"
|
|
else
|
|
CURR_VER="${CURR_MAJOR}.${CURR_MINOR}.${CURR_PATCH}.${CURR_BUILD}${CURR_HOTFIX}"
|
|
fi
|
|
|
|
printf "\nThreadX release preparation\n"
|
|
printf " Repository : %s\n" "${REPO_ROOT}"
|
|
printf " Current version : %s\n" "${CURR_VER}"
|
|
printf " Target version : %s\n\n" "${VERSION}"
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Port consistency checks
|
|
# --------------------------------------------------------------------------
|
|
# Run before anything is branched or rewritten, so a release is never cut on
|
|
# top of ports that have drifted from ports_arch or headers that cannot
|
|
# compile. Set SKIP_PORT_CHECKS=1 to proceed anyway.
|
|
if [ "${SKIP_PORT_CHECKS:-0}" = "1" ]; then
|
|
printf "Skipping the port consistency checks (SKIP_PORT_CHECKS=1).\n\n"
|
|
elif ! "${SCRIPT_DIR}/check_ports.sh"; then
|
|
printf "\nRelease preparation stopped: the port consistency checks failed.\n"
|
|
printf "Fix the problems above, or set SKIP_PORT_CHECKS=1 to proceed anyway.\n"
|
|
exit 1
|
|
fi
|
|
printf "Proceed with update? [y/N] "
|
|
read -r CONFIRM
|
|
case "${CONFIRM}" in
|
|
y|Y) ;;
|
|
*)
|
|
printf "Aborted.\n"
|
|
exit 0
|
|
;;
|
|
esac
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Pre-flight checks
|
|
# --------------------------------------------------------------------------
|
|
if ! git -C "${REPO_ROOT}" diff --quiet HEAD 2>/dev/null; then
|
|
printf "Error: Working tree has uncommitted changes. Commit or stash first.\n" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Create feature branch from dev
|
|
# --------------------------------------------------------------------------
|
|
BRANCH_NAME="release-${VERSION}-preparation"
|
|
printf "\nChecking out dev and pulling latest changes...\n"
|
|
git -C "${REPO_ROOT}" checkout dev
|
|
git -C "${REPO_ROOT}" pull origin dev
|
|
printf "Creating branch '%s'...\n" "${BRANCH_NAME}"
|
|
git -C "${REPO_ROOT}" checkout -b "${BRANCH_NAME}"
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Update version constants
|
|
# --------------------------------------------------------------------------
|
|
printf "\nUpdating version constants in %s...\n" "${API_HEADER}"
|
|
|
|
sed -i -E "s|(#define THREADX_MAJOR_VERSION[[:space:]]+)[0-9]+|\1${MAJOR}|" "${API_HEADER}"
|
|
sed -i -E "s|(#define THREADX_MINOR_VERSION[[:space:]]+)[0-9]+|\1${MINOR}|" "${API_HEADER}"
|
|
sed -i -E "s|(#define THREADX_PATCH_VERSION[[:space:]]+)[0-9]+|\1${PATCH}|" "${API_HEADER}"
|
|
sed -i -E "s|(#define THREADX_BUILD_VERSION[[:space:]]+)[0-9]+|\1${BUILD}|" "${API_HEADER}"
|
|
sed -i -E "s|(#define THREADX_HOTFIX_VERSION[[:space:]]+)'[^']*'|\1${HOTFIX_DEFINE}|" "${API_HEADER}"
|
|
|
|
git -C "${REPO_ROOT}" add "${API_HEADER}"
|
|
git -C "${REPO_ROOT}" commit -F - <<'COMMIT_EOF'
|
|
Updated version number constants
|
|
COMMIT_EOF
|
|
|
|
printf "Committed version constant updates.\n"
|
|
|
|
# --------------------------------------------------------------------------
|
|
# Update port version strings
|
|
# --------------------------------------------------------------------------
|
|
printf "\nUpdating port version strings...\n"
|
|
|
|
PORT_FILES=""
|
|
for dir in ${PORT_DIRS}; do
|
|
if [ -d "${REPO_ROOT}/${dir}" ]; then
|
|
found=$(find "${REPO_ROOT}/${dir}" -name "${PORT_HEADER_NAME}" 2>/dev/null | sort)
|
|
if [ -n "${found}" ]; then
|
|
PORT_FILES="${PORT_FILES}${found}
|
|
"
|
|
fi
|
|
fi
|
|
done
|
|
PORT_FILES=$(printf "%s" "${PORT_FILES}" | grep -v '^[[:space:]]*$' || true)
|
|
|
|
if [ -z "${PORT_FILES}" ]; then
|
|
printf "Warning: No port header files found. Skipping port version string commit.\n"
|
|
else
|
|
while IFS= read -r port_file; do
|
|
if [ -n "${port_file}" ] && grep -qE "Version [0-9]" "${port_file}" 2>/dev/null; then
|
|
sed -i -E "s/Version [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+[a-z]*/Version ${VERSION}/g" "${port_file}"
|
|
printf " Updated: %s\n" "${port_file#${REPO_ROOT}/}"
|
|
fi
|
|
done <<EOF
|
|
${PORT_FILES}
|
|
EOF
|
|
|
|
git -C "${REPO_ROOT}" add -u
|
|
if git -C "${REPO_ROOT}" diff --cached --quiet; then
|
|
printf "No port version string changes staged. Skipping commit.\n"
|
|
else
|
|
git -C "${REPO_ROOT}" commit -F - <<'COMMIT_EOF'
|
|
Updated port version strings
|
|
COMMIT_EOF
|
|
printf "Committed port version string updates.\n"
|
|
fi
|
|
fi
|
|
|
|
printf "\nRelease preparation complete.\n"
|
|
printf "Branch '%s' is ready for review.\n" "${BRANCH_NAME}"
|