165 lines
No EOL
4.5 KiB
Bash
Executable file
165 lines
No EOL
4.5 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
echo -e "${YELLOW}Starting Zola site testing...${NC}"
|
|
|
|
# Function to clean up background processes
|
|
cleanup() {
|
|
echo -e "\n${YELLOW}Cleaning up...${NC}"
|
|
# Kill any running zola processes
|
|
pkill -f "zola serve" 2>/dev/null
|
|
exit
|
|
}
|
|
|
|
# Set up trap for cleanup
|
|
trap cleanup SIGINT SIGTERM
|
|
|
|
# Check if zola is installed
|
|
if ! command -v zola &> /dev/null; then
|
|
echo -e "${RED}Error: Zola is not installed. Please install it first.${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Test 1: Check zola build
|
|
echo -e "\n${YELLOW}Test 1: Checking if site builds successfully...${NC}"
|
|
if zola build; then
|
|
echo -e "${GREEN}✓ Site builds successfully${NC}"
|
|
else
|
|
echo -e "${RED}✗ Site build failed${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Test 2: Check for broken links
|
|
echo -e "\n${YELLOW}Test 2: Starting server and checking for broken links...${NC}"
|
|
zola serve &
|
|
SERVER_PID=$!
|
|
|
|
# Wait for server to start
|
|
sleep 2
|
|
|
|
# Use curl to check if server is running
|
|
if ! curl -s http://127.0.0.1:1111 > /dev/null; then
|
|
echo -e "${RED}✗ Server is not responding${NC}"
|
|
kill $SERVER_PID
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "${GREEN}✓ Server is responding${NC}"
|
|
|
|
# Extract and check all links using curl
|
|
echo -e "${YELLOW}Checking for broken links...${NC}"
|
|
|
|
# Create temp files for storing links
|
|
INTERNAL_LINKS=$(mktemp)
|
|
EXTERNAL_LINKS=$(mktemp)
|
|
|
|
# Get the site content and extract all links
|
|
curl -s http://127.0.0.1:1111 | grep -o 'href="[^"]*"' | sed 's/href="\([^"]*\)"/\1/g' > "$INTERNAL_LINKS"
|
|
|
|
# Add other important pages to check
|
|
echo "/de" >> "$INTERNAL_LINKS"
|
|
echo "/atom.xml" >> "$INTERNAL_LINKS"
|
|
echo "/tags" >> "$INTERNAL_LINKS"
|
|
echo "/project" >> "$INTERNAL_LINKS"
|
|
|
|
# Also check project pages and other content
|
|
for page in $(curl -s http://127.0.0.1:1111/project/ | grep -o 'href="[^"]*"' | sed 's/href="\([^"]*\)"/\1/g'); do
|
|
echo "$page" >> "$INTERNAL_LINKS"
|
|
done
|
|
|
|
# Function to check a URL with proper user agent and timeout
|
|
check_url() {
|
|
local url="$1"
|
|
local timeout=10
|
|
curl -s -f -o /dev/null \
|
|
--max-time "$timeout" \
|
|
-H "User-Agent: Mozilla/5.0 (compatible; LinkChecker/1.0)" \
|
|
"$url"
|
|
return $?
|
|
}
|
|
|
|
echo -e "${YELLOW}Checking internal links...${NC}"
|
|
BROKEN_INTERNAL=0
|
|
while read -r link; do
|
|
# Skip empty lines and external links
|
|
[[ -z "$link" ]] && continue
|
|
if [[ "$link" =~ ^(http|https|mailto|tel): ]]; then
|
|
echo "$link" >> "$EXTERNAL_LINKS"
|
|
continue
|
|
fi
|
|
|
|
# Construct full URL for relative links
|
|
url="http://127.0.0.1:1111${link}"
|
|
|
|
# Check the link
|
|
if check_url "$url"; then
|
|
echo -e "${GREEN}✓ Valid internal link: $link${NC}"
|
|
else
|
|
echo -e "${RED}✗ Broken internal link: $link${NC}"
|
|
BROKEN_INTERNAL=$((BROKEN_INTERNAL + 1))
|
|
fi
|
|
done < "$INTERNAL_LINKS"
|
|
|
|
echo -e "\n${YELLOW}Checking external links...${NC}"
|
|
BROKEN_EXTERNAL=0
|
|
while read -r url; do
|
|
# Skip empty lines and non-http(s) links
|
|
[[ -z "$url" || ! "$url" =~ ^https?:// ]] && continue
|
|
|
|
# Check the external link
|
|
if check_url "$url"; then
|
|
echo -e "${GREEN}✓ Valid external link: $url${NC}"
|
|
else
|
|
echo -e "${RED}✗ Broken external link: $url${NC}"
|
|
BROKEN_EXTERNAL=$((BROKEN_EXTERNAL + 1))
|
|
fi
|
|
done < "$EXTERNAL_LINKS"
|
|
|
|
# Clean up
|
|
rm "$INTERNAL_LINKS" "$EXTERNAL_LINKS"
|
|
|
|
# Report summary
|
|
echo -e "\n${YELLOW}Link Check Summary:${NC}"
|
|
if [ $BROKEN_INTERNAL -eq 0 ]; then
|
|
echo -e "${GREEN}✓ All internal links are valid${NC}"
|
|
else
|
|
echo -e "${RED}✗ Found $BROKEN_INTERNAL broken internal links${NC}"
|
|
fi
|
|
|
|
if [ $BROKEN_EXTERNAL -eq 0 ]; then
|
|
echo -e "${GREEN}✓ All external links are valid${NC}"
|
|
else
|
|
echo -e "${RED}✗ Found $BROKEN_EXTERNAL broken external links${NC}"
|
|
fi
|
|
|
|
# Test 3: Check multilingual content
|
|
echo -e "\n${YELLOW}Test 3: Checking multilingual content...${NC}"
|
|
if curl -s http://127.0.0.1:1111/de > /dev/null; then
|
|
echo -e "${GREEN}✓ German version is accessible${NC}"
|
|
else
|
|
echo -e "${RED}✗ German version is not accessible${NC}"
|
|
fi
|
|
|
|
if curl -s http://127.0.0.1:1111/en > /dev/null; then
|
|
echo -e "${GREEN}✓ English version is accessible${NC}"
|
|
else
|
|
echo -e "${RED}✗ English version is not accessible${NC}"
|
|
fi
|
|
|
|
# Test 4: Check RSS feeds
|
|
echo -e "\n${YELLOW}Test 4: Checking RSS feeds...${NC}"
|
|
if curl -s http://127.0.0.1:1111/atom.xml > /dev/null; then
|
|
echo -e "${GREEN}✓ RSS feed is accessible${NC}"
|
|
else
|
|
echo -e "${RED}✗ RSS feed is not accessible${NC}"
|
|
fi
|
|
|
|
# Cleanup
|
|
kill $SERVER_PID
|
|
|
|
echo -e "\n${GREEN}All tests completed!${NC}" |