name: Test Skins
on:
push:
pull_request:
jobs:
link-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Validate links and assets
shell: bash
run: |
set -uo pipefail
RED="\033[31m"
GREEN="\033[32m"
RESET="\033[0m"
ERRORS=()
urldecode() {
printf '%b' "${1//%/\\x}"
}
check_http() {
local url="$1"
echo " → Checking external: $url"
# HEAD request
if curl -Is --max-time 10 "$url" | head -n1 | grep -qE "HTTP/.* (200|30[0-9])"; then
return 0
fi
# GET fallback
if curl -Is --max-time 10 -X GET "$url" | head -n1 | grep -qE "HTTP/.* (200|30[0-9])"; then
return 0
fi
return 1
}
check_local() {
local path="$1"
path="${path#/}"
local decoded
decoded=$(urldecode "$path")
echo " → Checking local: $decoded"
if [[ ! -e "$decoded" ]]; then
return 1
fi
return 0
}
extract_links() {
local f="$1"
grep -oE '\[[^]]*\]\([^)]*\)' "$f" \
| sed -E 's/.*\((.*)\).*/\1/'
grep -oE '!\[[^]]*\]\([^)]*\)' "$f" \
| sed -E 's/.*\((.*)\).*/\1/'
grep -oE 'https?://[^ )"]+' "$f"
grep -oE '
]*src="[^"]+"' "$f" \
| sed -E 's/.*src="([^"]*)".*/\1/'
grep -oE '