Initial commit

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
timmy
2026-04-21 13:04:09 +08:00
commit faee15bc78
18 changed files with 3278 additions and 0 deletions

123
scripts/publish.sh Executable file
View 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"