iuna

iuna

iuna - experimental mainnet-candidate protocol
git clone https://getiuna.org/git/iuna.git
Log | Files | Refs | README | LICENSE

commit c4597285ba8cf229cd4af58648abe4b729f47123
parent 3664b9967928bf23767420d77b5d93b916876992
Author: Joris Hartog <jorishartog@hotmail.com>
Date:   Thu, 10 Sep 2026 20:51:42 +0200

fix(deploy): roll back failed release preparation

Diffstat:
Mdeployment.sh | 47++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 46 insertions(+), 1 deletion(-)

diff --git a/deployment.sh b/deployment.sh @@ -3,6 +3,19 @@ set -euo pipefail cd "$(dirname "${BASH_SOURCE[0]}")" +RELEASE_ROLLBACK_ARMED=false +RELEASE_START_HEAD="" +RELEASE_VERSION_FILES=( + CHANGELOG.md + Cargo.toml + Cargo.lock + fuzz/Cargo.lock + src-tauri/Cargo.toml + src-tauri/Cargo.lock + src-tauri/tauri.conf.json + README.md +) + usage() { echo "Usage:" echo " $0 [--genesis] [--skip-long-tests] <version>" @@ -101,6 +114,36 @@ ensure_head_matches_tag() { [ "$head_commit" = "$tag_commit" ] || die "${tag} exists, but HEAD is not at ${tag}; checkout ${tag} before redeploying it" } +arm_release_rollback() { + RELEASE_START_HEAD="$(git rev-parse HEAD)" + RELEASE_ROLLBACK_ARMED=true + trap 'rollback_release_changes "$?"' EXIT +} + +disarm_release_rollback() { + RELEASE_ROLLBACK_ARMED=false +} + +rollback_release_changes() { + local exit_status="$1" + local current_head + + [ "$exit_status" -ne 0 ] || return 0 + [ "$RELEASE_ROLLBACK_ARMED" = "true" ] || return 0 + + current_head="$(git rev-parse HEAD 2>/dev/null || true)" + if [ "$current_head" != "$RELEASE_START_HEAD" ]; then + echo "WARNING: release failed after HEAD changed; version changes were not rolled back" >&2 + return 0 + fi + + if git restore --source="$RELEASE_START_HEAD" --staged --worktree -- "${RELEASE_VERSION_FILES[@]}"; then + echo "Release failed; restored version and changelog files to $(git rev-parse --short "$RELEASE_START_HEAD")" >&2 + else + echo "WARNING: release failed and version changes could not be restored automatically" >&2 + fi +} + ensure_tauri_cli() { require_command cargo @@ -360,7 +403,7 @@ commit_and_tag() { require_command git - git add CHANGELOG.md Cargo.toml Cargo.lock fuzz/Cargo.lock src-tauri/Cargo.toml src-tauri/Cargo.lock src-tauri/tauri.conf.json README.md + git add "${RELEASE_VERSION_FILES[@]}" git commit -m "chore(release): release ${tag}" git tag -a "$tag" -m "Release ${tag}" } @@ -964,11 +1007,13 @@ main() { exit 0 fi + arm_release_rollback generate_changelog "$version" update_versions "$version" run_release_tests "$skip_long_tests" build_versions "$version" commit_and_tag "$version" + disarm_release_rollback build_docker_image "$version" deploy_docker_image "$version" "$genesis" }