Refactor release resolution into reusable script

This commit is contained in:
shenlan 2025-09-29 12:04:26 +08:00
parent 451302ef2b
commit 0f33753e69
4 changed files with 32 additions and 29 deletions

View File

@ -43,19 +43,7 @@ jobs:
id: latest
run: |
set -euo pipefail
gh api -H "Accept: application/vnd.github+json" \
"/repos/${GH_REPO}/releases?per_page=100" \
| jq -r '.[].tag_name' \
| grep -E '^v0(\\.|$)' \
| sort -V -r \
| head -n 1 > /tmp/tag.txt
if [ ! -s /tmp/tag.txt ]; then
echo "No v0.* tags found." >&2
exit 1
fi
TAG=$(cat /tmp/tag.txt)
TAG=$(./scripts/resolve_github_repo_release.sh "${GH_REPO}" '^v0(\.|$)' 'v0.*')
VERSION=${TAG#v}
echo "tag=$TAG" >> "$GITHUB_OUTPUT"

View File

@ -29,7 +29,6 @@ jobs:
RSYNC_SSH_USER: ${{ secrets.RSYNC_SSH_USER }}
VPS_HOST: ${{ secrets.VPS_HOST }}
REMOTE_ROOT: /data/update-server/otel/OpenTelemetry/
DEFAULT_TAG: v0.133.0
outputs:
tag: ${{ steps.resolve.outputs.tag }}
version: ${{ steps.resolve.outputs.version }}
@ -46,7 +45,7 @@ jobs:
jq --version
rsync --version | head -n1
- name: Resolve tag (use input or default)
- name: Resolve tag (use input or latest v0.*)
id: resolve
run: |
set -euo pipefail
@ -54,7 +53,7 @@ jobs:
if [ -n "$TAG_INPUT" ]; then
TAG="$TAG_INPUT"
else
TAG="$DEFAULT_TAG"
TAG=$(./scripts/resolve_github_repo_release.sh "${GH_REPO}" '^v0\.[0-9]+\.[0-9]+$' 'v0.*')
fi
# 基本校验:必须形如 v0.X.Y

View File

@ -43,19 +43,7 @@ jobs:
id: latest
run: |
set -euo pipefail
gh api -H "Accept: application/vnd.github+json" \
"/repos/${GH_REPO}/releases?per_page=100" \
| jq -r '.[].tag_name' \
| grep -E '^v25(\.|$)' \
| sort -V -r \
| head -n 1 > /tmp/tag.txt
if [ ! -s /tmp/tag.txt ]; then
echo "No v25.* tags found." >&2
exit 1
fi
TAG=$(cat /tmp/tag.txt)
TAG=$(./scripts/resolve_github_repo_release.sh "${GH_REPO}" '^v25(\.|$)' 'v25.*')
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
echo "Latest tag: $TAG"

View File

@ -0,0 +1,28 @@
#!/usr/bin/env bash
set -euo pipefail
if [ "$#" -lt 2 ]; then
echo "Usage: $0 <github_repo> <tag_regex> [human_readable_pattern]" >&2
exit 1
fi
GH_REPO="$1"
TAG_REGEX="$2"
PATTERN_DESC="${3:-$TAG_REGEX}"
TMP_FILE="$(mktemp)"
trap 'rm -f "$TMP_FILE"' EXIT
gh api -H "Accept: application/vnd.github+json" \
"/repos/${GH_REPO}/releases?per_page=100" \
| jq -r '.[].tag_name // empty' \
| grep -E "${TAG_REGEX}" \
| sort -V -r \
| head -n 1 > "$TMP_FILE"
if [ ! -s "$TMP_FILE" ]; then
echo "No tags matching pattern (${PATTERN_DESC}) found for ${GH_REPO}." >&2
exit 1
fi
cat "$TMP_FILE"