92 lines
2.2 KiB
Bash
Executable File
92 lines
2.2 KiB
Bash
Executable File
#!/bin/sh
|
|
set -eu
|
|
|
|
ROOT="$(CDPATH= cd -- "$(dirname -- "$0")/../.." && pwd)"
|
|
FORMULA_SOURCE="${DWS_FORMULA_SOURCE:-$ROOT/dist/homebrew/dingtalk-workspace-cli.rb}"
|
|
TAP_REPO_URL="${DWS_TAP_REPO_URL:-}"
|
|
TAP_BRANCH="${DWS_TAP_BRANCH:-main}"
|
|
TAP_FORMULA_PATH="${DWS_TAP_FORMULA_PATH:-Formula/dingtalk-workspace-cli.rb}"
|
|
COMMIT_MESSAGE="${DWS_TAP_COMMIT_MESSAGE:-chore: update dingtalk-workspace-cli formula}"
|
|
GIT_NAME="${DWS_GIT_NAME:-DWS Release Bot}"
|
|
GIT_EMAIL="${DWS_GIT_EMAIL:-dws-release-bot@example.com}"
|
|
|
|
say() {
|
|
printf '%s\n' "$*"
|
|
}
|
|
|
|
err() {
|
|
printf 'error: %s\n' "$*" >&2
|
|
exit 1
|
|
}
|
|
|
|
need_cmd() {
|
|
command -v "$1" >/dev/null 2>&1 || err "missing required command: $1"
|
|
}
|
|
|
|
need_file() {
|
|
[ -f "$1" ] || err "required file not found: $1"
|
|
}
|
|
|
|
need_env() {
|
|
name="$1"
|
|
value="$2"
|
|
[ -n "$value" ] || err "missing required environment variable: $name"
|
|
}
|
|
|
|
checkout_tap_branch() {
|
|
repo_url="$1"
|
|
branch="$2"
|
|
target_dir="$3"
|
|
|
|
if git clone --branch "$branch" "$repo_url" "$target_dir" >/dev/null 2>&1; then
|
|
return
|
|
fi
|
|
|
|
git clone "$repo_url" "$target_dir" >/dev/null 2>&1
|
|
(
|
|
cd "$target_dir"
|
|
if git show-ref --verify --quiet "refs/remotes/origin/$branch"; then
|
|
git checkout -B "$branch" "origin/$branch" >/dev/null 2>&1
|
|
exit 0
|
|
fi
|
|
if git show-ref --verify --quiet "refs/heads/$branch"; then
|
|
git checkout "$branch" >/dev/null 2>&1
|
|
exit 0
|
|
fi
|
|
git checkout --orphan "$branch" >/dev/null 2>&1
|
|
)
|
|
}
|
|
|
|
need_cmd git
|
|
need_env "DWS_TAP_REPO_URL" "$TAP_REPO_URL"
|
|
need_file "$FORMULA_SOURCE"
|
|
|
|
TMP_ROOT="$(mktemp -d "${TMPDIR:-/tmp}/dws-homebrew-publish-XXXXXX")"
|
|
cleanup() {
|
|
rm -rf "$TMP_ROOT"
|
|
}
|
|
trap cleanup EXIT INT TERM
|
|
|
|
TAP_DIR="$TMP_ROOT/tap"
|
|
checkout_tap_branch "$TAP_REPO_URL" "$TAP_BRANCH" "$TAP_DIR"
|
|
|
|
DEST_PATH="$TAP_DIR/$TAP_FORMULA_PATH"
|
|
mkdir -p "$(dirname "$DEST_PATH")"
|
|
cp "$FORMULA_SOURCE" "$DEST_PATH"
|
|
|
|
(
|
|
cd "$TAP_DIR"
|
|
if [ -z "$(git status --short -- "$TAP_FORMULA_PATH")" ]; then
|
|
say "No formula changes to publish."
|
|
exit 0
|
|
fi
|
|
|
|
git config user.name "$GIT_NAME"
|
|
git config user.email "$GIT_EMAIL"
|
|
git add "$TAP_FORMULA_PATH"
|
|
git commit -m "$COMMIT_MESSAGE" >/dev/null
|
|
git push origin "HEAD:$TAP_BRANCH" >/dev/null
|
|
)
|
|
|
|
say "Published Homebrew formula to $TAP_REPO_URL ($TAP_BRANCH)"
|