language: shell
dist: xenial
cache:
  directories:
    - /home/travis/.cache/bazel/
os: linux
services:
  - docker
jobs:
  include:
   - os: linux
     arch: amd64
   - os: linux
     arch: arm64
script:
   # On arm64, we need to create our own pipes for stderr and stdout,
   # otherwise we will not be able to open /dev/stderr. This is probably
   # due to AppArmor rules.
   - bash -xeo pipefail -c 'uname -a && make smoke-test 2>&1 | cat'
branches:
  except:
  # Skip copybara branches.
  - /^test\/cl.*$/

language: shell
dist: xenial
git:
  clone: false  # Clone manually in before_install
before_install:
    - set -e -o pipefail
    - |
      if [ "${TRAVIS_PULL_REQUEST}" = false ]; then
        # This is not a PR build, fetch and checkout the commit being tested
        git clone -q --depth 1 "https://github.com/${TRAVIS_REPO_SLUG}.git" "${TRAVIS_REPO_SLUG}"
        cd "${TRAVIS_REPO_SLUG}"
        git fetch origin "${TRAVIS_COMMIT}" --depth 1
        git checkout -qf "${TRAVIS_COMMIT}"
      else
        # This is a PR build, simulate +refs/pull/{num}/merge.
        # We can do that by fetching +refs/pull/{num}/head and cherry picking it
        # onto the target branch.
        git clone -q --branch "${TRAVIS_BRANCH}" --depth 1 "https://github.com/${TRAVIS_REPO_SLUG}.git" "${TRAVIS_REPO_SLUG}"
        cd "${TRAVIS_REPO_SLUG}"
        git fetch origin "+refs/pull/${TRAVIS_PULL_REQUEST}/head" --depth 1
        git config --global user.email "$(git log -1 FETCH_HEAD --pretty="%cE")"
        git config --global user.name "$(git log -1 FETCH_HEAD --pretty="%aN")"
        git cherry-pick --strategy=recursive -X theirs --keep-redundant-commits FETCH_HEAD
      fi
cache:
  directories:
    - /home/travis/.cache/bazel/
os: linux
services:
  - docker
jobs:
  include:
   - os: linux
     arch: amd64
   - os: linux
     arch: arm64
script:
   # On arm64, we need to create our own pipes for stderr and stdout,
   # otherwise we will not be able to open /dev/stderr. This is probably
   # due to AppArmor rules.
   - bash -xeo pipefail -c 'uname -a && make smoke-test 2>&1 | cat'
branches:
  except:
  # Skip copybara branches.
  - /^test\/cl.*$/

Fix the way PR build clones gVisor.
Fix the way PR build clones gVisor.

Copybara force-pushes to the PR immediately before merging which triggers a PR
build. Since the PR is merged, the refspec +refs/pull/{pr_num}/merge is not
available and the build fails causing all master commit CI builds to show a
failure.

This change remove the clone step from travis and clone manually in a way
which always would succeed. We fetch +refs/pull/{pr_num}/head and cherry pick
that onto the target branch.

I have tested this in https://github.com/ayushr2/gvisor/pull/1 and
https://github.com/ayushr2/gvisor/pull/2.

PiperOrigin-RevId: 317759891
