89 lines
2.8 KiB
Bash
Executable File
89 lines
2.8 KiB
Bash
Executable File
#!/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" "$STAGE/data"
|
|
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 for uploads only
|
|
zip "$OLDPWD/$DIST" 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))"
|