Skip to main content

priv/templates/crosswake/shell/android/gradlew.eex

#!/bin/sh

#
# Gradle start up script for POSIX generated by Crosswake.
# This baseline is host-owned and scaffolded once.
#

set -eu

APP_HOME=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
WRAPPER_PROPERTIES="$APP_HOME/gradle/wrapper/gradle-wrapper.properties"
CACHE_ROOT="${HOME}/.crosswake/gradle"

distribution_url=$(sed -n 's/^distributionUrl=//p' "$WRAPPER_PROPERTIES" | sed 's#\\:#:#g')

if [ -z "$distribution_url" ]; then
  echo "error: distributionUrl missing from $WRAPPER_PROPERTIES" >&2
  exit 1
fi

distribution_zip=$(basename "$distribution_url")
distribution_name=${distribution_zip%.zip}
distribution_root="$CACHE_ROOT/$distribution_name"
gradle_bin="$distribution_root/bin/gradle"
fallback_root="$CACHE_ROOT/${distribution_name%-bin}"

if [ ! -x "$gradle_bin" ] && [ -x "$fallback_root/bin/gradle" ]; then
  distribution_root="$fallback_root"
  gradle_bin="$distribution_root/bin/gradle"
fi

if [ ! -x "$gradle_bin" ]; then
  archive="$CACHE_ROOT/$distribution_zip"
  tmpdir=$(mktemp -d "${TMPDIR:-/tmp}/crosswake-gradle.XXXXXX")
  trap 'rm -rf "$tmpdir"' EXIT INT TERM

  mkdir -p "$CACHE_ROOT"

  if [ ! -f "$archive" ]; then
    curl --fail --location --retry 5 --retry-delay 2 --retry-all-errors \
      "$distribution_url" -o "$archive"
  fi

  unzip -q "$archive" -d "$tmpdir"
  extracted_root=$(find "$tmpdir" -mindepth 1 -maxdepth 1 -type d | head -n 1)

  if [ -z "$extracted_root" ]; then
    echo "error: could not locate extracted Gradle distribution in $tmpdir" >&2
    exit 1
  fi

  distribution_root="$CACHE_ROOT/$(basename "$extracted_root")"
  gradle_bin="$distribution_root/bin/gradle"
  rm -rf "$distribution_root"
  mv "$extracted_root" "$distribution_root"
  rm -f "$archive"
  trap - EXIT INT TERM
  rm -rf "$tmpdir"
fi

exec "$gradle_bin" "$@"