Update .gitea/actions/test-links/action.yml

This commit is contained in:
2025-11-23 15:11:07 +01:00
parent 64f3621ff7
commit 23c8565f41

View File

@@ -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,35 +98,34 @@ 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")
fi
# Accept 2xx and 3xx status codes as valid
if ! [[ "$http_code" =~ ^[23][0-9][0-9]$ ]]; then
status="✖ (not found)"
status="✖ (HTTP $http_code)"
file_has_errors=1
has_errors=1
fi
# Categorize local files
if [[ "$decoded_link" =~ \.(webp|png|jpg|jpeg)$ ]]; then
# 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
fi
done < /tmp/links_$$.txt
# Display categorized results - special handling for README