| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- #!/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" <<EOF
- Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
- Upstream-Name: SmartBotic Automation
- Upstream-Contact: Ferenc Szontagh <ferenc.szontagh@smartbotics.ai>
- 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 <ferenc.szontagh@smartbotics.ai> %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" <<EOF
- /etc/$NAME/webserver.json
- /etc/$NAME/runner.json
- /etc/$NAME/env
- EOF
- # Render control file from template
- INSTALLED_SIZE=$(du -sk "$PKG_ROOT" --exclude=DEBIAN | cut -f1)
- sed -e "s/{{VERSION}}/${PKG_VERSION}/g" \
- -e "s/{{INSTALLED_SIZE}}/${INSTALLED_SIZE}/g" \
- "$PROJECT_DIR/packaging/deb/templates/control.smartbotic-automation" \
- > "$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"
|