Добавлено условие проверки существования тега перед клонированием и создание тега через API, если он отсутствует на удаленном сервере
This commit is contained in:
@@ -59,11 +59,32 @@ jobs:
|
||||
CLONE_URL="${SERVER}/${REPO}.git"
|
||||
fi
|
||||
|
||||
git clone --branch "${TAG}" --depth 1 "${CLONE_URL}" . 2>&1 | grep -F -v "${TOKEN:-}" || true
|
||||
# Check if tag exists on the remote
|
||||
TAG_EXISTS=false
|
||||
if git ls-remote --exit-code --tags "${CLONE_URL}" "refs/tags/${TAG}" >/dev/null 2>&1; then
|
||||
TAG_EXISTS=true
|
||||
fi
|
||||
|
||||
if [ "${TAG_EXISTS}" = "true" ]; then
|
||||
echo ">>> Тег ${TAG} найден, клонирование..."
|
||||
git clone --branch "${TAG}" --depth 50 "${CLONE_URL}" . 2>&1 | grep -F -v "${TOKEN:-}" || true
|
||||
else
|
||||
echo ">>> Тег ${TAG} не найден, клонирование ветки master..."
|
||||
git clone --branch master --depth 50 "${CLONE_URL}" . 2>&1 | grep -F -v "${TOKEN:-}" || true
|
||||
fi
|
||||
|
||||
git fetch --tags --force 2>/dev/null || true
|
||||
|
||||
# If tag doesn't exist locally, create and push it
|
||||
if [ "${TAG_EXISTS}" = "false" ] && git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
||||
echo ">>> Создание тега ${TAG} на текущем коммите ($(git rev-parse --short HEAD))..."
|
||||
git tag "${TAG}"
|
||||
git push origin "${TAG}" 2>&1 | grep -F -v "${TOKEN:-}" || true
|
||||
echo ">>> Тег ${TAG} создан и отправлен"
|
||||
fi
|
||||
|
||||
echo "RELEASE_TAG=${TAG}" >> "$GITHUB_ENV"
|
||||
echo ">>> Исходный код получен: $(git log --oneline -1)"
|
||||
echo ">>> Исходный код получен: $(git log --oneline -1 2>/dev/null || echo 'N/A')"
|
||||
|
||||
- name: "Подготовка метаданных релиза"
|
||||
id: meta
|
||||
@@ -236,22 +257,7 @@ jobs:
|
||||
HOST="${HOST#http://}"
|
||||
TAG="${{ steps.meta.outputs.tag }}"
|
||||
|
||||
TARGET_COMMITISH="${RELEASE_REF:-master}"
|
||||
if [ -n "${GITHUB_SHA:-}" ]; then
|
||||
TARGET_COMMITISH="${GITHUB_SHA}"
|
||||
fi
|
||||
if git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
||||
TARGET_COMMITISH="$(git rev-list -n 1 "${TAG}" 2>/dev/null || echo "${TARGET_COMMITISH}")"
|
||||
fi
|
||||
|
||||
BODY_JSON=$(python3 - <<'PY'
|
||||
import json
|
||||
|
||||
with open('/tmp/release_body.md', 'r', encoding='utf-8') as f:
|
||||
print(json.dumps(f.read(), ensure_ascii=False))
|
||||
PY
|
||||
)
|
||||
|
||||
# Set up API URLs and auth header early (needed for tag check below)
|
||||
if [ "${HOST}" = "github.com" ]; then
|
||||
CREATE_URL="https://api.github.com/repos/${REPO}/releases"
|
||||
AUTH_HEADER="Authorization: Bearer ${TOKEN}"
|
||||
@@ -262,6 +268,40 @@ jobs:
|
||||
EXTRA_HEADERS=()
|
||||
fi
|
||||
|
||||
TARGET_COMMITISH="${RELEASE_REF:-master}"
|
||||
if [ -n "${GITHUB_SHA:-}" ]; then
|
||||
TARGET_COMMITISH="${GITHUB_SHA}"
|
||||
fi
|
||||
if git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
||||
TARGET_COMMITISH="$(git rev-list -n 1 "${TAG}" 2>/dev/null || echo "${TARGET_COMMITISH}")"
|
||||
fi
|
||||
|
||||
# Ensure the tag exists on the remote (Gitea requires it before creating a release)
|
||||
if [ "${HOST}" != "github.com" ]; then
|
||||
TAG_HTTP_CODE=$(curl -sS -o /dev/null -w '%{http_code}' \
|
||||
-H "${AUTH_HEADER}" \
|
||||
"${SERVER}/api/v1/repos/${REPO}/tags/${TAG}")
|
||||
if [ "${TAG_HTTP_CODE}" != "200" ]; then
|
||||
echo ">>> Тег ${TAG} не найден на сервере (HTTP ${TAG_HTTP_CODE}), создание через API..."
|
||||
TAG_CREATE_RESP=$(curl -sS -X POST \
|
||||
-H "${AUTH_HEADER}" \
|
||||
-H "Content-Type: application/json" \
|
||||
"${SERVER}/api/v1/repos/${REPO}/tags" \
|
||||
-d "{\"tag_name\":\"${TAG}\",\"target\":\"${TARGET_COMMITISH}\"}")
|
||||
echo ">>> Ответ создания тега: ${TAG_CREATE_RESP}"
|
||||
else
|
||||
echo ">>> Тег ${TAG} существует на сервере"
|
||||
fi
|
||||
fi
|
||||
|
||||
BODY_JSON=$(python3 - <<'PY'
|
||||
import json
|
||||
|
||||
with open('/tmp/release_body.md', 'r', encoding='utf-8') as f:
|
||||
print(json.dumps(f.read(), ensure_ascii=False))
|
||||
PY
|
||||
)
|
||||
|
||||
RELEASE_PAYLOAD="{\"tag_name\":\"${TAG}\",\"target_commitish\":\"${TARGET_COMMITISH}\",\"name\":\"${TAG}\",\"body\":${BODY_JSON},\"draft\":false,\"prerelease\":false}"
|
||||
RELEASE_JSON=$(curl -sS -X POST \
|
||||
-H "${AUTH_HEADER}" \
|
||||
|
||||
Reference in New Issue
Block a user