85 lines
2.5 KiB
Bash
Executable File
85 lines
2.5 KiB
Bash
Executable File
#!/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 |