#!/bin/bash # Build hyprcrd distribution ZIP with version bump + minification set -e if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then echo "Usage: ./dist.sh [--patch|--minor|--major]" echo "" echo " --patch bump patch version (default) 0.1.1 → 0.1.2" echo " --minor bump minor version 0.1.2 → 0.2.0" echo " --major bump major version 0.2.0 → 1.0.0" echo "" echo "Builds Tailwind CSS, minifies JS/CSS, bumps version in config.php," echo "and creates hyprcrd-{version}.zip ready for deployment." exit 0 fi cd "$(dirname "$0")" # Read current version CURRENT=$(grep "APP_VERSION" config.php | grep -oP "'[^']+'" | tail -1 | tr -d "'") IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT" # Bump: --major, --minor, or patch (default) case "${1:-patch}" in --major) MAJOR=$((MAJOR + 1)); MINOR=0; PATCH=0 ;; --minor) MINOR=$((MINOR + 1)); PATCH=0 ;; *) PATCH=$((PATCH + 1)) ;; esac VERSION="${MAJOR}.${MINOR}.${PATCH}" sed -i "s/APP_VERSION', '${CURRENT}'/APP_VERSION', '${VERSION}'/" config.php echo "Version: ${CURRENT} → ${VERSION}" DIST="hyprcrd-${VERSION}.zip" STAGE="/tmp/hyprcrd-stage-$$" rm -rf "$STAGE" # Rebuild Tailwind if CLI exists if [ -x ./tailwindcss ]; then echo "Building Tailwind CSS..." ./tailwindcss --input public/css/tailwind.css --output public/css/tailwind.out.css --content "public/index.php,public/js/**/*.js" --minify fi # Copy source to staging echo "Staging files..." mkdir -p "$STAGE" cp -r config.php Dockerfile docker-entrypoint.sh README.md dist.sh .gitignore src public "$STAGE/" mkdir -p "$STAGE/data" touch "$STAGE/data/.gitkeep" rm -rf "$STAGE/public/uploads" mkdir -p "$STAGE/public/uploads" touch "$STAGE/public/uploads/.gitkeep" rm -f "$STAGE/public/css/tailwind.css" # Minify JS if command -v npx &>/dev/null; then echo "Minifying JS..." for f in "$STAGE"/public/js/app.js "$STAGE"/public/js/modules/*.js; do [ -f "$f" ] || continue npx --yes terser "$f" --compress --mangle --module -o "$f" 2>/dev/null && \ echo " $(basename "$f")" || echo " SKIP $(basename "$f")" done echo "Minifying CSS..." for f in "$STAGE"/public/css/style.css "$STAGE"/public/css/fonts.css; do [ -f "$f" ] || continue npx --yes csso-cli "$f" -o "$f" 2>/dev/null && \ echo " $(basename "$f")" || echo " SKIP $(basename "$f")" done else echo "npx not found, skipping minification" fi # Create ZIP echo "Creating ${DIST}..." cd "$STAGE" zip -r "$OLDPWD/$DIST" . -x "*.gitkeep" 2>/dev/null # Re-add gitkeep files zip "$OLDPWD/$DIST" data/.gitkeep public/uploads/.gitkeep cd "$OLDPWD" # Cleanup rm -rf "$STAGE" # Size comparison ORIG=$(du -sb public/js/ public/css/style.css | awk '{s+=$1}END{print s}') FINAL=$(stat -c%s "$DIST") echo "Done: ${DIST} ($(du -h "$DIST" | cut -f1))"