build_stage 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. [ -f ./.env ] || { echo "Error: .env file not found"; exit 1; }
  4. source ./.env || { echo "Error: failed to load .env"; exit 1; }
  5. command -v fpm >/dev/null 2>&1 || { echo "Error: fpm not found in PATH"; exit 1; }
  6. rm -rf ./build
  7. rm -f "${BUILD_APP}_${BUILD_VER}_${BUILD_ARCH}.deb"
  8. rm -rf "$BUILD_STAGE"
  9. mkdir -p "$BUILD_STAGE"/{opt/$BUILD_APP,usr/bin,var/log/$BUILD_APP}
  10. for item in *; do
  11. [ "$item" = "build" ] && continue
  12. case "$item" in
  13. .*|*.deb) continue ;;
  14. esac
  15. cp -a "$item" "$BUILD_STAGE/opt/$BUILD_APP/" || { echo "Error: failed to copy '$item' to stage"; exit 1; }
  16. done
  17. touch "$BUILD_STAGE/var/log/$BUILD_APP/app.log" || { echo "Error: unable to create log in $BUILD_STAGE/var/log/$BUILD_APP"; exit 1; }
  18. cat > "$BUILD_STAGE/usr/bin/$BUILD_APP" <<EOF
  19. #!/usr/bin/env bash
  20. exec php -S 127.0.0.1:8080 -t /opt/$BUILD_APP/public
  21. EOF
  22. chmod +x "$BUILD_STAGE/usr/bin/$BUILD_APP" || { echo "Error: unable to mark wrapper as executable"; exit 1; }
  23. echo "[ok] stage ready at: $BUILD_STAGE"
  24. FPM_DEPENDS=()
  25. if [ -n "${BUILD_DEPENDS:-}" ]; then
  26. IFS=',' read -ra __DEPS <<< "$BUILD_DEPENDS"
  27. for d in "${__DEPS[@]}"; do
  28. d_trim="$(echo "$d" | xargs)"
  29. [ -n "$d_trim" ] && FPM_DEPENDS+=(--depends "$d_trim")
  30. done
  31. fi
  32. fpm -s dir -t deb \
  33. -n "$BUILD_APP" -v "$BUILD_VER" \
  34. -C "$BUILD_STAGE" \
  35. --prefix / \
  36. --description "$BUILD_DESCRIPTION" \
  37. --license "$BUILD_LICENSE" \
  38. --vendor "$BUILD_VENDOR" \
  39. --maintainer "$BUILD_MAINTAINER" \
  40. --architecture "$BUILD_ARCH" \
  41. --deb-no-default-config-files \
  42. "${FPM_DEPENDS[@]}" \
  43. opt/$BUILD_APP var/log/$BUILD_APP usr/bin/$BUILD_APP \
  44. || { echo "Error: fpm failed to build the package"; exit 1; }