#!/usr/bin/env bash set -euo pipefail release_type() { local current="${1#v}" local baseline="${2#v}" local current_major current_minor baseline_major baseline_minor IFS='.' read -r current_major current_minor _ <<< "${current}" IFS='.' read -r baseline_major baseline_minor _ <<< "${baseline}" if [ "${current_major}" != "${baseline_major}" ]; then printf '%s\n' major elif [ "${current_minor}" != "${baseline_minor}" ]; then printf '%s\n' minor else printf '%s\n' patch fi } run_self_test() { [ "$(release_type v2.0.0 v1.9.9)" = major ] [ "$(release_type v1.3.0 v1.2.9)" = minor ] [ "$(release_type v1.2.4 v1.2.3)" = patch ] } if [ "${1:-}" = "--self-test" ]; then run_self_test echo "SemVer release-type self-test passed" exit 0 fi release_tag="${1:?release tag is required}" git rev-parse --verify "${release_tag}^{commit}" >/dev/null baseline_tag="$({ git tag --merged "${release_tag}" --sort=-version:refname | grep -Fxv "${release_tag}" || true; } | head -n 1)" if [ -z "${baseline_tag}" ]; then echo "No earlier SemVer tag before ${release_tag}; skipping baseline comparison" exit 0 fi release_kind="$(release_type "${release_tag}" "${baseline_tag}")" for package in \ aria2-rust-pro-cli \ aria2-rust-pro-compat \ aria2-rust-pro-core \ aria2-rust-pro-protocol \ aria2-rust-pro-rpc \ aria2-rust-pro-storage; do cargo semver-checks check-release \ --package "${package}" \ --baseline-rev "${baseline_tag}" \ --release-type "${release_kind}" done