1e6787eb30
`set -e` aborted build.sh when `podman image rm`/`prune` failed, and `2>/dev/null` hid the reason, so --remove exited 125 with no output. Combining --remove --prune also skipped the prune. Guard the removal with `podman image exists` for a clear "nothing to remove", drop `2>/dev/null` so podman's reason is visible, and use `cmd || echo` to warn without aborting. Exit status stays 0 on failure by design.
78 lines
1.8 KiB
Bash
Executable File
78 lines
1.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
|
cd "$SCRIPT_DIR"
|
|
|
|
UBUNTU_VERSION="${UBUNTU_VERSION:-26.04}"
|
|
NODE_VERSION="${NODE_VERSION:-24.21.0}"
|
|
OPENCODE_VERSION="${OPENCODE_VERSION:-2.0.22}"
|
|
IMAGE="${IMAGE_REPO:-localhost/opencode-dev}"
|
|
|
|
usage() {
|
|
echo 'Usage: $0 [--no-cache] [--update] [--dry-run] [--remove] [--prune] [--apt-packages="pack1 pack2"]'
|
|
exit "${1:-0}"
|
|
}
|
|
|
|
BUILD_OPTS=()
|
|
DRY_RUN=0
|
|
REMOVE=0
|
|
PRUNE=0
|
|
EXTRA_APT_PACKAGES=()
|
|
|
|
while (($#)); do
|
|
case "$1" in
|
|
--no-cache) BUILD_OPTS+=(--no-cache) ;;
|
|
--update) BUILD_OPTS+=(--no-cache --pull=newer) ;;
|
|
--dry-run) DRY_RUN=1 ;;
|
|
--remove) REMOVE=1 ;;
|
|
--prune) PRUNE=1 ;;
|
|
--apt-packages=*)
|
|
read -ra _pkgs <<< "${1#*=}"
|
|
EXTRA_APT_PACKAGES="${_pkgs[@]}" ;;
|
|
-h|--help) usage ;;
|
|
*) echo "Unknown option: $1" >&2; usage 2 ;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [[ -n "${EXTRA_APT_PACKAGES[@]}" ]]; then
|
|
echo "--> Apt extra pkg: ${EXTRA_APT_PACKAGES[*]}"
|
|
fi
|
|
|
|
if ((REMOVE || PRUNE)); then
|
|
if ((REMOVE)); then
|
|
if podman image exists "$IMAGE"; then
|
|
podman image rm "${IMAGE}" || echo "WARNING: could not remove $IMAGE" >&2
|
|
else
|
|
echo "$IMAGE does not exist, nothing to remove"
|
|
fi
|
|
fi
|
|
if ((PRUNE)); then
|
|
podman image prune -f || echo "WARNING: prune failed" >&2
|
|
fi
|
|
exit 0
|
|
fi
|
|
|
|
CMD=(
|
|
podman build
|
|
"${BUILD_OPTS[@]}"
|
|
--build-arg "UBUNTU_VERSION=${UBUNTU_VERSION}"
|
|
--build-arg "NODE_VERSION=${NODE_VERSION}"
|
|
--build-arg "OPENCODE_VERSION=${OPENCODE_VERSION}"
|
|
--build-arg "EXTRA_APT_PACKAGES=${EXTRA_APT_PACKAGES[*]}"
|
|
--build-arg "DEV_UID=$(id -u)"
|
|
--build-arg "DEV_GID=$(id -g)"
|
|
-t "$IMAGE"
|
|
.
|
|
)
|
|
|
|
if ((DRY_RUN)); then
|
|
printf 'running:'; printf ' %q' "${CMD[@]}"; echo
|
|
exit 0
|
|
fi
|
|
|
|
"${CMD[@]}"
|
|
echo
|
|
echo "Built: $IMAGE"
|