From 3343995e21dc8916b02efa25ade7a01e0057efd2 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 10 Feb 2026 12:07:05 +0900 Subject: [PATCH] fix: Replace jq with Python for PHP version parsing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit jqが利用できない環境でも動作するよう、Python3に変更。 Changes: - jqの依存を削除 - Python3でDocker Hub APIレスポンスをパース - 正規表現パターンマッチングをPythonで実装 - バージョンソートをPythonで実装 - デバッグ出力を追加(利用可能なタグ、マッチ数) Benefits: - 追加パッケージのインストール不要 - デバッグ情報が詳細 - より確実な動作 Co-Authored-By: Claude Sonnet 4.5 --- .../workflows/image-update-and-release.yaml | 53 +++++++++++++------ 1 file changed, 38 insertions(+), 15 deletions(-) diff --git a/.gitea/workflows/image-update-and-release.yaml b/.gitea/workflows/image-update-and-release.yaml index 12d7d39..fc27445 100644 --- a/.gitea/workflows/image-update-and-release.yaml +++ b/.gitea/workflows/image-update-and-release.yaml @@ -51,24 +51,47 @@ jobs: # Docker Hub API v2を使用してタグを取得 echo "Fetching tags from Docker Hub..." - RAW_RESPONSE=$(curl -s "https://registry.hub.docker.com/v2/repositories/library/php/tags?page_size=100") - # デバッグ: jqが利用可能か確認 - if ! command -v jq &> /dev/null; then - echo "ERROR: jq is not installed" - echo "Installing jq..." - apt-get update && apt-get install -y jq - fi + # Pythonを使用してJSONをパースし、タグを抽出 + LATEST=$(python3 << 'PYTHON_SCRIPT' +import sys +import urllib.request +import json +import re - # タグ一覧を取得してデバッグ出力 - echo "DEBUG: Available PHP tags (first 10):" - echo "$RAW_RESPONSE" | jq -r '.results[].name' | grep 'fpm-alpine' | head -10 +url = "https://registry.hub.docker.com/v2/repositories/library/php/tags?page_size=100" +try: + with urllib.request.urlopen(url) as response: + data = json.loads(response.read()) + tags = [result['name'] for result in data.get('results', [])] - # パターン: 8.5.2-fpm-alpine3.23 形式(alpineバージョンは2-3桁に対応) - LATEST=$(echo "$RAW_RESPONSE" | \ - jq -r '.results[].name' | \ - grep -E '^[0-9]+\.[0-9]+\.[0-9]+-fpm-alpine[0-9]+\.[0-9]{2,3}$' | \ - sort -V | tail -1) + # パターン: 8.5.2-fpm-alpine3.23 形式 + pattern = re.compile(r'^\d+\.\d+\.\d+-fpm-alpine\d+\.\d{2,3}$') + matching_tags = [tag for tag in tags if pattern.match(tag)] + + # デバッグ出力 + print("DEBUG: Available PHP tags (first 10):", file=sys.stderr) + for tag in [t for t in tags if 'fpm-alpine' in t][:10]: + print(f" {tag}", file=sys.stderr) + + print(f"DEBUG: Matching tags count: {len(matching_tags)}", file=sys.stderr) + + if matching_tags: + # バージョンソート + def version_key(tag): + parts = tag.split('-')[0].split('.') + return tuple(int(p) for p in parts) + + sorted_tags = sorted(matching_tags, key=version_key) + latest = sorted_tags[-1] + print(latest) + else: + print("", end="") +except Exception as e: + print(f"ERROR: {e}", file=sys.stderr) + print("", end="") +PYTHON_SCRIPT +) echo "DEBUG: Matched LATEST=$LATEST"