Add release and PR title checks, shared CI scripts, Gitea PR template, and align pyproject.toml to v0.3.1. Co-authored-by: Cursor <[email protected]>
90 lines
1.9 KiB
Bash
Executable File
90 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Shared helpers for release and PR title CI scripts.
|
|
|
|
SOURCE_DIR="python_repositories"
|
|
|
|
# Returns bump type (major|minor|patch) or empty if no valid prefix.
|
|
bump_type_from_title() {
|
|
local title="$1"
|
|
local lower
|
|
lower=$(echo "$title" | tr '[:upper:]' '[:lower:]')
|
|
|
|
if echo "$lower" | grep -qE '^\[(major|breaking)\]'; then
|
|
echo "major"
|
|
elif echo "$lower" | grep -qE '^\[(minor|feat)\]'; then
|
|
echo "minor"
|
|
elif echo "$lower" | grep -qE '^\[(patch|fix)\]'; then
|
|
echo "patch"
|
|
fi
|
|
}
|
|
|
|
title_has_bump_prefix() {
|
|
[[ -n "$(bump_type_from_title "$1")" ]]
|
|
}
|
|
|
|
strip_bump_prefix() {
|
|
local title="$1"
|
|
echo "$title" | sed -E 's/^\[(patch|fix|minor|feat|major|breaking)\][[:space:]]*//i'
|
|
}
|
|
|
|
extract_pr_title_from_merge_commit() {
|
|
local msg="$1"
|
|
echo "$msg" | sed -n "s/^Merge pull request '\(.*\)' (#.*/\1/p"
|
|
}
|
|
|
|
changed_source_files() {
|
|
grep -E "^${SOURCE_DIR}/" || true
|
|
}
|
|
|
|
has_source_changes() {
|
|
local files="$1"
|
|
echo "$files" | changed_source_files | grep -q .
|
|
}
|
|
|
|
read_pyproject_version() {
|
|
sed -n 's/^version = "\(.*\)"/\1/p' pyproject.toml | head -1
|
|
}
|
|
|
|
latest_tag_version() {
|
|
local tag
|
|
tag=$(git describe --tags --abbrev=0 2>/dev/null || true)
|
|
if [[ -n "$tag" ]]; then
|
|
echo "${tag#v}"
|
|
else
|
|
read_pyproject_version
|
|
fi
|
|
}
|
|
|
|
set_pyproject_version() {
|
|
local version="$1"
|
|
sed -i.bak -E "s/^version = \".*\"/version = \"${version}\"/" pyproject.toml
|
|
rm -f pyproject.toml.bak
|
|
}
|
|
|
|
bump_semver() {
|
|
local current="$1"
|
|
local bump_type="$2"
|
|
local major minor patch
|
|
|
|
IFS=. read -r major minor patch <<< "$current"
|
|
case "$bump_type" in
|
|
major)
|
|
major=$((major + 1))
|
|
minor=0
|
|
patch=0
|
|
;;
|
|
minor)
|
|
minor=$((minor + 1))
|
|
patch=0
|
|
;;
|
|
patch)
|
|
patch=$((patch + 1))
|
|
;;
|
|
*)
|
|
echo "Unknown bump type: $bump_type" >&2
|
|
return 1
|
|
;;
|
|
esac
|
|
echo "${major}.${minor}.${patch}"
|
|
}
|