#!/bin/bash set -euo pipefail # =============================== # CONFIGURATION # =============================== CLEAN_BUILD="${CLEAN_BUILD:-false}" HALIUM_REPO="${HALIUM_REPO:-https://gitlab.com/ubports/porting/community-ports/halium-generic-adaptation-build-tools.git}" HALIUM_BRANCH="${HALIUM_BRANCH:-main}" WORKDIR="$(pwd)" OUTDIR="${WORKDIR}/out" OTADIR="${WORKDIR}/ota" BUILDDIR="${WORKDIR}/build" # =============================== # LOGGING FUNCTIONS # =============================== log() { echo "[$(date +'%Y-%m-%d %H:%M:%S')] $*" >&2 } cleanup() { local exit_code=$? if [ $exit_code -ne 0 ]; then log "Build failed with exit code $exit_code" fi } trap cleanup EXIT # =============================== # PREPARE BUILD ENV # =============================== if [ "$CLEAN_BUILD" = "true" ]; then log "Performing clean build: removing previous artifacts" rm -rf "$OUTDIR" "$OTADIR" "$BUILDDIR" else log "Incremental build enabled (set CLEAN_BUILD=true to force wipe)" fi mkdir -p "$OUTDIR" "$OTADIR" # =============================== # CLONE HALIUM TOOLS # =============================== if [ ! -d "$BUILDDIR" ]; then log "Cloning Halium build tools from $HALIUM_REPO (branch: $HALIUM_BRANCH)" git clone -b "$HALIUM_BRANCH" "$HALIUM_REPO" "$BUILDDIR" else log "Halium build tools already present, pulling latest changes" (cd "$BUILDDIR" && git fetch && git checkout "$HALIUM_BRANCH" && git pull --rebase) || true fi # =============================== # BUILD KERNEL # =============================== log "Starting kernel build..." "$BUILDDIR/build.sh" log "Kernel build completed successfully" # =============================== # ROOTFS & OTA PREP # =============================== DATETIME=$(date +%Y%m%d-%H%M) DEVICE="$(source deviceinfo && echo "$deviceinfo_codename")" log "Preparing OTA for device: $DEVICE" "$BUILDDIR/prepare-fake-ota.sh" "$OUTDIR/device_${DEVICE}.tar.xz" "$OTADIR" log "Generating system image..." "$BUILDDIR/system-image-from-ota.sh" "$OTADIR/ubuntu_command" "$OUTDIR" mv "$OUTDIR/rootfs.img" "$OUTDIR/ubuntu.img" # =============================== # PACKAGE ARTIFACTS # =============================== cd "$OUTDIR" log "Compressing ubuntu.img with zstd..." rm -f ubuntu.img.zst log "Cleaning generated {init}/boot artifacts inorder to use prebuilt ones" rm -rf boot.img init_boot.img log "Copying prebuilt artifacts" cp -r ../boot.img . cp -r ../init_boot.img . zstd -q -f ubuntu.img ZIPNAME="ubuntu-touch-${DEVICE}-${DATETIME}.zip" log "Creating flashable zip: $ZIPNAME" zip -r9 "$ZIPNAME" boot.img init_boot.img *.zst cd "$WORKDIR" # =============================== # DONE # =============================== log "=======================================" log "Build completed successfully!" log "Artifacts available in: $OUTDIR" ls -lh "$OUTDIR" log "======================================="