version: 1
policy:
  pullRequests: public
tasks:
  $flattenDeep:
    - $if: tasks_for == "github-push"
      then:
        $map:
          $flatten:
            $match: {
              event.ref == "refs/heads/master": [{name: firefox, channel: nightly}, {name: chrome, channel: dev}],
              event.ref == "refs/heads/epochs/daily": [{name: firefox, channel: stable}, {name: chrome, channel: stable}],
              event.ref == "refs/heads/epochs/weekly": [{name: firefox, channel: beta}, {name: chrome, channel: beta}]
              }
        each(browser):
          $map:
            - [testharness, 1, 15]
            - [testharness, 2, 15]
            - [testharness, 3, 15]
            - [testharness, 4, 15]
            - [testharness, 5, 15]
            - [testharness, 6, 15]
            - [testharness, 7, 15]
            - [testharness, 8, 15]
            - [testharness, 9, 15]
            - [testharness, 10, 15]
            - [testharness, 11, 15]
            - [testharness, 12, 15]
            - [testharness, 13, 15]
            - [testharness, 14, 15]
            - [testharness, 15, 15]
            - [reftest, 1, 10]
            - [reftest, 2, 10]
            - [reftest, 3, 10]
            - [reftest, 4, 10]
            - [reftest, 5, 10]
            - [reftest, 6, 10]
            - [reftest, 7, 10]
            - [reftest, 8, 10]
            - [reftest, 9, 10]
            - [reftest, 10, 10]
            - [wdspec, 1, 1]
          each(chunk):
            taskId: {$eval: 'as_slugid(browser.name + browser.channel + chunk[0] + str(chunk[1]))'}
            taskGroupId: {$eval: 'as_slugid("task group")'}
            created: {$fromNow: ''}
            deadline: {$fromNow: '24 hours'}
            provisionerId: aws-provisioner-v1
            workerType:
              $if: event.repository.full_name == 'web-platform-tests/wpt'
              then:
                wpt-docker-worker
              else:
                github-worker
            metadata:
              name: wpt-${browser.name}-${browser.channel}-${chunk[0]}-${chunk[1]}
              description: >-
                A subset of WPT's "${chunk[0]}" tests (chunk number ${chunk[1]}
                of ${chunk[2]}), run in the ${browser.channel} release of
                ${browser.name}.
              owner: ${event.pusher.email}
              source: ${event.repository.url}
            payload:
              image: harjgam/web-platform-tests:0.25
              maxRunTime: 7200
              artifacts:
                public/results:
                  path: /home/test/artifacts
                  type: directory
              command:
                - /bin/bash
                - --login
                - -c
                - set -ex;
                  ~/start.sh
                    ${event.repository.url}
                    ${event.ref}
                    ${event.after}
                    ${browser.name}
                    ${browser.channel};
                  cd ~/web-platform-tests;
                  ./tools/ci/taskcluster-run.py
                    ${browser.name}
                    --
                    --channel=${browser.channel}
                    --log-wptreport=../artifacts/wpt_report.json
                    --no-fail-on-unexpected
                    --test-type=${chunk[0]}
                    --this-chunk=${chunk[1]}
                    --total-chunks=${chunk[2]};
    - $if: tasks_for == "github-pull-request"
      then:
        # Taskcluster responds to a number of events issued by the GitHub API
        # which should not trigger re-validation.
        $if: event.action in ['opened', 'reopened', 'synchronize']
        then:
          $map: [{name: firefox, channel: nightly}, {name: chrome, channel: dev}]
          each(browser):
            $map:
              - name: wpt-${browser.name}-${browser.channel}-stability
                description: >-
                  Verify that all tests affected by a pull request are stable
                  when executed in ${browser.name}.
                extra_args: '--verify'
              - name: wpt-${browser.name}-${browser.channel}-results
                description: >-
                  Collect results for all tests affected by a pull request in
                  ${browser.name}.
                extra_args: '--no-fail-on-unexpected --log-wptreport=../artifacts/wpt_report.json'
            each(operation):
              taskId: {$eval: 'as_slugid(operation.name)'}
              taskGroupId: {$eval: 'as_slugid("task group")'}
              created: {$fromNow: ''}
              deadline: {$fromNow: '24 hours'}
              provisionerId: aws-provisioner-v1
              workerType:
                $if: event.repository.full_name == 'web-platform-tests/wpt'
                then:
                  wpt-docker-worker
                else:
                  github-worker
              metadata:
                name: ${operation.name}
                description: ${operation.description}
                owner: ${event.pull_request.user.login}@users.noreply.github.com
                source: ${event.repository.url}
              payload:
                image: hexcles/web-platform-tests:0.23
                maxRunTime: 7200
                artifacts:
                  public/results:
                    path: /home/test/artifacts
                    type: directory
                # Fetch the GitHub-provided merge commit (rather than the pull
                # request branch) so that the tasks simulate the behavior of the
                # submitted patch after it is merged. Using the merge commit also
                # simplifies detection of modified files because the first parent
                # of the merge commit can consistently be used to summarize the
                # changes.
                command:
                  - /bin/bash
                  - --login
                  - -c
                  - set -ex;
                    ~/start.sh
                      ${event.repository.clone_url}
                      refs/pull/${event.number}/merge
                      FETCH_HEAD
                      ${browser.name}
                      ${browser.channel};
                    cd ~/web-platform-tests;
                    ./tools/ci/taskcluster-run.py
                      --commit-range HEAD^
                      ${browser.name}
                      --
                      --channel=${browser.channel}
                      ${operation.extra_args};
