mirror of
https://github.com/servo/servo.git
synced 2025-07-19 13:23:46 +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::SpecificFragmentInfo;
|
||||
|
||||
#[cfg(debug_assertions)]
|
||||
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!(
|
||||
test_size_of_specific_fragment_info,
|
||||
SpecificFragmentInfo,
|
||||
|
|
|
@ -21,7 +21,7 @@ mod build_gecko {
|
|||
lazy_static! {
|
||||
pub static ref PYTHON: String = env::var("PYTHON3").ok().unwrap_or_else(|| {
|
||||
let candidates = if cfg!(windows) {
|
||||
["python3.exe"]
|
||||
["python.exe"]
|
||||
} else {
|
||||
["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:
|
||||
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()
|
||||
if android:
|
||||
|
@ -650,15 +652,7 @@ class MachCommands(CommandBase):
|
|||
for key in env:
|
||||
print((key, env[key]))
|
||||
|
||||
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:
|
||||
if sys.platform != "win32":
|
||||
env.setdefault("CC", "clang")
|
||||
env.setdefault("CXX", "clang++")
|
||||
|
||||
|
@ -725,9 +719,10 @@ class MachCommands(CommandBase):
|
|||
status = 1
|
||||
|
||||
# copy needed gstreamer DLLs in to servo.exe dir
|
||||
print("Packaging gstreamer DLLs")
|
||||
if not package_gstreamer_dlls(env, servo_exe_dir, target_triple, uwp):
|
||||
status = 1
|
||||
if has_media_stack:
|
||||
print("Packaging gstreamer DLLs")
|
||||
if not package_gstreamer_dlls(env, servo_exe_dir, target_triple, uwp):
|
||||
status = 1
|
||||
|
||||
# UWP app packaging already bundles all required DLLs for us.
|
||||
print("Packaging MSVC DLLs")
|
||||
|
@ -740,7 +735,7 @@ class MachCommands(CommandBase):
|
|||
)
|
||||
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
|
||||
|
||||
# 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 += [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]
|
||||
vcpkg_arch = {
|
||||
"x86_64": "x64-windows",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue