gecko-dev/testing/web-platform/tests/.taskcluster.yml

342 строки
14 KiB
YAML

version: 1
policy:
pullRequests: public
tasks:
$let:
event_str: {$json: {$eval: event}}
in:
$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.32
maxRunTime: 7200
artifacts:
public/results:
path: /home/test/artifacts
type: directory
env:
TASK_EVENT: "${event_str}"
command:
- /bin/bash
- --login
- -c
- set -ex;
echo "wpt-${browser.name}-${browser.channel}-${chunk[0]}-${chunk[1]}";
~/start.sh
${event.repository.url}
${event.ref};
cd ~/web-platform-tests;
./tools/ci/run_tc.py
--checkout=${event.after}
--oom-killer
--hosts
--browser=${browser.name}
--channel=${browser.channel}
--xvfb
run-all
./tools/ci/taskcluster-run.py
${browser.name}
--
--channel=${browser.channel}
--log-wptreport=../artifacts/wpt_report.json
--log-wptscreenshot=../artifacts/wpt_screenshot.txt
--no-fail-on-unexpected
--test-type=${chunk[0]}
--this-chunk=${chunk[1]}
--total-chunks=${chunk[2]};
- $if: tasks_for == "github-pull-request"
# PR tasks that run the tests in various configurations
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:
# This is the main place to define new stability checks
- name: wpt-${browser.name}-${browser.channel}-stability
checkout: task_head
diff_base: base_head
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
checkout: task_head
diff_base: base_head
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
--log-wptscreenshot=../artifacts/wpt_screenshot.txt
- name: wpt-${browser.name}-${browser.channel}-results-without-changes
checkout: base_head
diff_base: task_head
description: >-
Collect results for all tests affected by a pull request in
${browser.name} but without the changes in the PR.
extra_args: >-
--no-fail-on-unexpected
--log-wptreport=../artifacts/wpt_report.json
--log-wptscreenshot=../artifacts/wpt_screenshot.txt
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: harjgam/web-platform-tests:0.32
maxRunTime: 7200
artifacts:
public/results:
path: /home/test/artifacts
type: directory
env:
TASK_EVENT: "${event_str}"
# 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;
echo "${operation.name}";
~/start.sh
${event.repository.clone_url}
refs/pull/${event.number}/merge;
cd web-platform-tests;
./tools/ci/run_tc.py
--checkout=${operation.checkout}
--oom-killer
--browser=${browser.name}
--channel=${browser.channel}
--xvfb
stability
./tools/ci/taskcluster-run.py
--commit-range ${operation.diff_base}
${browser.name}
--
--channel=${browser.channel}
${operation.extra_args};
- $map:
# This is the main point to define new CI checks other than stability checks
- name: lint
description: >-
Lint for wpt-specific requirements
script: >-
./tools/ci/run_tc.py \
--no-hosts \
lint \
./wpt lint --all
conditions:
push
pull-request
- name: update built tests
description: >-
Ensure test suites that require a build step are updated
script: >-
./tools/ci/run_tc.py \
--no-hosts \
update_built \
tools/ci/ci_built_diff.sh
conditions:
pull-request
- name: tools/ unittests (Python 2)
description: >-
Unit tests for tools running under Python 2.7, excluding wptrunner
script: >-
export TOXENV=py27;
export HYPOTHESIS_PROFILE=ci;
./tools/ci/run_tc.py \
tools_unittest \
tools/ci/ci_tools_unittest.sh
conditions:
push
pull-request
- name: tools/ unittests (Python 3)
description: >-
Unit tests for tools running under Python 3, excluding wptrunner
script: >-
export TOXENV=py36;
export HYPOTHESIS_PROFILE=ci;
sudo apt update -qqy;
sudo apt install -qqy python3-pip;
./tools/ci/run_tc.py \
tools_unittest \
tools/ci/ci_tools_unittest.sh
conditions:
push
pull-request
- name: tools/wpt/ tests
description: >-
Integration tests for wpt commands
script: >-
export TOXENV=py27;
sudo apt update -qqy;
sudo apt install -qqy libnss3-tools;
./tools/ci/run_tc.py \
--oom-killer \
--browser=firefox \
--browser=chrome \
--channel=experimental \
--xvfb \
wpt_integration \
tools/ci/ci_wpt.sh
conditions:
pull-request
- name: resources/ tests
description: >-
Tests for testharness.js and other files in resources/
script: >-
export TOXENV=py27;
./tools/ci/run_tc.py \
--browser=firefox \
--channel=experimental \
--xvfb \
resources_unittest \
tools/ci/ci_resources_unittest.sh
conditions:
pull-request
- name: infrastructure/ tests
description: >-
Smoketests for wptrunner
script: >-
sudo apt update -qqy;
sudo apt install -qqy libnss3-tools libappindicator1 fonts-liberation;
./tools/ci/run_tc.py \
--oom-killer \
--browser=firefox \
--browser=chrome \
--channel=experimental \
--no-hosts \
--xvfb \
wptrunner_infrastructure \
tools/ci/ci_wptrunner_infrastructure.sh
conditions:
pull-request
each(operation):
# Note: jsone doesn't short-circuit evaluation so all parts of the conditional are evaluated
# Accessing properties using the [] notation allows them to evaluate as null in case they're undefined
# TODO: Allow running pushes on branches other than master
- $if: ("push" in operation.conditions && tasks_for == "github-push" && event['ref'] == "refs/heads/master") || ("pull-request" in operation.conditions && tasks_for == "github-pull-request" && event['action'] in ['opened', 'reopened', 'synchronize'])
then:
$let:
checkout_ref:
$if: tasks_for == "github-push"
then:
${event.ref}
else:
refs/pull/${event.number}/merge
in:
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.sender.login}@users.noreply.github.com
source: ${event.repository.url}
payload:
image: harjgam/web-platform-tests:0.32
maxRunTime: 7200
artifacts:
public/results:
path: /home/test/artifacts
type: directory
env:
TASK_EVENT: "${event_str}"
command:
- /bin/bash
- --login
- -c
- set -ex;
echo "${operation.name}";
~/start.sh
${event.repository.clone_url}
${checkout_ref};
cd ~/web-platform-tests;
${operation.script};