#!/usr/bin/env bash set -euo pipefail DEVICE="${1:-komodo}" WORK_DIR="${MONTANAOS_WORK:-$HOME/montanaos-build}" MONTANAOS_ROOT="$(cd "$(dirname "$0")/.." && pwd)" LOCK_COMMIT="$(git -C "$MONTANAOS_ROOT" rev-parse HEAD)" LOCK_SHORT="$(git -C "$MONTANAOS_ROOT" rev-parse --short=12 HEAD)" SOURCE_DATE_EPOCH="$(git -C "$MONTANAOS_ROOT" log -1 --format=%ct HEAD)" export SOURCE_DATE_EPOCH if [[ -n "$(git -C "$MONTANAOS_ROOT" status --porcelain)" ]]; then echo "ERROR: working tree dirty. Reproducible builds require clean tree." echo "Either commit changes or stash before building a release." exit 1 fi cd "$WORK_DIR/grapheneos" unset USE_CCACHE export USE_CCACHE=0 source build/envsetup.sh lunch "${DEVICE}-cur-user" m vendorbootimage vendorkernelbootimage m target-files-package OUT_DIR="out/target/product/$DEVICE" ZIP_NAME="MontanaOS-${DEVICE}-${LOCK_SHORT}.zip" if [[ -f "$OUT_DIR/$ZIP_NAME" ]]; then echo echo "Build complete: $OUT_DIR/$ZIP_NAME" echo "MontanaOS commit: $LOCK_COMMIT" echo "SOURCE_DATE_EPOCH: $SOURCE_DATE_EPOCH" sha256sum "$OUT_DIR/$ZIP_NAME" else echo "ERROR: expected output $OUT_DIR/$ZIP_NAME not found" ls "$OUT_DIR" | head exit 1 fi