mirror of
https://github.com/servo/servo.git
synced 2025-06-04 07:35:36 +00:00
This allows us to use `uv` for: 1. Installing a pinned Python version 2. Installing the dependency packages using `uv`'s pip compatible interface. 4. Bootstrapping `mach` without a Python installion on the host, using `uv run` This change also introduces a new 'composite' GitHub action to setup python in the different CI workflows. There is no support for externally managed python installations and virtual environments. These could be added in the future. Fixes #34095, #34547 Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
168 lines
5.5 KiB
YAML
168 lines
5.5 KiB
YAML
name: MacOS
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
profile:
|
|
required: false
|
|
default: "release"
|
|
type: string
|
|
wpt-args:
|
|
default: ""
|
|
required: false
|
|
type: string
|
|
wpt-layout:
|
|
required: false
|
|
type: string
|
|
unit-tests:
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
upload:
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
github-release-id:
|
|
required: false
|
|
type: string
|
|
workflow_dispatch:
|
|
inputs:
|
|
profile:
|
|
required: false
|
|
default: "release"
|
|
type: choice
|
|
options: ["release", "debug", "production"]
|
|
wpt-args:
|
|
default: ""
|
|
required: false
|
|
type: string
|
|
wpt-layout:
|
|
required: false
|
|
type: choice
|
|
options: ["none", "2013", "2020", "all"]
|
|
unit-tests:
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
upload:
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
|
|
env:
|
|
RUST_BACKTRACE: 1
|
|
SHELL: /bin/bash
|
|
# Increment this to purge the cache (https://github.com/mozilla/sccache/blob/main/docs/GHA.md)
|
|
SCCACHE_GHA_VERSION: 2
|
|
SCCACHE_GHA_ENABLED: "true"
|
|
RUSTC_WRAPPER: "sccache"
|
|
CCACHE: "sccache"
|
|
CARGO_INCREMENTAL: 0
|
|
|
|
jobs:
|
|
build:
|
|
name: MacOS Build
|
|
runs-on: macos-13
|
|
steps:
|
|
# XProtect can cause random failures if it decides that the DMG we create
|
|
# during the packaging phase is malware.
|
|
# TODO(mrobinson): Is there a way we can do things in a less suspicious way so
|
|
# we don't have to kill this service?
|
|
- name: Kill XProtectBehaviorService
|
|
run: |
|
|
echo Killing XProtect.; sudo pkill -9 XProtect >/dev/null || true;
|
|
- uses: actions/checkout@v4
|
|
if: github.event_name != 'pull_request_target'
|
|
# This is necessary to checkout the pull request if this run was triggered via a
|
|
# `pull_request_target` event.
|
|
- uses: actions/checkout@v4
|
|
if: github.event_name == 'pull_request_target'
|
|
with:
|
|
ref: ${{ github.event.pull_request.head.sha }}
|
|
- name: Setup Python
|
|
uses: ./.github/actions/setup-python
|
|
- name: Run sccache-cache
|
|
uses: mozilla-actions/sccache-action@v0.0.6
|
|
- name: Install crown
|
|
run: cargo install --path support/crown
|
|
- name: Bootstrap
|
|
run: |
|
|
python3 ./mach bootstrap --skip-lints
|
|
brew install gnu-tar
|
|
- name: Build (${{ inputs.profile }})
|
|
run: |
|
|
python3 ./mach build --use-crown --locked --${{ inputs.profile }}
|
|
cp -r target/cargo-timings target/cargo-timings-macos
|
|
- name: Smoketest
|
|
uses: nick-fields/retry@v3
|
|
with: # See https://github.com/servo/servo/issues/30757
|
|
timeout_minutes: 5
|
|
max_attempts: 2
|
|
command: python3 ./mach smoketest --${{ inputs.profile }}
|
|
- name: Script tests
|
|
run: ./mach test-scripts
|
|
- name: Unit tests
|
|
if: ${{ inputs.unit-tests }}
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 40 # https://github.com/servo/servo/issues/30275
|
|
max_attempts: 3 # https://github.com/servo/servo/issues/30683
|
|
command: python3 ./mach test-unit --${{ inputs.profile }}
|
|
- name: Build mach package
|
|
run: python3 ./mach package --${{ inputs.profile }}
|
|
- name: Run DMG smoketest
|
|
uses: nick-fields/retry@v3
|
|
with: # See https://github.com/servo/servo/issues/30757
|
|
timeout_minutes: 5
|
|
max_attempts: 2
|
|
command: ./etc/ci/macos_package_smoketest.sh target/${{ inputs.profile }}/servo-tech-demo.dmg
|
|
- name: Archive build timing
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: cargo-timings-macos
|
|
# Using a wildcard here ensures that the archive includes the path.
|
|
path: target/cargo-timings-*
|
|
- name: Upload artifact for mach package
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: mac
|
|
path: target/${{ inputs.profile }}/servo-tech-demo.dmg
|
|
- name: Upload nightly
|
|
if: ${{ inputs.upload }}
|
|
run: |
|
|
python3 ./mach upload-nightly mac --secret-from-environment \
|
|
--github-release-id ${{ inputs.github-release-id }}
|
|
env:
|
|
S3_UPLOAD_CREDENTIALS: ${{ secrets.S3_UPLOAD_CREDENTIALS }}
|
|
GITHUB_HOMEBREW_TOKEN: ${{ secrets.HOMEBREW_TOKEN }}
|
|
NIGHTLY_REPO_TOKEN: ${{ secrets.NIGHTLY_REPO_TOKEN }}
|
|
NIGHTLY_REPO: ${{ github.repository_owner }}/servo-nightly-builds
|
|
- name: Build package for target
|
|
run: gtar -czf target.tar.gz target/${{ inputs.profile }}/servo target/${{ inputs.profile }}/lib/*.dylib resources
|
|
- name: Upload package for target
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: ${{ inputs.profile }}-binary-macos
|
|
path: target.tar.gz
|
|
|
|
wpt-2020:
|
|
if: ${{ inputs.wpt-layout == '2020' || inputs.wpt-layout == 'all' }}
|
|
name: MacOS WPT
|
|
needs: ["build"]
|
|
uses: ./.github/workflows/mac-wpt.yml
|
|
with:
|
|
profile: ${{ inputs.profile }}
|
|
wpt-layout: "layout-2020"
|
|
wpt-args: ${{ inputs.wpt-args }}
|
|
secrets: inherit
|
|
|
|
wpt-2013:
|
|
if: ${{ inputs.wpt-layout == '2013' || inputs.wpt-layout == 'all' }}
|
|
name: MacOS WPT (Legacy)
|
|
needs: ["build"]
|
|
uses: ./.github/workflows/mac-wpt.yml
|
|
with:
|
|
profile: ${{ inputs.profile }}
|
|
wpt-layout: "layout-2013"
|
|
wpt-args: ${{ inputs.wpt-args }}
|
|
secrets: inherit
|