Files
FlexLove/scripts/test-release-locally.sh
2025-11-25 16:21:28 -05:00

170 lines
5.6 KiB
Bash
Executable File

#!/bin/bash
# Local test script for release workflow
# This simulates the key steps of .github/workflows/release.yml
set -e
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo -e "${BLUE}==================================${NC}"
echo -e "${BLUE}Local Release Workflow Test${NC}"
echo -e "${BLUE}==================================${NC}"
echo ""
# Step 1: Extract version
echo -e "${YELLOW}Step 1: Extract version from FlexLove.lua${NC}"
VERSION=$(grep -m 1 "_VERSION" FlexLove.lua | sed -E 's/.*"([^"]+)".*/\1/')
if [ -z "$VERSION" ]; then
echo -e "${RED}Error: Could not extract version${NC}"
exit 1
fi
echo -e "${GREEN}✓ Version: ${VERSION}${NC}"
echo ""
# Step 2: Make scripts executable
echo -e "${YELLOW}Step 2: Make scripts executable${NC}"
chmod +x scripts/generate_docs.sh
chmod +x scripts/create-release.sh
chmod +x scripts/create-profile-packages.sh
chmod +x scripts/archive-docs.sh
echo -e "${GREEN}✓ Scripts are executable${NC}"
echo ""
# Step 3: Create release packages
echo -e "${YELLOW}Step 3: Create release packages${NC}"
./scripts/create-profile-packages.sh
echo ""
# Step 4: Verify all packages were created
echo -e "${YELLOW}Step 4: Verify all packages${NC}"
for profile in minimal slim default full; do
if [ ! -f "releases/flexlove-${profile}-v${VERSION}.zip" ]; then
echo -e "${RED}✗ Error: ${profile} profile package was not created${NC}"
exit 1
fi
if [ ! -f "releases/flexlove-${profile}-v${VERSION}.zip.sha256" ]; then
echo -e "${RED}✗ Error: ${profile} checksum file was not created${NC}"
exit 1
fi
SIZE=$(du -h "releases/flexlove-${profile}-v${VERSION}.zip" | cut -f1)
echo -e "${GREEN}${profile} package verified (${SIZE})${NC}"
done
echo ""
# Step 5: Verify checksums
echo -e "${YELLOW}Step 5: Verify checksums${NC}"
cd releases
if shasum -a 256 -c flexlove-*-v${VERSION}.zip.sha256 2>&1 | grep -q "OK"; then
shasum -a 256 -c flexlove-*-v${VERSION}.zip.sha256
echo -e "${GREEN}✓ All checksums verified${NC}"
else
echo -e "${RED}✗ Checksum verification failed${NC}"
exit 1
fi
cd ..
echo ""
# Step 6: Extract checksums for display
echo -e "${YELLOW}Step 6: Extract checksums for release notes${NC}"
MINIMAL_CHECKSUM=$(cat "releases/flexlove-minimal-v${VERSION}.zip.sha256" | cut -d ' ' -f 1)
SLIM_CHECKSUM=$(cat "releases/flexlove-slim-v${VERSION}.zip.sha256" | cut -d ' ' -f 1)
DEFAULT_CHECKSUM=$(cat "releases/flexlove-default-v${VERSION}.zip.sha256" | cut -d ' ' -f 1)
FULL_CHECKSUM=$(cat "releases/flexlove-full-v${VERSION}.zip.sha256" | cut -d ' ' -f 1)
echo -e "${BLUE}Minimal: ${MINIMAL_CHECKSUM}${NC}"
echo -e "${BLUE}Slim: ${SLIM_CHECKSUM}${NC}"
echo -e "${BLUE}Default: ${DEFAULT_CHECKSUM}${NC}"
echo -e "${BLUE}Full: ${FULL_CHECKSUM}${NC}"
echo ""
# Step 7: Check if pre-release
echo -e "${YELLOW}Step 7: Check if pre-release${NC}"
if [[ "$VERSION" =~ (alpha|beta|rc|dev) ]]; then
echo -e "${BLUE}This is a pre-release version${NC}"
else
echo -e "${GREEN}This is a stable release${NC}"
fi
echo ""
# Step 8: Verify package contents
echo -e "${YELLOW}Step 8: Verify package contents${NC}"
TEMP_DIR=$(mktemp -d)
for profile in minimal slim default full; do
unzip -q "releases/flexlove-${profile}-v${VERSION}.zip" -d "${TEMP_DIR}/${profile}"
# Check FlexLove.lua exists
if [ ! -f "${TEMP_DIR}/${profile}/flexlove/FlexLove.lua" ]; then
echo -e "${RED}${profile}: Missing FlexLove.lua${NC}"
exit 1
fi
# Check LICENSE exists
if [ ! -f "${TEMP_DIR}/${profile}/flexlove/LICENSE" ]; then
echo -e "${RED}${profile}: Missing LICENSE${NC}"
exit 1
fi
# Check README exists
if [ ! -f "${TEMP_DIR}/${profile}/flexlove/README.md" ]; then
echo -e "${RED}${profile}: Missing README.md${NC}"
exit 1
fi
# Count modules
MODULE_COUNT=$(find "${TEMP_DIR}/${profile}/flexlove/modules" -name "*.lua" | wc -l | tr -d ' ')
# Check themes for default and full
if [ "$profile" == "default" ] || [ "$profile" == "full" ]; then
if [ ! -d "${TEMP_DIR}/${profile}/flexlove/themes" ]; then
echo -e "${RED}${profile}: Missing themes directory${NC}"
exit 1
fi
# Verify theme files
if [ ! -f "${TEMP_DIR}/${profile}/flexlove/themes/metal.example.lua" ]; then
echo -e "${RED}${profile}: Missing metal.example.lua${NC}"
exit 1
fi
if [ ! -f "${TEMP_DIR}/${profile}/flexlove/themes/space.example.lua" ]; then
echo -e "${RED}${profile}: Missing space.example.lua${NC}"
exit 1
fi
if [ ! -f "${TEMP_DIR}/${profile}/flexlove/themes/README.md" ]; then
echo -e "${RED}${profile}: Missing themes/README.md${NC}"
exit 1
fi
# Verify no other files in themes
THEME_FILE_COUNT=$(find "${TEMP_DIR}/${profile}/flexlove/themes" -type f | wc -l | tr -d ' ')
if [ "$THEME_FILE_COUNT" != "3" ]; then
echo -e "${RED}${profile}: Expected 3 files in themes, found ${THEME_FILE_COUNT}${NC}"
find "${TEMP_DIR}/${profile}/flexlove/themes" -type f
exit 1
fi
echo -e "${GREEN}${profile}: ${MODULE_COUNT} modules + themes verified${NC}"
else
# Verify no themes for minimal and slim
if [ -d "${TEMP_DIR}/${profile}/flexlove/themes" ]; then
echo -e "${RED}${profile}: Should not have themes directory${NC}"
exit 1
fi
echo -e "${GREEN}${profile}: ${MODULE_COUNT} modules verified${NC}"
fi
done
rm -rf "$TEMP_DIR"
echo ""
echo -e "${GREEN}==================================${NC}"
echo -e "${GREEN}✓ All tests passed!${NC}"
echo -e "${GREEN}==================================${NC}"
echo ""
echo -e "${BLUE}Release packages are ready in: releases/${NC}"
echo -e "${BLUE}Version: v${VERSION}${NC}"
echo ""