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>
188 lines
7.4 KiB
YAML
188 lines
7.4 KiB
YAML
name: Windows
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
profile:
|
|
required: false
|
|
default: "release"
|
|
type: string
|
|
unit-tests:
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
upload:
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
github-release-id:
|
|
required: false
|
|
type: string
|
|
force-github-hosted-runner:
|
|
required: false
|
|
type: boolean
|
|
default: false
|
|
workflow_dispatch:
|
|
inputs:
|
|
profile:
|
|
required: false
|
|
default: "release"
|
|
options: ["release", "debug", "production"]
|
|
type: choice
|
|
unit-tests:
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
upload:
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
force-github-hosted-runner:
|
|
required: false
|
|
type: boolean
|
|
default: false
|
|
|
|
env:
|
|
RUST_BACKTRACE: 1
|
|
SHELL: /bin/bash
|
|
CCACHE: "ccache"
|
|
CARGO_TARGET_DIR: C:\\a\\servo\\servo\\target
|
|
# clang_sys will search msys path before Program Files\LLVM
|
|
# so we need to override this behaviour until we update clang-sys
|
|
# https://github.com/KyleMayes/clang-sys/issues/150
|
|
LIBCLANG_PATH: C:\Program Files\LLVM\bin
|
|
RUSTUP_WINDOWS_PATH_ADD_BIN: 1
|
|
|
|
jobs:
|
|
# Runs the underlying job (“workload”) on a self-hosted runner if available,
|
|
# with the help of a `runner-select` job and a `runner-timeout` job.
|
|
runner-select:
|
|
uses: ./.github/workflows/self-hosted-runner-select.yml
|
|
secrets: inherit
|
|
with:
|
|
github-hosted-runner-label: windows-2022
|
|
self-hosted-image-name: servo-windows10
|
|
force-github-hosted-runner: ${{ inputs.force-github-hosted-runner }}
|
|
runner-timeout:
|
|
needs:
|
|
- runner-select
|
|
uses: ./.github/workflows/self-hosted-runner-timeout.yml
|
|
secrets: inherit
|
|
with:
|
|
unique-id: ${{ needs.runner-select.outputs.unique-id }}
|
|
is-self-hosted: ${{ fromJSON(needs.runner-select.outputs.is-self-hosted) }}
|
|
|
|
build:
|
|
needs:
|
|
- runner-select
|
|
name: Windows Build [${{ needs.runner-select.outputs.unique-id }}]
|
|
runs-on: ${{ needs.runner-select.outputs.selected-runner-label }}
|
|
steps:
|
|
- if: ${{ ! fromJSON(needs.runner-select.outputs.is-self-hosted) && github.event_name != 'pull_request_target' }}
|
|
uses: actions/checkout@v4
|
|
- if: ${{ ! fromJSON(needs.runner-select.outputs.is-self-hosted) && github.event_name == 'pull_request_target' }}
|
|
uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.event.pull_request.head.sha }}
|
|
fetch-depth: 1
|
|
|
|
# Faster checkout for self-hosted runner that uses prebaked repo.
|
|
- if: ${{ fromJSON(needs.runner-select.outputs.is-self-hosted) && github.event_name != 'pull_request_target' }}
|
|
run: git fetch --depth=1 origin $env:GITHUB_SHA
|
|
- if: ${{ fromJSON(needs.runner-select.outputs.is-self-hosted) && github.event_name == 'pull_request_target' }}
|
|
run: git fetch --depth=1 origin ${{ github.event.pull_request.head.sha }}
|
|
- if: ${{ fromJSON(needs.runner-select.outputs.is-self-hosted) }}
|
|
# Same as `git switch --detach FETCH_HEAD`, but fixes up dirty working
|
|
# trees, in case the runner image was baked with a dirty working tree.
|
|
run: |
|
|
git switch --detach
|
|
git reset --hard FETCH_HEAD
|
|
|
|
- name: ccache
|
|
# FIXME: “Error: Restoring cache failed: Error: Unable to locate executable file: sh.”
|
|
if: ${{ ! fromJSON(needs.runner-select.outputs.is-self-hosted) }}
|
|
uses: hendrikmuhs/ccache-action@v1.2
|
|
|
|
# Install missing tools in a GitHub-hosted runner.
|
|
# Workaround for https://github.com/actions/runner-images/issues/10001:
|
|
- name: Upgrade llvm
|
|
if: ${{ ! fromJSON(needs.runner-select.outputs.is-self-hosted) }}
|
|
run: choco upgrade llvm
|
|
- name: Install wixtoolset
|
|
if: ${{ ! fromJSON(needs.runner-select.outputs.is-self-hosted) }}
|
|
run: |
|
|
choco install wixtoolset
|
|
echo "C:\\Program Files (x86)\\WiX Toolset v3.11\\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
|
- uses: actions/setup-python@v5
|
|
- name: Setup Python
|
|
uses: ./.github/actions/setup-python
|
|
with:
|
|
skip-python-setup: ${{ fromJSON(needs.runner-select.outputs.is-self-hosted) }}
|
|
- name: Bootstrap
|
|
if: ${{ ! fromJSON(needs.runner-select.outputs.is-self-hosted) }}
|
|
run: |
|
|
python mach fetch
|
|
python mach bootstrap-gstreamer
|
|
# For some reason WiX isn't currently on the GitHub runner path. This is a
|
|
# temporary workaround until that is fixed.
|
|
- name: Add WiX to Path
|
|
if: ${{ ! fromJSON(needs.runner-select.outputs.is-self-hosted) }}
|
|
run: |
|
|
"$env:WIX\bin" >> $env:GITHUB_PATH
|
|
|
|
# Always install crown, even on self-hosted runners, because it is tightly
|
|
# coupled to the rustc version, and we may have the wrong version if the
|
|
# commit we are building uses a different rustc version.
|
|
- name: Install crown
|
|
run: cargo install --path support/crown --force
|
|
|
|
- name: Debug logging for incremental builds
|
|
if: ${{ fromJSON(needs.runner-select.outputs.is-self-hosted) }}
|
|
run: |
|
|
cat C:\init\incremental_build_debug.txt
|
|
echo "`$env:LIBCLANG_PATH now = $env:LIBCLANG_PATH"
|
|
echo "`$env:PATH now = $env:PATH"
|
|
|
|
- name: Build (${{ inputs.profile }})
|
|
run: |
|
|
python mach build --use-crown --locked --${{ inputs.profile }}
|
|
cp C:\a\servo\servo\target\cargo-timings C:\a\servo\servo\target\cargo-timings-windows -Recurse
|
|
- name: Copy resources
|
|
if: ${{ ! fromJSON(needs.runner-select.outputs.is-self-hosted) }}
|
|
# GitHub-hosted runners check out the repo on D: drive.
|
|
run: cp D:\a\servo\servo\resources C:\a\servo\servo -Recurse
|
|
- name: Smoketest
|
|
run: python mach smoketest --${{ inputs.profile }}
|
|
- name: Unit tests
|
|
if: ${{ inputs.unit-tests }}
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 30
|
|
max_attempts: 3 # https://github.com/servo/servo/issues/30683
|
|
command: python mach test-unit --${{ inputs.profile }} -- -- --test-threads=1
|
|
- name: Archive build timing
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: cargo-timings-windows
|
|
# Using a wildcard here ensures that the archive includes the path.
|
|
path: C:\\a\\servo\\servo\\target\\cargo-timings-*
|
|
- name: Build mach package
|
|
run: python mach package --${{ inputs.profile }}
|
|
- name: Upload artifact for mach package
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: win
|
|
# These files are available
|
|
# MSI Installer: C:\a\servo\servo\target\${{ inputs.profile }}\msi\Installer.msi
|
|
# Bundle: C:\a\servo\servo\target\${{ inputs.profile }}\msi\Servo.exe
|
|
# Zip: C:\a\servo\servo\target\${{ inputs.profile }}\msi\Servo.zip
|
|
path: C:\\a\\servo\\servo\\target\\${{ inputs.profile }}\\msi\\Servo.exe
|
|
- name: Upload nightly
|
|
if: ${{ inputs.upload }}
|
|
run: |
|
|
python mach upload-nightly windows-msvc --secret-from-environment `
|
|
--github-release-id ${{ inputs.github-release-id }}
|
|
env:
|
|
S3_UPLOAD_CREDENTIALS: ${{ secrets.S3_UPLOAD_CREDENTIALS }}
|
|
NIGHTLY_REPO_TOKEN: ${{ secrets.NIGHTLY_REPO_TOKEN }}
|
|
NIGHTLY_REPO: ${{ github.repository_owner }}/servo-nightly-builds
|