# The CI jobs defined here require GitLab runners installed and
# registered on machines that match their operating system names,
# versions and architectures.  This is in contrast to the other CI
# jobs that are intended to run on GitLab's "shared" runners.

# Different than the default approach on "shared" runners, based on
# containers, the custom runners have no such *requirement*, as those
# jobs should be capable of running on operating systems with no
# compatible container implementation, or no support from
# gitlab-runner.  To avoid problems that gitlab-runner can cause while
# reusing the GIT repository, let's enable the clone strategy, which
# guarantees a fresh repository on each job run.
variables:
  GIT_STRATEGY: clone

# All ubuntu-18.04 jobs should run successfully in an environment
# setup by the scripts/ci/setup/build-environment.yml task
# "Install basic packages to build QEMU on Ubuntu 18.04/20.04"
ubuntu-18.04-s390x-all-linux-static:
 allow_failure: true
 needs: []
 stage: build
 tags:
 - ubuntu_18.04
 - s390x
 rules:
 - if: '$CI_COMMIT_BRANCH =~ /^staging/'
 script:
 # --disable-libssh is needed because of https://bugs.launchpad.net/qemu/+bug/1838763
 # --disable-glusterfs is needed because there's no static version of those libs in distro supplied packages
 - mkdir build
 - cd build
 - ../configure --enable-debug --static --disable-system --disable-glusterfs --disable-libssh
 - make --output-sync -j`nproc`
 - make --output-sync -j`nproc` check V=1
 - make --output-sync -j`nproc` check-tcg V=1

ubuntu-18.04-s390x-all:
 allow_failure: true
 needs: []
 stage: build
 tags:
 - ubuntu_18.04
 - s390x
 rules:
 - if: '$CI_COMMIT_BRANCH =~ /^staging/'
 script:
 - mkdir build
 - cd build
 - ../configure --disable-libssh
 - make --output-sync -j`nproc`
 - make --output-sync -j`nproc` check V=1

ubuntu-18.04-s390x-alldbg:
 allow_failure: true
 needs: []
 stage: build
 tags:
 - ubuntu_18.04
 - s390x
 rules:
 - if: '$CI_COMMIT_BRANCH =~ /^staging/'
 script:
 - mkdir build
 - cd build
 - ../configure --enable-debug --disable-libssh
 - make clean
 - make --output-sync -j`nproc`
 - make --output-sync -j`nproc` check V=1

ubuntu-18.04-s390x-clang:
 allow_failure: true
 needs: []
 stage: build
 tags:
 - ubuntu_18.04
 - s390x
 rules:
 - if: '$CI_COMMIT_BRANCH =~ /^staging/'
   when: manual
 script:
 - mkdir build
 - cd build
 - ../configure --disable-libssh --cc=clang --cxx=clang++ --enable-sanitizers
 - make --output-sync -j`nproc`
 - make --output-sync -j`nproc` check V=1

ubuntu-18.04-s390x-tci:
 allow_failure: true
 needs: []
 stage: build
 tags:
 - ubuntu_18.04
 - s390x
 rules:
 - if: '$CI_COMMIT_BRANCH =~ /^staging/'
 script:
 - mkdir build
 - cd build
 - ../configure --disable-libssh --enable-tcg-interpreter
 - make --output-sync -j`nproc`

ubuntu-18.04-s390x-notcg:
 allow_failure: true
 needs: []
 stage: build
 tags:
 - ubuntu_18.04
 - s390x
 rules:
 - if: '$CI_COMMIT_BRANCH =~ /^staging/'
   when: manual
 script:
 - mkdir build
 - cd build
 - ../configure --disable-libssh --disable-tcg
 - make --output-sync -j`nproc`
 - make --output-sync -j`nproc` check V=1

# All ubuntu-20.04 jobs should run successfully in an environment
# setup by the scripts/ci/setup/qemu/build-environment.yml task
# "Install basic packages to build QEMU on Ubuntu 18.04/20.04"
ubuntu-20.04-aarch64-all-linux-static:
 allow_failure: true
 needs: []
 stage: build
 tags:
 - ubuntu_20.04
 - aarch64
 rules:
 - if: '$CI_COMMIT_BRANCH =~ /^staging/'
 script:
 # --disable-libssh is needed because of https://bugs.launchpad.net/qemu/+bug/1838763
 # --disable-glusterfs is needed because there's no static version of those libs in distro supplied packages
 - mkdir build
 - cd build
 - ../configure --enable-debug --static --disable-system --disable-glusterfs --disable-libssh
 - make --output-sync -j`nproc`
 - make --output-sync -j`nproc` check V=1
 - make --output-sync -j`nproc` check-tcg V=1

ubuntu-20.04-aarch64-all:
 allow_failure: true
 needs: []
 stage: build
 tags:
 - ubuntu_20.04
 - aarch64
 rules:
 - if: '$CI_COMMIT_BRANCH =~ /^staging/'
 script:
 - mkdir build
 - cd build
 - ../configure --disable-libssh
 - make --output-sync -j`nproc`
 - make --output-sync -j`nproc` check V=1

ubuntu-20.04-aarch64-alldbg:
 allow_failure: true
 needs: []
 stage: build
 tags:
 - ubuntu_20.04
 - aarch64
 rules:
 - if: '$CI_COMMIT_BRANCH =~ /^staging/'
 script:
 - mkdir build
 - cd build
 - ../configure --enable-debug --disable-libssh
 - make clean
 - make --output-sync -j`nproc`
 - make --output-sync -j`nproc` check V=1

ubuntu-20.04-aarch64-clang:
 allow_failure: true
 needs: []
 stage: build
 tags:
 - ubuntu_20.04
 - aarch64
 rules:
 - if: '$CI_COMMIT_BRANCH =~ /^staging/'
   when: manual
 script:
 - mkdir build
 - cd build
 - ../configure --disable-libssh --cc=clang-10 --cxx=clang++-10 --enable-sanitizers
 - make --output-sync -j`nproc`
 - make --output-sync -j`nproc` check V=1

ubuntu-20.04-aarch64-tci:
 allow_failure: true
 needs: []
 stage: build
 tags:
 - ubuntu_20.04
 - aarch64
 rules:
 - if: '$CI_COMMIT_BRANCH =~ /^staging/'
 script:
 - mkdir build
 - cd build
 - ../configure --disable-libssh --enable-tcg-interpreter
 - make --output-sync -j`nproc`

ubuntu-20.04-aarch64-notcg:
 allow_failure: true
 needs: []
 stage: build
 tags:
 - ubuntu_20.04
 - aarch64
 rules:
 - if: '$CI_COMMIT_BRANCH =~ /^staging/'
   when: manual
 script:
 - mkdir build
 - cd build
 - ../configure --disable-libssh --disable-tcg
 - make --output-sync -j`nproc`
 - make --output-sync -j`nproc` check V=1
