#!/usr/bin/env bash set -euo pipefail GRADLEW="./gradlew" if [[ ! -x "$GRADLEW" ]]; then echo "Missing or non-executable ./gradlew. Did you generate the Gradle wrapper?" exit 1 fi # Get the task list once (quiet output to reduce noise) ALL_TASKS="$($GRADLEW -q tasks --all || true)" if [[ -z "$ALL_TASKS" ]]; then echo "Could not read Gradle tasks. Exiting." exit 1 fi # Prefer KMP aggregate task when available if echo "$ALL_TASKS" | grep -qE '^allTests[[:space:]]+-'; then TASKS="allTests" else # Fallback: collect common test tasks, excluding device-dependent instrumentation tests TASKS="$( echo "$ALL_TASKS" \ | awk '{print $1}' \ | grep -E '(^test$|Test$|^check$)' \ | grep -v 'AndroidTest' \ | grep -v 'connectedAndroidTest' \ | grep -v 'deviceAndroidTest' \ | sort -u \ | tr '\n' ' ' )" fi # Strip spaces and validate if [[ -z "${TASKS// /}" ]]; then echo "No test tasks found. Exiting." exit 1 fi echo "Running: $GRADLEW $TASKS" # Run all tasks in one go (faster, simpler) $GRADLEW $TASKS echo "===================" echo "ALL TESTS PASSED!" echo "===================" # --- Commit, push, and create PR if on a feature branch --- # Skip commit/push/PR when invoked from a git hook (prevents infinite loop) if [[ "${GIT_PUSH_IN_PROGRESS:-}" == "1" ]] || [[ -n "${GIT_DIR:-}" && "${GIT_DIR}" != ".git" ]]; then exit 0 fi BRANCH="$(git rev-parse --abbrev-ref HEAD)" MAIN_BRANCH="main" if [[ "$BRANCH" == "$MAIN_BRANCH" ]]; then echo "On $MAIN_BRANCH — skipping commit/push/PR." exit 0 fi # Stage all changes (except untracked files the user hasn't added) if git diff --quiet && git diff --cached --quiet && [[ -z "$(git ls-files --others --exclude-standard)" ]]; then echo "No changes to commit." else git add -A COMMIT_MSG="feat: $(echo "$BRANCH" | sed 's/^[0-9]*-//' | tr '-' ' ')" git commit -m "$COMMIT_MSG" || echo "Nothing to commit." fi # Push branch to remote (skip hooks to avoid re-triggering verify.sh) GIT_PUSH_IN_PROGRESS=1 git push --no-verify -u origin "$BRANCH" # Create PR if one doesn't already exist for this branch if gh pr view "$BRANCH" --json state >/dev/null 2>&1; then PR_URL="$(gh pr view "$BRANCH" --json url -q '.url')" echo "PR already exists: $PR_URL" else TITLE="$(echo "$BRANCH" | sed 's/^[0-9]*-//' | tr '-' ' ' | awk '{for(i=1;i<=NF;i++) $i=toupper(substr($i,1,1)) substr($i,2)}1')" PR_URL="$(gh pr create --title "$TITLE" --body "Automated PR from verify.sh" --base "$MAIN_BRANCH" --head "$BRANCH")" echo "PR created: $PR_URL" fi