# This file specifies the configuration needed to test WebRender using the
# Taskcluster infrastructure. Most of this should be relatively
# self-explanatory; this file was originally generated by using the
# Taskcluster-GitHub integration quickstart tool which no longer exists.
#
# See https://community-tc.services.mozilla.com/docs
version: 1
policy:
  pullRequests: public

# This file triggers a set of tasks; the ones targeting Linux are run in a docker
# container using docker-worker (which is a worker type provided by TaskCluster).
# The OS X ones are run in a custom worker type, for which we have worker
# instances configured and running.
tasks:
  $if: 'tasks_for in ["github-push", "github-pull-request"]'
  then:
    $let:
      should_run:
        $if: 'tasks_for == "github-push"'
        # for pushes, run on any branch but master
        then: {$eval: 'event.ref != "refs/heads/master"'}
        # for PRs, run for opened and synchronized events
        else: {$eval: 'event.action in ["opened", "synchronize"]'}
      repo_url:
        $if: 'tasks_for == "github-push"'
        then: ${event.repository.clone_url}
        else: ${event.pull_request.head.repo.clone_url}
      sha:
        $if: 'tasks_for == "github-push"'
        then: ${event.after}
        else: ${event.pull_request.head.sha}
      login: ${event.sender.login}
      branch:
        $if: 'tasks_for == "github-push"'
        then:
          $if: 'event.ref[:11] == "refs/heads/"'
          then: ${event.ref[11:]}
          else: ${event.ref}
        else: ${event.pull_request.head.ref}
    in:
      $if: should_run
      then:
        # For the docker-worker tasks, the Docker image used
        # (staktrace/webrender-test:debian-v10) was created using the Dockerfile in
        # ci-scripts/docker-image.
        #
        # The docker image may need to be updated over time if the set of required
        # packages increases. Note in particular that rust/cargo are not part of the
        # docker image, and are re-installed using rustup on each CI run. This ensures
        # the latest stable rust compiler is always used.
        # CI runs will be triggered on opening PRs, updating PRs, and pushes to the
        # repository.
        - metadata:
            name: Linux release tests
            description: Runs release-mode WebRender CI stuff on a Linux TC worker
            owner: noreply@mozilla.com
            source: ${repo_url}
          provisionerId: proj-webrender
          workerType: ci-linux
          deadline: {$fromNow: '1 day'}
          payload:
            maxRunTime: 7200
            image: 'staktrace/webrender-test:debian-v10'
            env:
              RUST_BACKTRACE: 'full'
              RUSTFLAGS: '--deny warnings'
            command:
              - /bin/bash
              - '--login'
              - '-c'
              - >-
                curl https://sh.rustup.rs -sSf | sh -s -- -y &&
                source $HOME/.cargo/env &&
                git clone ${repo_url} webrender && cd webrender &&
                git checkout ${sha} &&
                servo-tidy &&
                ci-scripts/install-meson.sh &&
                export PATH=$PATH:$PWD/meson &&
                ci-scripts/linux-release-tests.sh
          routes:
            - "index.project.webrender.ci.${login}.${branch}.linux-release"
        - metadata:
            name: Linux debug tests
            description: Runs debug-mode WebRender CI stuff on a Linux TC worker
            owner: noreply@mozilla.com
            source: ${repo_url}
          provisionerId: proj-webrender
          workerType: ci-linux
          deadline: {$fromNow: '1 day'}
          payload:
            maxRunTime: 7200
            image: 'staktrace/webrender-test:debian-v10'
            env:
              RUST_BACKTRACE: 'full'
              RUSTFLAGS: '--deny warnings'
            command:
              - /bin/bash
              - '--login'
              - '-c'
              - >-
                curl https://sh.rustup.rs -sSf | sh -s -- -y &&
                source $HOME/.cargo/env &&
                git clone ${repo_url} webrender && cd webrender &&
                git checkout ${sha} &&
                servo-tidy &&
                ci-scripts/install-meson.sh &&
                export PATH=$PATH:$PWD/meson &&
                ci-scripts/linux-debug-tests.sh
          routes:
            - "index.project.webrender.ci.${login}.${branch}.linux-debug"
        # For the OS X jobs we use a pool of machines that we are managing, because
        # Mozilla releng doesn't have any spare OS X machines for us at this time.
        # Talk to :kats or :jrmuizel if you need more details about this. The machines
        # are hooked up to taskcluster using taskcluster-worker; they use a workerpool
        # of proj-webrender/ci-macos. They are set up with all the dependencies needed
        # to build and test webrender, including Rust (currently 1.41.1), servo-tidy,
        # mako, zlib, etc. Note that unlike the docker-worker used for Linux, these
        # machines WILL persist state from one run to the next, so any cleanup needs
        # to be handled explicitly.

        # macOS tasks currently disabled, see bug 1639217.
        # - metadata:
        #     name: OS X release tests
        #     description: Runs release-mode WebRender CI stuff on a OS X TC worker
        #     owner: noreply@mozilla.com
        #     source: ${repo_url}
        #   provisionerId: 'proj-webrender'
        #   workerType: 'ci-macos'
        #   deadline: {$fromNow: '1 day'}
        #   payload:
        #     maxRunTime: 3600
        #     command:
        #       - - /bin/bash
        #         - '--login'
        #         - '-vec'
        #         - |
        #           git clone ${repo_url} webrender
        #           cd webrender
        #           git checkout ${sha}
        #           source $HOME/servotidy-venv/bin/activate
        #           servo-tidy
        #           export RUST_BACKTRACE=full
        #           export RUSTFLAGS='--deny warnings'
        #           export PKG_CONFIG_PATH="/usr/local/opt/zlib/lib/pkgconfig:$PKG_CONFIG_PATH"
        #           echo 'exec make -j1 "$@"' > $HOME/make # See #2638
        #           chmod +x $HOME/make
        #           export MAKE="$HOME/make"
        #           ci-scripts/macos-release-tests.sh
        #   routes:
        #     - "index.project.webrender.ci.${login}.${branch}.osx-release"
        # - metadata:
        #     name: OS X debug tests
        #     description: Runs debug-mode WebRender CI stuff on a OS X TC worker
        #     owner: noreply@mozilla.com
        #     source: ${repo_url}
        #   provisionerId: 'proj-webrender'
        #   workerType: 'ci-macos'
        #   deadline: {$fromNow: '1 day'}
        #   payload:
        #     maxRunTime: 3600
        #     command:
        #       - - /bin/bash
        #         - '--login'
        #         - '-vec'
        #         - |
        #           git clone ${repo_url} webrender
        #           cd webrender
        #           git checkout ${sha}
        #           source $HOME/servotidy-venv/bin/activate
        #           servo-tidy
        #           export RUST_BACKTRACE=full
        #           export RUSTFLAGS='--deny warnings'
        #           export PKG_CONFIG_PATH="/usr/local/opt/zlib/lib/pkgconfig:$PKG_CONFIG_PATH"
        #           echo 'exec make -j1 "$@"' > $HOME/make # See #2638
        #           chmod +x $HOME/make
        #           export MAKE="$HOME/make"
        #           ci-scripts/macos-debug-tests.sh
        #   routes:
        #     - "index.project.webrender.ci.${login}.${branch}.osx-debug"
