67 lines
2.0 KiB
Bash
67 lines
2.0 KiB
Bash
#!/usr/bin/env bash
|
||
set -euo pipefail
|
||
|
||
# Release guard script
|
||
# Checks: tests, docs updated, compile, version ↔ changelog ↔ tag consistency, release type
|
||
|
||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")"/../.. && pwd)"
|
||
cd "$ROOT_DIR"
|
||
|
||
mode="${RELEASE_TYPE:-ci-verify}" # values: latest | wip | ci-verify
|
||
|
||
echo "[release-guard] mode=$mode"
|
||
|
||
# 1) Basic presence checks
|
||
[[ -f CHANGELOG.md ]] || { echo "CHANGELOG.md manquant"; exit 1; }
|
||
version_file="VERSION"
|
||
[[ -f TEMPLATE_VERSION ]] && version_file="TEMPLATE_VERSION"
|
||
[[ -f "$version_file" ]] || { echo "$version_file manquant"; exit 1; }
|
||
|
||
# 2) Extract version
|
||
project_version=$(tr -d '\r' < "$version_file" | head -n1 | sed 's/^v//')
|
||
[[ -n "$project_version" ]] || { echo "Version vide dans $version_file"; exit 1; }
|
||
echo "[release-guard] version=$project_version"
|
||
|
||
# 3) Changelog checks
|
||
if ! grep -Eq "^## \\[$project_version\\]" CHANGELOG.md; then
|
||
if [[ "$mode" == "wip" ]]; then
|
||
grep -Eq "^## \\[Unreleased\\]" CHANGELOG.md || { echo "Section [Unreleased] absente du CHANGELOG"; exit 1; }
|
||
else
|
||
echo "Entrée CHANGELOG pour version $project_version manquante"; exit 1;
|
||
fi
|
||
fi
|
||
|
||
# 4) Tests (optional best-effort)
|
||
if [[ -x tests/run_all_tests.sh ]]; then
|
||
echo "[release-guard] exécution tests/run_all_tests.sh"
|
||
./tests/run_all_tests.sh || { echo "Tests en échec"; exit 1; }
|
||
else
|
||
echo "[release-guard] tests absents (ok)"
|
||
fi
|
||
|
||
# 5) Build/compile (optional based on project)
|
||
if [[ -d sdk_relay ]] && command -v cargo >/dev/null 2>&1; then
|
||
echo "[release-guard] cargo build (sdk_relay)"
|
||
(cd sdk_relay && cargo build --quiet) || { echo "Compilation échouée"; exit 1; }
|
||
else
|
||
echo "[release-guard] build spécifique non applicable (ok)"
|
||
fi
|
||
|
||
# 6) Release type handling
|
||
case "$mode" in
|
||
latest)
|
||
;;
|
||
wip)
|
||
# En wip, autoriser versions suffixées; pas d’exigence d’entrée datée
|
||
;;
|
||
ci-verify)
|
||
# En CI, on valide juste la présence de CHANGELOG et version
|
||
;;
|
||
*)
|
||
echo "RELEASE_TYPE invalide: $mode (latest|wip|ci-verify)"; exit 1;
|
||
;;
|
||
esac
|
||
|
||
echo "[release-guard] OK"
|
||
|