diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4923fe94922..8f9cc3d5a70 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2325,10 +2325,52 @@ jobs: matrix: ${{ fromJson(needs.preflight.outputs.android_matrix) }} steps: - name: Checkout - uses: actions/checkout@v6 - with: - persist-credentials: false - submodules: false + shell: bash + env: + CHECKOUT_REPO: ${{ github.repository }} + CHECKOUT_SHA: ${{ github.sha }} + CHECKOUT_TOKEN: ${{ github.token }} + run: | + set -euo pipefail + + workdir="$GITHUB_WORKSPACE" + auth_header="$(printf 'x-access-token:%s' "$CHECKOUT_TOKEN" | base64 | tr -d '\n')" + + reset_checkout_dir() { + mkdir -p "$workdir" + find "$workdir" -mindepth 1 -maxdepth 1 -exec rm -rf {} + + } + + checkout_attempt() { + local attempt="$1" + + reset_checkout_dir + git init "$workdir" >/dev/null + git config --global --add safe.directory "$workdir" + git -C "$workdir" remote add origin "https://github.com/${CHECKOUT_REPO}" + git -C "$workdir" config gc.auto 0 + + timeout --signal=TERM 30s git -C "$workdir" \ + -c protocol.version=2 \ + -c "http.https://github.com/.extraheader=AUTHORIZATION: basic ${auth_header}" \ + fetch --no-tags --prune --no-recurse-submodules --depth=1 origin \ + "+${CHECKOUT_SHA}:refs/remotes/origin/ci-target" || return 1 + + git -C "$workdir" checkout --force --detach "$CHECKOUT_SHA" || return 1 + test -x "$workdir/apps/android/gradlew" || return 1 + echo "checkout attempt ${attempt}/2 succeeded" + } + + for attempt in 1 2; do + if checkout_attempt "$attempt"; then + exit 0 + fi + echo "checkout attempt ${attempt}/2 failed" + sleep $((attempt * 5)) + done + + echo "checkout failed after 2 attempts" >&2 + exit 1 - name: Setup Java uses: actions/setup-java@v5 @@ -2378,16 +2420,16 @@ jobs: set -euo pipefail case "$TASK" in test-play) - ./gradlew --no-daemon :app:testPlayDebugUnitTest + ./gradlew --no-daemon --build-cache :app:testPlayDebugUnitTest ;; test-third-party) - ./gradlew --no-daemon :app:testThirdPartyDebugUnitTest + ./gradlew --no-daemon --build-cache :app:testThirdPartyDebugUnitTest ;; build-play) - ./gradlew --no-daemon :app:assemblePlayDebug + ./gradlew --no-daemon --build-cache :app:assemblePlayDebug ;; build-third-party) - ./gradlew --no-daemon :app:assembleThirdPartyDebug + ./gradlew --no-daemon --build-cache :app:assembleThirdPartyDebug ;; *) echo "Unsupported Android task: $TASK" >&2