| 1234567891011121314151617181920212223242526272829303132333435363738 |
- #!/usr/bin/env bash
- set -Eeuo pipefail
- APP_ROOT="/opt/cloudpure-web"
- SOURCE_DIR="$APP_ROOT/source"
- RELEASES_DIR="$APP_ROOT/releases"
- CURRENT_LINK="/opt/web/dist"
- LOCK_FILE="$APP_ROOT/build.lock"
- REASON="${1:-manual}"
- export CHROME_PATH="${CHROME_PATH:-/snap/bin/chromium}"
- mkdir -p "$RELEASES_DIR"
- exec 9>"$LOCK_FILE"
- if ! flock -n 9; then
- echo "build already running; skip reason=$REASON"
- exit 0
- fi
- BUILD_ID="$(date +%Y%m%d%H%M%S)"
- BUILD_DIR="$RELEASES_DIR/$BUILD_ID"
- LOG_FILE="$APP_ROOT/build-$BUILD_ID.log"
- {
- echo "build started: id=$BUILD_ID reason=$REASON"
- cd "$SOURCE_DIR"
- npm ci --no-audit --no-fund
- npm run build
- test -f dist/sitemap.xml
- test -f dist/news/index.html
- mv dist "$BUILD_DIR"
- ln -sfn "$BUILD_DIR" "$CURRENT_LINK"
- nginx -t
- systemctl reload nginx
- find "$RELEASES_DIR" -mindepth 1 -maxdepth 1 -type d -printf '%T@ %p\n' \
- | sort -nr | tail -n +4 | cut -d' ' -f2- | xargs -r rm -rf
- echo "build completed: id=$BUILD_ID"
- } 2>&1 | tee "$LOG_FILE"
|