servo/.github/workflows/main.yml
Martin Robinson 2c719e2e92 intermittent dashboard: Actually send results to the dashboard
This change adds the secret to the environment, which should trigger the
filtering intermittents script to actually upload new results to the
intermittent dashboard instead of simply querying.
2023-02-20 12:52:34 +01:00

283 lines
9.9 KiB
YAML

name: Merge queue and try
on:
# Triggers the workflow on push events but only for the master branch
push:
branches: [ "auto", "try", "try-linux", "try-mac", "try-windows", "try-wpt"]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
env:
RUST_BACKTRACE: 1
SHELL: /bin/bash
jobs:
decision:
name: Decision job
runs-on: ubuntu-20.04
steps:
- name: Previous successful build check
uses: actions/github-script@v6
with:
script: |
if ((await github.rest.actions.listWorkflowRuns({
owner: context.repo.owner,
repo: context.repo.repo,
workflow_id: "main.yml",
head_sha: context.sha,
status: "success",
})).data.workflow_runs.length > 0)
await github.rest.actions.cancelWorkflowRun({
owner: context.repo.owner,
repo: context.repo.repo,
run_id: context.runId,
});
build-win:
name: Build (Windows)
runs-on: windows-2019
needs: ["decision"]
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 2
- name: Copy to C drive
run: cp D:\a C:\ -Recurse
- name: Bootstrap
working-directory: "C:\\a\\${{ github.event.repository.name }}\\${{ github.event.repository.name }}"
run: |
python -m pip install --upgrade pip virtualenv
python mach fetch
- name: Release build
working-directory: "C:\\a\\${{ github.event.repository.name }}\\${{ github.event.repository.name }}"
run: python mach build --release --media-stack=dummy
- name: Unit tests
working-directory: "C:\\a\\${{ github.event.repository.name }}\\${{ github.event.repository.name }}"
run: python mach test-unit --release
- name: Smoketest
working-directory: "C:\\a\\${{ github.event.repository.name }}\\${{ github.event.repository.name }}"
run: python mach smoketest --angle
build-mac:
name: Build (macOS)
runs-on: macos-12
needs: ["decision"]
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 2
# TODO: Remove this step when the compatibility issue between mozjs and
# Homebrew's Python 3.10 formula (servo/rust-mozjs#559) is fixed
- name: Select Python 3.9
run: |
brew install python@3.9
cd $(dirname $(which python3.9))
rm -f python3 pip3
ln -s python3.9 python3
ln -s pip3.9 pip3
- name: Bootstrap
run: |
python3 -m pip install --upgrade pip virtualenv
brew bundle install --verbose --no-upgrade --file=etc/taskcluster/macos/Brewfile
brew bundle install --verbose --no-upgrade --file=etc/taskcluster/macos/Brewfile-build
rm -rf /usr/local/etc/openssl
rm -rf /usr/local/etc/openssl@1.1
brew install openssl@1.1 gnu-tar
- name: Release build
run: |
export OPENSSL_INCLUDE_DIR="$(brew --prefix openssl)/include"
export OPENSSL_LIB_DIR="$(brew --prefix openssl)/lib"
export PKG_CONFIG_PATH="$(brew --prefix libffi)/lib/pkgconfig/"
export PKG_CONFIG_PATH="$(brew --prefix zlib)/lib/pkgconfig/:$PKG_CONFIG_PATH"
python3 ./mach build --release
- name: Smoketest
run: python3 ./mach smoketest
- name: Unit tests
run: python3 ./mach test-unit --release
- name: Test package
run: python3 ./mach package --release
- name: Package smoketest
run: ./etc/ci/macos_package_smoketest.sh target/release/servo-tech-demo.dmg
- name: Package binary
run: gtar -czf target.tar.gz target/release/servo target/release/*.dylib resources
- name: Archive binary
uses: actions/upload-artifact@v3
with:
name: release-binary-macos
path: target.tar.gz
# mac-wpt:
# name: Mac WPT Tests
# runs-on: macos-12
# needs: ["build-mac"]
# env:
# max_chunk_id: 20
# strategy:
# fail-fast: false
# matrix:
# chunk_id: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
# steps:
# - uses: actions/checkout@v3
# with:
# fetch-depth: 2
# - uses: actions/download-artifact@v3
# with:
# name: release-binary-macos
# # TODO: Remove this step when the compatibility issue between mozjs and
# # Homebrew's Python 3.10 formula (servo/rust-mozjs#559) is fixed
# - name: Select Python 3.9
# run: |
# brew install python@3.9
# cd $(dirname $(which python3.9))
# rm -f python3 pip3
# ln -s python3.9 python3
# ln -s pip3.9 pip3
# - name: Prep test environment
# run: |
# gtar -xzf target.tar.gz
# python3 -m pip install --upgrade pip virtualenv
# brew bundle install --verbose --no-upgrade --file=etc/taskcluster/macos/Brewfile
# - name: Smoketest
# run: python3 ./mach smoketest
# - name: Run tests
# run: |
# python3 ./mach test-wpt \
# --release --processes $(sysctl -n hw.logicalcpu) --timeout-multiplier 8 \
# --total-chunks ${{ env.max_chunk_id }} --this-chunk ${{ matrix.chunk_id }} \
# --log-raw test-wpt.${{ matrix.chunk_id }}.log \
# --filter-intermittents=filtered-wpt-summary.${{ matrix.chunk_id }}.log
# - name: Archive logs
# uses: actions/upload-artifact@v3
# if: ${{ failure() }}
# with:
# name: wpt${{ matrix.chunk_id }}-logs-macos
# path: |
# test-wpt.${{ matrix.chunk_id }}.log
# filtered-wpt-summary.${{ matrix.chunk_id }}.log
build-linux:
name: Build (Linux)
runs-on: ubuntu-20.04
needs: ["decision"]
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 2
- name: Bootstrap Python
run: python3 -m pip install --upgrade pip virtualenv
- name: Bootstrap dependencies
run: sudo apt update && python3 ./mach bootstrap
- name: Release build
run: python3 ./mach build --release
- name: Lockfile check
run: ./etc/ci/lockfile_changed.sh
- name: Forbidden panic check
run: ./etc/ci/check_no_panic.sh
- name: Package binary
run: tar -czf target.tar.gz target/release/servo resources
- name: Archive binary
uses: actions/upload-artifact@v3
with:
name: release-binary
path: target.tar.gz
linux-wpt:
name: Linux WPT Tests
runs-on: ubuntu-20.04
needs: ["build-linux"]
env:
max_chunk_id: 20
strategy:
fail-fast: false
matrix:
chunk_id: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 2
- uses: actions/download-artifact@v3
with:
name: release-binary
path: release-binary
- name: unPackage binary
run: tar -xzf release-binary/target.tar.gz
- name: Prep test environment
run: |
python3 -m pip install --upgrade pip virtualenv
sudo apt update
sudo apt install -qy --no-install-recommends libgl1 libssl1.1 libdbus-1-3 libxcb-xfixes0-dev libxcb-shape0-dev libunwind8 libegl1-mesa
wget http://mirrors.kernel.org/ubuntu/pool/main/libf/libffi/libffi6_3.2.1-8_amd64.deb
sudo apt install ./libffi6_3.2.1-8_amd64.deb
python3 ./mach bootstrap-gstreamer
- name: Run tests
run: |
python3 ./mach test-wpt \
--release --processes $(nproc) --timeout-multiplier 2 \
--total-chunks ${{ env.max_chunk_id }} --this-chunk ${{ matrix.chunk_id }} \
--log-raw test-wpt.${{ matrix.chunk_id }}.log \
--log-raw-unexpected unexpected-test-wpt.${{ matrix.chunk_id }}.log \
--filter-intermittents filtered-test-wpt.${{ matrix.chunk_id }}.json
env:
INTERMITTENT_TRACKER_DASHBOARD_SECRET: ${{ secrets.INTERMITTENT_TRACKER_DASHBOARD_SECRET }}
- name: Archive filtered results
uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
name: wpt-filtered-results-linux
path: |
filtered-test-wpt.${{ matrix.chunk_id }}.json
unexpected-test-wpt.${{ matrix.chunk_id }}.log
- name: Archive logs
uses: actions/upload-artifact@v3
if: ${{ failure() }}
with:
name: wpt-logs-linux
path: |
test-wpt.${{ matrix.chunk_id }}.log
filtered-wpt-results.${{ matrix.chunk_id }}.json
report_test_results:
name: Reporting test results
runs-on: ubuntu-latest
if: always()
needs:
- "linux-wpt"
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 2
- uses: actions/download-artifact@v3
with:
name: wpt-filtered-results-linux
path: wpt-filtered-results-linux
- name: Create aggregated unexpected results
run: cat wpt-filtered-results-linux/*.log > unexpected-test-wpt.log
- name: Archive aggregate results
uses: actions/upload-artifact@v3
with:
name: wpt-filtered-results-linux
path: |
unexpected-test-wpt.log
- name: Comment on PR with results
run: etc/ci/report_aggregated_expected_results.py wpt-filtered-results-linux/*.json
env:
GITHUB_CONTEXT: ${{ toJson(github) }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
build_result:
name: homu build finished
runs-on: ubuntu-latest
needs:
- "build-win"
- "build-mac"
- "linux-wpt"
# - "mac-wpt"
steps:
- name: Mark the job as successful
run: exit 0
if: success()
- name: Mark the job as unsuccessful
run: exit 1
if: "!success()"