85 lines
2.4 KiB
Bash
Executable File
85 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
REMOTE_NAME="${1:-origin}"
|
|
QUIET_RELEASE="${QUIET_RELEASE:-1}"
|
|
RELEASE_LOG="${RELEASE_LOG:-$ROOT_DIR/build/release.log}"
|
|
|
|
if [[ -n "${SKIP_RELEASE:-}" ]]; then
|
|
echo "release: skipped (SKIP_RELEASE=1)"
|
|
exit 0
|
|
fi
|
|
|
|
should_release=false
|
|
release_local_ref=""
|
|
release_remote_ref=""
|
|
while read -r local_ref local_sha remote_ref remote_sha; do
|
|
[[ -z "${local_ref:-}" ]] && continue
|
|
if [[ "$local_ref" == "refs/heads/master" || "$remote_ref" == "refs/heads/master" ]]; then
|
|
should_release=true
|
|
release_local_ref="$local_ref"
|
|
release_remote_ref="${remote_ref:-refs/heads/master}"
|
|
fi
|
|
done
|
|
|
|
if [[ "$should_release" != true ]]; then
|
|
current_branch="$(git -C "$ROOT_DIR" symbolic-ref --short -q HEAD || true)"
|
|
if [[ "$current_branch" == "master" ]]; then
|
|
should_release=true
|
|
release_local_ref="refs/heads/master"
|
|
release_remote_ref="refs/heads/master"
|
|
fi
|
|
fi
|
|
|
|
if [[ "$should_release" != true ]]; then
|
|
exit 0
|
|
fi
|
|
|
|
if [[ "$QUIET_RELEASE" == "1" ]]; then
|
|
mkdir -p "$(dirname "$RELEASE_LOG")"
|
|
: >"$RELEASE_LOG"
|
|
fi
|
|
|
|
run_logged() {
|
|
if [[ "$QUIET_RELEASE" == "1" ]]; then
|
|
"$@" >>"$RELEASE_LOG" 2>&1
|
|
else
|
|
"$@"
|
|
fi
|
|
}
|
|
|
|
if [[ "$QUIET_RELEASE" == "1" ]]; then
|
|
NEW_VERSION="$("$ROOT_DIR/scripts/bump_version.sh" 2>>"$RELEASE_LOG" | tee -a "$RELEASE_LOG")"
|
|
else
|
|
NEW_VERSION="$("$ROOT_DIR/scripts/bump_version.sh")"
|
|
fi
|
|
run_logged "$ROOT_DIR/scripts/sync_version.sh"
|
|
|
|
git -C "$ROOT_DIR" add "$ROOT_DIR/version.json" "$ROOT_DIR/iKeyMon.xcodeproj/project.pbxproj"
|
|
|
|
echo "release: building v${NEW_VERSION}..."
|
|
if ! run_logged "$ROOT_DIR/scripts/build_release.sh"; then
|
|
echo "release: failed (log: $RELEASE_LOG)"
|
|
exit 1
|
|
fi
|
|
|
|
git -C "$ROOT_DIR" add "$ROOT_DIR/version.json" "$ROOT_DIR/iKeyMon.xcodeproj/project.pbxproj" "$ROOT_DIR/Sparkle/appcast.xml"
|
|
|
|
if git -C "$ROOT_DIR" diff --cached --quiet; then
|
|
echo "release: no changes detected; skipping commit"
|
|
else
|
|
run_logged git -C "$ROOT_DIR" commit -m "chore: release ${NEW_VERSION}" || {
|
|
echo "release: commit failed (log: $RELEASE_LOG)"
|
|
exit 1
|
|
}
|
|
fi
|
|
|
|
if SKIP_RELEASE=1 git -C "$ROOT_DIR" push --quiet "$REMOTE_NAME" "${release_local_ref:-refs/heads/master}:${release_remote_ref:-refs/heads/master}"; then
|
|
echo "release: success v${NEW_VERSION}"
|
|
exit 1
|
|
else
|
|
echo "release: push failed (log: $RELEASE_LOG)"
|
|
exit 1
|
|
fi
|