Initial commit
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
123
scripts/publish.sh
Executable file
123
scripts/publish.sh
Executable file
@@ -0,0 +1,123 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
# shellcheck source=lib/common.sh
|
||||
source "${SCRIPT_DIR}/lib/common.sh"
|
||||
|
||||
REPO_NAME=""
|
||||
VISIBILITY="public"
|
||||
COMMIT_MSG=""
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
-m)
|
||||
[[ $# -ge 2 ]] || { log_err "-m 需要一個訊息參數"; exit 1; }
|
||||
COMMIT_MSG="$2"
|
||||
shift 2
|
||||
;;
|
||||
public|private)
|
||||
VISIBILITY="$1"
|
||||
shift
|
||||
;;
|
||||
-h|--help)
|
||||
cat >&2 <<'EOF'
|
||||
Usage: publish.sh [repo] [public|private] [-m "commit message"]
|
||||
EOF
|
||||
exit 0
|
||||
;;
|
||||
-*)
|
||||
log_err "未知參數:$1"
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
if [[ -z "$REPO_NAME" ]]; then
|
||||
REPO_NAME="$1"
|
||||
elif [[ "$VISIBILITY" == "public" ]]; then
|
||||
VISIBILITY="$1"
|
||||
else
|
||||
log_err "多餘參數:$1"
|
||||
exit 1
|
||||
fi
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
REPO_NAME="${REPO_NAME:-$(basename "$PWD")}"
|
||||
|
||||
case "$VISIBILITY" in
|
||||
public) PRIVATE=false ;;
|
||||
private) PRIVATE=true ;;
|
||||
*)
|
||||
log_err "可見性只能是 public 或 private,收到:${VISIBILITY}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
load_config
|
||||
|
||||
CLEAN_URL="${GITEA_URL}/${GITEA_USER}/${REPO_NAME}.git"
|
||||
WEB_URL="${GITEA_URL}/${GITEA_USER}/${REPO_NAME}"
|
||||
|
||||
log_info "建立 Gitea repo:${GITEA_USER}/${REPO_NAME} (${VISIBILITY})"
|
||||
|
||||
gitea_api POST "/user/repos" \
|
||||
"{\"name\":\"${REPO_NAME}\",\"private\":${PRIVATE},\"auto_init\":false,\"default_branch\":\"main\"}"
|
||||
|
||||
case "$HTTP_CODE" in
|
||||
201) log_ok "repo 已建立" ;;
|
||||
409) log_warn "repo 已存在,略過建立步驟" ;;
|
||||
401|403)
|
||||
log_err "Gitea 授權失敗 (HTTP ${HTTP_CODE})"
|
||||
{
|
||||
echo "請確認 ${CONFIG_FILE} 的 GITEA_TOKEN 是否正確、權限是否包含 write:repository"
|
||||
cat "$GITEA_API_RESP_FILE"
|
||||
echo ""
|
||||
} >&2
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
log_err "建立 repo 失敗 (HTTP ${HTTP_CODE})"
|
||||
{ cat "$GITEA_API_RESP_FILE"; echo ""; } >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
if [[ ! -d .git ]]; then
|
||||
log_info "git init"
|
||||
git init -b main >/dev/null
|
||||
fi
|
||||
|
||||
if ! git rev-parse --verify HEAD >/dev/null 2>&1; then
|
||||
git add -A
|
||||
if git diff --cached --quiet; then
|
||||
log_info "工作目錄沒有檔案,建立空的 initial commit"
|
||||
git commit --allow-empty -m "${COMMIT_MSG:-Initial commit}" >/dev/null
|
||||
else
|
||||
log_info "建立 initial commit"
|
||||
git commit -m "${COMMIT_MSG:-Initial commit}" >/dev/null
|
||||
fi
|
||||
else
|
||||
git add -A
|
||||
if ! git diff --cached --quiet; then
|
||||
log_info "提交未提交的變更"
|
||||
git commit -m "${COMMIT_MSG:-Update}" >/dev/null
|
||||
fi
|
||||
fi
|
||||
|
||||
BRANCH="$(git rev-parse --abbrev-ref HEAD)"
|
||||
|
||||
if git remote get-url origin >/dev/null 2>&1; then
|
||||
git remote set-url origin "$CLEAN_URL"
|
||||
else
|
||||
git remote add origin "$CLEAN_URL"
|
||||
fi
|
||||
|
||||
log_info "推送到 origin (${CLEAN_URL}) branch=${BRANCH}"
|
||||
git_push_with_token "$BRANCH"
|
||||
|
||||
log_done "完成"
|
||||
echo " Branch: ${BRANCH}" >&2
|
||||
# stdout:最終結構化輸出
|
||||
echo "$WEB_URL"
|
||||
Reference in New Issue
Block a user