mirror of
https://github.com/servo/servo.git
synced 2025-07-19 05:13:55 +01:00
Auto merge of #27865 - servo:github-actions-dev, r=jdm
Add Github Actions workflow for mac/linux/windows builds
This commit is contained in:
commit
5dd0cba51d
7 changed files with 2020 additions and 15 deletions
1748
.github/workflows/main.yml
vendored
Normal file
1748
.github/workflows/main.yml
vendored
Normal file
File diff suppressed because it is too large
Load diff
|
@ -10,7 +10,10 @@ extern crate size_of_test;
|
||||||
use layout::Fragment;
|
use layout::Fragment;
|
||||||
use layout::SpecificFragmentInfo;
|
use layout::SpecificFragmentInfo;
|
||||||
|
|
||||||
|
#[cfg(debug_assertions)]
|
||||||
size_of_test!(test_size_of_fragment, Fragment, 176);
|
size_of_test!(test_size_of_fragment, Fragment, 176);
|
||||||
|
#[cfg(not(debug_assertions))]
|
||||||
|
size_of_test!(test_size_of_fragment, Fragment, 152);
|
||||||
size_of_test!(
|
size_of_test!(
|
||||||
test_size_of_specific_fragment_info,
|
test_size_of_specific_fragment_info,
|
||||||
SpecificFragmentInfo,
|
SpecificFragmentInfo,
|
||||||
|
|
|
@ -21,7 +21,7 @@ mod build_gecko {
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
pub static ref PYTHON: String = env::var("PYTHON3").ok().unwrap_or_else(|| {
|
pub static ref PYTHON: String = env::var("PYTHON3").ok().unwrap_or_else(|| {
|
||||||
let candidates = if cfg!(windows) {
|
let candidates = if cfg!(windows) {
|
||||||
["python3.exe"]
|
["python.exe"]
|
||||||
} else {
|
} else {
|
||||||
["python3"]
|
["python3"]
|
||||||
};
|
};
|
||||||
|
|
57
etc/ci/generate_workflow.py
Normal file
57
etc/ci/generate_workflow.py
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
# Copyright 2021 The Servo Project Developers. See the COPYRIGHT
|
||||||
|
# file at the top-level directory of this distribution.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||||
|
# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
|
# option. This file may not be copied, modified, or distributed
|
||||||
|
# except according to those terms.
|
||||||
|
|
||||||
|
import os.path
|
||||||
|
import sys
|
||||||
|
|
||||||
|
BASE = os.path.dirname(__file__.replace('\\', '/'))
|
||||||
|
sys.path.insert(0, os.path.join(
|
||||||
|
BASE, "..", "..", "components", "style", "properties", "Mako-1.1.2-py2.py3-none-any.whl"
|
||||||
|
))
|
||||||
|
|
||||||
|
from mako import exceptions # noqa
|
||||||
|
from mako.lookup import TemplateLookup # noqa
|
||||||
|
from mako.template import Template # noqa
|
||||||
|
|
||||||
|
|
||||||
|
def abort(message):
|
||||||
|
print(message, file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
def render(filename, **context):
|
||||||
|
try:
|
||||||
|
lookup = TemplateLookup(directories=[BASE],
|
||||||
|
input_encoding="utf8",
|
||||||
|
strict_undefined=True)
|
||||||
|
template = Template(open(os.path.join(BASE, filename), "rb").read(),
|
||||||
|
filename=filename,
|
||||||
|
input_encoding="utf8",
|
||||||
|
lookup=lookup,
|
||||||
|
strict_undefined=True)
|
||||||
|
# Uncomment to debug generated Python code:
|
||||||
|
# write("/tmp", "mako_%s.py" % os.path.basename(filename), template.code)
|
||||||
|
return template.render(**context)
|
||||||
|
except Exception:
|
||||||
|
# Uncomment to see a traceback in generated Python code:
|
||||||
|
# raise
|
||||||
|
abort(exceptions.text_error_template().render())
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
with open(os.path.join(".github", "workflows", "main.yml"), 'w') as f:
|
||||||
|
f.write(render(
|
||||||
|
'workflow.mako',
|
||||||
|
total_chunks=20,
|
||||||
|
REPOSITORY_NAME="${{ github.event.repository.name }}",
|
||||||
|
))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
194
etc/ci/workflow.mako
Normal file
194
etc/ci/workflow.mako
Normal file
|
@ -0,0 +1,194 @@
|
||||||
|
name: CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
# Triggers the workflow on push or pull request events but only for the master branch
|
||||||
|
push:
|
||||||
|
branches: [ "master", "github-actions-dev", "auto", "try", "try-linux", "try-mac" ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ "master", "github-actions-dev" ]
|
||||||
|
|
||||||
|
# Allows you to run this workflow manually from the Actions tab
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
env:
|
||||||
|
RUST_BACKTRACE: 1
|
||||||
|
SHELL: /bin/bash
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-win:
|
||||||
|
name: Build (Windows)
|
||||||
|
runs-on: windows-2019
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 2
|
||||||
|
- name: Copy to C drive
|
||||||
|
run: cp D:\a C:\ -Recurse
|
||||||
|
- name: Bootstrap
|
||||||
|
working-directory: "C:\\a\\${ REPOSITORY_NAME }\\${ REPOSITORY_NAME }"
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip virtualenv
|
||||||
|
python mach fetch
|
||||||
|
- name: Release build
|
||||||
|
working-directory: "C:\\a\\${ REPOSITORY_NAME }\\${ REPOSITORY_NAME }"
|
||||||
|
run: python mach build --release --media-stack=dummy
|
||||||
|
- name: Unit tests
|
||||||
|
working-directory: "C:\\a\\${ REPOSITORY_NAME }\\${ REPOSITORY_NAME }"
|
||||||
|
run: python mach test-unit --release
|
||||||
|
- name: Smoketest
|
||||||
|
working-directory: "C:\\a\\${ REPOSITORY_NAME }\\${ REPOSITORY_NAME }"
|
||||||
|
run: python mach smoketest --angle
|
||||||
|
|
||||||
|
build-mac:
|
||||||
|
name: Build (macOS)
|
||||||
|
runs-on: macos-10.15
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 2
|
||||||
|
- 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: Package binary
|
||||||
|
run: gtar -czf target.tar.gz target/release/servo target/release/*.dylib resources
|
||||||
|
- name: Archive binary
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: release-binary-macos
|
||||||
|
path: target.tar.gz
|
||||||
|
|
||||||
|
% for chunk in range(1, total_chunks + 1):
|
||||||
|
# mac-wpt${chunk}:
|
||||||
|
# #needs: build-mac
|
||||||
|
# runs-on: macos-10.15
|
||||||
|
# steps:
|
||||||
|
# - uses: actions/checkout@v2
|
||||||
|
# with:
|
||||||
|
# fetch-depth: 2
|
||||||
|
|
||||||
|
# #- name: Download release binary
|
||||||
|
# # uses: actions/download-artifact@v2
|
||||||
|
# # with:
|
||||||
|
# # name: release-binary-macos
|
||||||
|
|
||||||
|
# - name: Fake build
|
||||||
|
# run: |
|
||||||
|
# wget https://joshmatthews.net/release-binary-macos.zip
|
||||||
|
# unzip release-binary-macos.zip
|
||||||
|
|
||||||
|
# - name: Prep test environment
|
||||||
|
# run: |
|
||||||
|
# brew install gnu-tar
|
||||||
|
# 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=3 --timeout-multiplier=8 --total-chunks=${total_chunks} --this-chunk=${chunk} --log-raw=test-wpt.log --log-servojson=wpt-jsonsummary.log --always-succeed | cat
|
||||||
|
# python3 ./mach filter-intermittents wpt-jsonsummary.log --log-intermittents=intermittents.log --log-filteredsummary=filtered-wpt-summary.log --tracker-api=default --reporter-api=default
|
||||||
|
|
||||||
|
# - name: Archive logs
|
||||||
|
# uses: actions/upload-artifact@v2
|
||||||
|
# with:
|
||||||
|
# name: wpt${chunk}-logs-macos
|
||||||
|
# path: |
|
||||||
|
# test-wpt.log
|
||||||
|
# wpt-jsonsummary.log
|
||||||
|
# filtered-wpt-summary.log
|
||||||
|
# intermittents.log
|
||||||
|
% endfor
|
||||||
|
|
||||||
|
build-linux:
|
||||||
|
name: Build (Linux)
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 2
|
||||||
|
- name: Bootstrap
|
||||||
|
run: |
|
||||||
|
python3 -m pip install --upgrade pip virtualenv
|
||||||
|
sudo apt update
|
||||||
|
python3 ./mach bootstrap
|
||||||
|
- name: Release build
|
||||||
|
run: python3 ./mach build --release
|
||||||
|
- name: Package binary
|
||||||
|
run: tar -czf target.tar.gz target/release/servo resources
|
||||||
|
- name: Archive binary
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: release-binary
|
||||||
|
path: target.tar.gz
|
||||||
|
|
||||||
|
% for chunk in range(1, total_chunks + 1):
|
||||||
|
# linux-wpt${chunk}:
|
||||||
|
# #needs: build-linux
|
||||||
|
# runs-on: ubuntu-20.04
|
||||||
|
# steps:
|
||||||
|
# - uses: actions/checkout@v2
|
||||||
|
# with:
|
||||||
|
# fetch-depth: 2
|
||||||
|
|
||||||
|
# #- name: Download release binary
|
||||||
|
# # uses: actions/download-artifact@v2
|
||||||
|
# # with:
|
||||||
|
# # name: release-binary
|
||||||
|
|
||||||
|
# - name: Fake build
|
||||||
|
# run: |
|
||||||
|
# wget https://joshmatthews.net/release-binary.zip
|
||||||
|
# unzip release-binary.zip
|
||||||
|
|
||||||
|
# - name: Prep test environment
|
||||||
|
# run: |
|
||||||
|
# tar -xzf target.tar.gz
|
||||||
|
# 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=2 --total-chunks=${total_chunks} --this-chunk=${chunk} --log-raw=test-wpt.log --log-servojson=wpt-jsonsummary.log --always-succeed | cat
|
||||||
|
# python3 ./mach filter-intermittents wpt-jsonsummary.log --log-intermittents=intermittents.log --log-filteredsummary=filtered-wpt-summary.log --tracker-api=default --reporter-api=default
|
||||||
|
|
||||||
|
# - name: Archive logs
|
||||||
|
# uses: actions/upload-artifact@v2
|
||||||
|
# with:
|
||||||
|
# name: wpt${chunk}-logs-linux
|
||||||
|
# path: |
|
||||||
|
# test-wpt.log
|
||||||
|
# wpt-jsonsummary.log
|
||||||
|
# filtered-wpt-summary.log
|
||||||
|
# intermittents.log
|
||||||
|
% endfor
|
||||||
|
|
||||||
|
build_result:
|
||||||
|
name: homu build finished
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: ["build-win", "build-mac", "build-linux"]
|
||||||
|
steps:
|
||||||
|
- name: Mark the job as successful
|
||||||
|
run: exit 0
|
||||||
|
if: success()
|
||||||
|
- name: Mark the job as unsuccessful
|
||||||
|
run: exit 1
|
||||||
|
if: "!success()"
|
|
@ -193,7 +193,9 @@ class MachCommands(CommandBase):
|
||||||
if not uwp:
|
if not uwp:
|
||||||
uwp = target and 'uwp' in target
|
uwp = target and 'uwp' in target
|
||||||
|
|
||||||
features += self.pick_media_stack(media_stack, target)
|
media_stack = self.pick_media_stack(media_stack, target)
|
||||||
|
features += media_stack
|
||||||
|
has_media_stack = media_stack[0] == "media-gstreamer"
|
||||||
|
|
||||||
target_path = base_path = self.get_target_dir()
|
target_path = base_path = self.get_target_dir()
|
||||||
if android:
|
if android:
|
||||||
|
@ -650,15 +652,7 @@ class MachCommands(CommandBase):
|
||||||
for key in env:
|
for key in env:
|
||||||
print((key, env[key]))
|
print((key, env[key]))
|
||||||
|
|
||||||
if sys.platform == "win32":
|
if sys.platform != "win32":
|
||||||
env.setdefault("CC", "clang-cl.exe")
|
|
||||||
env.setdefault("CXX", "clang-cl.exe")
|
|
||||||
if uwp:
|
|
||||||
env.setdefault("TARGET_CFLAGS", "")
|
|
||||||
env.setdefault("TARGET_CXXFLAGS", "")
|
|
||||||
env["TARGET_CFLAGS"] += " -DWINAPI_FAMILY=WINAPI_FAMILY_APP"
|
|
||||||
env["TARGET_CXXFLAGS"] += " -DWINAPI_FAMILY=WINAPI_FAMILY_APP"
|
|
||||||
else:
|
|
||||||
env.setdefault("CC", "clang")
|
env.setdefault("CC", "clang")
|
||||||
env.setdefault("CXX", "clang++")
|
env.setdefault("CXX", "clang++")
|
||||||
|
|
||||||
|
@ -725,6 +719,7 @@ class MachCommands(CommandBase):
|
||||||
status = 1
|
status = 1
|
||||||
|
|
||||||
# copy needed gstreamer DLLs in to servo.exe dir
|
# copy needed gstreamer DLLs in to servo.exe dir
|
||||||
|
if has_media_stack:
|
||||||
print("Packaging gstreamer DLLs")
|
print("Packaging gstreamer DLLs")
|
||||||
if not package_gstreamer_dlls(env, servo_exe_dir, target_triple, uwp):
|
if not package_gstreamer_dlls(env, servo_exe_dir, target_triple, uwp):
|
||||||
status = 1
|
status = 1
|
||||||
|
@ -740,7 +735,7 @@ class MachCommands(CommandBase):
|
||||||
)
|
)
|
||||||
assert os.path.exists(servo_exe_dir)
|
assert os.path.exists(servo_exe_dir)
|
||||||
|
|
||||||
if not package_gstreamer_dylibs(servo_exe_dir):
|
if has_media_stack and not package_gstreamer_dylibs(servo_exe_dir):
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
# On the Mac, set a lovely icon. This makes it easier to pick out the Servo binary in tools
|
# On the Mac, set a lovely icon. This makes it easier to pick out the Servo binary in tools
|
||||||
|
|
|
@ -609,6 +609,14 @@ install them, let us know by filing a bug!")
|
||||||
extra_path += [path.join(self.msvc_package_dir("ninja"), "bin")]
|
extra_path += [path.join(self.msvc_package_dir("ninja"), "bin")]
|
||||||
extra_path += [self.msvc_package_dir("nuget")]
|
extra_path += [self.msvc_package_dir("nuget")]
|
||||||
|
|
||||||
|
env.setdefault("CC", "clang-cl.exe")
|
||||||
|
env.setdefault("CXX", "clang-cl.exe")
|
||||||
|
if uwp:
|
||||||
|
env.setdefault("TARGET_CFLAGS", "")
|
||||||
|
env.setdefault("TARGET_CXXFLAGS", "")
|
||||||
|
env["TARGET_CFLAGS"] += " -DWINAPI_FAMILY=WINAPI_FAMILY_APP"
|
||||||
|
env["TARGET_CXXFLAGS"] += " -DWINAPI_FAMILY=WINAPI_FAMILY_APP"
|
||||||
|
|
||||||
arch = (target or host_triple()).split('-')[0]
|
arch = (target or host_triple()).split('-')[0]
|
||||||
vcpkg_arch = {
|
vcpkg_arch = {
|
||||||
"x86_64": "x64-windows",
|
"x86_64": "x64-windows",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue