From 0f4f917acd2ee0c921e626278e200b31897b8072 Mon Sep 17 00:00:00 2001 From: yoshikazu Date: Mon, 27 Jul 2026 16:07:38 +0000 Subject: [PATCH] Add release update script (same flow as yfoxlogsrv) --- tools/release-update.sh | 70 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 tools/release-update.sh diff --git a/tools/release-update.sh b/tools/release-update.sh new file mode 100644 index 0000000..f91cf20 --- /dev/null +++ b/tools/release-update.sh @@ -0,0 +1,70 @@ +#!/bin/sh +# Gitea リリース更新 —— 現在の HEAD と最新ビルドでリリースを差し替える。 +# yfoxlogsrv/tools/release-update.sh と同じ流儀。手動実行専用。 +# +# やること: +# 1) タグ (既定 v1.0.0)を HEAD へ強制移動して push。 +# 2) リリースの添付 zip を最新ビルドへ差し替え(同名の旧資産は削除→アップロード)。 +# 3) リリース本文の「ビルド元コミット: `xxxxxxx`」を現在の短縮ハッシュへ更新。 +# +# 前提: +# * zip は事前にビルド済み(make release)。本スクリプトはビルドしない。 +# * リリース は Gitea に既存であること(無ければエラー終了)。最初の1本は web か +# gitea MCP の create_release で作る。以後の更新を本スクリプトが担う。 +# * 認証は git credential(host=git.yfox.jp)。Gitea が自己署名証明書のため TLS 検証は無効化。 +# * 日本語を含む本文の JSON 化のため Python を使う。 +# +# 使い方: +# ./tools/release-update.sh # タグ v1.0.0 を更新 +# ./tools/release-update.sh v1.0.1 # 別タグを指定 +set -eu + +HOST="git.yfox.jp" +OWNER="yoshikazu" +NAME="photochk" +TAG="${1:-v1.0.0}" +ASSET_REL="dist/Photochk-${TAG#v}.zip" +PY="/usr/bin/python3" + +REPO=$(git rev-parse --show-toplevel) +cd "$REPO" +ASSET="$REPO/$ASSET_REL" + +[ -f "$ASSET" ] || { echo "ERROR: zip が無い: $ASSET (先に make release が必要)" >&2; exit 1; } +[ -x "$PY" ] || { echo "ERROR: Python が無い: $PY" >&2; exit 1; } + +HASH=$(git rev-parse --short HEAD) +FULL=$(git rev-parse HEAD) +echo "repo: $REPO" +echo "HEAD: $HASH tag: $TAG" +echo "asset: $ASSET_REL ($(stat -f %z "$ASSET") bytes)" + +# 0) 先に認証情報を取り出す。ここで落ちるなら push もアップロードもできないので、 +# タグを動かす前に止めたほうが状態がきれいなまま済む。 +# 認証情報は argv に載せず環境変数で渡す(プロセス一覧への漏洩回避)。 +creds=$(printf 'protocol=https\nhost=%s\n\n' "$HOST" | git credential fill 2>/dev/null || true) +[ -n "$creds" ] || creds=$(printf 'protocol=http\nhost=%s\n\n' "$HOST" | git credential fill 2>/dev/null || true) +GITEA_USER=$(printf '%s\n' "$creds" | sed -n 's/^username=//p') +GITEA_PASS=$(printf '%s\n' "$creds" | sed -n 's/^password=//p') +[ -n "$GITEA_USER" ] && [ -n "$GITEA_PASS" ] || { + cat >&2 <\\npassword=<トークン>\\n\\n' | git credential approve + + osxkeychain ヘルパが未設定なら先に: git config --global credential.helper osxkeychain +EOF + exit 1; } +export GITEA_USER GITEA_PASS + +# 1) タグを HEAD へ強制移動して push(annotated)。 +git tag -f -a "$TAG" "$FULL" -m "Photochk ${TAG#v}" +git push --force origin "$TAG" +echo "tag $TAG -> $HASH を push しました" + +# 2)+3) 資産差し替えと本文更新を Python に委譲。 +"$PY" "$REPO/tools/_release_api.py" "$HOST" "$OWNER" "$NAME" "$TAG" "$ASSET" "$HASH" + +echo "完了: https://$HOST/$OWNER/$NAME/releases/tag/$TAG"