#!/usr/bin/env bash # Assemble the smartbotic-automation .deb tree and run dpkg-deb. # Runs INSIDE the Docker build container after `cmake --build`. set -euo pipefail PROJECT_DIR="${PROJECT_DIR:-/build}" OUTPUT_DIR="${OUTPUT_DIR:-/packages}" VERSION="${BUILD_VERSION:-$(cat "$PROJECT_DIR/VERSION")}" REVISION="${BUILD_DEB_REVISION:-1}" ARCH="amd64" NAME="smartbotic-automation" PKG_VERSION="${VERSION}-${REVISION}" PKG_ROOT="$(mktemp -d)" trap "rm -rf $PKG_ROOT" EXIT # Directory layout inside the .deb install -d "$PKG_ROOT/DEBIAN" install -d "$PKG_ROOT/usr/bin" install -d "$PKG_ROOT/usr/share/$NAME/webui" install -d "$PKG_ROOT/usr/share/$NAME/nodes" install -d "$PKG_ROOT/usr/share/doc/$NAME" install -d "$PKG_ROOT/etc/$NAME" install -d "$PKG_ROOT/usr/lib/systemd/system" install -d "$PKG_ROOT/var/lib/$NAME" install -d "$PKG_ROOT/var/log/$NAME" # Binaries (stripped) install -m 0755 "$PROJECT_DIR/build/smartbotic-webserver" "$PKG_ROOT/usr/bin/" install -m 0755 "$PROJECT_DIR/build/smartbotic-runner" "$PKG_ROOT/usr/bin/" install -m 0755 "$PROJECT_DIR/build/smartbotic-migrate-nodes" "$PKG_ROOT/usr/bin/" strip --strip-all "$PKG_ROOT/usr/bin/smartbotic-webserver" \ "$PKG_ROOT/usr/bin/smartbotic-runner" \ "$PKG_ROOT/usr/bin/smartbotic-migrate-nodes" || true # WebUI bundle (normalize permissions: dirs 0755, files 0644) cp -r "$PROJECT_DIR/webui/dist/." "$PKG_ROOT/usr/share/$NAME/webui/" find "$PKG_ROOT/usr/share/$NAME/webui" -type d -exec chmod 0755 {} + find "$PKG_ROOT/usr/share/$NAME/webui" -type f -exec chmod 0644 {} + # Default workflow nodes (normalize permissions: dirs 0755, files 0644) cp -r "$PROJECT_DIR/nodes/." "$PKG_ROOT/usr/share/$NAME/nodes/" find "$PKG_ROOT/usr/share/$NAME/nodes" -type d -exec chmod 0755 {} + find "$PKG_ROOT/usr/share/$NAME/nodes" -type f -exec chmod 0644 {} + # Default configs (will become conffiles via DEBIAN/conffiles) install -m 0644 "$PROJECT_DIR/packaging/deb/config/webserver.json" "$PKG_ROOT/etc/$NAME/webserver.json" install -m 0644 "$PROJECT_DIR/packaging/deb/config/runner.json" "$PKG_ROOT/etc/$NAME/runner.json" install -m 0644 "$PROJECT_DIR/packaging/deb/config/env" "$PKG_ROOT/etc/$NAME/env" # Systemd units (modern path: usr/lib, not lib) install -m 0644 "$PROJECT_DIR/packaging/deb/systemd/$NAME-webserver.service" \ "$PKG_ROOT/usr/lib/systemd/system/" install -m 0644 "$PROJECT_DIR/packaging/deb/systemd/$NAME-runner.service" \ "$PKG_ROOT/usr/lib/systemd/system/" # Minimal copyright file (required by lintian) cat > "$PKG_ROOT/usr/share/doc/$NAME/copyright" < Source: https://smartbotics.ai Files: * Copyright: $(date +%Y) SmartBotics Kft. License: proprietary Proprietary software. All rights reserved. Unauthorized copying, distribution or modification is prohibited. EOF # Minimal changelog (required by lintian for non-native packages) printf "smartbotic-automation (%s) trixie; urgency=medium\n\n * Release %s\n\n -- Ferenc Szontagh %s\n" \ "${PKG_VERSION}" "${VERSION}" "$(date -R)" \ | gzip -9 -n > "$PKG_ROOT/usr/share/doc/$NAME/changelog.Debian.gz" # Maintainer scripts for script in preinst postinst prerm postrm; do install -m 0755 "$PROJECT_DIR/packaging/deb/scripts/$script" "$PKG_ROOT/DEBIAN/$script" done # Conffiles cat > "$PKG_ROOT/DEBIAN/conffiles" < "$PKG_ROOT/DEBIAN/control" # Build the .deb mkdir -p "$OUTPUT_DIR" DEB_FILE="$OUTPUT_DIR/${NAME}_${PKG_VERSION}_${ARCH}.deb" dpkg-deb --build --root-owner-group "$PKG_ROOT" "$DEB_FILE" echo "Built: $DEB_FILE" ls -lh "$DEB_FILE"