diff --git a/.github/workflows/sync-blackbox-exporter.yml b/.github/workflows/sync-blackbox-exporter.yml index 978cd01..353788d 100644 --- a/.github/workflows/sync-blackbox-exporter.yml +++ b/.github/workflows/sync-blackbox-exporter.yml @@ -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" diff --git a/.github/workflows/sync-otel-collector.yml b/.github/workflows/sync-otel-collector.yml index 26ab706..4396950 100644 --- a/.github/workflows/sync-otel-collector.yml +++ b/.github/workflows/sync-otel-collector.yml @@ -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 diff --git a/.github/workflows/sync-xray-core.yml b/.github/workflows/sync-xray-core.yml index 5932290..2921a98 100644 --- a/.github/workflows/sync-xray-core.yml +++ b/.github/workflows/sync-xray-core.yml @@ -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" diff --git a/scripts/resolve_github_repo_release.sh b/scripts/resolve_github_repo_release.sh new file mode 100755 index 0000000..5087548 --- /dev/null +++ b/scripts/resolve_github_repo_release.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +set -euo pipefail + +if [ "$#" -lt 2 ]; then + echo "Usage: $0 [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"