diff --git a/.gitea/actions/test-links/action.yml b/.gitea/actions/test-links/action.yml index 72eb9ad..34372d1 100644 --- a/.gitea/actions/test-links/action.yml +++ b/.gitea/actions/test-links/action.yml @@ -59,12 +59,19 @@ runs: while IFS= read -r link; do [ -z "$link" ] && continue - # Decode URL-encoded characters - decoded_link=$(echo "$link" | sed 's/%20/ /g' | sed 's/%23/#/g' | sed 's/%28/(/g' | sed 's/%29/)/g' | sed 's/%E2%80%A2/•/g' | sed 's/%E1%9A%96/ᚖ/g' | sed 's/%E3%80%8A/《/g' | sed 's/%E3%80%8B/》/g' | sed 's/%E3%80%8E/『/g' | sed 's/%E3%80%8F/』/g' | sed 's/%E2%9B%94/⛔/g' | sed 's/%E2%9C%A8/✨/g' | sed 's/%7B/{/g' | sed 's/%7D/}/g' | sed 's/%2B/+/g' | sed 's/%E3%83%86/テ/g' | sed 's/%E3%83%B3/ン/g' | sed 's/%E3%83%8D/ネ/g' | sed 's/%E3%82%B9/ス/g' | sed 's/%E3%82%A4/イ/g' | sed 's/%E3%83%BB/・/g' | sed 's/%E3%83%95/フ/g' | sed 's/%E3%83%AA/リ/g' | sed 's/%E3%83%BC/ー/g' | sed 's/%E3%83%8A/ナ/g' | sed 's/%5B/[/g' | sed 's/%5D/]/g') + # Decode URL-encoded characters for display + decoded_link=$(echo "$link" | sed 's/%20/ /g' | sed 's/%23/#/g' | sed 's/%28/(/g' | sed 's/%29/)/g' | sed 's/%E2%80%A2/•/g' | sed 's/%E1%9A%96/ᚖ/g' | sed 's/%E3%80%8A/《/g' | sed 's/%E3%80%8B/》/g' | sed 's/%E3%80%8E/『/g' | sed 's/%E3%80%8F/』/g' | sed 's/%E2%9B%94/⛔/g' | sed 's/%E2%9C%A8/✨/g' | sed 's/%7B/{/g' | sed 's/%7D/}/g' | sed 's/%2B/+/g' | sed 's/%E3%83%86/テ/g' | sed 's/%E3%83%B3/ン/g' | sed 's/%E3%83%8D/ネ/g' | sed 's/%E3%82%B9/ス/g' | sed 's/%E3%82%A4/イ/g' | sed 's/%E3%83%BB/・/g' | sed 's/%E3%83%95/フ/g' | sed 's/%E3%83%AA/リ/g' | sed 's/%E3%83%BC/ー/g' | sed 's/%E3%83%8A/ナ/g' | sed 's/%5B/[/g' | sed 's/%5D/]/g' | sed 's/%2C/,/g') # Determine link category and validation status status="✓" + # Get repository info from git remote (once) + if [ -z "$REPO_OWNER" ]; then + REPO_OWNER=$(git config --get remote.origin.url | sed -n 's|.*[:/]\([^/]*\)/[^/]*\.git|\1|p' || echo "") + REPO_NAME=$(git config --get remote.origin.url | sed -n 's|.*[:/][^/]*/\([^/]*\)\.git|\1|p' || echo "") + GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "main") + fi + # Check if it's an external URL if [[ "$decoded_link" =~ ^https?:// ]]; then # Replace git.sulej.net with internal gitea URL for checking @@ -78,37 +85,10 @@ runs: http_code=$(curl -s -o /dev/null -w "%{http_code}" --max-time 10 \ -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" \ "$check_url" 2>/dev/null || echo "000") - - # Accept 2xx and 3xx status codes as valid - if ! [[ "$http_code" =~ ^[23][0-9][0-9]$ ]]; then - status="✖ (HTTP $http_code)" - file_has_errors=1 - has_errors=1 - fi - - # Categorize external URLs - if [[ "$decoded_link" =~ /export/.*\.(osk|osz)$ ]]; then - echo " $status $decoded_link" >> /tmp/download_$$.txt - elif [[ "$decoded_link" =~ /media/gameplay/.*\.(mp4|webm)$ ]]; then - echo " $status $decoded_link" >> /tmp/video_$$.txt - elif [[ "$decoded_link" =~ /src/tag/ ]]; then - echo " $status $decoded_link" >> /tmp/tags_$$.txt - elif [[ "$decoded_link" =~ /media/(panel|icons|thumbnail)/ ]]; then - echo " $status $decoded_link" >> /tmp/media_$$.txt - else - echo " $status $decoded_link" >> /tmp/download_$$.txt - fi else - # Local file - convert to full URL and check via web + # Local file - convert to full Gitea URL if [[ "$link" =~ ^/ ]]; then - # Absolute path from repo root - convert to full URL - if [ -z "$REPO_OWNER" ]; then - REPO_OWNER=$(git config --get remote.origin.url | sed -n 's|.*[:/]\([^/]*\)/[^/]*\.git|\1|p' || echo "") - REPO_NAME=$(git config --get remote.origin.url | sed -n 's|.*[:/][^/]*/\([^/]*\)\.git|\1|p' || echo "") - GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "main") - fi - - # Build full URL: http://gitea:3000/owner/repo/raw/branch/main/path + # Absolute path from repo root check_url="http://gitea:3000/$REPO_OWNER/$REPO_NAME/raw/branch/$GIT_BRANCH${link}" else # Relative path from markdown file @@ -118,34 +98,33 @@ runs: else rel_path="${md_dir#./}/$link" fi - - if [ -z "$REPO_OWNER" ]; then - REPO_OWNER=$(git config --get remote.origin.url | sed -n 's|.*[:/]\([^/]*\)/[^/]*\.git|\1|p' || echo "") - REPO_NAME=$(git config --get remote.origin.url | sed -n 's|.*[:/][^/]*/\([^/]*\)\.git|\1|p' || echo "") - GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "main") - fi - - # Build full URL for relative path check_url="http://gitea:3000/$REPO_OWNER/$REPO_NAME/raw/branch/$GIT_BRANCH/$rel_path" fi # Check URL with curl http_code=$(curl -s -o /dev/null -w "%{http_code}" --max-time 10 "$check_url" 2>/dev/null || echo "000") - - if ! [[ "$http_code" =~ ^[23][0-9][0-9]$ ]]; then - status="✖ (not found)" - file_has_errors=1 - has_errors=1 - fi - - # Categorize local files - if [[ "$decoded_link" =~ \.(webp|png|jpg|jpeg)$ ]]; then - echo " $status $decoded_link" >> /tmp/media_$$.txt - elif [[ "$decoded_link" =~ \.md$ ]]; then - echo " $status $decoded_link" >> /tmp/tags_$$.txt - else - echo " $status $decoded_link" >> /tmp/download_$$.txt - fi + fi + + # Accept 2xx and 3xx status codes as valid + if ! [[ "$http_code" =~ ^[23][0-9][0-9]$ ]]; then + status="✖ (HTTP $http_code)" + file_has_errors=1 + has_errors=1 + fi + + # Categorize all links + if [[ "$decoded_link" =~ /export/.*\.(osk|osz)$ ]] || [[ "$decoded_link" =~ ^https?:// && ! "$decoded_link" =~ /media/ && ! "$decoded_link" =~ /src/tag/ ]]; then + echo " $status $decoded_link" >> /tmp/download_$$.txt + elif [[ "$decoded_link" =~ /media/gameplay/.*\.(mp4|webm)$ ]]; then + echo " $status $decoded_link" >> /tmp/video_$$.txt + elif [[ "$decoded_link" =~ /src/tag/ ]]; then + echo " $status $decoded_link" >> /tmp/tags_$$.txt + elif [[ "$decoded_link" =~ \.(webp|png|jpg|jpeg)$ ]] || [[ "$decoded_link" =~ /media/(panel|icons|thumbnail)/ ]]; then + echo " $status $decoded_link" >> /tmp/media_$$.txt + elif [[ "$decoded_link" =~ \.md$ ]]; then + echo " $status $decoded_link" >> /tmp/tags_$$.txt + else + echo " $status $decoded_link" >> /tmp/download_$$.txt fi done < /tmp/links_$$.txt