89 lines
2.0 KiB
Bash
Executable File
89 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Build a deploy package containing only code changes/new files
|
|
# from source compared to destination.
|
|
#
|
|
# Usage:
|
|
# scripts/ops/netgescon-build-update-package.sh \
|
|
# --src /home/michele/netgescon/netgescon-laravel \
|
|
# --compare-dir /var/www/netgescon \
|
|
# --out-dir /var/www/netgescon/storage/app/public/ops-packages
|
|
|
|
SRC_DIR="/home/michele/netgescon/netgescon-laravel"
|
|
COMPARE_DIR="/var/www/netgescon"
|
|
OUT_DIR="/var/www/netgescon/storage/app/public/ops-packages"
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--src)
|
|
SRC_DIR="$2"
|
|
shift 2
|
|
;;
|
|
--compare-dir)
|
|
COMPARE_DIR="$2"
|
|
shift 2
|
|
;;
|
|
--out-dir)
|
|
OUT_DIR="$2"
|
|
shift 2
|
|
;;
|
|
*)
|
|
echo "Unknown option: $1"
|
|
echo "Usage: $0 [--src <dir>] [--compare-dir <dir>] [--out-dir <dir>]"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [[ ! -d "$SRC_DIR" || ! -f "$SRC_DIR/artisan" ]]; then
|
|
echo "Error: invalid source app dir: $SRC_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! -d "$COMPARE_DIR" || ! -f "$COMPARE_DIR/artisan" ]]; then
|
|
echo "Error: invalid compare app dir: $COMPARE_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "$OUT_DIR"
|
|
STAMP="$(date +"%Y%m%d-%H%M%S")"
|
|
WORK_DIR="/tmp/netgescon-update-package-$STAMP"
|
|
mkdir -p "$WORK_DIR"
|
|
|
|
cleanup() {
|
|
rm -rf "$WORK_DIR"
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
RSYNC_ARGS=(
|
|
-avh
|
|
--checksum
|
|
--update
|
|
--compare-dest="$COMPARE_DIR"
|
|
--exclude=.git/
|
|
--exclude=.env
|
|
--exclude=storage/
|
|
--exclude=node_modules/
|
|
--exclude=vendor/
|
|
)
|
|
|
|
# Copy only files that differ from compare destination.
|
|
rsync "${RSYNC_ARGS[@]}" "$SRC_DIR/" "$WORK_DIR/"
|
|
|
|
FILE_COUNT="$(find "$WORK_DIR" -type f | wc -l | tr -d ' ')"
|
|
if [[ "$FILE_COUNT" == "0" ]]; then
|
|
echo "No code differences found between source and destination."
|
|
exit 0
|
|
fi
|
|
|
|
PACKAGE_PATH="$OUT_DIR/netgescon-update-$STAMP.tar.gz"
|
|
tar -czf "$PACKAGE_PATH" -C "$WORK_DIR" .
|
|
|
|
# Keep a stable pointer to the latest package.
|
|
ln -sfn "$PACKAGE_PATH" "$OUT_DIR/latest-update.tar.gz"
|
|
|
|
echo "Update package created."
|
|
echo "FILES_INCLUDED=$FILE_COUNT"
|
|
echo "PACKAGE_PATH=$PACKAGE_PATH"
|